commit 612d68f56f488ed635a4077305817391d341f238 Author: rose_cat707 Date: Mon Jun 15 04:46:59 2026 +0000 feat: Wormhole 内网穿透与反向代理网关 Go + Vue 管理台,SQLite 持久化;支持隧道/域名穿透、域名转发插件链、访客认证、 IP 规则、API Key、Docker 单镜像部署;配置通过 Web 系统设置管理,无需 YAML 文件。 Co-authored-by: Cursor diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..de03f20 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +nps/ +.git/ +bin/ +release/ +data/ +**/.DS_Store +web/node_modules/ +web/dist/ +agent-transcripts/ +*.md +!README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cc6e429 --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ +# ---> Go +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work +go.work.sum + +# env file +.env + +# Wormhole +bin/ +data/ +release/ +web/node_modules/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2144b88 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,75 @@ +# Wormhole 统一镜像(server / agent 同一二进制,启动命令区分角色) +# +# 构建: +# docker build -t wormhole:latest . +# +# 服务端: +# docker run -d --name wormhole \ +# -p 8529:8529 -p 8528:8528 -p 8081:8081 -p 8443:8443 \ +# -v wormhole-data:/app/data \ +# wormhole:latest +# +# Agent: +# docker run -d --name wormhole-agent --network host \ +# wormhole:latest agent -server <服务端IP>:8528 -key + +# syntax=docker/dockerfile:1 + +FROM --platform=$BUILDPLATFORM node:20-alpine AS web-builder + +WORKDIR /src/web +COPY web/package.json web/package-lock.json ./ +RUN npm ci --registry=https://registry.npmmirror.com +COPY web/ ./ +RUN npm run build + +FROM --platform=$BUILDPLATFORM golang:1.24-alpine AS go-builder + +ARG TARGETARCH +RUN apk add --no-cache gcc musl-dev curl tar \ + && if [ "$TARGETARCH" = "amd64" ]; then \ + curl -fsSL https://musl.cc/x86_64-linux-musl-cross.tgz -o /tmp/cross.tgz \ + && tar -xzf /tmp/cross.tgz -C /usr/local \ + && rm /tmp/cross.tgz; \ + fi + +WORKDIR /src +COPY go.mod go.sum go.env ./ +RUN --mount=type=cache,target=/go/pkg/mod \ + GOPROXY=https://goproxy.cn,direct go mod download + +COPY cmd/ ./cmd/ +COPY internal/ ./internal/ +COPY web/embed.go ./web/ +COPY --from=web-builder /src/web/dist ./web/dist + +RUN --mount=type=cache,target=/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + set -eu; \ + export CGO_ENABLED=1 GOOS=linux GOARCH="$TARGETARCH" GOPROXY=https://goproxy.cn,direct; \ + if [ "$TARGETARCH" = "amd64" ]; then \ + export CC=/usr/local/x86_64-linux-musl-cross/bin/x86_64-linux-musl-gcc; \ + fi; \ + go build -ldflags="-w -s" -o /wormhole ./cmd/wormhole + +FROM alpine:3.20@sha256:d9e853e87e55526f6b2917df91a2115c36dd7c696a35be12163d44e6e2a4b6bc + +RUN apk add --no-cache ca-certificates tzdata \ + && addgroup -S wormhole \ + && adduser -S wormhole -G wormhole + +WORKDIR /app + +COPY --from=go-builder /wormhole /usr/local/bin/wormhole + +RUN mkdir -p /app/data \ + && chown -R wormhole:wormhole /app + +USER wormhole + +VOLUME ["/app/data"] + +EXPOSE 8529 8528 8081 8443 + +ENTRYPOINT ["/usr/local/bin/wormhole"] +CMD ["server"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..941c1d1 --- /dev/null +++ b/Makefile @@ -0,0 +1,38 @@ +# 运行参考(配置已迁移至 Web 管理台 → 系统设置,无需配置文件) + +.PHONY: tidy build build-all dev-web web install dev run run-agent docker-push-amd64 docker-push-multiarch + +export GOENV := $(CURDIR)/go.env +export GOPROXY ?= https://goproxy.cn,direct +export GOSUMDB ?= sum.golang.google.cn + +tidy: + go mod tidy + +web: + cd web && npm install --registry=https://registry.npmmirror.com && npm run build + +build: web + go build -o bin/wormhole ./cmd/wormhole + +build-all: build + +dev-web: + cd web && npm run dev + +run: + go run ./cmd/wormhole server + +run-agent: + go run ./cmd/wormhole agent -server 127.0.0.1:8528 -key $(KEY) + +install: + cd web && npm install --registry=https://registry.npmmirror.com + +docker-push-amd64: + chmod +x scripts/docker-build-push-amd64.sh + ./scripts/docker-build-push-amd64.sh + +docker-push-multiarch: + chmod +x scripts/docker-build-push-multiarch.sh + ./scripts/docker-build-push-multiarch.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..2e850d0 --- /dev/null +++ b/README.md @@ -0,0 +1,75 @@ +# Wormhole + +内网穿透 + 反向代理网关(Go + Vue),SQLite 持久化 + 内存缓存。服务端与客户端为**同一二进制**,配置在 Web 管理台完成。 + +## 功能 + +- 客户端管理(Agent 注册、在线状态、verify_key) +- 域名解析(HTTP/HTTPS Host 反代) +- TCP/UDP 隧道 +- IP 安全:精确/CIDR/正则白黑名单、请求 IP 监控、一键拉黑 +- 统一登录 + 账号管理(admin/user) +- 资源级访问验证(Basic / 表单 / 回调) +- 仪表盘:流量与请求 IP 统计 + +## 快速开始 + +```bash +make install +make build + +# 启动服务端(无需配置文件,默认 admin/admin) +make run +# 或: ./bin/wormhole server + +# 在管理台「系统设置」中调整端口等参数 + +# 启动客户端 Agent(仅需命令行参数) +./bin/wormhole agent -server 127.0.0.1:8528 -key +``` + +管理界面:http://127.0.0.1:8529(首次启动默认端口,可在系统设置中修改) + +## Docker(单一镜像) + +```bash +# 服务端 +docker run -d --name wormhole \ + -p 8529:8529 -p 8528:8528 -p 8081:8081 -p 8443:8443 \ + -v wormhole-data:/app/data \ + registry.rc707blog.top/rose_cat707/wormhole:latest + +# Agent(同一镜像;务必加 --restart,服务端重启后 Agent 会自动重连) +docker run -d --name wormhole-agent \ + --restart=unless-stopped \ + --network host \ + registry.rc707blog.top/rose_cat707/wormhole:latest \ + agent -server <服务端IP>:8528 -key +``` + +> **注意**:Agent 容器必须与 Server 分开部署。更新 Server 镜像时不要用同一 compose 重建 Agent;Agent 需 `--restart=unless-stopped`,否则收到 `SIGTERM` 后容器会保持 `Exited` 状态。 + +## 命令 + +| 命令 | 说明 | +|------|------| +| `wormhole server` | 启动服务端 | +| `wormhole agent -server <地址> -key ` | 启动 Agent | + +数据与配置存储在 `./data/wormhole.db`(SQLite)。 + +## 默认端口 + +| 端口 | 用途 | +|------|------| +| 8529 | 管理 API + Web UI | +| 8528 | Agent Bridge | +| 8081 | HTTP 域名反代 | +| 8443 | HTTPS 域名反代 | + +可在管理台 **系统设置** 中修改(监听端口变更需重启服务)。 + +## 默认账号 + +- 用户名:`admin` +- 密码:`admin` diff --git a/cmd/wormhole/main.go b/cmd/wormhole/main.go new file mode 100644 index 0000000..9f0761e --- /dev/null +++ b/cmd/wormhole/main.go @@ -0,0 +1,50 @@ +package main + +import ( + "fmt" + "os" + + "github.com/wormhole/wormhole/internal/agent" + "github.com/wormhole/wormhole/internal/server" +) + +func main() { + if len(os.Args) < 2 { + printUsage() + os.Exit(1) + } + + cmd := os.Args[1] + args := os.Args[2:] + + switch cmd { + case "server", "serve", "s": + server.Run(args) + case "agent", "client", "a": + agent.Run(args) + case "help", "-h", "--help": + printUsage() + default: + fmt.Fprintf(os.Stderr, "unknown command: %s\n\n", cmd) + printUsage() + os.Exit(1) + } +} + +func printUsage() { + fmt.Fprintf(os.Stderr, `Wormhole — 内网穿透 / 反向代理(统一二进制) + +用法: + wormhole server 启动服务端(配置在 Web 管理台) + wormhole agent -server <地址> -key 启动客户端 Agent + +简写: + wormhole serve / wormhole s + wormhole client / wormhole a + +示例: + wormhole server + wormhole agent -server 127.0.0.1:8528 -key abc123 + +`) +} diff --git a/go.env b/go.env new file mode 100644 index 0000000..f089615 --- /dev/null +++ b/go.env @@ -0,0 +1,3 @@ +# 项目级 Go 工具链环境(go mod / go build 会读取) +GOPROXY=https://goproxy.cn,direct +GOSUMDB=sum.golang.google.cn diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..5edfe4c --- /dev/null +++ b/go.mod @@ -0,0 +1,52 @@ +module github.com/wormhole/wormhole + +go 1.24.0 + +require ( + github.com/gin-gonic/gin v1.10.0 + github.com/golang-jwt/jwt/v5 v5.2.1 + github.com/google/uuid v1.6.0 + github.com/shirou/gopsutil/v3 v3.24.5 + github.com/xtaci/smux v1.5.24 + golang.org/x/crypto v0.28.0 + golang.org/x/net v0.30.0 + gopkg.in/yaml.v3 v3.0.1 + gorm.io/driver/sqlite v1.5.7 + gorm.io/gorm v1.25.12 +) + +require ( + github.com/bytedance/sonic v1.11.6 // indirect + github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/gin-contrib/sse v0.1.0 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.20.0 // indirect + github.com/goccy/go-json v0.10.2 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/cpuid/v2 v2.2.7 // indirect + github.com/leodido/go-urn v1.4.0 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-sqlite3 v1.14.22 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.2.12 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect + golang.org/x/arch v0.8.0 // indirect + golang.org/x/sys v0.26.0 // indirect + golang.org/x/text v0.19.0 // indirect + google.golang.org/protobuf v1.34.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..2c0d5b7 --- /dev/null +++ b/go.sum @@ -0,0 +1,127 @@ +github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= +github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= +github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= +github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= +github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8= +github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= +github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= +github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= +github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= +github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= +github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= +github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= +github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= +github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= +github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= +github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= +github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/xtaci/smux v1.5.24 h1:77emW9dtnOxxOQ5ltR+8BbsX1kzcOxQ5gB+aaV9hXOY= +github.com/xtaci/smux v1.5.24/go.mod h1:OMlQbT5vcgl2gb49mFkYo6SMf+zP3rcjcwQz7ZU7IGY= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= +golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I= +gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4= +gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= +gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/internal/agent/agent.go b/internal/agent/agent.go new file mode 100644 index 0000000..291c226 --- /dev/null +++ b/internal/agent/agent.go @@ -0,0 +1,229 @@ +package agent + +import ( + "crypto/tls" + "encoding/json" + "flag" + "fmt" + "io" + "log" + "net" + "os" + "os/signal" + "syscall" + "time" + + "github.com/xtaci/smux" + "github.com/wormhole/wormhole/internal/bridge" + "github.com/wormhole/wormhole/internal/protocol" + "github.com/wormhole/wormhole/internal/version" +) + +func Run(args []string) { + fs := flag.NewFlagSet("agent", flag.ExitOnError) + serverAddr := fs.String("server", "127.0.0.1:8528", "wormhole server bridge address") + verifyKey := fs.String("key", "", "client verify key") + useTLS := fs.Bool("tls", false, "use TLS for bridge connection") + fs.Parse(args) + + if *verifyKey == "" { + log.Fatal("verify key required: -key") + } + + sig := make(chan os.Signal, 1) + signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM) + + backoff := time.Second + for { + select { + case <-sig: + log.Println("[agent] shutting down") + return + default: + } + + shutdown, hadSession := runSession(*serverAddr, *verifyKey, *useTLS, sig) + if shutdown { + return + } + if hadSession { + backoff = time.Second + } + + log.Printf("[agent] reconnecting in %v...", backoff) + select { + case <-sig: + log.Println("[agent] shutting down") + return + case <-time.After(backoff): + } + if backoff < 30*time.Second { + backoff *= 2 + } + } +} + +func dialBridge(addr string, useTLS bool) (net.Conn, error) { + var conn net.Conn + var err error + if useTLS { + conn, err = tls.Dial("tcp", addr, &tls.Config{ + MinVersion: tls.VersionTLS12, + InsecureSkipVerify: true, + }) + } else { + conn, err = net.Dial("tcp", addr) + } + if err != nil { + return nil, err + } + bridge.SetTCPKeepAlive(conn) + return conn, nil +} + +// runSession connects and blocks until disconnect. +// Returns shutdown=true when SIGINT/SIGTERM received; hadSession=true if registration succeeded. +func runSession(serverAddr, verifyKey string, useTLS bool, sig chan os.Signal) (shutdown, hadSession bool) { + conn, err := dialBridge(serverAddr, useTLS) + if err != nil { + log.Printf("[agent] dial server: %v", err) + return false, false + } + defer conn.Close() + + if err := protocol.WriteMessage(conn, protocol.MsgRegister, protocol.RegisterPayload{ + VerifyKey: verifyKey, + Version: version.Version, + }); err != nil { + log.Printf("[agent] register: %v", err) + return false, false + } + msgType, body, err := protocol.ReadMessage(conn) + if err != nil { + log.Printf("[agent] register ack: %v", err) + return false, false + } + if msgType != protocol.MsgRegisterAck { + log.Printf("[agent] unexpected register response") + return false, false + } + var ack protocol.RegisterAckPayload + if len(body) > 0 { + if err := json.Unmarshal(body, &ack); err != nil { + log.Printf("[agent] parse ack: %v", err) + return false, false + } + } + if !ack.OK { + log.Printf("[agent] register failed: %s", ack.Message) + return false, false + } + log.Printf("[agent] registered as client %d", ack.ClientID) + hadSession = true + + session, err := smux.Server(conn, bridge.SmuxConfig()) + if err != nil { + log.Printf("[agent] smux: %v", err) + return false, hadSession + } + defer session.Close() + + sessionDead := make(chan string, 1) + go func() { + reason := heartbeat(session) + sessionDead <- reason + }() + + go func() { + for { + stream, err := session.AcceptStream() + if err != nil { + select { + case sessionDead <- "accept stream: " + err.Error(): + default: + } + return + } + go handleStream(stream) + } + }() + + select { + case <-sig: + return true, hadSession + case reason := <-sessionDead: + log.Printf("[agent] session closed (%s)", reason) + return false, hadSession + } +} + +const heartbeatMaxFailures = 3 + +func heartbeat(session *smux.Session) string { + ticker := time.NewTicker(bridge.HeartbeatInterval) + defer ticker.Stop() + failures := 0 + for range ticker.C { + if err := pingOnce(session); err != nil { + failures++ + log.Printf("[agent] heartbeat failed (%d/%d): %v", failures, heartbeatMaxFailures, err) + if failures >= heartbeatMaxFailures { + return "heartbeat timeout" + } + continue + } + failures = 0 + } + return "heartbeat stopped" +} + +func pingOnce(session *smux.Session) error { + stream, err := session.OpenStream() + if err != nil { + return err + } + defer stream.Close() + if err := protocol.WriteMessage(stream, protocol.MsgPing, nil); err != nil { + return err + } + msgType, _, err := protocol.ReadMessage(stream) + if err != nil { + return err + } + if msgType != protocol.MsgPong { + return fmt.Errorf("unexpected response type %d", msgType) + } + return nil +} + +func handleStream(stream *smux.Stream) { + defer stream.Close() + msgType, body, err := protocol.ReadMessage(stream) + if err != nil { + return + } + switch msgType { + case protocol.MsgPing: + _ = protocol.WriteMessage(stream, protocol.MsgPong, nil) + return + case protocol.MsgOpenStream: + handleDataStream(stream, body) + } +} + +func handleDataStream(stream *smux.Stream, body []byte) { + meta, err := protocol.ParseLinkMeta(body) + if err != nil { + return + } + target, err := net.Dial("tcp", meta.Target) + if err != nil { + return + } + defer target.Close() + _ = protocol.WriteMessage(stream, protocol.MsgStreamReady, nil) + go func() { + _, _ = io.Copy(target, stream) + }() + _, _ = io.Copy(stream, target) +} diff --git a/internal/api/domain_forwards.go b/internal/api/domain_forwards.go new file mode 100644 index 0000000..b906261 --- /dev/null +++ b/internal/api/domain_forwards.go @@ -0,0 +1,144 @@ +package api + +import ( + "net/http" + "strconv" + + "github.com/gin-gonic/gin" + "github.com/wormhole/wormhole/internal/auth" + "github.com/wormhole/wormhole/internal/forwardplugin" + "github.com/wormhole/wormhole/internal/store" +) + +func (s *Server) listDomainForwards(c *gin.Context) { + if !auth.IsAdmin(getClaims(c).Role) { + c.JSON(http.StatusForbidden, gin.H{"error": "admin only"}) + return + } + p := pageParams(c) + items, total, err := s.store.ListDomainForwardsPaged(p) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"items": items, "total": total}) +} + +func (s *Server) createDomainForward(c *gin.Context) { + if !auth.IsAdmin(getClaims(c).Role) { + c.JSON(http.StatusForbidden, gin.H{"error": "admin only"}) + return + } + var req store.DomainForward + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + if err := store.ValidateDomainForward(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + if err := s.store.RouteConflict(req.SourceHost, req.SourceLocation, 0, 0); err != nil { + c.JSON(http.StatusConflict, gin.H{"error": err.Error()}) + return + } + if err := s.store.CreateDomainForward(&req); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + s.cache.UpsertDomainForward(&req) + c.JSON(http.StatusOK, req) +} + +func (s *Server) updateDomainForward(c *gin.Context) { + if !auth.IsAdmin(getClaims(c).Role) { + c.JSON(http.StatusForbidden, gin.H{"error": "admin only"}) + return + } + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + existing, err := s.store.GetDomainForwardByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + var req store.DomainForward + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + req.ID = existing.ID + if req.Socks5Pass == "" { + req.Socks5Pass = existing.Socks5Pass + } + if req.HTTPProxyPass == "" { + req.HTTPProxyPass = existing.HTTPProxyPass + } + if err := store.ValidateDomainForward(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + if err := s.store.RouteConflict(req.SourceHost, req.SourceLocation, uint(id), 0); err != nil { + c.JSON(http.StatusConflict, gin.H{"error": err.Error()}) + return + } + if err := s.store.UpdateDomainForward(&req); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + forwardplugin.InvalidateForwardCache(uint(id)) + s.cache.UpsertDomainForward(&req) + c.JSON(http.StatusOK, req) +} + +func (s *Server) deleteDomainForward(c *gin.Context) { + if !auth.IsAdmin(getClaims(c).Role) { + c.JSON(http.StatusForbidden, gin.H{"error": "admin only"}) + return + } + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + if _, err := s.store.GetDomainForwardByID(uint(id)); err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if err := s.store.DeleteDomainForward(uint(id)); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + forwardplugin.InvalidateForwardCache(uint(id)) + s.cache.DeleteDomainForward(uint(id)) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) pauseDomainForward(c *gin.Context) { + if !auth.IsAdmin(getClaims(c).Role) { + c.JSON(http.StatusForbidden, gin.H{"error": "admin only"}) + return + } + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + existing, err := s.store.GetDomainForwardByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + existing.Status = false + _ = s.store.UpdateDomainForward(existing) + s.cache.UpsertDomainForward(existing) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) resumeDomainForward(c *gin.Context) { + if !auth.IsAdmin(getClaims(c).Role) { + c.JSON(http.StatusForbidden, gin.H{"error": "admin only"}) + return + } + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + existing, err := s.store.GetDomainForwardByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + existing.Status = true + _ = s.store.UpdateDomainForward(existing) + s.cache.UpsertDomainForward(existing) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} diff --git a/internal/api/extra_handlers.go b/internal/api/extra_handlers.go new file mode 100644 index 0000000..c33c526 --- /dev/null +++ b/internal/api/extra_handlers.go @@ -0,0 +1,174 @@ +package api + +import ( + "net/http" + "strconv" + + "github.com/gin-gonic/gin" + "github.com/wormhole/wormhole/internal/auth" + "github.com/wormhole/wormhole/internal/store" +) + +func (s *Server) dashboardRankings(c *gin.Context) { + rankType := c.DefaultQuery("type", "tunnels") + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "50")) + if page < 1 { + page = 1 + } + if pageSize < 1 { + pageSize = 50 + } + if pageSize > 500 { + pageSize = 500 + } + offset := (page - 1) * pageSize + q := c.Query("q") + + switch rankType { + case "tunnels": + items, total, err := s.store.ListTunnelsByFlow(pageSize, offset) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"items": items, "total": total}) + case "hosts": + items, total, err := s.store.ListHostsByFlow(pageSize, offset) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"items": items, "total": total}) + case "ips": + items, total, err := s.store.ListAllRequestIPs(pageSize, offset, q) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"items": items, "total": total}) + default: + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid type"}) + } +} + +func (s *Server) listAPIKeys(c *gin.Context) { + claims := getClaims(c) + keys, err := s.store.ListAPIKeys(claims.UserID, auth.IsAdmin(claims.Role)) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, keys) +} + +func (s *Server) createAPIKey(c *gin.Context) { + claims := getClaims(c) + var req struct { + Name string `json:"name"` + } + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + key, plain, err := s.store.CreateAPIKey(req.Name, claims.UserID) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{ + "key": key, + "api_key": plain, + "note": "请妥善保存 API Key,仅显示一次", + }) +} + +func (s *Server) deleteAPIKey(c *gin.Context) { + claims := getClaims(c) + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + if err := s.store.DeleteAPIKey(uint(id), claims.UserID, auth.IsAdmin(claims.Role)); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) pauseTunnel(c *gin.Context) { + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + claims := getClaims(c) + existing, err := s.store.GetTunnelByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if err := store.ClientOwnerCheck(s.store, existing.ClientID, claims.UserID, auth.IsAdmin(claims.Role)); err != nil { + c.JSON(http.StatusForbidden, gin.H{"error": err.Error()}) + return + } + _ = s.proxy.StopTunnel(uint(id)) + existing.Status = false + existing.RunStatus = false + _ = s.store.UpdateTunnel(existing) + s.cache.UpsertTunnel(existing) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) resumeTunnel(c *gin.Context) { + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + claims := getClaims(c) + existing, err := s.store.GetTunnelByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if err := store.ClientOwnerCheck(s.store, existing.ClientID, claims.UserID, auth.IsAdmin(claims.Role)); err != nil { + c.JSON(http.StatusForbidden, gin.H{"error": err.Error()}) + return + } + existing.Status = true + _ = s.store.UpdateTunnel(existing) + s.cache.UpsertTunnel(existing) + _ = s.proxy.StartTunnel(uint(id)) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) pauseHost(c *gin.Context) { + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + claims := getClaims(c) + existing, err := s.store.GetHostByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if err := store.ClientOwnerCheck(s.store, existing.ClientID, claims.UserID, auth.IsAdmin(claims.Role)); err != nil { + c.JSON(http.StatusForbidden, gin.H{"error": err.Error()}) + return + } + existing.Status = false + _ = s.store.UpdateHost(existing) + s.cache.UpsertHost(existing) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) resumeHost(c *gin.Context) { + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + claims := getClaims(c) + existing, err := s.store.GetHostByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if err := store.ClientOwnerCheck(s.store, existing.ClientID, claims.UserID, auth.IsAdmin(claims.Role)); err != nil { + c.JSON(http.StatusForbidden, gin.H{"error": err.Error()}) + return + } + existing.Status = true + _ = s.store.UpdateHost(existing) + s.cache.UpsertHost(existing) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) openapiDoc(c *gin.Context) { + c.Header("Content-Type", "application/json") + c.String(http.StatusOK, openAPISpec) +} diff --git a/internal/api/forward_plugins.go b/internal/api/forward_plugins.go new file mode 100644 index 0000000..f01f16b --- /dev/null +++ b/internal/api/forward_plugins.go @@ -0,0 +1,17 @@ +package api + +import ( + "net/http" + + "github.com/gin-gonic/gin" + "github.com/wormhole/wormhole/internal/auth" + "github.com/wormhole/wormhole/internal/forwardplugin" +) + +func (s *Server) listForwardPluginTypes(c *gin.Context) { + if !auth.IsAdmin(getClaims(c).Role) { + c.JSON(http.StatusForbidden, gin.H{"error": "admin only"}) + return + } + c.JSON(http.StatusOK, gin.H{"items": forwardplugin.ListPluginTypes()}) +} diff --git a/internal/api/import_export.go b/internal/api/import_export.go new file mode 100644 index 0000000..ec8acd4 --- /dev/null +++ b/internal/api/import_export.go @@ -0,0 +1,348 @@ +package api + +import ( + "net/http" + "strconv" + "time" + + "github.com/gin-gonic/gin" + "github.com/wormhole/wormhole/internal/auth" + "github.com/wormhole/wormhole/internal/store" +) + +type importResult struct { + Created int `json:"created"` + Updated int `json:"updated"` + Skipped int `json:"skipped"` + Failed int `json:"failed"` + Errors []string `json:"errors"` +} + +type tunnelImportRequest struct { + Mode string `json:"mode"` // create, upsert, skip + Items []store.TunnelExportItem `json:"items"` +} + +type hostImportRequest struct { + Mode string `json:"mode"` + Items []store.HostExportItem `json:"items"` +} + +func (s *Server) exportTunnels(c *gin.Context) { + claims := getClaims(c) + clientID, _ := strconv.ParseUint(c.Query("client_id"), 10, 64) + tunnels, err := s.store.ListTunnels(uint(clientID), claims.UserID, auth.IsAdmin(claims.Role)) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + clientNames := tunnelClientNames(s.store, tunnels) + items := make([]store.TunnelExportItem, 0, len(tunnels)) + for _, t := range tunnels { + items = append(items, store.TunnelToExportItem(t, clientNames[t.ClientID])) + } + doc := store.TunnelExportDoc{ + Version: store.ExportVersion, + ExportedAt: time.Now().UTC(), + Items: items, + } + c.Header("Content-Disposition", `attachment; filename="wormhole-tunnels.json"`) + c.JSON(http.StatusOK, doc) +} + +func (s *Server) importTunnels(c *gin.Context) { + claims := getClaims(c) + var req tunnelImportRequest + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + if len(req.Items) == 0 { + c.JSON(http.StatusBadRequest, gin.H{"error": "items is empty"}) + return + } + mode := req.Mode + if mode == "" { + mode = "upsert" + } + result := importResult{} + for i, item := range req.Items { + clientID, err := store.ResolveImportClientID(s.store, item.ClientID, item.ClientName, claims.UserID, auth.IsAdmin(claims.Role)) + if err != nil { + result.Failed++ + result.Errors = append(result.Errors, formatImportError("tunnel", i+1, err)) + continue + } + t := tunnelFromImportItem(item, clientID) + if err := normalizeTunnel(&t); err != nil { + result.Failed++ + result.Errors = append(result.Errors, formatImportError("tunnel", i+1, err)) + continue + } + existing, err := s.store.FindTunnelByPort(t.ListenPort) + switch mode { + case "create": + if err == nil { + result.Skipped++ + continue + } + if err := s.store.CreateTunnel(&t); err != nil { + result.Failed++ + result.Errors = append(result.Errors, formatImportError("tunnel", i+1, err)) + continue + } + s.cache.UpsertTunnel(&t) + if t.Status { + _ = s.proxy.StartTunnel(t.ID) + } + result.Created++ + case "skip": + if err == nil { + result.Skipped++ + continue + } + if err := s.store.CreateTunnel(&t); err != nil { + result.Failed++ + result.Errors = append(result.Errors, formatImportError("tunnel", i+1, err)) + continue + } + s.cache.UpsertTunnel(&t) + if t.Status { + _ = s.proxy.StartTunnel(t.ID) + } + result.Created++ + default: // upsert + if err != nil { + if err := s.store.CreateTunnel(&t); err != nil { + result.Failed++ + result.Errors = append(result.Errors, formatImportError("tunnel", i+1, err)) + continue + } + s.cache.UpsertTunnel(&t) + if t.Status { + _ = s.proxy.StartTunnel(t.ID) + } + result.Created++ + continue + } + wasRunning := existing.RunStatus + if wasRunning { + _ = s.proxy.StopTunnel(existing.ID) + } + t.ID = existing.ID + t.ClientID = existing.ClientID + t.RunStatus = false + if err := s.store.UpdateTunnel(&t); err != nil { + result.Failed++ + result.Errors = append(result.Errors, formatImportError("tunnel", i+1, err)) + continue + } + s.cache.UpsertTunnel(&t) + if t.Status { + _ = s.proxy.StartTunnel(t.ID) + } + result.Updated++ + } + } + c.JSON(http.StatusOK, result) +} + +func (s *Server) exportHosts(c *gin.Context) { + claims := getClaims(c) + clientID, _ := strconv.ParseUint(c.Query("client_id"), 10, 64) + hosts, err := s.store.ListHosts(uint(clientID), claims.UserID, auth.IsAdmin(claims.Role)) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + clientNames := hostClientNames(s.store, hosts) + items := make([]store.HostExportItem, 0, len(hosts)) + for _, h := range hosts { + items = append(items, store.HostToExportItem(h, clientNames[h.ClientID])) + } + doc := store.HostExportDoc{ + Version: store.ExportVersion, + ExportedAt: time.Now().UTC(), + Items: items, + } + c.Header("Content-Disposition", `attachment; filename="wormhole-hosts.json"`) + c.JSON(http.StatusOK, doc) +} + +func (s *Server) importHosts(c *gin.Context) { + claims := getClaims(c) + var req hostImportRequest + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + if len(req.Items) == 0 { + c.JSON(http.StatusBadRequest, gin.H{"error": "items is empty"}) + return + } + mode := req.Mode + if mode == "" { + mode = "upsert" + } + result := importResult{} + for i, item := range req.Items { + clientID, err := store.ResolveImportClientID(s.store, item.ClientID, item.ClientName, claims.UserID, auth.IsAdmin(claims.Role)) + if err != nil { + result.Failed++ + result.Errors = append(result.Errors, formatImportError("host", i+1, err)) + continue + } + h := hostFromImportItem(item, clientID) + if err := normalizeHost(&h); err != nil { + result.Failed++ + result.Errors = append(result.Errors, formatImportError("host", i+1, err)) + continue + } + existing, err := s.store.FindHostByRouteGlobal(h.Host, h.Location) + switch mode { + case "create": + if err == nil { + result.Skipped++ + continue + } + if err := s.store.CreateHost(&h); err != nil { + result.Failed++ + result.Errors = append(result.Errors, formatImportError("host", i+1, err)) + continue + } + s.cache.UpsertHost(&h) + result.Created++ + case "skip": + if err == nil { + result.Skipped++ + continue + } + if err := s.store.CreateHost(&h); err != nil { + result.Failed++ + result.Errors = append(result.Errors, formatImportError("host", i+1, err)) + continue + } + s.cache.UpsertHost(&h) + result.Created++ + default: + if err != nil { + if err := s.store.CreateHost(&h); err != nil { + result.Failed++ + result.Errors = append(result.Errors, formatImportError("host", i+1, err)) + continue + } + s.cache.UpsertHost(&h) + result.Created++ + continue + } + h.ID = existing.ID + h.ClientID = existing.ClientID + if err := s.store.UpdateHost(&h); err != nil { + result.Failed++ + result.Errors = append(result.Errors, formatImportError("host", i+1, err)) + continue + } + s.cache.UpsertHost(&h) + result.Updated++ + } + } + c.JSON(http.StatusOK, result) +} + +func tunnelFromImportItem(item store.TunnelExportItem, clientID uint) store.Tunnel { + return store.Tunnel{ + ClientID: clientID, + Name: item.Name, + Mode: item.Mode, + ListenIP: item.ListenIP, + ListenPort: item.ListenPort, + TargetAddr: item.TargetAddr, + IPForwardMode: item.IPForwardMode, + CustomHeaders: item.CustomHeaders, + Status: item.Status, + } +} + +func hostFromImportItem(item store.HostExportItem, clientID uint) store.Host { + return store.Host{ + ClientID: clientID, + Host: item.Host, + Location: item.Location, + Scheme: item.Scheme, + TargetAddr: item.TargetAddr, + AutoHTTPS: item.AutoHTTPS, + IPForwardMode: item.IPForwardMode, + CustomHeaders: item.CustomHeaders, + Status: item.Status, + } +} + +func normalizeTunnel(t *store.Tunnel) error { + if t.ListenIP == "" { + t.ListenIP = "0.0.0.0" + } + if t.Mode == "" { + t.Mode = "tcp" + } + if t.ListenPort <= 0 || t.TargetAddr == "" { + return errImportField("listen_port and target_addr required") + } + if t.IPForwardMode == "" { + t.IPForwardMode = "replace" + } + return nil +} + +func normalizeHost(h *store.Host) error { + if h.Host == "" || h.TargetAddr == "" { + return errImportField("host and target_addr required") + } + if h.Location == "" { + h.Location = "/" + } + if h.Scheme == "" { + h.Scheme = "all" + } + if h.IPForwardMode == "" { + h.IPForwardMode = "replace" + } + return nil +} + +type importFieldError string + +func errImportField(msg string) error { return importFieldError(msg) } + +func (e importFieldError) Error() string { return string(e) } + +func formatImportError(kind string, index int, err error) string { + return kind + " #" + strconv.Itoa(index) + ": " + err.Error() +} + +func tunnelClientNames(st *store.Store, tunnels []store.Tunnel) map[uint]string { + ids := make(map[uint]struct{}) + for _, t := range tunnels { + ids[t.ClientID] = struct{}{} + } + names := make(map[uint]string, len(ids)) + for id := range ids { + if c, err := st.GetClientByID(id); err == nil { + names[id] = c.Name + } + } + return names +} + +func hostClientNames(st *store.Store, hosts []store.Host) map[uint]string { + ids := make(map[uint]struct{}) + for _, h := range hosts { + ids[h.ClientID] = struct{}{} + } + names := make(map[uint]string, len(ids)) + for id := range ids { + if c, err := st.GetClientByID(id); err == nil { + names[id] = c.Name + } + } + return names +} diff --git a/internal/api/middleware.go b/internal/api/middleware.go new file mode 100644 index 0000000..99a0798 --- /dev/null +++ b/internal/api/middleware.go @@ -0,0 +1,56 @@ +package api + +import ( + "net/http" + + "github.com/gin-gonic/gin" + "github.com/wormhole/wormhole/internal/auth" + "github.com/wormhole/wormhole/internal/store" +) + +func (s *Server) authMiddleware() gin.HandlerFunc { + return func(c *gin.Context) { + if key := c.GetHeader("X-API-Key"); key != "" { + user, err := s.store.ValidateAPIKey(key) + if err != nil { + c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "invalid api key"}) + return + } + c.Set("claims", &auth.Claims{ + UserID: user.ID, + Username: user.Username, + Role: user.Role, + }) + c.Set("auth_via", "apikey") + c.Next() + return + } + + token := c.GetHeader("Authorization") + if len(token) > 7 && token[:7] == "Bearer " { + token = token[7:] + } else { + token = c.Query("token") + } + if token == "" { + c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"}) + return + } + claims, err := s.auth.ParseToken(token) + if err != nil { + c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "invalid token"}) + return + } + c.Set("claims", claims) + c.Set("auth_via", "jwt") + c.Next() + } +} + +func pageParams(c *gin.Context) store.PageParams { + return store.ParsePageQuery( + c.DefaultQuery("page", "1"), + c.DefaultQuery("page_size", "20"), + c.Query("q"), + ) +} diff --git a/internal/api/openapi.go b/internal/api/openapi.go new file mode 100644 index 0000000..8d7d9a3 --- /dev/null +++ b/internal/api/openapi.go @@ -0,0 +1,451 @@ +package api + +// OpenAPI 3.0 spec for Wormhole external API (authenticate with X-API-Key header). +const openAPISpec = `{ + "openapi": "3.0.3", + "info": { + "title": "Wormhole API", + "version": "1.0.0", + "description": "使用 X-API-Key 请求头或 Bearer JWT 访问。Base URL: http://host:8529/api。域名转发接口需管理员权限。" + }, + "servers": [{ "url": "/api" }], + "components": { + "securitySchemes": { + "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "X-API-Key" }, + "BearerAuth": { "type": "http", "scheme": "bearer", "bearerFormat": "JWT" } + }, + "schemas": { + "Error": { + "type": "object", + "properties": { + "error": { "type": "string", "description": "错误信息" } + } + }, + "Ok": { + "type": "object", + "properties": { + "ok": { "type": "boolean", "example": true } + } + }, + "PagedDomainForwards": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { "$ref": "#/components/schemas/DomainForward" } + }, + "total": { "type": "integer", "description": "总条数" } + } + }, + "DomainForward": { + "type": "object", + "description": "域名转发规则(服务端直连,无需 Agent)", + "properties": { + "id": { "type": "integer", "readOnly": true }, + "source_host": { "type": "string", "description": "源域名,支持通配如 *.example.com", "example": "old.example.com" }, + "source_location": { "type": "string", "default": "/", "description": "路径前缀", "example": "/" }, + "source_scheme": { "type": "string", "enum": ["all", "http", "https"], "default": "all" }, + "mode": { "type": "string", "enum": ["redirect", "proxy"], "description": "redirect=跳转,proxy=反向代理" }, + "target_url": { "type": "string", "format": "uri", "description": "目标 URL,需含协议与主机", "example": "https://new.example.com" }, + "redirect_mode": { "type": "string", "enum": ["preserve", "fixed"], "default": "preserve", "description": "跳转模式:保留路径或固定地址" }, + "redirect_code": { "type": "integer", "enum": [301, 302], "default": 302 }, + "proxy_type": { + "type": "string", + "enum": ["http", "http_proxy", "socks5"], + "default": "http", + "description": "http=直连,http_proxy=经 HTTP 代理出站,socks5=经 SOCKS5 出站" + }, + "http_proxy_addr": { "type": "string", "description": "HTTP 代理地址,proxy_type=http_proxy 时必填", "example": "127.0.0.1:8080" }, + "http_proxy_user": { "type": "string", "description": "HTTP 代理用户名(可选)" }, + "socks5_addr": { "type": "string", "description": "SOCKS5 地址,proxy_type=socks5 时必填", "example": "127.0.0.1:1080" }, + "socks5_user": { "type": "string", "description": "SOCKS5 用户名(可选)" }, + "preserve_host": { "type": "boolean", "default": false, "description": "反代时是否将源域名作为 Host 发给上游" }, + "plugins": { + "type": "array", + "description": "反代插件链,按数组顺序执行;redirect 模式忽略", + "items": { "$ref": "#/components/schemas/ForwardPluginEntry" } + }, + "status": { "type": "boolean", "default": true }, + "created_at": { "type": "string", "format": "date-time", "readOnly": true }, + "updated_at": { "type": "string", "format": "date-time", "readOnly": true } + }, + "required": ["source_host", "mode", "target_url"] + }, + "DomainForwardInput": { + "allOf": [ + { "$ref": "#/components/schemas/DomainForward" }, + { + "type": "object", + "properties": { + "http_proxy_pass": { "type": "string", "writeOnly": true, "description": "HTTP 代理密码;更新时留空表示不修改" }, + "socks5_pass": { "type": "string", "writeOnly": true, "description": "SOCKS5 密码;更新时留空表示不修改" } + } + } + ] + }, + "ForwardPluginEntry": { + "type": "object", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "enum": ["sub_filter", "inject_js", "cookie_domain", "response_cache"], + "description": "插件类型" + }, + "enabled": { "type": "boolean", "default": true }, + "config": { + "description": "插件配置,结构随 type 变化", + "oneOf": [ + { "$ref": "#/components/schemas/SubFilterPluginConfig" }, + { "$ref": "#/components/schemas/InjectJSPluginConfig" }, + { "$ref": "#/components/schemas/CookieDomainPluginConfig" }, + { "$ref": "#/components/schemas/ResponseCachePluginConfig" } + ] + } + } + }, + "SubFilterPluginConfig": { + "type": "object", + "description": "type=sub_filter:按 MIME 对响应体做字符串替换", + "properties": { + "filters": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["from"], + "properties": { + "from": { "type": "string" }, + "to": { "type": "string" } + } + } + }, + "types": { + "type": "array", + "items": { "type": "string" }, + "default": ["text/html"], + "example": ["text/html", "text/css"] + } + }, + "required": ["filters"] + }, + "InjectJSPluginConfig": { + "type": "object", + "description": "type=inject_js:在 HTML 前注入脚本", + "properties": { + "script": { "type": "string", "example": "" } + }, + "required": ["script"] + }, + "CookieDomainPluginConfig": { + "type": "object", + "description": "type=cookie_domain:改写 Set-Cookie 的 Domain", + "properties": { + "from": { "type": "string", "example": ".old.com" }, + "to": { "type": "string", "example": ".new.com" } + }, + "required": ["from", "to"] + }, + "ResponseCachePluginConfig": { + "type": "object", + "description": "type=response_cache:缓存上游原始 GET 响应(不含 Set-Cookie)", + "properties": { + "max_mb": { "type": "integer", "minimum": 0, "description": "缓存容量 MB,0 表示禁用", "example": 50 }, + "ttl_sec": { "type": "integer", "minimum": 1, "description": "TTL 秒,max_mb>0 时默认 300", "example": 300 } + } + }, + "ForwardPluginTypes": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { "$ref": "#/components/schemas/ForwardPluginTypeMeta" } + } + } + }, + "ForwardPluginTypeMeta": { + "type": "object", + "properties": { + "type": { "type": "string" }, + "label": { "type": "string" }, + "description": { "type": "string" }, + "config_schema": { "type": "object", "additionalProperties": true }, + "default_config": { "type": "object", "additionalProperties": true } + } + } + }, + "responses": { + "BadRequest": { + "description": "请求参数无效", + "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } + }, + "Forbidden": { + "description": "权限不足(需管理员)", + "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } + }, + "NotFound": { + "description": "资源不存在", + "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } + }, + "Conflict": { + "description": "路由冲突", + "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } + } + } + }, + "security": [{ "ApiKeyAuth": [] }, { "BearerAuth": [] }], + "paths": { + "/clients": { + "get": { + "summary": "列出客户端及在线状态", + "responses": { "200": { "description": "OK" } } + } + }, + "/tunnels": { + "get": { + "summary": "分页查询隧道", + "parameters": [ + { "name": "page", "in": "query", "schema": { "type": "integer" } }, + { "name": "page_size", "in": "query", "schema": { "type": "integer" } }, + { "name": "q", "in": "query", "schema": { "type": "string" } } + ], + "responses": { "200": { "description": "OK" } } + }, + "post": { "summary": "创建隧道", "responses": { "200": { "description": "OK" } } } + }, + "/tunnels/{id}": { + "put": { "summary": "更新隧道", "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }], "responses": { "200": { "description": "OK" } } }, + "delete": { "summary": "删除隧道", "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }], "responses": { "200": { "description": "OK" } } } + }, + "/tunnels/{id}/start": { "post": { "summary": "启动隧道", "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }], "responses": { "200": { "description": "OK" } } } }, + "/tunnels/{id}/stop": { "post": { "summary": "停止隧道", "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }], "responses": { "200": { "description": "OK" } } } }, + "/tunnels/{id}/pause": { "post": { "summary": "暂停隧道", "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }], "responses": { "200": { "description": "OK" } } } }, + "/tunnels/{id}/resume": { "post": { "summary": "恢复隧道", "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }], "responses": { "200": { "description": "OK" } } } }, + "/hosts": { + "get": { + "summary": "分页查询域名", + "parameters": [ + { "name": "page", "in": "query", "schema": { "type": "integer" } }, + { "name": "page_size", "in": "query", "schema": { "type": "integer" } }, + { "name": "q", "in": "query", "schema": { "type": "string" } } + ], + "responses": { "200": { "description": "OK" } } + }, + "post": { "summary": "创建域名", "responses": { "200": { "description": "OK" } } } + }, + "/hosts/{id}": { + "put": { "summary": "更新域名", "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }], "responses": { "200": { "description": "OK" } } }, + "delete": { "summary": "删除域名", "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }], "responses": { "200": { "description": "OK" } } } + }, + "/hosts/{id}/pause": { "post": { "summary": "暂停域名", "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }], "responses": { "200": { "description": "OK" } } } }, + "/hosts/{id}/resume": { "post": { "summary": "恢复域名", "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } }], "responses": { "200": { "description": "OK" } } } }, + "/domain-forwards": { + "get": { + "summary": "分页查询域名转发", + "description": "需管理员权限", + "parameters": [ + { "name": "page", "in": "query", "schema": { "type": "integer", "default": 1 } }, + { "name": "page_size", "in": "query", "schema": { "type": "integer", "default": 20 } }, + { "name": "q", "in": "query", "schema": { "type": "string" }, "description": "搜索源域名、目标 URL" } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/PagedDomainForwards" } + } + } + }, + "403": { "$ref": "#/components/responses/Forbidden" } + } + }, + "post": { + "summary": "创建域名转发", + "description": "需管理员权限。proxy 模式下可配置 plugins 插件链。", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/DomainForwardInput" }, + "examples": { + "redirect": { + "summary": "302 跳转", + "value": { + "source_host": "old.example.com", + "source_location": "/", + "mode": "redirect", + "target_url": "https://new.example.com", + "redirect_mode": "preserve", + "redirect_code": 302, + "status": true + } + }, + "proxy_with_plugins": { + "summary": "反代 + 插件链 + HTTP 代理出站", + "value": { + "source_host": "proxy.example.com", + "source_location": "/", + "source_scheme": "all", + "mode": "proxy", + "target_url": "https://backend.internal", + "proxy_type": "http_proxy", + "http_proxy_addr": "127.0.0.1:8080", + "http_proxy_user": "user", + "http_proxy_pass": "secret", + "preserve_host": false, + "plugins": [ + { + "type": "response_cache", + "enabled": true, + "config": { "max_mb": 50, "ttl_sec": 300 } + }, + { + "type": "sub_filter", + "enabled": true, + "config": { + "filters": [{ "from": "old.internal", "to": "proxy.example.com" }], + "types": ["text/html"] + } + }, + { + "type": "inject_js", + "enabled": true, + "config": { "script": "" } + }, + { + "type": "cookie_domain", + "enabled": true, + "config": { "from": ".internal", "to": ".example.com" } + } + ], + "status": true + } + } + } + } + } + }, + "responses": { + "200": { + "description": "创建成功", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/DomainForward" } + } + } + }, + "400": { "$ref": "#/components/responses/BadRequest" }, + "403": { "$ref": "#/components/responses/Forbidden" }, + "409": { "$ref": "#/components/responses/Conflict" } + } + } + }, + "/domain-forwards/{id}": { + "put": { + "summary": "更新域名转发", + "description": "需管理员权限。http_proxy_pass / socks5_pass 留空时不修改原密码。", + "parameters": [ + { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/DomainForwardInput" } + } + } + }, + "responses": { + "200": { + "description": "更新成功", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/DomainForward" } + } + } + }, + "400": { "$ref": "#/components/responses/BadRequest" }, + "403": { "$ref": "#/components/responses/Forbidden" }, + "404": { "$ref": "#/components/responses/NotFound" }, + "409": { "$ref": "#/components/responses/Conflict" } + } + }, + "delete": { + "summary": "删除域名转发", + "parameters": [ + { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } } + ], + "responses": { + "200": { + "description": "删除成功", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/Ok" } + } + } + }, + "403": { "$ref": "#/components/responses/Forbidden" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/domain-forwards/{id}/pause": { + "post": { + "summary": "暂停域名转发", + "parameters": [ + { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/Ok" } + } + } + }, + "403": { "$ref": "#/components/responses/Forbidden" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/domain-forwards/{id}/resume": { + "post": { + "summary": "恢复域名转发", + "parameters": [ + { "name": "id", "in": "path", "required": true, "schema": { "type": "integer" } } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/Ok" } + } + } + }, + "403": { "$ref": "#/components/responses/Forbidden" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/forward-plugin-types": { + "get": { + "summary": "获取域名转发插件类型元数据", + "description": "返回可用插件的 type、label、config_schema、default_config,供前端或 API 客户端动态构建配置。", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/ForwardPluginTypes" } + } + } + }, + "403": { "$ref": "#/components/responses/Forbidden" } + } + } + } + } +}` diff --git a/internal/api/server.go b/internal/api/server.go new file mode 100644 index 0000000..33759f5 --- /dev/null +++ b/internal/api/server.go @@ -0,0 +1,947 @@ +package api + +import ( + "errors" + "net/http" + "strconv" + + "github.com/gin-gonic/gin" + "github.com/wormhole/wormhole/internal/auth" + "github.com/wormhole/wormhole/internal/bridge" + "github.com/wormhole/wormhole/internal/cache" + "github.com/wormhole/wormhole/internal/config" + "github.com/wormhole/wormhole/internal/metrics" + "github.com/wormhole/wormhole/internal/proxy" + "github.com/wormhole/wormhole/internal/security" + "github.com/wormhole/wormhole/internal/store" +) + +type Server struct { + cfg *config.Config + store *store.Store + cache *cache.Manager + auth *auth.Service + resAuth *auth.ResourceAuth + security *security.Service + bridge *bridge.Bridge + proxy *proxy.Manager + metrics *metrics.Collector +} + +func NewServer( + cfg *config.Config, + st *store.Store, + c *cache.Manager, + authSvc *auth.Service, + resAuth *auth.ResourceAuth, + sec *security.Service, + b *bridge.Bridge, + pm *proxy.Manager, + mc *metrics.Collector, +) *Server { + return &Server{ + cfg: cfg, + store: st, + cache: c, + auth: authSvc, + resAuth: resAuth, + security: sec, + bridge: b, + proxy: pm, + metrics: mc, + } +} + +func (s *Server) Router() *gin.Engine { + gin.SetMode(gin.ReleaseMode) + r := gin.New() + r.Use(gin.Recovery(), gin.Logger()) + + api := r.Group("/api") + { + api.GET("/openapi.json", s.openapiDoc) + api.POST("/auth/login", s.login) + + authGroup := api.Group("") + authGroup.Use(s.authMiddleware()) + { + authGroup.GET("/auth/me", s.me) + authGroup.PUT("/auth/me/password", s.changeMyPassword) + authGroup.GET("/dashboard", s.dashboard) + authGroup.GET("/dashboard/rankings", s.dashboardRankings) + + authGroup.GET("/api-keys", s.listAPIKeys) + authGroup.POST("/api-keys", s.createAPIKey) + authGroup.DELETE("/api-keys/:id", s.deleteAPIKey) + + authGroup.GET("/clients", s.listClients) + authGroup.POST("/clients", s.createClient) + authGroup.PUT("/clients/:id", s.updateClient) + authGroup.DELETE("/clients/:id", s.deleteClient) + + authGroup.GET("/tunnels", s.listTunnels) + authGroup.POST("/tunnels", s.createTunnel) + authGroup.PUT("/tunnels/:id", s.updateTunnel) + authGroup.DELETE("/tunnels/:id", s.deleteTunnel) + authGroup.POST("/tunnels/:id/start", s.startTunnel) + authGroup.POST("/tunnels/:id/stop", s.stopTunnel) + authGroup.POST("/tunnels/:id/pause", s.pauseTunnel) + authGroup.POST("/tunnels/:id/resume", s.resumeTunnel) + authGroup.GET("/tunnels/export", s.exportTunnels) + authGroup.POST("/tunnels/import", s.importTunnels) + + authGroup.GET("/hosts", s.listHosts) + authGroup.POST("/hosts", s.createHost) + authGroup.PUT("/hosts/:id", s.updateHost) + authGroup.DELETE("/hosts/:id", s.deleteHost) + authGroup.POST("/hosts/:id/pause", s.pauseHost) + authGroup.POST("/hosts/:id/resume", s.resumeHost) + authGroup.GET("/hosts/export", s.exportHosts) + authGroup.POST("/hosts/import", s.importHosts) + + authGroup.GET("/domain-forwards", s.listDomainForwards) + authGroup.POST("/domain-forwards", s.createDomainForward) + authGroup.PUT("/domain-forwards/:id", s.updateDomainForward) + authGroup.DELETE("/domain-forwards/:id", s.deleteDomainForward) + authGroup.POST("/domain-forwards/:id/pause", s.pauseDomainForward) + authGroup.POST("/domain-forwards/:id/resume", s.resumeDomainForward) + authGroup.GET("/forward-plugin-types", s.listForwardPluginTypes) + + authGroup.GET("/security/ip-rules", s.listIPRules) + authGroup.POST("/security/ip-rules", s.createIPRule) + authGroup.DELETE("/security/ip-rules/:id", s.deleteIPRule) + authGroup.GET("/security/request-ips", s.listRequestIPs) + authGroup.POST("/security/block-ip", s.blockIP) + + authGroup.GET("/auth-policies", s.listAuthPolicies) + authGroup.POST("/auth-policies", s.createAuthPolicy) + authGroup.DELETE("/auth-policies/:id", s.deleteAuthPolicy) + + authGroup.GET("/settings", s.getSettings) + authGroup.PUT("/settings", s.updateSettings) + + authGroup.GET("/users", s.listUsers) + authGroup.GET("/users/:id/access-logs", s.listVisitorAccessLogs) + authGroup.POST("/users", s.createUser) + authGroup.PUT("/users/:id", s.updateUser) + authGroup.DELETE("/users/:id", s.deleteUser) + } + } + return r +} + +func getClaims(c *gin.Context) *auth.Claims { + v, _ := c.Get("claims") + claims, _ := v.(*auth.Claims) + return claims +} + +func (s *Server) login(c *gin.Context) { + var req struct { + Username string `json:"username"` + Password string `json:"password"` + } + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + ip := auth.DirectRemoteIP(c.Request) + token, user, err := s.auth.Login(s.store, ip, req.Username, req.Password) + if err != nil { + var blocked *auth.LoginBlockedError + if errors.As(err, &blocked) { + secs := int(blocked.RetryAfter.Seconds()) + if secs < 1 { + secs = 1 + } + c.Header("Retry-After", strconv.Itoa(secs)) + c.JSON(http.StatusTooManyRequests, gin.H{ + "error": "登录尝试次数过多,请稍后再试", + "retry_after": secs, + }) + return + } + c.JSON(http.StatusUnauthorized, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{ + "token": token, + "user": gin.H{ + "id": user.ID, + "username": user.Username, + "role": user.Role, + }, + }) +} + +func (s *Server) me(c *gin.Context) { + claims := getClaims(c) + c.JSON(http.StatusOK, gin.H{ + "id": claims.UserID, + "username": claims.Username, + "role": claims.Role, + }) +} + +func (s *Server) changeMyPassword(c *gin.Context) { + claims := getClaims(c) + if claims.Role == "visitor" { + c.JSON(http.StatusForbidden, gin.H{"error": "访客账号无法修改管理密码"}) + return + } + var req struct { + CurrentPassword string `json:"current_password"` + NewPassword string `json:"new_password"` + } + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + if req.CurrentPassword == "" || req.NewPassword == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "请输入当前密码和新密码"}) + return + } + if len(req.NewPassword) < 4 { + c.JSON(http.StatusBadRequest, gin.H{"error": "新密码至少 4 位"}) + return + } + user, err := s.store.GetUserByID(claims.UserID) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "user not found"}) + return + } + if !store.CheckPassword(user.PasswordHash, req.CurrentPassword) { + c.JSON(http.StatusUnauthorized, gin.H{"error": "当前密码不正确"}) + return + } + hash, err := store.HashPassword(req.NewPassword) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + user.PasswordHash = hash + if err := s.store.UpdateUser(user); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) dashboard(c *gin.Context) { + data, err := s.metrics.Dashboard() + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, data) +} + +func (s *Server) listClients(c *gin.Context) { + claims := getClaims(c) + clients, err := s.store.ListClients(claims.UserID, auth.IsAdmin(claims.Role)) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + type clientView struct { + store.Client + Online bool `json:"online"` + } + out := make([]clientView, 0, len(clients)) + for _, cl := range clients { + out = append(out, clientView{ + Client: cl, + Online: s.bridge.IsOnline(cl.ID), + }) + } + c.JSON(http.StatusOK, out) +} + +func (s *Server) createClient(c *gin.Context) { + claims := getClaims(c) + var req store.Client + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + req.OwnerUserID = claims.UserID + if auth.IsAdmin(claims.Role) && req.OwnerUserID == 0 { + req.OwnerUserID = claims.UserID + } + if err := s.store.CreateClient(&req); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + s.cache.UpsertClient(&req) + c.JSON(http.StatusOK, req) +} + +func (s *Server) updateClient(c *gin.Context) { + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + claims := getClaims(c) + if err := store.ClientOwnerCheck(s.store, uint(id), claims.UserID, auth.IsAdmin(claims.Role)); err != nil { + c.JSON(http.StatusForbidden, gin.H{"error": err.Error()}) + return + } + var req store.Client + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + existing, err := s.store.GetClientByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + req.ID = existing.ID + req.VerifyKey = existing.VerifyKey + req.OwnerUserID = existing.OwnerUserID + if err := s.store.UpdateClient(&req); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + s.cache.UpsertClient(&req) + c.JSON(http.StatusOK, req) +} + +func (s *Server) deleteClient(c *gin.Context) { + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + claims := getClaims(c) + if err := store.ClientOwnerCheck(s.store, uint(id), claims.UserID, auth.IsAdmin(claims.Role)); err != nil { + c.JSON(http.StatusForbidden, gin.H{"error": err.Error()}) + return + } + if err := s.store.DeleteClient(uint(id)); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + s.cache.DeleteClient(uint(id)) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) listTunnels(c *gin.Context) { + claims := getClaims(c) + clientID, _ := strconv.ParseUint(c.Query("client_id"), 10, 64) + p := pageParams(c) + tunnels, total, err := s.store.ListTunnelsPaged(uint(clientID), claims.UserID, auth.IsAdmin(claims.Role), p) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + items := make([]tunnelView, 0, len(tunnels)) + for _, t := range tunnels { + view, err := s.enrichTunnelView(t) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + items = append(items, view) + } + c.JSON(http.StatusOK, gin.H{"items": items, "total": total}) +} + +func (s *Server) createTunnel(c *gin.Context) { + claims := getClaims(c) + var req tunnelRequest + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + if err := store.ClientOwnerCheck(s.store, req.ClientID, claims.UserID, auth.IsAdmin(claims.Role)); err != nil { + c.JSON(http.StatusForbidden, gin.H{"error": err.Error()}) + return + } + if req.Mode == "" { + req.Mode = "tcp" + } + req.ListenIP = "0.0.0.0" + if req.VisitorBindMode == "" { + req.VisitorBindMode = "all" + } + if req.VisitorTTLSeconds <= 0 { + req.VisitorTTLSeconds = 7200 + } + if req.VisitorAuthEnabled && req.Mode == "udp" { + c.JSON(http.StatusBadRequest, gin.H{"error": "UDP 隧道不支持访客登录"}) + return + } + inUse, err := s.store.TunnelPortInUse(req.ListenPort, 0) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + if inUse { + c.JSON(http.StatusConflict, gin.H{"error": "监听端口已被占用"}) + return + } + if err := s.store.CreateTunnel(&req.Tunnel); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + if err := s.saveResourceVisitors("tunnel", req.ID, req.VisitorAuthEnabled, req.VisitorBindMode, req.VisitorIDs); err != nil { + _ = s.store.DeleteTunnel(req.ID) + writeVisitorSaveError(c, err) + return + } + s.cache.UpsertTunnel(&req.Tunnel) + if req.Status { + _ = s.proxy.StartTunnel(req.ID) + } + view, _ := s.enrichTunnelView(req.Tunnel) + c.JSON(http.StatusOK, view) +} + +func (s *Server) updateTunnel(c *gin.Context) { + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + claims := getClaims(c) + existing, err := s.store.GetTunnelByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if err := store.ClientOwnerCheck(s.store, existing.ClientID, claims.UserID, auth.IsAdmin(claims.Role)); err != nil { + c.JSON(http.StatusForbidden, gin.H{"error": err.Error()}) + return + } + var req tunnelRequest + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + req.ID = existing.ID + req.ClientID = existing.ClientID + req.ListenIP = "0.0.0.0" + if req.VisitorBindMode == "" { + req.VisitorBindMode = "all" + } + if req.VisitorTTLSeconds <= 0 { + req.VisitorTTLSeconds = 7200 + } + if req.VisitorAuthEnabled && req.Mode == "udp" { + c.JSON(http.StatusBadRequest, gin.H{"error": "UDP 隧道不支持访客登录"}) + return + } + inUse, err := s.store.TunnelPortInUse(req.ListenPort, uint(id)) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + if inUse { + c.JSON(http.StatusConflict, gin.H{"error": "监听端口已被占用"}) + return + } + if err := s.store.UpdateTunnel(&req.Tunnel); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + if err := s.saveResourceVisitors("tunnel", req.ID, req.VisitorAuthEnabled, req.VisitorBindMode, req.VisitorIDs); err != nil { + writeVisitorSaveError(c, err) + return + } + wasRunning := existing.RunStatus + s.cache.UpsertTunnel(&req.Tunnel) + if wasRunning || (req.Status && req.VisitorAuthEnabled != existing.VisitorAuthEnabled) { + _ = s.proxy.StopTunnel(uint(id)) + if req.Status { + _ = s.proxy.StartTunnel(uint(id)) + } + } + view, _ := s.enrichTunnelView(req.Tunnel) + c.JSON(http.StatusOK, view) +} + +func (s *Server) deleteTunnel(c *gin.Context) { + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + claims := getClaims(c) + existing, err := s.store.GetTunnelByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if err := store.ClientOwnerCheck(s.store, existing.ClientID, claims.UserID, auth.IsAdmin(claims.Role)); err != nil { + c.JSON(http.StatusForbidden, gin.H{"error": err.Error()}) + return + } + _ = s.proxy.StopTunnel(uint(id)) + if err := s.store.DeleteTunnel(uint(id)); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + s.cache.DeleteTunnel(uint(id)) + s.cache.DeleteResourceVisitors("tunnel", uint(id)) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) startTunnel(c *gin.Context) { + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + claims := getClaims(c) + existing, err := s.store.GetTunnelByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if err := store.ClientOwnerCheck(s.store, existing.ClientID, claims.UserID, auth.IsAdmin(claims.Role)); err != nil { + c.JSON(http.StatusForbidden, gin.H{"error": err.Error()}) + return + } + if err := s.proxy.StartTunnel(uint(id)); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) stopTunnel(c *gin.Context) { + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + claims := getClaims(c) + existing, err := s.store.GetTunnelByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if err := store.ClientOwnerCheck(s.store, existing.ClientID, claims.UserID, auth.IsAdmin(claims.Role)); err != nil { + c.JSON(http.StatusForbidden, gin.H{"error": err.Error()}) + return + } + if err := s.proxy.StopTunnel(uint(id)); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) listHosts(c *gin.Context) { + claims := getClaims(c) + clientID, _ := strconv.ParseUint(c.Query("client_id"), 10, 64) + p := pageParams(c) + hosts, total, err := s.store.ListHostsPaged(uint(clientID), claims.UserID, auth.IsAdmin(claims.Role), p) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + items := make([]hostView, 0, len(hosts)) + for _, h := range hosts { + view, err := s.enrichHostView(h) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + items = append(items, view) + } + c.JSON(http.StatusOK, gin.H{"items": items, "total": total}) +} + +func (s *Server) createHost(c *gin.Context) { + claims := getClaims(c) + var req hostRequest + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + if err := store.ClientOwnerCheck(s.store, req.ClientID, claims.UserID, auth.IsAdmin(claims.Role)); err != nil { + c.JSON(http.StatusForbidden, gin.H{"error": err.Error()}) + return + } + if req.Location == "" { + req.Location = "/" + } + if req.Scheme == "" { + req.Scheme = "all" + } + if req.VisitorBindMode == "" { + req.VisitorBindMode = "all" + } + if req.VisitorTTLSeconds <= 0 { + req.VisitorTTLSeconds = 7200 + } + if err := s.store.RouteConflict(req.Host.Host, req.Location, 0, 0); err != nil { + c.JSON(http.StatusConflict, gin.H{"error": err.Error()}) + return + } + if err := s.store.CreateHost(&req.Host); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + if err := s.saveResourceVisitors("host", req.ID, req.VisitorAuthEnabled, req.VisitorBindMode, req.VisitorIDs); err != nil { + _ = s.store.DeleteHost(req.ID) + writeVisitorSaveError(c, err) + return + } + s.cache.UpsertHost(&req.Host) + view, _ := s.enrichHostView(req.Host) + c.JSON(http.StatusOK, view) +} + +func (s *Server) updateHost(c *gin.Context) { + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + claims := getClaims(c) + existing, err := s.store.GetHostByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if err := store.ClientOwnerCheck(s.store, existing.ClientID, claims.UserID, auth.IsAdmin(claims.Role)); err != nil { + c.JSON(http.StatusForbidden, gin.H{"error": err.Error()}) + return + } + var req hostRequest + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + req.ID = existing.ID + req.ClientID = existing.ClientID + if req.VisitorBindMode == "" { + req.VisitorBindMode = "all" + } + if req.VisitorTTLSeconds <= 0 { + req.VisitorTTLSeconds = 7200 + } + if err := s.store.RouteConflict(req.Host.Host, req.Location, 0, uint(id)); err != nil { + c.JSON(http.StatusConflict, gin.H{"error": err.Error()}) + return + } + if err := s.store.UpdateHost(&req.Host); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + if err := s.saveResourceVisitors("host", req.ID, req.VisitorAuthEnabled, req.VisitorBindMode, req.VisitorIDs); err != nil { + writeVisitorSaveError(c, err) + return + } + s.cache.UpsertHost(&req.Host) + view, _ := s.enrichHostView(req.Host) + c.JSON(http.StatusOK, view) +} + +func (s *Server) deleteHost(c *gin.Context) { + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + claims := getClaims(c) + existing, err := s.store.GetHostByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if err := store.ClientOwnerCheck(s.store, existing.ClientID, claims.UserID, auth.IsAdmin(claims.Role)); err != nil { + c.JSON(http.StatusForbidden, gin.H{"error": err.Error()}) + return + } + if err := s.store.DeleteHost(uint(id)); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + s.cache.DeleteHost(uint(id)) + s.cache.DeleteResourceVisitors("host", uint(id)) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) listIPRules(c *gin.Context) { + scope := c.Query("scope") + resourceID, _ := strconv.ParseUint(c.Query("resource_id"), 10, 64) + rules, err := s.store.ListIPRules(scope, uint(resourceID)) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, rules) +} + +func (s *Server) createIPRule(c *gin.Context) { + var req store.IPRule + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + if req.PatternKind == "" { + req.PatternKind = security.DetectPatternKind(req.Pattern) + } + if err := s.store.CreateIPRule(&req); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + _ = s.cache.ReloadIPRules(s.store) + c.JSON(http.StatusOK, req) +} + +func (s *Server) deleteIPRule(c *gin.Context) { + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + if err := s.store.DeleteIPRule(uint(id)); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + _ = s.cache.ReloadIPRules(s.store) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) listRequestIPs(c *gin.Context) { + resourceType := c.Query("resource_type") + resourceID, _ := strconv.ParseUint(c.Query("resource_id"), 10, 64) + limit, _ := strconv.Atoi(c.DefaultQuery("limit", "50")) + offset, _ := strconv.Atoi(c.DefaultQuery("offset", "0")) + q := c.Query("q") + if resourceType == "" && resourceID == 0 { + items, total, err := s.store.ListAllRequestIPs(limit, offset, q) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"items": items, "total": total}) + return + } + items, total, err := s.store.ListRequestIPs(resourceType, uint(resourceID), limit, offset) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"items": items, "total": total}) +} + +func (s *Server) blockIP(c *gin.Context) { + var req struct { + IP string `json:"ip"` + Scope string `json:"scope"` + ResourceID uint `json:"resource_id"` + Remark string `json:"remark"` + } + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + if req.Scope == "" { + req.Scope = "global" + } + if err := s.security.BlockIP(req.IP, req.Scope, req.ResourceID, req.Remark); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) listAuthPolicies(c *gin.Context) { + resourceType := c.Query("resource_type") + resourceID, _ := strconv.ParseUint(c.Query("resource_id"), 10, 64) + policies, err := s.store.ListAuthPolicies(resourceType, uint(resourceID)) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, policies) +} + +func (s *Server) createAuthPolicy(c *gin.Context) { + var req store.AuthPolicy + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + if err := s.resAuth.CreatePolicy(s.store, &req); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + _ = s.cache.ReloadAll(s.store) + c.JSON(http.StatusOK, req) +} + +func (s *Server) deleteAuthPolicy(c *gin.Context) { + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + if err := s.store.DeleteAuthPolicy(uint(id)); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + _ = s.cache.ReloadAll(s.store) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (s *Server) listUsers(c *gin.Context) { + claims := getClaims(c) + if !auth.IsAdmin(claims.Role) { + c.JSON(http.StatusForbidden, gin.H{"error": "admin only"}) + return + } + users, err := s.store.ListVisitors() + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, users) +} + +func (s *Server) listVisitorAccessLogs(c *gin.Context) { + claims := getClaims(c) + if !auth.IsAdmin(claims.Role) { + c.JSON(http.StatusForbidden, gin.H{"error": "admin only"}) + return + } + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + user, err := s.store.GetUserByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if user.Role != "visitor" { + c.JSON(http.StatusBadRequest, gin.H{"error": "仅可查看访客访问记录"}) + return + } + limit, _ := strconv.Atoi(c.DefaultQuery("limit", "200")) + logs, err := s.store.ListVisitorAccessLogs(uint(id), limit) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + items := make([]gin.H, 0, len(logs)) + for _, log := range logs { + items = append(items, gin.H{ + "id": log.ID, + "user_id": log.UserID, + "resource_type": log.ResourceType, + "resource_id": log.ResourceID, + "resource_label": visitorResourceLabel(s.store, log.ResourceType, log.ResourceID), + "action": log.Action, + "method": log.Method, + "path": log.Path, + "ip": log.IP, + "user_agent": log.UserAgent, + "created_at": log.CreatedAt, + }) + } + c.JSON(http.StatusOK, gin.H{"items": items, "total": len(items)}) +} + +func visitorResourceLabel(st *store.Store, resourceType string, resourceID uint) string { + switch resourceType { + case "host": + h, err := st.GetHostByID(resourceID) + if err != nil { + return "" + } + label := h.Host + if h.Location != "" && h.Location != "/" { + label += h.Location + } + return label + case "tunnel": + t, err := st.GetTunnelByID(resourceID) + if err != nil { + return "" + } + if t.Name != "" { + return t.Name + " :" + strconv.Itoa(t.ListenPort) + } + return ":" + strconv.Itoa(t.ListenPort) + default: + return "" + } +} + +func (s *Server) createUser(c *gin.Context) { + claims := getClaims(c) + if !auth.IsAdmin(claims.Role) { + c.JSON(http.StatusForbidden, gin.H{"error": "admin only"}) + return + } + var req struct { + Username string `json:"username"` + Password string `json:"password"` + Role string `json:"role"` + } + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + hash, err := store.HashPassword(req.Password) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + if req.Role == "" { + req.Role = "visitor" + } + if req.Role != "visitor" { + c.JSON(http.StatusBadRequest, gin.H{"error": "仅支持创建访客用户"}) + return + } + user := store.User{ + Username: req.Username, + PasswordHash: hash, + Role: req.Role, + Status: true, + } + if err := s.store.CreateUser(&user); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, user) +} + +func (s *Server) updateUser(c *gin.Context) { + claims := getClaims(c) + if !auth.IsAdmin(claims.Role) { + c.JSON(http.StatusForbidden, gin.H{"error": "admin only"}) + return + } + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + user, err := s.store.GetUserByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if user.Role != "visitor" { + c.JSON(http.StatusBadRequest, gin.H{"error": "仅可编辑访客用户"}) + return + } + var req struct { + Password string `json:"password"` + Role string `json:"role"` + Status *bool `json:"status"` + } + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + if req.Password != "" { + hash, err := store.HashPassword(req.Password) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + user.PasswordHash = hash + } + if req.Role != "" { + if req.Role != "visitor" { + c.JSON(http.StatusBadRequest, gin.H{"error": "仅支持访客用户"}) + return + } + user.Role = req.Role + } + if req.Status != nil { + user.Status = *req.Status + } + if err := s.store.UpdateUser(user); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, user) +} + +func (s *Server) deleteUser(c *gin.Context) { + claims := getClaims(c) + if !auth.IsAdmin(claims.Role) { + c.JSON(http.StatusForbidden, gin.H{"error": "admin only"}) + return + } + id, _ := strconv.ParseUint(c.Param("id"), 10, 64) + user, err := s.store.GetUserByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if user.Role != "visitor" { + c.JSON(http.StatusBadRequest, gin.H{"error": "仅可删除访客用户"}) + return + } + if err := s.store.DeleteUser(uint(id), claims.UserID); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"ok": true}) +} diff --git a/internal/api/settings.go b/internal/api/settings.go new file mode 100644 index 0000000..5580f61 --- /dev/null +++ b/internal/api/settings.go @@ -0,0 +1,54 @@ +package api + +import ( + "net/http" + "reflect" + + "github.com/gin-gonic/gin" + "github.com/wormhole/wormhole/internal/auth" + "github.com/wormhole/wormhole/internal/config" +) + +func (s *Server) getSettings(c *gin.Context) { + claims := getClaims(c) + if !auth.IsAdmin(claims.Role) { + c.JSON(http.StatusForbidden, gin.H{"error": "admin only"}) + return + } + dto := s.cfg.ToDTO() + c.JSON(http.StatusOK, gin.H{ + "settings": dto, + "note": "修改监听端口后需重启 wormhole server 生效", + }) +} + +func (s *Server) updateSettings(c *gin.Context) { + claims := getClaims(c) + if !auth.IsAdmin(claims.Role) { + c.JSON(http.StatusForbidden, gin.H{"error": "admin only"}) + return + } + var req config.SettingsDTO + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"}) + return + } + oldServer := s.cfg.Server + newCfg := config.SettingsFromDTO(req, s.cfg) + if err := s.store.SaveConfig(newCfg); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + *s.cfg = *newCfg + s.auth.ReloadAuth(&s.cfg.Auth) + s.resAuth.ReloadAuth(&s.cfg.Auth) + + restartRequired := !reflect.DeepEqual(oldServer, s.cfg.Server) || + oldServer.TLSCertFile != s.cfg.Server.TLSCertFile || + oldServer.TLSKeyFile != s.cfg.Server.TLSKeyFile + + c.JSON(http.StatusOK, gin.H{ + "settings": s.cfg.ToDTO(), + "restart_required": restartRequired, + }) +} diff --git a/internal/api/visitor_helpers.go b/internal/api/visitor_helpers.go new file mode 100644 index 0000000..0ed4799 --- /dev/null +++ b/internal/api/visitor_helpers.go @@ -0,0 +1,89 @@ +package api + +import ( + "fmt" + "net/http" + + "github.com/gin-gonic/gin" + "github.com/wormhole/wormhole/internal/store" +) + +type hostRequest struct { + store.Host + VisitorIDs []uint `json:"visitor_ids"` +} + +type tunnelRequest struct { + store.Tunnel + VisitorIDs []uint `json:"visitor_ids"` +} + +type hostView struct { + store.Host + VisitorIDs []uint `json:"visitor_ids"` +} + +type tunnelView struct { + store.Tunnel + VisitorIDs []uint `json:"visitor_ids"` +} + +func (s *Server) enrichHostView(h store.Host) (hostView, error) { + ids, err := s.store.ListResourceVisitorIDs("host", h.ID) + if err != nil { + return hostView{}, err + } + return hostView{Host: h, VisitorIDs: ids}, nil +} + +func (s *Server) enrichTunnelView(t store.Tunnel) (tunnelView, error) { + ids, err := s.store.ListResourceVisitorIDs("tunnel", t.ID) + if err != nil { + return tunnelView{}, err + } + return tunnelView{Tunnel: t, VisitorIDs: ids}, nil +} + +func (s *Server) saveResourceVisitors(resourceType string, resourceID uint, enabled bool, bindMode string, visitorIDs []uint) error { + if !enabled { + _ = s.store.SetResourceVisitors(resourceType, resourceID, nil) + s.cache.SetResourceVisitors(resourceType, resourceID, nil) + return nil + } + if bindMode == "" { + bindMode = "all" + } + if bindMode == "selected" { + if len(visitorIDs) == 0 { + return fmt.Errorf("请至少选择一个访客用户") + } + if err := s.validateVisitorIDs(visitorIDs); err != nil { + return err + } + if err := s.store.SetResourceVisitors(resourceType, resourceID, visitorIDs); err != nil { + return err + } + s.cache.SetResourceVisitors(resourceType, resourceID, visitorIDs) + return nil + } + _ = s.store.SetResourceVisitors(resourceType, resourceID, nil) + s.cache.SetResourceVisitors(resourceType, resourceID, nil) + return nil +} + +func (s *Server) validateVisitorIDs(ids []uint) error { + for _, id := range ids { + user, err := s.store.GetUserByID(id) + if err != nil { + return fmt.Errorf("访客用户 #%d 不存在", id) + } + if user.Role != "visitor" { + return fmt.Errorf("用户 %s 不是访客账号", user.Username) + } + } + return nil +} + +func writeVisitorSaveError(c *gin.Context, err error) { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) +} diff --git a/internal/auth/ip.go b/internal/auth/ip.go new file mode 100644 index 0000000..f141b73 --- /dev/null +++ b/internal/auth/ip.go @@ -0,0 +1,55 @@ +package auth + +import ( + "net" + "net/http" + "strings" +) + +// DirectRemoteIP returns the direct TCP peer address, ignoring X-Forwarded-For. +// Use for security decisions (login rate limit, IP rules, resource auth). +func DirectRemoteIP(r *http.Request) string { + return HostOnly(r.RemoteAddr) +} + +// AddrHost extracts the host portion from a net.Addr string (host:port or [host]:port). +func AddrHost(addr net.Addr) string { + if addr == nil { + return "" + } + return HostOnly(addr.String()) +} + +// HostOnly strips the port from an address string. +func HostOnly(addr string) string { + if addr == "" { + return "" + } + host, _, err := net.SplitHostPort(addr) + if err != nil { + return strings.Trim(addr, "[]") + } + return host +} + +// ExtractRemoteIP returns the client IP, honoring X-Forwarded-For when present. +// Use only when forwarding visitor IP to upstream backends behind a trusted proxy. +func ExtractRemoteIP(r *http.Request) string { + if xff := r.Header.Get("X-Forwarded-For"); xff != "" { + parts := strings.Split(xff, ",") + return strings.TrimSpace(parts[0]) + } + if xri := r.Header.Get("X-Real-IP"); xri != "" { + return strings.TrimSpace(xri) + } + return DirectRemoteIP(r) +} + +// SafeRedirectPath validates a post-login redirect path (relative only). +func SafeRedirectPath(raw string) string { + raw = strings.TrimSpace(raw) + if raw == "" || !strings.HasPrefix(raw, "/") || strings.HasPrefix(raw, "//") { + return "/" + } + return raw +} diff --git a/internal/auth/jwt.go b/internal/auth/jwt.go new file mode 100644 index 0000000..619829f --- /dev/null +++ b/internal/auth/jwt.go @@ -0,0 +1,118 @@ +package auth + +import ( + "errors" + "sync" + "time" + + "github.com/golang-jwt/jwt/v5" + "github.com/wormhole/wormhole/internal/config" + "github.com/wormhole/wormhole/internal/store" +) + +type Claims struct { + UserID uint `json:"user_id"` + Username string `json:"username"` + Role string `json:"role"` + jwt.RegisteredClaims +} + +type Service struct { + mu sync.RWMutex + cfg *config.AuthConfig + limiter *LoginLimiter +} + +func NewService(cfg *config.AuthConfig) *Service { + return &Service{ + cfg: cfg, + limiter: NewLoginLimiter(cfg), + } +} + +func (s *Service) ReloadAuth(cfg *config.AuthConfig) { + s.mu.Lock() + defer s.mu.Unlock() + *s.cfg = *cfg + s.limiter = NewLoginLimiter(cfg) +} + +func (s *Service) Login(st *store.Store, ip, username, password string) (string, *store.User, error) { + s.mu.RLock() + limiter := s.limiter + s.mu.RUnlock() + if retry, blocked := limiter.IsBlocked(ip, username); blocked { + return "", nil, &LoginBlockedError{RetryAfter: retry} + } + + user, err := st.GetUserByUsername(username) + if err != nil { + limiter.RecordFailure(ip, username) + time.Sleep(300 * time.Millisecond) + return "", nil, errors.New("invalid credentials") + } + if !user.Status { + limiter.RecordFailure(ip, username) + time.Sleep(300 * time.Millisecond) + return "", nil, errors.New("invalid credentials") + } + if !store.CheckPassword(user.PasswordHash, password) { + limiter.RecordFailure(ip, username) + time.Sleep(300 * time.Millisecond) + return "", nil, errors.New("invalid credentials") + } + if user.Role == "visitor" { + limiter.RecordFailure(ip, username) + time.Sleep(300 * time.Millisecond) + return "", nil, errors.New("访客账号无法登录管理后台") + } + + limiter.Reset(ip, username) + token, err := s.GenerateToken(user) + if err != nil { + return "", nil, err + } + return token, user, nil +} + +func (s *Service) GenerateToken(user *store.User) (string, error) { + s.mu.RLock() + cfg := s.cfg + s.mu.RUnlock() + claims := Claims{ + UserID: user.ID, + Username: user.Username, + Role: user.Role, + RegisteredClaims: jwt.RegisteredClaims{ + ExpiresAt: jwt.NewNumericDate(time.Now().Add(cfg.TokenTTL)), + IssuedAt: jwt.NewNumericDate(time.Now()), + }, + } + token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + return token.SignedString([]byte(cfg.JWTSecret)) +} + +func (s *Service) ParseToken(tokenStr string) (*Claims, error) { + s.mu.RLock() + secret := s.cfg.JWTSecret + s.mu.RUnlock() + token, err := jwt.ParseWithClaims(tokenStr, &Claims{}, func(t *jwt.Token) (interface{}, error) { + return []byte(secret), nil + }) + if err != nil { + return nil, err + } + claims, ok := token.Claims.(*Claims) + if !ok || !token.Valid { + return nil, errors.New("invalid token") + } + return claims, nil +} + +func IsAdmin(role string) bool { + return role == "admin" +} + +func IsVisitor(role string) bool { + return role == "visitor" +} diff --git a/internal/auth/limiter.go b/internal/auth/limiter.go new file mode 100644 index 0000000..7627a4b --- /dev/null +++ b/internal/auth/limiter.go @@ -0,0 +1,123 @@ +package auth + +import ( + "sync" + "time" + + "github.com/wormhole/wormhole/internal/config" +) + +type LoginBlockedError struct { + RetryAfter time.Duration +} + +func (e *LoginBlockedError) Error() string { + return "too many login attempts" +} + +type loginRecord struct { + failures int + windowStart time.Time + lockedUntil time.Time +} + +type LoginLimiter struct { + mu sync.Mutex + maxAttempts int + window time.Duration + lockout time.Duration + records map[string]*loginRecord +} + +func NewLoginLimiter(cfg *config.AuthConfig) *LoginLimiter { + if cfg.LoginMaxAttempts <= 0 { + return nil + } + max := cfg.LoginMaxAttempts + window := cfg.LoginWindow + lockout := cfg.LoginLockout + if window <= 0 { + window = 5 * time.Minute + } + if lockout <= 0 { + lockout = 15 * time.Minute + } + return &LoginLimiter{ + maxAttempts: max, + window: window, + lockout: lockout, + records: make(map[string]*loginRecord), + } +} + +func (l *LoginLimiter) keys(ip, username string) []string { + keys := []string{"ip:" + ip} + if username != "" { + keys = append(keys, "user:"+username) + } + return keys +} + +func (l *LoginLimiter) IsBlocked(ip, username string) (time.Duration, bool) { + if l == nil { + return 0, false + } + now := time.Now() + l.mu.Lock() + defer l.mu.Unlock() + + var maxRetry time.Duration + for _, key := range l.keys(ip, username) { + rec := l.records[key] + if rec == nil { + continue + } + if now.Before(rec.lockedUntil) { + retry := time.Until(rec.lockedUntil) + if retry > maxRetry { + maxRetry = retry + } + } + } + return maxRetry, maxRetry > 0 +} + +func (l *LoginLimiter) RecordFailure(ip, username string) { + if l == nil { + return + } + now := time.Now() + l.mu.Lock() + defer l.mu.Unlock() + + for _, key := range l.keys(ip, username) { + rec := l.records[key] + if rec == nil { + rec = &loginRecord{windowStart: now} + l.records[key] = rec + } + if now.Before(rec.lockedUntil) { + continue + } + if now.Sub(rec.windowStart) > l.window { + rec.failures = 0 + rec.windowStart = now + } + rec.failures++ + if rec.failures >= l.maxAttempts { + rec.lockedUntil = now.Add(l.lockout) + rec.failures = 0 + } + } +} + +func (l *LoginLimiter) Reset(ip, username string) { + if l == nil { + return + } + l.mu.Lock() + defer l.mu.Unlock() + for _, key := range l.keys(ip, username) { + delete(l.records, key) + } +} diff --git a/internal/auth/limiter_test.go b/internal/auth/limiter_test.go new file mode 100644 index 0000000..6623cca --- /dev/null +++ b/internal/auth/limiter_test.go @@ -0,0 +1,59 @@ +package auth + +import ( + "errors" + "testing" + "time" + + "github.com/wormhole/wormhole/internal/config" +) + +func TestLoginLimiterBlocksAfterMaxAttempts(t *testing.T) { + l := NewLoginLimiter(&config.AuthConfig{ + LoginMaxAttempts: 3, + LoginWindow: time.Minute, + LoginLockout: 10 * time.Minute, + }) + + ip := "192.168.1.1" + user := "admin" + + for i := 0; i < 3; i++ { + if _, blocked := l.IsBlocked(ip, user); blocked { + t.Fatalf("unexpected block at attempt %d", i+1) + } + l.RecordFailure(ip, user) + } + + retry, blocked := l.IsBlocked(ip, user) + if !blocked || retry <= 0 { + t.Fatalf("expected block after max attempts, retry=%v blocked=%v", retry, blocked) + } +} + +func TestLoginLimiterResetClearsBlock(t *testing.T) { + l := NewLoginLimiter(&config.AuthConfig{ + LoginMaxAttempts: 2, + LoginWindow: time.Minute, + LoginLockout: time.Minute, + }) + + ip := "10.0.0.1" + l.RecordFailure(ip, "u1") + l.RecordFailure(ip, "u1") + if _, blocked := l.IsBlocked(ip, "u1"); !blocked { + t.Fatal("expected blocked") + } + + l.Reset(ip, "u1") + if _, blocked := l.IsBlocked(ip, "u1"); blocked { + t.Fatal("expected unblocked after reset") + } +} + +func TestLoginBlockedError(t *testing.T) { + err := &LoginBlockedError{RetryAfter: 30 * time.Second} + if !errors.As(err, new(*LoginBlockedError)) { + t.Fatal("LoginBlockedError should be detectable via errors.As") + } +} diff --git a/internal/auth/resource.go b/internal/auth/resource.go new file mode 100644 index 0000000..a59063e --- /dev/null +++ b/internal/auth/resource.go @@ -0,0 +1,180 @@ +package auth + +import ( + "crypto/subtle" + "fmt" + "net" + "net/http" + "sync" + "time" + + "github.com/wormhole/wormhole/internal/cache" + "github.com/wormhole/wormhole/internal/config" + "github.com/wormhole/wormhole/internal/store" +) + +const accessCookieName = "wh_access" + +type ResourceAuth struct { + cache *cache.Manager + store *store.Store + jwtSecret string + limiter *LoginLimiter + mu sync.RWMutex + grants map[string]time.Time +} + +func NewResourceAuth(c *cache.Manager, st *store.Store, authCfg *config.AuthConfig) *ResourceAuth { + ra := &ResourceAuth{ + cache: c, + store: st, + jwtSecret: authCfg.JWTSecret, + limiter: NewLoginLimiter(authCfg), + grants: make(map[string]time.Time), + } + go ra.cleanupLoop() + return ra +} + +func (ra *ResourceAuth) ReloadAuth(cfg *config.AuthConfig) { + ra.mu.Lock() + defer ra.mu.Unlock() + ra.jwtSecret = cfg.JWTSecret + ra.limiter = NewLoginLimiter(cfg) +} + +func grantKey(resourceType string, resourceID uint, ip string) string { + return fmt.Sprintf("%s:%d:%s", resourceType, resourceID, ip) +} + +func (ra *ResourceAuth) cleanupLoop() { + ticker := time.NewTicker(time.Minute) + for range ticker.C { + now := time.Now() + ra.mu.Lock() + for k, exp := range ra.grants { + if now.After(exp) { + delete(ra.grants, k) + } + } + ra.mu.Unlock() + } +} + +func (ra *ResourceAuth) GrantAccess(resourceType string, resourceID uint, ip string, ttl time.Duration) { + ra.mu.Lock() + defer ra.mu.Unlock() + ra.grants[grantKey(resourceType, resourceID, ip)] = time.Now().Add(ttl) +} + +func (ra *ResourceAuth) HasAccess(resourceType string, resourceID uint, ip string) bool { + ra.mu.RLock() + defer ra.mu.RUnlock() + exp, ok := ra.grants[grantKey(resourceType, resourceID, ip)] + return ok && time.Now().Before(exp) +} + +func (ra *ResourceAuth) CheckHTTP(w http.ResponseWriter, r *http.Request, resourceType string, resourceID uint) bool { + cfg, userIDs, ok := GetVisitorConfig(ra.cache, resourceType, resourceID) + if ok && cfg.Enabled { + return ra.CheckVisitorHTTP(w, r, resourceType, resourceID, cfg, userIDs) + } + + ip := DirectRemoteIP(r) + if ra.HasAccess(resourceType, resourceID, ip) { + return true + } + policy, ok := ra.cache.GetAuthPolicy(resourceType, resourceID) + if !ok || !policy.Enabled { + return true + } + + switch policy.Type { + case "basic": + _, pass, ok := r.BasicAuth() + if ok && subtle.ConstantTimeCompare([]byte(pass), []byte(policy.Password)) == 1 { + ra.GrantAccess(resourceType, resourceID, ip, time.Duration(policy.TTLSeconds)*time.Second) + return true + } + w.Header().Set("WWW-Authenticate", `Basic realm="Wormhole"`) + http.Error(w, "Unauthorized", http.StatusUnauthorized) + return false + case "form": + if r.URL.Path == "/_wormhole/auth" && r.Method == http.MethodPost { + _ = r.ParseForm() + pass := r.FormValue("password") + if subtle.ConstantTimeCompare([]byte(pass), []byte(policy.Password)) == 1 { + ra.GrantAccess(resourceType, resourceID, ip, time.Duration(policy.TTLSeconds)*time.Second) + http.SetCookie(w, &http.Cookie{Name: accessCookieName, Value: "1", Path: "/", MaxAge: policy.TTLSeconds}) + redirect := SafeRedirectPath(r.FormValue("redirect")) + http.Redirect(w, r, redirect, http.StatusFound) + return false + } + } + if cookie, err := r.Cookie(accessCookieName); err == nil && cookie.Value == "1" { + ra.GrantAccess(resourceType, resourceID, ip, time.Duration(policy.TTLSeconds)*time.Second) + return true + } + redirect := r.URL.RequestURI() + html := fmt.Sprintf(` +
+ + + +
`, redirect) + w.Header().Set("Content-Type", "text/html; charset=utf-8") + w.WriteHeader(http.StatusUnauthorized) + _, _ = w.Write([]byte(html)) + return false + case "callback": + if policy.CallbackURL != "" { + token := r.URL.Query().Get("token") + if token != "" && token == policy.Password { + ra.GrantAccess(resourceType, resourceID, ip, time.Duration(policy.TTLSeconds)*time.Second) + return true + } + cb := policy.CallbackURL + if stringsContains(cb, "?") { + cb += "&" + } else { + cb += "?" + } + cb += "redirect=" + r.URL.RequestURI() + http.Redirect(w, r, cb, http.StatusFound) + return false + } + } + return true +} + +func (ra *ResourceAuth) CheckTCP(remoteAddr net.Addr, resourceType string, resourceID uint) bool { + ip := remoteAddr.String() + if host, _, err := net.SplitHostPort(ip); err == nil { + ip = host + } + if ra.HasAccess(resourceType, resourceID, ip) { + return true + } + policy, ok := ra.cache.GetAuthPolicy(resourceType, resourceID) + if !ok || !policy.Enabled { + return true + } + return false +} + +func stringsContains(s, sub string) bool { + return len(s) >= len(sub) && (s == sub || len(sub) == 0 || indexOf(s, sub) >= 0) +} + +func indexOf(s, sub string) int { + for i := 0; i+len(sub) <= len(s); i++ { + if s[i:i+len(sub)] == sub { + return i + } + } + return -1 +} + +func (ra *ResourceAuth) CreatePolicy(st *store.Store, p *store.AuthPolicy) error { + return st.CreateAuthPolicy(p) +} diff --git a/internal/auth/visitor.go b/internal/auth/visitor.go new file mode 100644 index 0000000..82d026e --- /dev/null +++ b/internal/auth/visitor.go @@ -0,0 +1,337 @@ +package auth + +import ( + "errors" + "fmt" + "html" + "net/http" + "net/url" + "strconv" + "strings" + "time" + + "github.com/golang-jwt/jwt/v5" + "github.com/wormhole/wormhole/internal/cache" + "github.com/wormhole/wormhole/internal/store" +) + +const ( + visitorLoginPath = "/_wormhole/login" + visitorCookie = "wh_visitor" +) + +type VisitorClaims struct { + UserID uint `json:"user_id"` + ResourceType string `json:"resource_type"` + ResourceID uint `json:"resource_id"` + jwt.RegisteredClaims +} + +type VisitorConfig struct { + Enabled bool + BindMode string + UserIDs []uint + TTLSeconds int +} + +func visitorConfigFromHost(h *store.Host) VisitorConfig { + ttl := h.VisitorTTLSeconds + if ttl <= 0 { + ttl = 7200 + } + return VisitorConfig{ + Enabled: h.VisitorAuthEnabled, + BindMode: h.VisitorBindMode, + TTLSeconds: ttl, + } +} + +func visitorConfigFromTunnel(t *store.Tunnel) VisitorConfig { + ttl := t.VisitorTTLSeconds + if ttl <= 0 { + ttl = 7200 + } + return VisitorConfig{ + Enabled: t.VisitorAuthEnabled, + BindMode: t.VisitorBindMode, + TTLSeconds: ttl, + } +} + +func (ra *ResourceAuth) CheckVisitorHTTP(w http.ResponseWriter, r *http.Request, resourceType string, resourceID uint, cfg VisitorConfig, userIDs []uint) bool { + if !cfg.Enabled { + return true + } + cfg.UserIDs = userIDs + if bindMode := strings.TrimSpace(cfg.BindMode); bindMode == "" { + cfg.BindMode = "all" + } else { + cfg.BindMode = bindMode + } + + if r.URL.Path == visitorLoginPath { + ra.handleVisitorLogin(w, r, resourceType, resourceID, cfg) + return false + } + + if claims, ok := ra.parseVisitorCookie(r, resourceType, resourceID); ok { + if ra.visitorAllowed(claims.UserID, cfg) { + ra.logVisitorAccess(claims.UserID, resourceType, resourceID, "access", r) + return true + } + } + + redirect := r.URL.RequestURI() + http.Redirect(w, r, visitorLoginPath+"?redirect="+url.QueryEscape(redirect), http.StatusFound) + return false +} + +func visitorLimiterIP(resourceType string, resourceID uint, ip string) string { + return fmt.Sprintf("%s:%d:%s", resourceType, resourceID, ip) +} + +func (ra *ResourceAuth) handleVisitorLogin(w http.ResponseWriter, r *http.Request, resourceType string, resourceID uint, cfg VisitorConfig) { + ip := DirectRemoteIP(r) + scopedIP := visitorLimiterIP(resourceType, resourceID, ip) + + switch r.Method { + case http.MethodPost: + _ = r.ParseForm() + username := strings.TrimSpace(r.FormValue("username")) + if retry, blocked := ra.limiter.IsBlocked(scopedIP, username); blocked { + ra.renderVisitorLoginBlocked(w, r, cfg, retry) + return + } + password := r.FormValue("password") + user, err := ra.authenticateVisitor(username, password, cfg) + if err != nil { + ra.limiter.RecordFailure(scopedIP, username) + time.Sleep(300 * time.Millisecond) + ra.renderVisitorLogin(w, r, cfg, "用户名或密码错误") + return + } + ra.limiter.Reset(scopedIP, username) + token, err := ra.signVisitorToken(user.ID, resourceType, resourceID, cfg.TTLSeconds) + if err != nil { + http.Error(w, "internal error", http.StatusInternalServerError) + return + } + secure := r.TLS != nil || strings.EqualFold(r.Header.Get("X-Forwarded-Proto"), "https") + http.SetCookie(w, &http.Cookie{ + Name: visitorCookie, + Value: token, + Path: "/", + MaxAge: cfg.TTLSeconds, + HttpOnly: true, + SameSite: http.SameSiteLaxMode, + Secure: secure, + }) + redirect := SafeRedirectPath(r.FormValue("redirect")) + ra.logVisitorAccess(user.ID, resourceType, resourceID, "login", r) + http.Redirect(w, r, redirect, http.StatusFound) + case http.MethodGet: + if retry, blocked := ra.limiter.IsBlocked(scopedIP, ""); blocked { + ra.renderVisitorLoginBlocked(w, r, cfg, retry) + return + } + ra.renderVisitorLogin(w, r, cfg, "") + default: + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + } +} + +func (ra *ResourceAuth) authenticateVisitor(username, password string, cfg VisitorConfig) (*store.User, error) { + if username == "" || password == "" { + return nil, errors.New("invalid credentials") + } + user, err := ra.store.GetUserByUsername(username) + if err != nil { + return nil, errors.New("invalid credentials") + } + if user.Role != "visitor" || !user.Status { + return nil, errors.New("invalid credentials") + } + if !store.CheckPassword(user.PasswordHash, password) { + return nil, errors.New("invalid credentials") + } + if !ra.visitorAllowed(user.ID, cfg) { + return nil, errors.New("not allowed") + } + return user, nil +} + +func (ra *ResourceAuth) visitorAllowed(userID uint, cfg VisitorConfig) bool { + if cfg.BindMode == "all" { + return true + } + for _, id := range cfg.UserIDs { + if id == userID { + return true + } + } + return false +} + +func (ra *ResourceAuth) parseVisitorCookie(r *http.Request, resourceType string, resourceID uint) (*VisitorClaims, bool) { + cookie, err := r.Cookie(visitorCookie) + if err != nil || cookie.Value == "" { + return nil, false + } + claims, err := ra.parseVisitorToken(cookie.Value) + if err != nil { + return nil, false + } + if claims.ResourceType != resourceType || claims.ResourceID != resourceID { + return nil, false + } + return claims, true +} + +func (ra *ResourceAuth) signVisitorToken(userID uint, resourceType string, resourceID uint, ttlSeconds int) (string, error) { + if ttlSeconds <= 0 { + ttlSeconds = 7200 + } + claims := VisitorClaims{ + UserID: userID, + ResourceType: resourceType, + ResourceID: resourceID, + RegisteredClaims: jwt.RegisteredClaims{ + ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Duration(ttlSeconds) * time.Second)), + IssuedAt: jwt.NewNumericDate(time.Now()), + }, + } + token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + return token.SignedString([]byte(ra.jwtSecret)) +} + +func (ra *ResourceAuth) parseVisitorToken(tokenStr string) (*VisitorClaims, error) { + token, err := jwt.ParseWithClaims(tokenStr, &VisitorClaims{}, func(t *jwt.Token) (interface{}, error) { + return []byte(ra.jwtSecret), nil + }) + if err != nil { + return nil, err + } + claims, ok := token.Claims.(*VisitorClaims) + if !ok || !token.Valid { + return nil, errors.New("invalid token") + } + return claims, nil +} + +func (ra *ResourceAuth) renderVisitorLogin(w http.ResponseWriter, r *http.Request, cfg VisitorConfig, errMsg string) { + redirect := SafeRedirectPath(r.URL.Query().Get("redirect")) + errHTML := "" + if errMsg != "" { + errHTML = fmt.Sprintf(`

%s

`, html.EscapeString(errMsg)) + } + page := fmt.Sprintf(` + + + + +登录验证 + + + +
+

登录验证

+

此资源已开启访客登录,请使用分配的账号访问。

+%s +
+ + + + + + +
+
+ +`, errHTML, visitorLoginPath, html.EscapeString(redirect)) + w.Header().Set("Content-Type", "text/html; charset=utf-8") + w.WriteHeader(http.StatusOK) + _, _ = w.Write([]byte(page)) +} + +func (ra *ResourceAuth) renderVisitorLoginBlocked(w http.ResponseWriter, r *http.Request, _ VisitorConfig, retryAfter time.Duration) { + redirect := SafeRedirectPath(r.URL.Query().Get("redirect")) + minutes := int(retryAfter.Minutes()) + if minutes < 1 { + minutes = 1 + } + msg := fmt.Sprintf("登录尝试次数过多,请 %d 分钟后再试", minutes) + if retryAfter < time.Minute { + secs := int(retryAfter.Seconds()) + if secs < 1 { + secs = 1 + } + msg = fmt.Sprintf("登录尝试次数过多,请 %d 秒后再试", secs) + } + retrySecs := int(retryAfter.Seconds()) + 1 + if retrySecs < 1 { + retrySecs = 1 + } + w.Header().Set("Retry-After", strconv.Itoa(retrySecs)) + loginURL := visitorLoginPath + "?redirect=" + url.QueryEscape(redirect) + page := fmt.Sprintf(` + + + + +登录验证 + + + +
+

登录验证

+

此资源已开启访客登录,请使用分配的账号访问。

+

%s

+

稍后再试

+
+ +`, html.EscapeString(msg), html.EscapeString(loginURL)) + w.Header().Set("Content-Type", "text/html; charset=utf-8") + w.WriteHeader(http.StatusTooManyRequests) + _, _ = w.Write([]byte(page)) +} + +func GetVisitorConfig(c *cache.Manager, resourceType string, resourceID uint) (VisitorConfig, []uint, bool) { + switch resourceType { + case "host": + h, ok := c.GetHost(resourceID) + if !ok { + return VisitorConfig{}, nil, false + } + cfg := visitorConfigFromHost(h) + ids, _ := c.GetResourceVisitorIDs(resourceType, resourceID) + return cfg, ids, true + case "tunnel": + t, ok := c.GetTunnel(resourceID) + if !ok { + return VisitorConfig{}, nil, false + } + cfg := visitorConfigFromTunnel(t) + ids, _ := c.GetResourceVisitorIDs(resourceType, resourceID) + return cfg, ids, true + default: + return VisitorConfig{}, nil, false + } +} diff --git a/internal/auth/visitor_log.go b/internal/auth/visitor_log.go new file mode 100644 index 0000000..e8402bc --- /dev/null +++ b/internal/auth/visitor_log.go @@ -0,0 +1,53 @@ +package auth + +import ( + "net/http" + "path" + "strings" + + "github.com/wormhole/wormhole/internal/store" +) + +func shouldLogVisitorAccess(reqPath string) bool { + if reqPath == visitorLoginPath { + return false + } + base := strings.Split(reqPath, "?")[0] + ext := strings.ToLower(path.Ext(base)) + switch ext { + case ".js", ".css", ".ico", ".png", ".jpg", ".jpeg", ".gif", ".webp", ".svg", + ".woff", ".woff2", ".ttf", ".eot", ".map", ".wasm": + return false + } + return true +} + +func (ra *ResourceAuth) logVisitorAccess(userID uint, resourceType string, resourceID uint, action string, r *http.Request) { + if ra.store == nil { + return + } + reqPath := r.URL.RequestURI() + if action == "access" && !shouldLogVisitorAccess(r.URL.Path) { + return + } + if len(reqPath) > 512 { + reqPath = reqPath[:512] + } + ua := r.UserAgent() + if len(ua) > 256 { + ua = ua[:256] + } + entry := &store.VisitorAccessLog{ + UserID: userID, + ResourceType: resourceType, + ResourceID: resourceID, + Action: action, + Method: r.Method, + Path: reqPath, + IP: ExtractRemoteIP(r), + UserAgent: ua, + } + go func() { + _ = ra.store.AppendVisitorAccessLog(entry) + }() +} diff --git a/internal/bridge/bridge.go b/internal/bridge/bridge.go new file mode 100644 index 0000000..768d58c --- /dev/null +++ b/internal/bridge/bridge.go @@ -0,0 +1,318 @@ +package bridge + +import ( + "crypto/tls" + "fmt" + "io" + "log" + "net" + "sync" + "sync/atomic" + "time" + + "github.com/xtaci/smux" + "github.com/wormhole/wormhole/internal/cache" + "github.com/wormhole/wormhole/internal/protocol" + "github.com/wormhole/wormhole/internal/store" +) + +type AgentSession struct { + ClientID uint + Version string + conn net.Conn + smux *smux.Session + mu sync.Mutex + closed atomic.Bool + activeConns atomic.Int32 +} + +type Bridge struct { + cache *cache.Manager + store *store.Store + mu sync.RWMutex + agents map[uint]*AgentSession + listener net.Listener +} + +func New(c *cache.Manager, st *store.Store) *Bridge { + return &Bridge{ + cache: c, + store: st, + agents: make(map[uint]*AgentSession), + } +} + +func (b *Bridge) Start(addr string, certFile, keyFile string) error { + var ln net.Listener + var err error + if certFile != "" && keyFile != "" { + cert, err := tls.LoadX509KeyPair(certFile, keyFile) + if err != nil { + return fmt.Errorf("load bridge tls cert: %w", err) + } + ln, err = tls.Listen("tcp", addr, &tls.Config{ + Certificates: []tls.Certificate{cert}, + MinVersion: tls.VersionTLS12, + }) + if err != nil { + return err + } + log.Printf("[bridge] listening on %s (TLS)", addr) + } else { + ln, err = net.Listen("tcp", addr) + if err != nil { + return err + } + log.Printf("[bridge] listening on %s (plain TCP, configure TLS cert for production)", addr) + } + b.listener = ln + go b.acceptLoop() + b.startWatchdog() + return nil +} + +func (b *Bridge) Shutdown() error { + if b.listener != nil { + return b.listener.Close() + } + return nil +} + +func (b *Bridge) acceptLoop() { + for { + conn, err := b.listener.Accept() + if err != nil { + return + } + go b.handleConn(conn) + } +} + +func (b *Bridge) validateClient(client *store.Client) error { + if !client.Status { + return fmt.Errorf("client disabled") + } + if client.ExpireAt != nil && time.Now().After(*client.ExpireAt) { + return fmt.Errorf("client expired") + } + return nil +} + +func (b *Bridge) handleConn(conn net.Conn) { + defer conn.Close() + SetTCPKeepAlive(conn) + msgType, body, err := protocol.ReadMessage(conn) + if err != nil { + log.Printf("[bridge] read register failed: %v", err) + return + } + if msgType != protocol.MsgRegister { + return + } + reg, err := protocol.ParseRegister(body) + if err != nil { + return + } + client, ok := b.cache.GetClientByKey(reg.VerifyKey) + if !ok { + _ = protocol.WriteMessage(conn, protocol.MsgRegisterAck, protocol.RegisterAckPayload{ + OK: false, + Message: "invalid verify key", + }) + return + } + if err := b.validateClient(client); err != nil { + _ = protocol.WriteMessage(conn, protocol.MsgRegisterAck, protocol.RegisterAckPayload{ + OK: false, + Message: err.Error(), + }) + return + } + if err := protocol.WriteMessage(conn, protocol.MsgRegisterAck, protocol.RegisterAckPayload{ + OK: true, + ClientID: client.ID, + Message: "registered", + }); err != nil { + return + } + + session, err := smux.Client(conn, smuxConfig()) + if err != nil { + log.Printf("[bridge] smux client failed: %v", err) + return + } + + agent := &AgentSession{ + ClientID: client.ID, + Version: reg.Version, + conn: conn, + smux: session, + } + b.mu.Lock() + if old, exists := b.agents[client.ID]; exists { + old.Close() + } + b.agents[client.ID] = agent + b.mu.Unlock() + + b.cache.SetClientOnline(client.ID, reg.Version) + log.Printf("[bridge] client %d online (version=%s)", client.ID, reg.Version) + + b.controlLoop(agent) + + b.mu.Lock() + delete(b.agents, client.ID) + b.mu.Unlock() + b.cache.SetClientOffline(client.ID) + log.Printf("[bridge] client %d offline", client.ID) +} + +func (b *Bridge) controlLoop(agent *AgentSession) { + for { + stream, err := agent.smux.AcceptStream() + if err != nil { + agent.Close() + return + } + go b.handleControlStream(agent, stream) + } +} + +func (b *Bridge) handleControlStream(agent *AgentSession, stream *smux.Stream) { + defer stream.Close() + msgType, body, err := protocol.ReadMessage(stream) + if err != nil { + return + } + switch msgType { + case protocol.MsgPing: + b.cache.TouchAgent(agent.ClientID) + _ = protocol.WriteMessage(stream, protocol.MsgPong, nil) + case protocol.MsgClose: + agent.Close() + } + _ = body +} + +func (a *AgentSession) Close() { + if a.closed.Swap(true) { + return + } + if a.smux != nil { + _ = a.smux.Close() + } + if a.conn != nil { + _ = a.conn.Close() + } +} + +func (b *Bridge) OpenStream(clientID uint, meta *protocol.LinkMeta) (net.Conn, error) { + client, err := b.store.GetClientByID(clientID) + if err != nil { + return nil, fmt.Errorf("client %d not found", clientID) + } + if err := b.validateClient(client); err != nil { + return nil, err + } + + b.mu.RLock() + agent, ok := b.agents[clientID] + b.mu.RUnlock() + if !ok { + return nil, fmt.Errorf("client %d offline", clientID) + } + if agent.closed.Load() { + return nil, fmt.Errorf("client %d session closed", clientID) + } + if client.MaxConn > 0 && int(agent.activeConns.Load()) >= client.MaxConn { + return nil, fmt.Errorf("client %d max connections reached", clientID) + } + + stream, err := agent.smux.OpenStream() + if err != nil { + return nil, err + } + if err := protocol.WriteMessage(stream, protocol.MsgOpenStream, meta); err != nil { + stream.Close() + return nil, err + } + msgType, _, err := protocol.ReadMessage(stream) + if err != nil { + stream.Close() + return nil, err + } + if msgType != protocol.MsgStreamReady { + stream.Close() + return nil, fmt.Errorf("stream not ready") + } + + agent.activeConns.Add(1) + var wrapped net.Conn = &trackedConn{ + Conn: stream, + onClose: func() { agent.activeConns.Add(-1) }, + } + if client.RateLimit > 0 { + wrapped = newRateLimitedConn(wrapped, client.RateLimit*1024) + } + return wrapped, nil +} + +func (b *Bridge) IsOnline(clientID uint) bool { + b.mu.RLock() + defer b.mu.RUnlock() + _, ok := b.agents[clientID] + return ok +} + +func (b *Bridge) OnlineCount() int { + b.mu.RLock() + defer b.mu.RUnlock() + return len(b.agents) +} + +type trackedConn struct { + net.Conn + onClose func() + once sync.Once +} + +func (c *trackedConn) Close() error { + c.once.Do(c.onClose) + return c.Conn.Close() +} + +func CopyBoth(a, b net.Conn) (inlet, export int64) { + var inVal, outVal int64 + done := make(chan struct{}, 2) + go func() { + n, _ := io.Copy(b, a) + atomic.AddInt64(&outVal, n) + done <- struct{}{} + }() + go func() { + n, _ := io.Copy(a, b) + atomic.AddInt64(&inVal, n) + done <- struct{}{} + }() + <-done + <-done + return atomic.LoadInt64(&inVal), atomic.LoadInt64(&outVal) +} + +func CopyBothIO(a io.ReadWriteCloser, b io.ReadWriteCloser) (inlet, export int64) { + var inVal, outVal int64 + done := make(chan struct{}, 2) + go func() { + n, _ := io.Copy(b, a) + atomic.AddInt64(&outVal, n) + done <- struct{}{} + }() + go func() { + n, _ := io.Copy(a, b) + atomic.AddInt64(&inVal, n) + done <- struct{}{} + }() + <-done + <-done + return atomic.LoadInt64(&inVal), atomic.LoadInt64(&outVal) +} diff --git a/internal/bridge/keepalive.go b/internal/bridge/keepalive.go new file mode 100644 index 0000000..def03f3 --- /dev/null +++ b/internal/bridge/keepalive.go @@ -0,0 +1,46 @@ +package bridge + +import ( + "crypto/tls" + "net" + "time" + + "github.com/xtaci/smux" +) + +const ( + // HeartbeatInterval is the application-level ping interval (agent and server probe). + HeartbeatInterval = 30 * time.Second + // HeartbeatTimeout evicts a session when no ping/pong for this duration. + HeartbeatTimeout = 90 * time.Second + // WatchdogInterval is how often the server checks agent heartbeats. + WatchdogInterval = 15 * time.Second + // ServerProbeAfter triggers a server-initiated ping when agent has been silent. + ServerProbeAfter = 45 * time.Second +) + +func SmuxConfig() *smux.Config { + return smuxConfig() +} + +func smuxConfig() *smux.Config { + cfg := smux.DefaultConfig() + cfg.KeepAliveInterval = 10 * time.Second + cfg.KeepAliveTimeout = 30 * time.Second + return cfg +} + +func SetTCPKeepAlive(conn net.Conn) { + for { + switch c := conn.(type) { + case *net.TCPConn: + _ = c.SetKeepAlive(true) + _ = c.SetKeepAlivePeriod(30 * time.Second) + return + case *tls.Conn: + conn = c.NetConn() + default: + return + } + } +} diff --git a/internal/bridge/ratelimit.go b/internal/bridge/ratelimit.go new file mode 100644 index 0000000..1297ef8 --- /dev/null +++ b/internal/bridge/ratelimit.go @@ -0,0 +1,74 @@ +package bridge + +import ( + "net" + "sync" + "time" +) + +// rateLimitedConn limits read/write throughput to bytesPerSec (simple token bucket). +type rateLimitedConn struct { + net.Conn + bytesPerSec int64 + mu sync.Mutex + allowance float64 + lastCheck time.Time +} + +func newRateLimitedConn(conn net.Conn, bytesPerSec int64) net.Conn { + if bytesPerSec <= 0 { + return conn + } + return &rateLimitedConn{ + Conn: conn, + bytesPerSec: bytesPerSec, + lastCheck: time.Now(), + allowance: float64(bytesPerSec), + } +} + +func (c *rateLimitedConn) wait(n int) { + if c.bytesPerSec <= 0 || n <= 0 { + return + } + c.mu.Lock() + defer c.mu.Unlock() + now := time.Now() + elapsed := now.Sub(c.lastCheck).Seconds() + c.lastCheck = now + c.allowance += elapsed * float64(c.bytesPerSec) + if c.allowance > float64(c.bytesPerSec)*2 { + c.allowance = float64(c.bytesPerSec) * 2 + } + for float64(n) > c.allowance { + deficit := float64(n) - c.allowance + sleep := time.Duration(deficit/float64(c.bytesPerSec)*1e9) * time.Nanosecond + if sleep < time.Millisecond { + sleep = time.Millisecond + } + c.mu.Unlock() + time.Sleep(sleep) + c.mu.Lock() + now = time.Now() + elapsed = now.Sub(c.lastCheck).Seconds() + c.lastCheck = now + c.allowance += elapsed * float64(c.bytesPerSec) + if c.allowance > float64(c.bytesPerSec)*2 { + c.allowance = float64(c.bytesPerSec) * 2 + } + } + c.allowance -= float64(n) +} + +func (c *rateLimitedConn) Read(b []byte) (int, error) { + n, err := c.Conn.Read(b) + if n > 0 { + c.wait(n) + } + return n, err +} + +func (c *rateLimitedConn) Write(b []byte) (int, error) { + c.wait(len(b)) + return c.Conn.Write(b) +} diff --git a/internal/bridge/watchdog.go b/internal/bridge/watchdog.go new file mode 100644 index 0000000..0e0ff71 --- /dev/null +++ b/internal/bridge/watchdog.go @@ -0,0 +1,67 @@ +package bridge + +import ( + "log" + "time" + + "github.com/wormhole/wormhole/internal/protocol" +) + +func (b *Bridge) startWatchdog() { + go func() { + ticker := time.NewTicker(WatchdogInterval) + defer ticker.Stop() + for range ticker.C { + b.runWatchdog() + } + }() +} + +func (b *Bridge) runWatchdog() { + now := time.Now() + b.mu.RLock() + sessions := make([]*AgentSession, 0, len(b.agents)) + for _, agent := range b.agents { + sessions = append(sessions, agent) + } + b.mu.RUnlock() + + for _, agent := range sessions { + if agent.closed.Load() { + continue + } + lastPing, ok := b.cache.AgentLastPing(agent.ClientID) + if !ok { + continue + } + since := now.Sub(lastPing) + if since > HeartbeatTimeout { + log.Printf("[bridge] client %d heartbeat timeout (%v), closing", agent.ClientID, since.Round(time.Second)) + agent.Close() + continue + } + if since > ServerProbeAfter { + go b.probeAgent(agent) + } + } +} + +func (b *Bridge) probeAgent(agent *AgentSession) { + if agent.closed.Load() { + return + } + stream, err := agent.smux.OpenStream() + if err != nil { + return + } + defer stream.Close() + + if err := protocol.WriteMessage(stream, protocol.MsgPing, nil); err != nil { + return + } + msgType, _, err := protocol.ReadMessage(stream) + if err != nil || msgType != protocol.MsgPong { + return + } + b.cache.TouchAgent(agent.ClientID) +} diff --git a/internal/cache/cache.go b/internal/cache/cache.go new file mode 100644 index 0000000..014273a --- /dev/null +++ b/internal/cache/cache.go @@ -0,0 +1,605 @@ +package cache + +import ( + "net" + "regexp" + "strconv" + "strings" + "sync" + "sync/atomic" + "time" + + "github.com/wormhole/wormhole/internal/store" +) + +type OnlineAgent struct { + ClientID uint + Version string + ConnectedAt time.Time + LastPing time.Time +} + +type CompiledRule struct { + Rule store.IPRule + CIDR *net.IPNet + Regex *regexp.Regexp + ExactIP net.IP +} + +type FlowDelta struct { + Inlet int64 + Export int64 +} + +type Manager struct { + mu sync.RWMutex + + clients map[uint]*store.Client + clientsByKey map[string]*store.Client + tunnels map[uint]*store.Tunnel + tunnelsByPort map[string]*store.Tunnel + hosts map[uint]*store.Host + hostIndex []hostEntry + forwards map[uint]*store.DomainForward + forwardIndex []forwardEntry + + onlineAgents map[uint]*OnlineAgent + + ipRules []CompiledRule + authPolicies map[string]*store.AuthPolicy + visitorBindings map[string][]uint + + flowCounters map[string]*FlowDelta +} + +type hostEntry struct { + host *store.Host +} + +type forwardEntry struct { + forward *store.DomainForward +} + +func NewManager() *Manager { + return &Manager{ + clients: make(map[uint]*store.Client), + clientsByKey: make(map[string]*store.Client), + tunnels: make(map[uint]*store.Tunnel), + tunnelsByPort: make(map[string]*store.Tunnel), + hosts: make(map[uint]*store.Host), + forwards: make(map[uint]*store.DomainForward), + onlineAgents: make(map[uint]*OnlineAgent), + authPolicies: make(map[string]*store.AuthPolicy), + visitorBindings: make(map[string][]uint), + flowCounters: make(map[string]*FlowDelta), + } +} + +func (m *Manager) ReloadAll(st *store.Store) error { + clients, err := st.ListClients(0, true) + if err != nil { + return err + } + tunnels, err := st.ListTunnels(0, 0, true) + if err != nil { + return err + } + hosts, err := st.ListHosts(0, 0, true) + if err != nil { + return err + } + rules, err := st.ListIPRules("", 0) + if err != nil { + return err + } + policies, err := st.ListAuthPolicies("", 0) + if err != nil { + return err + } + visitors, err := st.ListAllResourceVisitors() + if err != nil { + return err + } + forwards, err := st.ListDomainForwards() + if err != nil { + return err + } + + m.mu.Lock() + defer m.mu.Unlock() + + m.clients = make(map[uint]*store.Client) + m.clientsByKey = make(map[string]*store.Client) + for i := range clients { + c := clients[i] + m.clients[c.ID] = &c + m.clientsByKey[c.VerifyKey] = &c + } + + m.tunnels = make(map[uint]*store.Tunnel) + m.tunnelsByPort = make(map[string]*store.Tunnel) + for i := range tunnels { + t := tunnels[i] + m.tunnels[t.ID] = &t + key := tunnelPortKey(t.ListenIP, t.ListenPort) + m.tunnelsByPort[key] = &t + } + + m.hosts = make(map[uint]*store.Host) + m.hostIndex = nil + for i := range hosts { + h := hosts[i] + m.hosts[h.ID] = &h + m.hostIndex = append(m.hostIndex, hostEntry{host: &h}) + } + + m.forwards = make(map[uint]*store.DomainForward) + m.forwardIndex = nil + for i := range forwards { + f := forwards[i] + m.forwards[f.ID] = &f + m.forwardIndex = append(m.forwardIndex, forwardEntry{forward: &f}) + } + + m.ipRules = compileRules(rules) + + m.authPolicies = make(map[string]*store.AuthPolicy) + for i := range policies { + p := policies[i] + key := authPolicyKey(p.ResourceType, p.ResourceID) + m.authPolicies[key] = &p + } + + m.visitorBindings = make(map[string][]uint) + for i := range visitors { + v := visitors[i] + key := authPolicyKey(v.ResourceType, v.ResourceID) + m.visitorBindings[key] = append(m.visitorBindings[key], v.UserID) + } + return nil +} + +func tunnelPortKey(ip string, port int) string { + if ip == "" { + ip = "0.0.0.0" + } + return ip + ":" + strconv.Itoa(port) +} + +func authPolicyKey(resourceType string, resourceID uint) string { + return resourceType + ":" + itoa(resourceID) +} + +func itoa(n uint) string { + if n == 0 { + return "0" + } + var b [20]byte + i := len(b) + for n > 0 { + i-- + b[i] = byte('0' + n%10) + n /= 10 + } + return string(b[i:]) +} + +func compileRules(rules []store.IPRule) []CompiledRule { + out := make([]CompiledRule, 0, len(rules)) + for _, r := range rules { + cr := CompiledRule{Rule: r} + switch r.PatternKind { + case "cidr": + _, network, err := net.ParseCIDR(r.Pattern) + if err == nil { + cr.CIDR = network + } + case "regex": + re, err := regexp.Compile(r.Pattern) + if err == nil { + cr.Regex = re + } + default: + cr.ExactIP = net.ParseIP(r.Pattern) + } + out = append(out, cr) + } + return out +} + +func (m *Manager) SetClientOnline(clientID uint, version string) { + m.mu.Lock() + defer m.mu.Unlock() + now := time.Now() + m.onlineAgents[clientID] = &OnlineAgent{ + ClientID: clientID, + Version: version, + ConnectedAt: now, + LastPing: now, + } +} + +func (m *Manager) SetClientOffline(clientID uint) { + m.mu.Lock() + defer m.mu.Unlock() + delete(m.onlineAgents, clientID) +} + +func (m *Manager) TouchAgent(clientID uint) { + m.mu.Lock() + defer m.mu.Unlock() + if a, ok := m.onlineAgents[clientID]; ok { + a.LastPing = time.Now() + } +} + +func (m *Manager) AgentLastPing(clientID uint) (time.Time, bool) { + m.mu.RLock() + defer m.mu.RUnlock() + a, ok := m.onlineAgents[clientID] + if !ok { + return time.Time{}, false + } + return a.LastPing, true +} + +func (m *Manager) IsOnline(clientID uint) bool { + m.mu.RLock() + defer m.mu.RUnlock() + _, ok := m.onlineAgents[clientID] + return ok +} + +func (m *Manager) OnlineCount() int { + m.mu.RLock() + defer m.mu.RUnlock() + return len(m.onlineAgents) +} + +func (m *Manager) GetClientByKey(key string) (*store.Client, bool) { + m.mu.RLock() + defer m.mu.RUnlock() + c, ok := m.clientsByKey[key] + return c, ok +} + +func (m *Manager) GetClient(id uint) (*store.Client, bool) { + m.mu.RLock() + defer m.mu.RUnlock() + c, ok := m.clients[id] + return c, ok +} + +func (m *Manager) GetTunnel(id uint) (*store.Tunnel, bool) { + m.mu.RLock() + defer m.mu.RUnlock() + t, ok := m.tunnels[id] + return t, ok +} + +func (m *Manager) GetHost(id uint) (*store.Host, bool) { + m.mu.RLock() + defer m.mu.RUnlock() + h, ok := m.hosts[id] + return h, ok +} + +func (m *Manager) MatchHost(hostHeader, path, scheme string) *store.Host { + m.mu.RLock() + defer m.mu.RUnlock() + + hostHeader = strings.ToLower(strings.Split(hostHeader, ":")[0]) + var best *store.Host + bestLen := -1 + + for _, entry := range m.hostIndex { + h := entry.host + if !h.Status { + continue + } + if h.Scheme != "all" && h.Scheme != scheme { + continue + } + if !matchHostPattern(h.Host, hostHeader) { + continue + } + loc := h.Location + if loc == "" { + loc = "/" + } + if !strings.HasPrefix(path, loc) { + continue + } + if len(loc) > bestLen { + best = h + bestLen = len(loc) + } + } + return best +} + +func (m *Manager) MatchDomainForward(hostHeader, path, scheme string) *store.DomainForward { + m.mu.RLock() + defer m.mu.RUnlock() + + hostHeader = strings.ToLower(strings.Split(hostHeader, ":")[0]) + var best *store.DomainForward + bestLen := -1 + + for _, entry := range m.forwardIndex { + f := entry.forward + if !f.Status { + continue + } + if f.SourceScheme != "all" && f.SourceScheme != scheme { + continue + } + if !matchHostPattern(f.SourceHost, hostHeader) { + continue + } + loc := f.SourceLocation + if loc == "" { + loc = "/" + } + if !strings.HasPrefix(path, loc) { + continue + } + if len(loc) > bestLen { + best = f + bestLen = len(loc) + } + } + return best +} + +func matchHostPattern(pattern, host string) bool { + pattern = strings.ToLower(pattern) + if pattern == host { + return true + } + if strings.HasPrefix(pattern, "*.") { + suffix := pattern[1:] + return strings.HasSuffix(host, suffix) || host == pattern[2:] + } + return false +} + +func (m *Manager) ReloadIPRules(st *store.Store) error { + rules, err := st.ListIPRules("", 0) + if err != nil { + return err + } + m.mu.Lock() + m.ipRules = compileRules(rules) + m.mu.Unlock() + return nil +} + +func (m *Manager) AllowIP(ipStr string, scopes []Scope) bool { + ip := net.ParseIP(ipStr) + if ip == nil { + return false + } + m.mu.RLock() + defer m.mu.RUnlock() + + var denyMatched, allowMatched bool + hasAllowRules := false + + for _, cr := range m.ipRules { + if !scopeMatch(cr.Rule, scopes) { + continue + } + if !ruleMatch(cr, ip, ipStr) { + continue + } + if cr.Rule.Type == "deny" { + denyMatched = true + } + if cr.Rule.Type == "allow" { + allowMatched = true + hasAllowRules = true + } + } + + if denyMatched { + return false + } + if hasAllowRules { + return allowMatched + } + return true +} + +type Scope struct { + Kind string + ResourceID uint +} + +func scopeMatch(rule store.IPRule, scopes []Scope) bool { + if rule.Scope == "global" { + return true + } + for _, s := range scopes { + if rule.Scope == s.Kind && rule.ResourceID == s.ResourceID { + return true + } + } + return false +} + +func ruleMatch(cr CompiledRule, ip net.IP, ipStr string) bool { + switch cr.Rule.PatternKind { + case "cidr": + return cr.CIDR != nil && cr.CIDR.Contains(ip) + case "regex": + return cr.Regex != nil && cr.Regex.MatchString(ipStr) + default: + return cr.ExactIP != nil && cr.ExactIP.Equal(ip) + } +} + +func (m *Manager) GetAuthPolicy(resourceType string, resourceID uint) (*store.AuthPolicy, bool) { + m.mu.RLock() + defer m.mu.RUnlock() + p, ok := m.authPolicies[authPolicyKey(resourceType, resourceID)] + return p, ok +} + +func (m *Manager) GetResourceVisitorIDs(resourceType string, resourceID uint) ([]uint, bool) { + m.mu.RLock() + defer m.mu.RUnlock() + ids, ok := m.visitorBindings[authPolicyKey(resourceType, resourceID)] + if !ok { + return nil, false + } + out := make([]uint, len(ids)) + copy(out, ids) + return out, true +} + +func (m *Manager) SetResourceVisitors(resourceType string, resourceID uint, userIDs []uint) { + m.mu.Lock() + defer m.mu.Unlock() + key := authPolicyKey(resourceType, resourceID) + if len(userIDs) == 0 { + delete(m.visitorBindings, key) + return + } + copied := make([]uint, len(userIDs)) + copy(copied, userIDs) + m.visitorBindings[key] = copied +} + +func (m *Manager) DeleteResourceVisitors(resourceType string, resourceID uint) { + m.mu.Lock() + defer m.mu.Unlock() + delete(m.visitorBindings, authPolicyKey(resourceType, resourceID)) +} + +func (m *Manager) AddFlow(resourceType string, resourceID uint, inlet, export int64) { + key := resourceType + ":" + itoa(resourceID) + m.mu.Lock() + defer m.mu.Unlock() + delta, ok := m.flowCounters[key] + if !ok { + delta = &FlowDelta{} + m.flowCounters[key] = delta + } + atomic.AddInt64(&delta.Inlet, inlet) + atomic.AddInt64(&delta.Export, export) +} + +func (m *Manager) DrainFlow() map[string]FlowDelta { + m.mu.Lock() + defer m.mu.Unlock() + out := make(map[string]FlowDelta, len(m.flowCounters)) + for k, v := range m.flowCounters { + inlet := atomic.SwapInt64(&v.Inlet, 0) + export := atomic.SwapInt64(&v.Export, 0) + if inlet > 0 || export > 0 { + out[k] = FlowDelta{Inlet: inlet, Export: export} + } + } + return out +} + +func (m *Manager) UpsertClient(c *store.Client) { + m.mu.Lock() + defer m.mu.Unlock() + m.clients[c.ID] = c + m.clientsByKey[c.VerifyKey] = c +} + +func (m *Manager) DeleteClient(id uint) { + m.mu.Lock() + defer m.mu.Unlock() + if c, ok := m.clients[id]; ok { + delete(m.clientsByKey, c.VerifyKey) + } + delete(m.clients, id) + delete(m.onlineAgents, id) +} + +func (m *Manager) UpsertTunnel(t *store.Tunnel) { + m.mu.Lock() + defer m.mu.Unlock() + m.tunnels[t.ID] = t + m.tunnelsByPort[tunnelPortKey(t.ListenIP, t.ListenPort)] = t +} + +func (m *Manager) DeleteTunnel(id uint) { + m.mu.Lock() + defer m.mu.Unlock() + if t, ok := m.tunnels[id]; ok { + delete(m.tunnelsByPort, tunnelPortKey(t.ListenIP, t.ListenPort)) + } + delete(m.tunnels, id) +} + +func (m *Manager) UpsertHost(h *store.Host) { + m.mu.Lock() + defer m.mu.Unlock() + m.hosts[h.ID] = h + m.hostIndex = nil + for _, host := range m.hosts { + m.hostIndex = append(m.hostIndex, hostEntry{host: host}) + } +} + +func (m *Manager) DeleteHost(id uint) { + m.mu.Lock() + defer m.mu.Unlock() + delete(m.hosts, id) + m.hostIndex = nil + for _, host := range m.hosts { + m.hostIndex = append(m.hostIndex, hostEntry{host: host}) + } +} + +func (m *Manager) UpsertDomainForward(f *store.DomainForward) { + m.mu.Lock() + defer m.mu.Unlock() + m.forwards[f.ID] = f + m.forwardIndex = nil + for _, fwd := range m.forwards { + m.forwardIndex = append(m.forwardIndex, forwardEntry{forward: fwd}) + } +} + +func (m *Manager) DeleteDomainForward(id uint) { + m.mu.Lock() + defer m.mu.Unlock() + delete(m.forwards, id) + m.forwardIndex = nil + for _, fwd := range m.forwards { + m.forwardIndex = append(m.forwardIndex, forwardEntry{forward: fwd}) + } +} + +func (m *Manager) GetDomainForward(id uint) (*store.DomainForward, bool) { + m.mu.RLock() + defer m.mu.RUnlock() + f, ok := m.forwards[id] + return f, ok +} + +func (m *Manager) ListEnabledTunnels() []*store.Tunnel { + m.mu.RLock() + defer m.mu.RUnlock() + var out []*store.Tunnel + for _, t := range m.tunnels { + if t.Status { + out = append(out, t) + } + } + return out +} + +func (m *Manager) SetTunnelRunStatus(id uint, running bool) { + m.mu.Lock() + defer m.mu.Unlock() + if t, ok := m.tunnels[id]; ok { + t.RunStatus = running + } +} diff --git a/internal/config/config.go b/internal/config/config.go new file mode 100644 index 0000000..6562cc2 --- /dev/null +++ b/internal/config/config.go @@ -0,0 +1,200 @@ +package config + +import ( + "crypto/rand" + "encoding/hex" + "fmt" + "os" + "time" + + "gopkg.in/yaml.v3" +) + +const DefaultDBPath = "./data/wormhole.db" + +type Config struct { + Server ServerConfig `yaml:"server" json:"server"` + Database DatabaseConfig `yaml:"database" json:"database"` + Auth AuthConfig `yaml:"auth" json:"auth"` + Metrics MetricsConfig `yaml:"metrics" json:"metrics"` +} + +type ServerConfig struct { + BridgeAddr string `yaml:"bridge_addr" json:"bridge_addr"` + HTTPAddr string `yaml:"http_addr" json:"http_addr"` + HTTPProxyPort int `yaml:"http_proxy_port" json:"http_proxy_port"` + HTTPSProxyPort int `yaml:"https_proxy_port" json:"https_proxy_port"` + TLSCertFile string `yaml:"tls_cert_file" json:"tls_cert_file"` + TLSKeyFile string `yaml:"tls_key_file" json:"tls_key_file"` +} + +type DatabaseConfig struct { + Path string `yaml:"path" json:"path"` +} + +type AuthConfig struct { + JWTSecret string `yaml:"jwt_secret" json:"jwt_secret"` + TokenTTL time.Duration `yaml:"token_ttl" json:"token_ttl"` + LoginMaxAttempts int `yaml:"login_max_attempts" json:"login_max_attempts"` + LoginWindow time.Duration `yaml:"login_window" json:"login_window"` + LoginLockout time.Duration `yaml:"login_lockout" json:"login_lockout"` +} + +type MetricsConfig struct { + FlushInterval time.Duration `yaml:"flush_interval" json:"flush_interval"` +} + +// SettingsDTO is the API/UI representation of runtime settings. +type SettingsDTO struct { + Server ServerConfig `json:"server"` + Auth AuthSettings `json:"auth"` + Metrics struct { + FlushIntervalSec int `json:"flush_interval_sec"` + } `json:"metrics"` +} + +type AuthSettings struct { + JWTSecret string `json:"jwt_secret,omitempty"` + TokenTTLHours int `json:"token_ttl_hours"` + LoginMaxAttempts int `json:"login_max_attempts"` + LoginWindowMin int `json:"login_window_min"` + LoginLockoutMin int `json:"login_lockout_min"` +} + +func Default() *Config { + secret, _ := randomSecret(32) + return &Config{ + Server: ServerConfig{ + BridgeAddr: ":8528", + HTTPAddr: ":8529", + HTTPProxyPort: 8081, + HTTPSProxyPort: 8443, + }, + Database: DatabaseConfig{ + Path: DefaultDBPath, + }, + Auth: AuthConfig{ + JWTSecret: secret, + TokenTTL: 24 * time.Hour, + LoginMaxAttempts: 5, + LoginWindow: 5 * time.Minute, + LoginLockout: 15 * time.Minute, + }, + Metrics: MetricsConfig{ + FlushInterval: 30 * time.Second, + }, + } +} + +func randomSecret(n int) (string, error) { + b := make([]byte, n) + if _, err := rand.Read(b); err != nil { + return "wormhole-change-me-in-production", err + } + return hex.EncodeToString(b), nil +} + +func (c *Config) Normalize() { + if c.Server.BridgeAddr == "" { + c.Server.BridgeAddr = ":8528" + } + if c.Server.HTTPAddr == "" { + c.Server.HTTPAddr = ":8529" + } + if c.Server.HTTPProxyPort == 0 { + c.Server.HTTPProxyPort = 8081 + } + if c.Server.HTTPSProxyPort == 0 { + c.Server.HTTPSProxyPort = 8443 + } + if c.Database.Path == "" { + c.Database.Path = DefaultDBPath + } + if c.Auth.TokenTTL == 0 { + c.Auth.TokenTTL = 24 * time.Hour + } + if c.Auth.LoginMaxAttempts == 0 { + c.Auth.LoginMaxAttempts = 5 + } + if c.Auth.LoginWindow == 0 { + c.Auth.LoginWindow = 5 * time.Minute + } + if c.Auth.LoginLockout == 0 { + c.Auth.LoginLockout = 15 * time.Minute + } + if c.Auth.JWTSecret == "" { + secret, _ := randomSecret(32) + c.Auth.JWTSecret = secret + } + if c.Metrics.FlushInterval == 0 { + c.Metrics.FlushInterval = 30 * time.Second + } +} + +func (c *Config) ToDTO() SettingsDTO { + sec := int(c.Metrics.FlushInterval / time.Second) + if sec < 1 { + sec = 30 + } + dto := SettingsDTO{ + Server: c.Server, + Auth: AuthSettings{ + TokenTTLHours: int(c.Auth.TokenTTL / time.Hour), + LoginMaxAttempts: c.Auth.LoginMaxAttempts, + LoginWindowMin: int(c.Auth.LoginWindow / time.Minute), + LoginLockoutMin: int(c.Auth.LoginLockout / time.Minute), + }, + } + dto.Metrics.FlushIntervalSec = sec + return dto +} + +func SettingsFromDTO(d SettingsDTO, existing *Config) *Config { + cfg := Default() + if existing != nil { + *cfg = *existing + } + cfg.Server = d.Server + cfg.Auth.TokenTTL = time.Duration(d.Auth.TokenTTLHours) * time.Hour + cfg.Auth.LoginMaxAttempts = d.Auth.LoginMaxAttempts + cfg.Auth.LoginWindow = time.Duration(d.Auth.LoginWindowMin) * time.Minute + cfg.Auth.LoginLockout = time.Duration(d.Auth.LoginLockoutMin) * time.Minute + if d.Auth.JWTSecret != "" { + cfg.Auth.JWTSecret = d.Auth.JWTSecret + } + if d.Metrics.FlushIntervalSec > 0 { + cfg.Metrics.FlushInterval = time.Duration(d.Metrics.FlushIntervalSec) * time.Second + } + cfg.Normalize() + return cfg +} + +func (c *Config) Summary() string { + return fmt.Sprintf( + "http_addr=%s bridge_addr=%s http_proxy_port=%d https_proxy_port=%d db=%s", + c.Server.HTTPAddr, + c.Server.BridgeAddr, + c.Server.HTTPProxyPort, + c.Server.HTTPSProxyPort, + c.Database.Path, + ) +} + +// Load reads config from a YAML file (tests only). +func Load(path string) (*Config, error) { + if path == "" { + return nil, fmt.Errorf("config path required") + } + + data, err := os.ReadFile(path) + if err != nil { + return nil, err + } + + cfg := Default() + if err := yaml.Unmarshal(data, cfg); err != nil { + return nil, err + } + cfg.Normalize() + return cfg, nil +} diff --git a/internal/config/config_test.go b/internal/config/config_test.go new file mode 100644 index 0000000..06b8b65 --- /dev/null +++ b/internal/config/config_test.go @@ -0,0 +1,33 @@ +package config + +import ( + "os" + "path/filepath" + "testing" +) + +func TestLoadUsesFileValues(t *testing.T) { + dir := t.TempDir() + cfgPath := filepath.Join(dir, "wormhole.yaml") + content := []byte(`server: + bridge_addr: ":9528" + http_addr: ":9529" +database: + path: "./tmp.db" +auth: + jwt_secret: "test-secret" + token_ttl: 1h +metrics: + flush_interval: 10s +`) + if err := os.WriteFile(cfgPath, content, 0644); err != nil { + t.Fatal(err) + } + cfg, err := Load(cfgPath) + if err != nil { + t.Fatal(err) + } + if cfg.Server.BridgeAddr != ":9528" || cfg.Server.HTTPAddr != ":9529" { + t.Fatalf("server config not applied: %+v", cfg.Server) + } +} diff --git a/internal/forwardplugin/cookie_domain.go b/internal/forwardplugin/cookie_domain.go new file mode 100644 index 0000000..37340ca --- /dev/null +++ b/internal/forwardplugin/cookie_domain.go @@ -0,0 +1,86 @@ +package forwardplugin + +import ( + "encoding/json" + "fmt" + "net/http" + "strings" +) + +func init() { + Register("cookie_domain", newCookieDomainPlugin) +} + +type cookieDomainConfig struct { + From string `json:"from"` + To string `json:"to"` +} + +type cookieDomainPlugin struct { + from string + to string +} + +func newCookieDomainPlugin(raw json.RawMessage) (Plugin, error) { + var cfg cookieDomainConfig + if err := json.Unmarshal(raw, &cfg); err != nil { + return nil, fmt.Errorf("cookie_domain 配置无效") + } + return &cookieDomainPlugin{from: cfg.From, to: cfg.To}, nil +} + +func (p *cookieDomainPlugin) Type() string { return "cookie_domain" } + +func (p *cookieDomainPlugin) ValidateConfig(raw json.RawMessage) error { + var cfg cookieDomainConfig + if err := json.Unmarshal(raw, &cfg); err != nil { + return fmt.Errorf("cookie_domain 配置无效") + } + if strings.TrimSpace(cfg.From) == "" { + return fmt.Errorf("cookie_domain.from 不能为空") + } + if strings.TrimSpace(cfg.To) == "" { + return fmt.Errorf("cookie_domain.to 不能为空") + } + return nil +} + +func (p *cookieDomainPlugin) NeedsBody() bool { return false } + +func (p *cookieDomainPlugin) HandleRequest(_ *Context, _ *http.Request) (bool, error) { + return false, nil +} + +func (p *cookieDomainPlugin) HandleResponse(_ *Context, resp *BufferedResponse) error { + cookies := resp.Header.Values("Set-Cookie") + if len(cookies) == 0 { + return nil + } + resp.Header.Del("Set-Cookie") + for _, c := range cookies { + resp.Header.Add("Set-Cookie", rewriteCookieDomain(c, p.from, p.to)) + } + return nil +} + +func rewriteCookieDomain(cookie, from, to string) string { + parts := strings.Split(cookie, ";") + for i, part := range parts { + trimmed := strings.TrimSpace(part) + kv := strings.SplitN(trimmed, "=", 2) + if len(kv) != 2 { + continue + } + if strings.EqualFold(kv[0], "domain") { + val := strings.TrimSpace(kv[1]) + if val == from || strings.TrimPrefix(val, ".") == strings.TrimPrefix(from, ".") { + parts[i] = "Domain=" + to + } else { + parts[i] = trimmed + } + } else { + parts[i] = trimmed + } + } + return strings.Join(parts, "; ") +} diff --git a/internal/forwardplugin/metadata.go b/internal/forwardplugin/metadata.go new file mode 100644 index 0000000..897147f --- /dev/null +++ b/internal/forwardplugin/metadata.go @@ -0,0 +1,64 @@ +package forwardplugin + +type PluginTypeMeta struct { + Type string `json:"type"` + Label string `json:"label"` + Description string `json:"description"` + ConfigSchema interface{} `json:"config_schema"` + DefaultConfig interface{} `json:"default_config"` +} + +func ListPluginTypes() []PluginTypeMeta { + return []PluginTypeMeta{ + { + Type: "sub_filter", + Label: "内容替换", + Description: "按 MIME 类型对响应体做字符串替换", + ConfigSchema: map[string]interface{}{ + "filters": []map[string]string{{"from": "", "to": ""}}, + "types": []string{"text/html"}, + }, + DefaultConfig: map[string]interface{}{ + "filters": []map[string]string{{"from": "", "to": ""}}, + "types": []string{"text/html"}, + }, + }, + { + Type: "inject_js", + Label: "JS 注入", + Description: "在 HTML 前注入脚本", + ConfigSchema: map[string]interface{}{ + "script": "", + }, + DefaultConfig: map[string]interface{}{ + "script": "", + }, + }, + { + Type: "cookie_domain", + Label: "Cookie 域改写", + Description: "改写 Set-Cookie 的 Domain 属性", + ConfigSchema: map[string]interface{}{ + "from": "", + "to": "", + }, + DefaultConfig: map[string]interface{}{ + "from": ".example.com", + "to": ".proxy.com", + }, + }, + { + Type: "response_cache", + Label: "GET 响应缓存", + Description: "缓存上游原始 GET 响应(不含 Set-Cookie)", + ConfigSchema: map[string]interface{}{ + "max_mb": 0, + "ttl_sec": 300, + }, + DefaultConfig: map[string]interface{}{ + "max_mb": 50, + "ttl_sec": 300, + }, + }, + } +} diff --git a/internal/forwardplugin/plugin.go b/internal/forwardplugin/plugin.go new file mode 100644 index 0000000..feafd9e --- /dev/null +++ b/internal/forwardplugin/plugin.go @@ -0,0 +1,118 @@ +package forwardplugin + +import ( + "encoding/json" + "net/http" + "sync" +) + +type PluginEntry struct { + Type string `json:"type"` + Enabled bool `json:"enabled"` + Config json.RawMessage `json:"config"` +} + +type Plugin interface { + Type() string + ValidateConfig(raw json.RawMessage) error + NeedsBody() bool + HandleRequest(ctx *Context, req *http.Request) (shortCircuit bool, err error) + HandleResponse(ctx *Context, resp *BufferedResponse) error +} + +type PluginFactory func(config json.RawMessage) (Plugin, error) + +type RawStorer interface { + StoreRaw(ctx *Context, resp *BufferedResponse) +} + +var ( + registryMu sync.RWMutex + registry = map[string]PluginFactory{} +) + +func Register(typ string, factory PluginFactory) { + registryMu.Lock() + defer registryMu.Unlock() + registry[typ] = factory +} + +func getFactory(typ string) (PluginFactory, bool) { + registryMu.RLock() + defer registryMu.RUnlock() + f, ok := registry[typ] + return f, ok +} + +type Context struct { + ForwardID uint + ClientReq *http.Request + CachedResp *BufferedResponse +} + +type BufferedResponse struct { + StatusCode int + Header http.Header + Body []byte + FromCache bool +} + +func (r *BufferedResponse) Clone() *BufferedResponse { + if r == nil { + return nil + } + h := r.Header.Clone() + return &BufferedResponse{ + StatusCode: r.StatusCode, + Header: h, + Body: append([]byte(nil), r.Body...), + FromCache: r.FromCache, + } +} + +type Chain struct { + plugins []Plugin +} + +func (c *Chain) Empty() bool { + return c == nil || len(c.plugins) == 0 +} + +func (c *Chain) NeedsBody() bool { + for _, p := range c.plugins { + if p.NeedsBody() { + return true + } + } + return false +} + +func (c *Chain) HandleRequest(ctx *Context, req *http.Request) (bool, error) { + for _, p := range c.plugins { + short, err := p.HandleRequest(ctx, req) + if err != nil { + return false, err + } + if short { + return true, nil + } + } + return false, nil +} + +func (c *Chain) StoreRawResponses(ctx *Context, resp *BufferedResponse) { + for _, p := range c.plugins { + if st, ok := p.(RawStorer); ok { + st.StoreRaw(ctx, resp) + } + } +} + +func (c *Chain) HandleResponse(ctx *Context, resp *BufferedResponse) error { + for _, p := range c.plugins { + if err := p.HandleResponse(ctx, resp); err != nil { + return err + } + } + return nil +} diff --git a/internal/forwardplugin/plugin_inject.go b/internal/forwardplugin/plugin_inject.go new file mode 100644 index 0000000..96e37bb --- /dev/null +++ b/internal/forwardplugin/plugin_inject.go @@ -0,0 +1,64 @@ +package forwardplugin + +import ( + "encoding/json" + "fmt" + "net/http" + "strings" +) + +func init() { + Register("inject_js", newInjectJSPlugin) +} + +type injectJSConfig struct { + Script string `json:"script"` +} + +type injectJSPlugin struct { + script string +} + +func newInjectJSPlugin(raw json.RawMessage) (Plugin, error) { + var cfg injectJSConfig + if err := json.Unmarshal(raw, &cfg); err != nil { + return nil, fmt.Errorf("inject_js 配置无效") + } + return &injectJSPlugin{script: cfg.Script}, nil +} + +func (p *injectJSPlugin) Type() string { return "inject_js" } + +func (p *injectJSPlugin) ValidateConfig(raw json.RawMessage) error { + var cfg injectJSConfig + if err := json.Unmarshal(raw, &cfg); err != nil { + return fmt.Errorf("inject_js 配置无效") + } + if strings.TrimSpace(cfg.Script) == "" { + return fmt.Errorf("inject_js.script 不能为空") + } + return nil +} + +func (p *injectJSPlugin) NeedsBody() bool { return true } + +func (p *injectJSPlugin) HandleRequest(_ *Context, _ *http.Request) (bool, error) { + return false, nil +} + +func (p *injectJSPlugin) HandleResponse(_ *Context, resp *BufferedResponse) error { + ct := strings.ToLower(resp.Header.Get("Content-Type")) + if !strings.Contains(ct, "text/html") { + return nil + } + body := string(resp.Body) + lower := strings.ToLower(body) + idx := strings.LastIndex(lower, "") + if idx >= 0 { + body = body[:idx] + p.script + body[idx:] + } else { + body += p.script + } + resp.Body = []byte(body) + return nil +} diff --git a/internal/forwardplugin/plugin_test.go b/internal/forwardplugin/plugin_test.go new file mode 100644 index 0000000..59b0811 --- /dev/null +++ b/internal/forwardplugin/plugin_test.go @@ -0,0 +1,93 @@ +package forwardplugin + +import ( + "encoding/json" + "testing" +) + +func TestValidateAndNormalizePlugins(t *testing.T) { + entries := []PluginEntry{ + { + Type: "sub_filter", + Enabled: true, + Config: json.RawMessage(`{"filters":[{"from":"a","to":"b"}]}`), + }, + { + Type: "response_cache", + Enabled: true, + Config: json.RawMessage(`{"max_mb":10,"ttl_sec":0}`), + }, + } + out, err := ValidateAndNormalizePlugins(entries) + if err != nil { + t.Fatal(err) + } + if len(out) != 2 { + t.Fatalf("expected 2 plugins, got %d", len(out)) + } + var cacheCfg responseCacheConfig + if err := json.Unmarshal(out[1].Config, &cacheCfg); err != nil { + t.Fatal(err) + } + if cacheCfg.TTLSec != 300 { + t.Fatalf("expected default ttl 300, got %d", cacheCfg.TTLSec) + } +} + +func TestSubFilterReplace(t *testing.T) { + p, err := newSubFilterPlugin(json.RawMessage(`{"filters":[{"from":"old","to":"new"}],"types":["text/html"]}`)) + if err != nil { + t.Fatal(err) + } + plugin := p.(*subFilterPlugin) + resp := &BufferedResponse{ + StatusCode: 200, + Header: make(map[string][]string), + Body: []byte("old page"), + } + resp.Header.Set("Content-Type", "text/html; charset=utf-8") + if err := plugin.HandleResponse(nil, resp); err != nil { + t.Fatal(err) + } + if string(resp.Body) != "new page" { + t.Fatalf("unexpected body: %s", resp.Body) + } +} + +func TestInjectJS(t *testing.T) { + p, err := newInjectJSPlugin(json.RawMessage(`{"script":""}`)) + if err != nil { + t.Fatal(err) + } + plugin := p.(*injectJSPlugin) + resp := &BufferedResponse{ + Header: make(map[string][]string), + Body: []byte("hi"), + } + resp.Header.Set("Content-Type", "text/html") + if err := plugin.HandleResponse(nil, resp); err != nil { + t.Fatal(err) + } + if want := "hi"; string(resp.Body) != want { + t.Fatalf("got %q want %q", resp.Body, want) + } +} + +func TestCookieDomainRewrite(t *testing.T) { + p, err := newCookieDomainPlugin(json.RawMessage(`{"from":".old.com","to":".new.com"}`)) + if err != nil { + t.Fatal(err) + } + plugin := p.(*cookieDomainPlugin) + resp := &BufferedResponse{ + Header: make(map[string][]string), + } + resp.Header.Add("Set-Cookie", "sid=1; Domain=.old.com; Path=/") + if err := plugin.HandleResponse(nil, resp); err != nil { + t.Fatal(err) + } + got := resp.Header.Get("Set-Cookie") + if got != "sid=1; Domain=.new.com; Path=/" { + t.Fatalf("unexpected cookie: %s", got) + } +} diff --git a/internal/forwardplugin/response_cache.go b/internal/forwardplugin/response_cache.go new file mode 100644 index 0000000..9ff5c46 --- /dev/null +++ b/internal/forwardplugin/response_cache.go @@ -0,0 +1,228 @@ +package forwardplugin + +import ( + "container/list" + "encoding/json" + "fmt" + "net/http" + "sync" + "time" +) + +func init() { + Register("response_cache", newResponseCachePlugin) +} + +type responseCacheConfig struct { + MaxMB int `json:"max_mb"` + TTLSec int `json:"ttl_sec"` +} + +type responseCachePlugin struct { + forwardID uint + maxBytes int64 + ttl time.Duration + store *responseCacheStore +} + +func newResponseCachePlugin(raw json.RawMessage) (Plugin, error) { + var cfg responseCacheConfig + if err := json.Unmarshal(raw, &cfg); err != nil { + return nil, fmt.Errorf("response_cache 配置无效") + } + return &responseCachePlugin{ + maxBytes: int64(cfg.MaxMB) * 1024 * 1024, + ttl: time.Duration(cfg.TTLSec) * time.Second, + }, nil +} + +func (p *responseCachePlugin) bindForwardID(id uint) { + p.forwardID = id + if p.maxBytes <= 0 { + return + } + p.store = globalResponseCaches.get(id, p.maxBytes, p.ttl) +} + +func (p *responseCachePlugin) Type() string { return "response_cache" } + +func (p *responseCachePlugin) ValidateConfig(raw json.RawMessage) error { + var cfg responseCacheConfig + if err := json.Unmarshal(raw, &cfg); err != nil { + return fmt.Errorf("response_cache 配置无效") + } + if cfg.MaxMB < 0 { + return fmt.Errorf("response_cache.max_mb 不能为负数") + } + if cfg.MaxMB > 0 && cfg.TTLSec <= 0 { + return nil + } + if cfg.TTLSec < 0 { + return fmt.Errorf("response_cache.ttl_sec 不能为负数") + } + return nil +} + +func (p *responseCachePlugin) NormalizeConfig(raw json.RawMessage) (json.RawMessage, error) { + var cfg responseCacheConfig + if err := json.Unmarshal(raw, &cfg); err != nil { + return nil, err + } + if cfg.MaxMB > 0 && cfg.TTLSec <= 0 { + cfg.TTLSec = 300 + } + return json.Marshal(cfg) +} + +func (p *responseCachePlugin) NeedsBody() bool { return false } + +func (p *responseCachePlugin) HandleRequest(ctx *Context, req *http.Request) (bool, error) { + if p.store == nil || req.Method != http.MethodGet { + return false, nil + } + key := cacheKey(req) + if hit := p.store.get(key); hit != nil { + ctx.CachedResp = hit.Clone() + ctx.CachedResp.FromCache = true + return true, nil + } + return false, nil +} + +func (p *responseCachePlugin) HandleResponse(_ *Context, _ *BufferedResponse) error { + return nil +} + +func (p *responseCachePlugin) StoreRaw(ctx *Context, resp *BufferedResponse) { + if p.store == nil || ctx.ClientReq.Method != http.MethodGet || resp.FromCache { + return + } + if resp.StatusCode < 200 || resp.StatusCode >= 300 { + return + } + if len(resp.Header.Values("Set-Cookie")) > 0 { + return + } + p.store.put(cacheKey(ctx.ClientReq), resp.Clone()) +} + +func cacheKey(req *http.Request) string { + if req.URL.RawQuery != "" { + return req.URL.Path + "?" + req.URL.RawQuery + } + return req.URL.Path +} + +type cacheEntry struct { + key string + resp *BufferedResponse + expires time.Time + size int64 +} + +type responseCacheStore struct { + mu sync.Mutex + maxBytes int64 + ttl time.Duration + usedBytes int64 + items map[string]*list.Element + order *list.List +} + +func newResponseCacheStore(maxBytes int64, ttl time.Duration) *responseCacheStore { + return &responseCacheStore{ + maxBytes: maxBytes, + ttl: ttl, + items: make(map[string]*list.Element), + order: list.New(), + } +} + +func (s *responseCacheStore) get(key string) *BufferedResponse { + s.mu.Lock() + defer s.mu.Unlock() + el, ok := s.items[key] + if !ok { + return nil + } + ent := el.Value.(*cacheEntry) + if time.Now().After(ent.expires) { + s.removeElement(el) + return nil + } + s.order.MoveToFront(el) + return ent.resp +} + +func (s *responseCacheStore) put(key string, resp *BufferedResponse) { + size := int64(len(resp.Body)) + for k, v := range resp.Header { + for _, vv := range v { + size += int64(len(k) + len(vv)) + } + } + s.mu.Lock() + defer s.mu.Unlock() + if el, ok := s.items[key]; ok { + old := el.Value.(*cacheEntry) + s.usedBytes -= old.size + s.order.Remove(el) + delete(s.items, key) + } + for s.usedBytes+size > s.maxBytes && s.order.Len() > 0 { + s.removeElement(s.order.Back()) + } + ent := &cacheEntry{ + key: key, + resp: resp, + expires: time.Now().Add(s.ttl), + size: size, + } + el := s.order.PushFront(ent) + s.items[key] = el + s.usedBytes += size +} + +func (s *responseCacheStore) removeElement(el *list.Element) { + ent := el.Value.(*cacheEntry) + delete(s.items, ent.key) + s.order.Remove(el) + s.usedBytes -= ent.size +} + +type responseCacheManager struct { + mu sync.Mutex + caches map[uint]*responseCacheStore +} + +var globalResponseCaches = &responseCacheManager{caches: make(map[uint]*responseCacheStore)} + +func (m *responseCacheManager) get(forwardID uint, maxBytes int64, ttl time.Duration) *responseCacheStore { + m.mu.Lock() + defer m.mu.Unlock() + if c, ok := m.caches[forwardID]; ok { + c.maxBytes = maxBytes + c.ttl = ttl + return c + } + c := newResponseCacheStore(maxBytes, ttl) + m.caches[forwardID] = c + return c +} + +func BindForwardID(chain *Chain, forwardID uint) { + if chain == nil { + return + } + for _, p := range chain.plugins { + if rc, ok := p.(*responseCachePlugin); ok { + rc.bindForwardID(forwardID) + } + } +} + +func InvalidateForwardCache(forwardID uint) { + globalResponseCaches.mu.Lock() + defer globalResponseCaches.mu.Unlock() + delete(globalResponseCaches.caches, forwardID) +} diff --git a/internal/forwardplugin/sub_filter.go b/internal/forwardplugin/sub_filter.go new file mode 100644 index 0000000..961be3b --- /dev/null +++ b/internal/forwardplugin/sub_filter.go @@ -0,0 +1,117 @@ +package forwardplugin + +import ( + "encoding/json" + "fmt" + "net/http" + "strings" +) + +func init() { + Register("sub_filter", newSubFilterPlugin) +} + +type subFilterConfig struct { + Filters []subFilterRule `json:"filters"` + Types []string `json:"types"` +} + +type subFilterRule struct { + From string `json:"from"` + To string `json:"to"` +} + +type subFilterPlugin struct { + filters []subFilterRule + types []string +} + +func newSubFilterPlugin(raw json.RawMessage) (Plugin, error) { + var cfg subFilterConfig + if err := json.Unmarshal(raw, &cfg); err != nil { + return nil, fmt.Errorf("sub_filter 配置无效") + } + return &subFilterPlugin{filters: cfg.Filters, types: cfg.Types}, nil +} + +func (p *subFilterPlugin) Type() string { return "sub_filter" } + +func (p *subFilterPlugin) ValidateConfig(raw json.RawMessage) error { + cfg, err := parseSubFilterConfig(raw) + if err != nil { + return err + } + if len(cfg.Filters) == 0 { + return fmt.Errorf("sub_filter.filters 不能为空") + } + for i, f := range cfg.Filters { + if f.From == "" { + return fmt.Errorf("sub_filter.filters[%d].from 不能为空", i) + } + } + return nil +} + +func (p *subFilterPlugin) NormalizeConfig(raw json.RawMessage) (json.RawMessage, error) { + cfg, err := parseSubFilterConfig(raw) + if err != nil { + return nil, err + } + if len(cfg.Types) == 0 { + cfg.Types = []string{"text/html"} + } + return json.Marshal(cfg) +} + +func parseSubFilterConfig(raw json.RawMessage) (*subFilterConfig, error) { + var cfg subFilterConfig + if err := json.Unmarshal(raw, &cfg); err != nil { + return nil, fmt.Errorf("sub_filter 配置无效") + } + types := make([]string, 0, len(cfg.Types)) + for _, t := range cfg.Types { + t = strings.TrimSpace(strings.ToLower(t)) + if t != "" { + types = append(types, t) + } + } + if len(types) == 0 { + types = []string{"text/html"} + } + cfg.Types = types + return &cfg, nil +} + +func (p *subFilterPlugin) NeedsBody() bool { return true } + +func (p *subFilterPlugin) HandleRequest(_ *Context, _ *http.Request) (bool, error) { + return false, nil +} + +func (p *subFilterPlugin) HandleResponse(_ *Context, resp *BufferedResponse) error { + if !p.matchesContentType(resp.Header.Get("Content-Type")) { + return nil + } + body := string(resp.Body) + for _, rule := range p.filters { + body = strings.ReplaceAll(body, rule.From, rule.To) + } + resp.Body = []byte(body) + return nil +} + +func (p *subFilterPlugin) matchesContentType(ct string) bool { + ct = strings.TrimSpace(strings.ToLower(ct)) + if ct == "" { + return false + } + if i := strings.Index(ct, ";"); i >= 0 { + ct = strings.TrimSpace(ct[:i]) + } + for _, t := range p.types { + if ct == t { + return true + } + } + return false +} diff --git a/internal/forwardplugin/validate.go b/internal/forwardplugin/validate.go new file mode 100644 index 0000000..d519b90 --- /dev/null +++ b/internal/forwardplugin/validate.go @@ -0,0 +1,87 @@ +package forwardplugin + +import ( + "encoding/json" + "fmt" + "strings" +) + +func ValidateAndNormalizePlugins(entries []PluginEntry) ([]PluginEntry, error) { + if len(entries) == 0 { + return nil, nil + } + out := make([]PluginEntry, 0, len(entries)) + for i, e := range entries { + typ := strings.TrimSpace(e.Type) + if typ == "" { + return nil, fmt.Errorf("plugins[%d].type 不能为空", i) + } + factory, ok := getFactory(typ) + if !ok { + return nil, fmt.Errorf("未知插件类型: %s", typ) + } + cfg := e.Config + if len(cfg) == 0 { + cfg = json.RawMessage("{}") + } + p, err := factory(cfg) + if err != nil { + return nil, fmt.Errorf("plugins[%d]: %w", i, err) + } + if err := p.ValidateConfig(cfg); err != nil { + return nil, fmt.Errorf("plugins[%d]: %w", i, err) + } + normalized, err := normalizeConfig(cfg, p) + if err != nil { + return nil, fmt.Errorf("plugins[%d]: %w", i, err) + } + out = append(out, PluginEntry{ + Type: typ, + Enabled: e.Enabled, + Config: normalized, + }) + } + return out, nil +} + +func normalizeConfig(raw json.RawMessage, p Plugin) (json.RawMessage, error) { + if norm, ok := p.(ConfigNormalizer); ok { + return norm.NormalizeConfig(raw) + } + return raw, nil +} + +type ConfigNormalizer interface { + NormalizeConfig(raw json.RawMessage) (json.RawMessage, error) +} + +func BuildChain(entries []PluginEntry) (*Chain, error) { + plugins := make([]Plugin, 0, len(entries)) + for _, e := range entries { + if !e.Enabled { + continue + } + factory, ok := getFactory(e.Type) + if !ok { + return nil, fmt.Errorf("未知插件类型: %s", e.Type) + } + cfg := e.Config + if len(cfg) == 0 { + cfg = json.RawMessage("{}") + } + p, err := factory(cfg) + if err != nil { + return nil, err + } + plugins = append(plugins, p) + } + return &Chain{plugins: plugins}, nil +} + +func PluginsJSON(entries []PluginEntry) string { + if len(entries) == 0 { + return "[]" + } + b, _ := json.Marshal(entries) + return string(b) +} diff --git a/internal/metrics/collector.go b/internal/metrics/collector.go new file mode 100644 index 0000000..8df9731 --- /dev/null +++ b/internal/metrics/collector.go @@ -0,0 +1,120 @@ +package metrics + +import ( + "log" + "strconv" + "strings" + "time" + + "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v3/load" + "github.com/shirou/gopsutil/v3/mem" + "github.com/wormhole/wormhole/internal/bridge" + "github.com/wormhole/wormhole/internal/cache" + "github.com/wormhole/wormhole/internal/store" +) + +type Collector struct { + store *store.Store + cache *cache.Manager + bridge *bridge.Bridge + stop chan struct{} +} + +func NewCollector(st *store.Store, c *cache.Manager, b *bridge.Bridge) *Collector { + return &Collector{ + store: st, + cache: c, + bridge: b, + stop: make(chan struct{}), + } +} + +func (c *Collector) Start(flushInterval time.Duration) { + go func() { + ticker := time.NewTicker(flushInterval) + defer ticker.Stop() + for { + select { + case <-ticker.C: + c.flushFlow() + case <-c.stop: + return + } + } + }() +} + +func (c *Collector) Stop() { + close(c.stop) +} + +func (c *Collector) flushFlow() { + deltas := c.cache.DrainFlow() + for key, delta := range deltas { + parts := strings.SplitN(key, ":", 2) + if len(parts) != 2 { + continue + } + resourceType := parts[0] + resourceID, err := strconv.ParseUint(parts[1], 10, 64) + if err != nil { + continue + } + if err := c.store.UpsertFlowStat(resourceType, uint(resourceID), delta.Inlet, delta.Export); err != nil { + log.Printf("[metrics] flush flow stat: %v", err) + } + switch resourceType { + case "client": + _ = c.store.AddClientFlow(uint(resourceID), delta.Inlet, delta.Export) + case "tunnel": + _ = c.store.AddTunnelFlow(uint(resourceID), delta.Inlet, delta.Export) + case "host": + _ = c.store.AddHostFlow(uint(resourceID), delta.Inlet, delta.Export) + } + } +} + +func (c *Collector) RecordRequestIP(resourceType string, resourceID uint, visitorIP, directIP string) { + if err := c.store.RecordRequestIP(resourceType, resourceID, visitorIP, directIP); err != nil { + log.Printf("[metrics] record request ip: %v", err) + } +} + +func (c *Collector) AddFlow(resourceType string, resourceID uint, clientID uint, inlet, export int64) { + c.cache.AddFlow(resourceType, resourceID, inlet, export) + if clientID > 0 { + c.cache.AddFlow("client", clientID, inlet, export) + } +} + +func (c *Collector) Dashboard() (map[string]interface{}, error) { + stats, err := c.store.DashboardStats() + if err != nil { + return nil, err + } + stats["client_online"] = c.bridge.OnlineCount() + + cpuPercent, _ := cpu.Percent(0, false) + memInfo, _ := mem.VirtualMemory() + loadInfo, _ := load.Avg() + + var cpuVal float64 + if len(cpuPercent) > 0 { + cpuVal = cpuPercent[0] + } + + topClients, _ := c.store.TopClientsByFlow(10) + topTunnels, _ := c.store.TopTunnelsByFlow(10) + topHosts, _ := c.store.TopHostsByFlow(10) + topIPs, _ := c.store.TopRequestIPs(10) + + stats["cpu_percent"] = cpuVal + stats["mem_percent"] = memInfo.UsedPercent + stats["load1"] = loadInfo.Load1 + stats["top_clients"] = topClients + stats["top_tunnels"] = topTunnels + stats["top_hosts"] = topHosts + stats["top_ips"] = topIPs + return stats, nil +} diff --git a/internal/protocol/protocol.go b/internal/protocol/protocol.go new file mode 100644 index 0000000..18f4d11 --- /dev/null +++ b/internal/protocol/protocol.go @@ -0,0 +1,99 @@ +package protocol + +import ( + "encoding/binary" + "encoding/json" + "fmt" + "io" +) + +const ( + MsgRegister byte = 1 + MsgRegisterAck byte = 2 + MsgPing byte = 3 + MsgPong byte = 4 + MsgOpenStream byte = 5 + MsgStreamReady byte = 6 + MsgClose byte = 7 +) + +const ( + ConnTypeTCP = "tcp" + ConnTypeUDP = "udp" + ConnTypeHTTP = "http" +) + +type RegisterPayload struct { + VerifyKey string `json:"verify_key"` + Version string `json:"version"` +} + +type RegisterAckPayload struct { + ClientID uint `json:"client_id"` + Message string `json:"message"` + OK bool `json:"ok"` +} + +type LinkMeta struct { + ConnType string `json:"conn_type"` + Target string `json:"target"` + RemoteAddr string `json:"remote_addr"` + StreamID uint32 `json:"stream_id"` +} + +func WriteMessage(w io.Writer, msgType byte, payload interface{}) error { + var body []byte + var err error + if payload != nil { + body, err = json.Marshal(payload) + if err != nil { + return err + } + } + header := make([]byte, 5) + header[0] = msgType + binary.BigEndian.PutUint32(header[1:], uint32(len(body))) + if _, err := w.Write(header); err != nil { + return err + } + if len(body) > 0 { + _, err = w.Write(body) + } + return err +} + +func ReadMessage(r io.Reader) (byte, []byte, error) { + header := make([]byte, 5) + if _, err := io.ReadFull(r, header); err != nil { + return 0, nil, err + } + msgType := header[0] + length := binary.BigEndian.Uint32(header[1:]) + if length == 0 { + return msgType, nil, nil + } + if length > 1<<20 { + return 0, nil, fmt.Errorf("message too large: %d", length) + } + body := make([]byte, length) + if _, err := io.ReadFull(r, body); err != nil { + return 0, nil, err + } + return msgType, body, nil +} + +func ParseRegister(body []byte) (*RegisterPayload, error) { + var p RegisterPayload + if err := json.Unmarshal(body, &p); err != nil { + return nil, err + } + return &p, nil +} + +func ParseLinkMeta(body []byte) (*LinkMeta, error) { + var p LinkMeta + if err := json.Unmarshal(body, &p); err != nil { + return nil, err + } + return &p, nil +} diff --git a/internal/proxy/domain_forward.go b/internal/proxy/domain_forward.go new file mode 100644 index 0000000..44ed811 --- /dev/null +++ b/internal/proxy/domain_forward.go @@ -0,0 +1,217 @@ +package proxy + +import ( + "context" + "crypto/tls" + "fmt" + "io" + "net" + "net/http" + "net/http/httputil" + "net/url" + "strings" + + "github.com/wormhole/wormhole/internal/store" + "golang.org/x/net/proxy" +) + +func (m *Manager) handleDomainForward(w http.ResponseWriter, r *http.Request, df *store.DomainForward) { + switch df.Mode { + case "redirect": + m.handleDomainRedirect(w, r, df) + case "proxy": + m.handleDomainProxy(w, r, df) + default: + http.Error(w, "bad forward mode", http.StatusBadGateway) + } +} + +func (m *Manager) handleDomainRedirect(w http.ResponseWriter, r *http.Request, df *store.DomainForward) { + target, err := buildRedirectURL(df, r) + if err != nil { + http.Error(w, "bad redirect target", http.StatusBadGateway) + return + } + code := df.RedirectCode + if code != 301 && code != 302 { + code = 302 + } + http.Redirect(w, r, target, code) +} + +func buildRedirectURL(df *store.DomainForward, r *http.Request) (string, error) { + targetBase, err := url.Parse(df.TargetURL) + if err != nil { + return "", err + } + if df.RedirectMode == "fixed" { + return targetBase.String(), nil + } + loc := df.SourceLocation + if loc == "" { + loc = "/" + } + suffix := strings.TrimPrefix(r.URL.Path, loc) + if suffix == "" { + suffix = "/" + } + if !strings.HasPrefix(suffix, "/") { + suffix = "/" + suffix + } + out := *targetBase + if strings.HasSuffix(targetBase.Path, "/") && suffix == "/" { + // keep target path as-is + } else if targetBase.Path == "" || targetBase.Path == "/" { + out.Path = suffix + } else { + out.Path = strings.TrimSuffix(targetBase.Path, "/") + suffix + } + out.RawQuery = r.URL.RawQuery + return out.String(), nil +} + +func (m *Manager) handleDomainProxy(w http.ResponseWriter, r *http.Request, df *store.DomainForward) { + targetBase, err := url.Parse(df.TargetURL) + if err != nil { + http.Error(w, "bad target", http.StatusBadGateway) + return + } + + transport, err := m.domainForwardTransport(df) + if err != nil { + http.Error(w, "proxy transport error", http.StatusBadGateway) + return + } + + proxy := httputil.NewSingleHostReverseProxy(targetBase) + proxy.Transport = transport + loc := df.SourceLocation + if loc == "" { + loc = "/" + } + originalDirector := proxy.Director + proxy.Director = func(req *http.Request) { + originalDirector(req) + suffix := strings.TrimPrefix(r.URL.Path, loc) + if suffix == "" { + suffix = "/" + } + if !strings.HasPrefix(suffix, "/") { + suffix = "/" + suffix + } + if targetBase.Path == "" || targetBase.Path == "/" { + req.URL.Path = suffix + } else { + req.URL.Path = strings.TrimSuffix(targetBase.Path, "/") + suffix + } + req.URL.RawQuery = r.URL.RawQuery + req.URL.Scheme = targetBase.Scheme + req.URL.Host = targetBase.Host + if df.PreserveHost { + req.Host = r.Host + } else { + req.Host = targetBase.Host + } + } + proxy.ErrorHandler = func(rw http.ResponseWriter, req *http.Request, e error) { + http.Error(rw, "proxy error", http.StatusBadGateway) + } + if isWebSocketUpgrade(r) { + proxy.ServeHTTP(w, r) + return + } + + if hasEnabledPlugins(df.Plugins) { + upstreamReq, err := buildDomainForwardUpstreamRequest(r, df, targetBase, loc) + if err != nil { + http.Error(w, "bad target", http.StatusBadGateway) + return + } + if err := runForwardPluginPipeline(w, r, df, upstreamReq, transport); err != nil { + http.Error(w, "proxy error", http.StatusBadGateway) + } + return + } + + rec := &responseRecorder{ResponseWriter: w, status: 200} + proxy.ServeHTTP(rec, r) +} + +func buildDomainForwardUpstreamRequest(r *http.Request, df *store.DomainForward, targetBase *url.URL, loc string) (*http.Request, error) { + suffix := strings.TrimPrefix(r.URL.Path, loc) + if suffix == "" { + suffix = "/" + } + if !strings.HasPrefix(suffix, "/") { + suffix = "/" + suffix + } + path := suffix + if targetBase.Path != "" && targetBase.Path != "/" { + path = strings.TrimSuffix(targetBase.Path, "/") + suffix + } + upstreamURL := *targetBase + upstreamURL.Path = path + upstreamURL.RawQuery = r.URL.RawQuery + + var body io.ReadCloser + if r.Body != nil && r.Method != http.MethodGet && r.Method != http.MethodHead { + body = r.Body + } + outReq, err := http.NewRequestWithContext(r.Context(), r.Method, upstreamURL.String(), body) + if err != nil { + return nil, err + } + outReq.Header = r.Header.Clone() + if df.PreserveHost { + outReq.Host = r.Host + } else { + outReq.Host = targetBase.Host + } + return outReq, nil +} + +func (m *Manager) domainForwardTransport(df *store.DomainForward) (*http.Transport, error) { + t := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + if df.ProxyType == "http_proxy" { + addr := strings.TrimSpace(df.HTTPProxyAddr) + if addr == "" { + return nil, fmt.Errorf("http proxy addr required") + } + if !strings.Contains(addr, "://") { + addr = "http://" + addr + } + proxyURL, err := url.Parse(addr) + if err != nil || proxyURL.Host == "" { + return nil, fmt.Errorf("invalid http proxy addr") + } + if df.HTTPProxyUser != "" { + proxyURL.User = url.UserPassword(df.HTTPProxyUser, df.HTTPProxyPass) + } + t.Proxy = http.ProxyURL(proxyURL) + return t, nil + } + if df.ProxyType != "socks5" { + return t, nil + } + addr := strings.TrimSpace(df.Socks5Addr) + if addr == "" { + return nil, fmt.Errorf("socks5 addr required") + } + var auth *proxy.Auth + if df.Socks5User != "" { + auth = &proxy.Auth{User: df.Socks5User, Password: df.Socks5Pass} + } + dialer, err := proxy.SOCKS5("tcp", addr, auth, proxy.Direct) + if err != nil { + return nil, err + } + t.DialContext = func(ctx context.Context, network, address string) (net.Conn, error) { + if cd, ok := dialer.(proxy.ContextDialer); ok { + return cd.DialContext(ctx, network, address) + } + return dialer.Dial(network, address) + } + return t, nil +} diff --git a/internal/proxy/forward_pipeline.go b/internal/proxy/forward_pipeline.go new file mode 100644 index 0000000..5530ef8 --- /dev/null +++ b/internal/proxy/forward_pipeline.go @@ -0,0 +1,115 @@ +package proxy + +import ( + "bytes" + "io" + "net/http" + + "github.com/wormhole/wormhole/internal/forwardplugin" + "github.com/wormhole/wormhole/internal/store" +) + +func pluginEntriesFromStore(plugins store.ForwardPlugins) []forwardplugin.PluginEntry { + if len(plugins) == 0 { + return nil + } + out := make([]forwardplugin.PluginEntry, len(plugins)) + for i, p := range plugins { + out[i] = forwardplugin.PluginEntry{ + Type: p.Type, + Enabled: p.Enabled, + Config: p.Config, + } + } + return out +} + +func runForwardPluginPipeline( + w http.ResponseWriter, + clientReq *http.Request, + df *store.DomainForward, + upstreamReq *http.Request, + transport http.RoundTripper, +) error { + chain, err := forwardplugin.BuildChain(pluginEntriesFromStore(df.Plugins)) + if err != nil { + return err + } + + forwardplugin.BindForwardID(chain, df.ID) + + ctx := &forwardplugin.Context{ + ForwardID: df.ID, + ClientReq: clientReq, + } + + outReq := upstreamReq.Clone(clientReq.Context()) + if chain.NeedsBody() { + outReq.Header.Del("Accept-Encoding") + } + + short, err := chain.HandleRequest(ctx, outReq) + if err != nil { + return err + } + + var resp *forwardplugin.BufferedResponse + if short && ctx.CachedResp != nil { + resp = ctx.CachedResp.Clone() + } else { + resp, err = fetchUpstreamResponse(outReq, transport, chain.NeedsBody()) + if err != nil { + return err + } + chain.StoreRawResponses(ctx, resp) + } + + if err := chain.HandleResponse(ctx, resp); err != nil { + return err + } + writeBufferedResponse(w, resp) + return nil +} + +func fetchUpstreamResponse(req *http.Request, transport http.RoundTripper, _ bool) (*forwardplugin.BufferedResponse, error) { + client := &http.Client{Transport: transport} + upstreamResp, err := client.Do(req) + if err != nil { + return nil, err + } + defer upstreamResp.Body.Close() + + body, err := io.ReadAll(upstreamResp.Body) + if err != nil { + return nil, err + } + return &forwardplugin.BufferedResponse{ + StatusCode: upstreamResp.StatusCode, + Header: upstreamResp.Header.Clone(), + Body: body, + }, nil +} + +func writeBufferedResponse(w http.ResponseWriter, resp *forwardplugin.BufferedResponse) { + for k, vals := range resp.Header { + for _, v := range vals { + w.Header().Add(k, v) + } + } + if resp.StatusCode == 0 { + resp.StatusCode = http.StatusOK + } + w.WriteHeader(resp.StatusCode) + if len(resp.Body) > 0 { + _, _ = io.Copy(w, bytes.NewReader(resp.Body)) + } +} + +func hasEnabledPlugins(plugins store.ForwardPlugins) bool { + for _, p := range plugins { + if p.Enabled { + return true + } + } + return false +} diff --git a/internal/proxy/headers.go b/internal/proxy/headers.go new file mode 100644 index 0000000..b2ac7f5 --- /dev/null +++ b/internal/proxy/headers.go @@ -0,0 +1,152 @@ +package proxy + +import ( + "encoding/json" + "net" + "net/http" + "strings" + + "github.com/wormhole/wormhole/internal/auth" + "github.com/wormhole/wormhole/internal/store" +) + +const ( + // IPForwardReplace 覆盖 X-Forwarded-For / X-Real-IP 为访客真实 IP。 + IPForwardReplace = "replace" + // IPForwardAppend 按反向代理规范追加 X-Forwarded-For(Nginx proxy_add_x_forwarded_for)。 + IPForwardAppend = "append" +) + +func normalizeIPForwardMode(mode string) string { + switch mode { + case IPForwardReplace, IPForwardAppend: + return mode + case "real": // 兼容旧值 + return IPForwardReplace + case "proxy": // 兼容旧值 + return IPForwardAppend + default: + return IPForwardReplace + } +} + +func parseHeaderMap(raw string) map[string]string { + raw = strings.TrimSpace(raw) + if raw == "" || raw == "{}" { + return nil + } + var m map[string]string + if err := json.Unmarshal([]byte(raw), &m); err != nil { + return nil + } + return m +} + +func mergeHeaderMaps(base, override map[string]string) map[string]string { + out := make(map[string]string) + for k, v := range base { + out[k] = v + } + for k, v := range override { + out[k] = v + } + if len(out) == 0 { + return nil + } + return out +} + +func effectiveIPMode(resourceMode, clientMode string) string { + if resourceMode != "" { + return normalizeIPForwardMode(resourceMode) + } + if clientMode != "" { + return normalizeIPForwardMode(clientMode) + } + return IPForwardReplace +} + +func resolveProxyConfig(st *store.Store, clientID uint, resourceMode, resourceHeaders string) (mode string, headers map[string]string) { + client, _ := st.GetClientByID(clientID) + clientMode := "" + clientHeaders := "" + if client != nil { + clientMode = client.IPForwardMode + clientHeaders = client.CustomHeaders + } + mode = effectiveIPMode(resourceMode, clientMode) + headers = mergeHeaderMaps(parseHeaderMap(clientHeaders), parseHeaderMap(resourceHeaders)) + return mode, headers +} + +func hostOnly(addr string) string { + if addr == "" { + return "" + } + host, _, err := net.SplitHostPort(addr) + if err != nil { + return strings.Trim(addr, "[]") + } + return host +} + +func directClientIP(r *http.Request) string { + return hostOnly(r.RemoteAddr) +} + +func forwardIPForHTTP(r *http.Request, mode string) string { + mode = normalizeIPForwardMode(mode) + if mode == IPForwardAppend { + return directClientIP(r) + } + return auth.ExtractRemoteIP(r) +} + +func forwardIPForTCP(clientAddr string, _ string) string { + return hostOnly(clientAddr) +} + +func isForbiddenHeader(name string) bool { + switch strings.ToLower(name) { + case "connection", "transfer-encoding", "keep-alive", "proxy-connection", + "te", "trailer", "upgrade", "content-length", "host": + return true + default: + return false + } +} + +func applyOutboundHeaders(req *http.Request, r *http.Request, mode string, custom map[string]string) { + mode = normalizeIPForwardMode(mode) + req.Header.Del("X-Forwarded-For") + req.Header.Del("X-Real-IP") + req.Header.Del("Forwarded") + + switch mode { + case IPForwardAppend: + clientIP := directClientIP(r) + if clientIP == "" { + break + } + existing := strings.TrimSpace(r.Header.Get("X-Forwarded-For")) + xff := clientIP + if existing != "" { + xff = existing + ", " + clientIP + } + req.Header.Set("X-Forwarded-For", xff) + req.Header.Set("X-Real-IP", clientIP) + default: + visitorIP := auth.ExtractRemoteIP(r) + if visitorIP != "" { + req.Header.Set("X-Forwarded-For", visitorIP) + req.Header.Set("X-Real-IP", visitorIP) + } + } + + for k, v := range custom { + if k == "" || isForbiddenHeader(k) { + continue + } + req.Header.Set(k, v) + } +} diff --git a/internal/proxy/http_tunnel.go b/internal/proxy/http_tunnel.go new file mode 100644 index 0000000..4162ea9 --- /dev/null +++ b/internal/proxy/http_tunnel.go @@ -0,0 +1,74 @@ +package proxy + +import ( + "context" + "log" + "net" + "net/http" + "sync" + "time" + + "github.com/wormhole/wormhole/internal/auth" + "github.com/wormhole/wormhole/internal/store" +) + +type httpTunnelServer struct { + manager *Manager + tunnel *store.Tunnel + srv *http.Server + stop chan struct{} + wg sync.WaitGroup +} + +func newHTTPTunnelServer(m *Manager, t *store.Tunnel) Service { + return &httpTunnelServer{ + manager: m, + tunnel: t, + stop: make(chan struct{}), + } +} + +func (s *httpTunnelServer) ID() uint { return s.tunnel.ID } + +func (s *httpTunnelServer) Start() error { + addr := net.JoinHostPort("0.0.0.0", itoa(s.tunnel.ListenPort)) + s.srv = &http.Server{ + Addr: addr, + Handler: http.HandlerFunc(s.handleHTTP), + } + log.Printf("[proxy] http tunnel %d (visitor auth) listening on %s -> %s", s.tunnel.ID, addr, s.tunnel.TargetAddr) + s.wg.Add(1) + go func() { + defer s.wg.Done() + if err := s.srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { + log.Printf("[proxy] http tunnel %d error: %v", s.tunnel.ID, err) + } + }() + return nil +} + +func (s *httpTunnelServer) handleHTTP(w http.ResponseWriter, r *http.Request) { + t := s.tunnel + ip := auth.ExtractRemoteIP(r) + directIP := auth.DirectRemoteIP(r) + s.manager.metrics.RecordRequestIP("tunnel", t.ID, ip, directIP) + if !s.manager.security.Allow(directIP, t.ClientID, "tunnel", t.ID) { + http.Error(w, "forbidden", http.StatusForbidden) + return + } + if !s.manager.resAuth.CheckHTTP(w, r, "tunnel", t.ID) { + return + } + s.manager.proxyTunnelHTTP(w, r, t) +} + +func (s *httpTunnelServer) Stop() error { + close(s.stop) + if s.srv != nil { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + _ = s.srv.Shutdown(ctx) + } + s.wg.Wait() + return nil +} diff --git a/internal/proxy/manager.go b/internal/proxy/manager.go new file mode 100644 index 0000000..9fd1d08 --- /dev/null +++ b/internal/proxy/manager.go @@ -0,0 +1,349 @@ +package proxy + +import ( + "bufio" + "context" + "crypto/tls" + "fmt" + "log" + "net" + "net/http" + "net/http/httputil" + "net/url" + "strings" + "sync" + + "github.com/wormhole/wormhole/internal/auth" + "github.com/wormhole/wormhole/internal/bridge" + "github.com/wormhole/wormhole/internal/cache" + "github.com/wormhole/wormhole/internal/metrics" + "github.com/wormhole/wormhole/internal/protocol" + "github.com/wormhole/wormhole/internal/security" + "github.com/wormhole/wormhole/internal/store" +) + +type Manager struct { + cache *cache.Manager + store *store.Store + bridge *bridge.Bridge + security *security.Service + resAuth *auth.ResourceAuth + metrics *metrics.Collector + + mu sync.Mutex + services map[uint]Service + httpProxySrv *http.Server + httpsProxySrv *http.Server +} + +type Service interface { + Start() error + Stop() error + ID() uint +} + +func NewManager(c *cache.Manager, st *store.Store, b *bridge.Bridge, sec *security.Service, ra *auth.ResourceAuth, mc *metrics.Collector) *Manager { + return &Manager{ + cache: c, + store: st, + bridge: b, + security: sec, + resAuth: ra, + metrics: mc, + services: make(map[uint]Service), + } +} + +func (m *Manager) StartAll() error { + tunnels := m.cache.ListEnabledTunnels() + for _, t := range tunnels { + if err := m.StartTunnel(t.ID); err != nil { + log.Printf("[proxy] start tunnel %d: %v", t.ID, err) + } + } + return nil +} + +func (m *Manager) StartTunnel(id uint) error { + t, ok := m.cache.GetTunnel(id) + if !ok { + return nil + } + m.mu.Lock() + defer m.mu.Unlock() + if old, exists := m.services[id]; exists { + _ = old.Stop() + delete(m.services, id) + } + var svc Service + switch t.Mode { + case "udp": + svc = newUDPServer(m, t) + default: + if t.VisitorAuthEnabled { + svc = newHTTPTunnelServer(m, t) + } else { + svc = newTCPServer(m, t) + } + } + if err := svc.Start(); err != nil { + return err + } + m.services[id] = svc + t.RunStatus = true + _ = m.store.UpdateTunnel(t) + m.cache.SetTunnelRunStatus(id, true) + return nil +} + +func (m *Manager) StopTunnel(id uint) error { + m.mu.Lock() + defer m.mu.Unlock() + if svc, ok := m.services[id]; ok { + _ = svc.Stop() + delete(m.services, id) + } + if t, ok := m.cache.GetTunnel(id); ok { + t.RunStatus = false + _ = m.store.UpdateTunnel(t) + m.cache.SetTunnelRunStatus(id, false) + } + return nil +} + +func (m *Manager) StartHTTPServer(httpPort, httpsPort int, certFile, keyFile string) error { + if httpPort > 0 { + srv := &http.Server{ + Addr: formatPort(httpPort), + Handler: m.httpHandler("http"), + } + m.httpProxySrv = srv + go func() { + log.Printf("[proxy] http host server on %s", srv.Addr) + if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { + log.Printf("[proxy] http server error: %v", err) + } + }() + } + if httpsPort > 0 { + srv := &http.Server{ + Addr: formatPort(httpsPort), + Handler: m.httpHandler("https"), + } + m.httpsProxySrv = srv + go func() { + log.Printf("[proxy] https host server on %s", srv.Addr) + if certFile != "" && keyFile != "" { + if err := srv.ListenAndServeTLS(certFile, keyFile); err != nil && err != http.ErrServerClosed { + log.Printf("[proxy] https server error: %v", err) + } + } else { + log.Printf("[proxy] https port enabled but tls cert/key not configured, skipping TLS listener") + } + }() + } + return nil +} + +func (m *Manager) Shutdown(ctx context.Context) error { + m.mu.Lock() + services := make([]Service, 0, len(m.services)) + for _, svc := range m.services { + services = append(services, svc) + } + m.mu.Unlock() + + for _, svc := range services { + _ = svc.Stop() + } + var err error + if m.httpProxySrv != nil { + if e := m.httpProxySrv.Shutdown(ctx); e != nil { + err = e + } + } + if m.httpsProxySrv != nil { + if e := m.httpsProxySrv.Shutdown(ctx); e != nil { + err = e + } + } + return err +} + +func formatPort(port int) string { + return net.JoinHostPort("", itoa(port)) +} + +func itoa(n int) string { + if n == 0 { + return "0" + } + var b [12]byte + i := len(b) + for n > 0 { + i-- + b[i] = byte('0' + n%10) + n /= 10 + } + return string(b[i:]) +} + +func (m *Manager) httpHandler(scheme string) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + directIP := auth.DirectRemoteIP(r) + if fwd := m.cache.MatchDomainForward(r.Host, r.URL.Path, scheme); fwd != nil { + if !m.security.Allow(directIP, 0, "global", 0) { + http.Error(w, "forbidden", http.StatusForbidden) + return + } + m.handleDomainForward(w, r, fwd) + return + } + + host := m.cache.MatchHost(r.Host, r.URL.Path, scheme) + if host == nil { + http.Error(w, "host not found", http.StatusNotFound) + return + } + ip := auth.ExtractRemoteIP(r) + m.metrics.RecordRequestIP("host", host.ID, ip, directIP) + if !m.security.Allow(directIP, host.ClientID, "host", host.ID) { + http.Error(w, "forbidden", http.StatusForbidden) + return + } + if !m.resAuth.CheckHTTP(w, r, "host", host.ID) { + return + } + if host.AutoHTTPS && scheme == "http" { + target := "https://" + r.Host + r.URL.RequestURI() + http.Redirect(w, r, target, http.StatusMovedPermanently) + return + } + m.proxyHTTP(w, r, host, "host") + }) +} + +func (m *Manager) proxyHTTP(w http.ResponseWriter, r *http.Request, host *store.Host, resourceType string) { + targetURL, err := url.Parse("http://" + host.TargetAddr) + if err != nil { + http.Error(w, "bad target", http.StatusBadGateway) + return + } + if !m.bridge.IsOnline(host.ClientID) { + http.Error(w, "client offline", http.StatusBadGateway) + return + } + mode, headers := resolveProxyConfig(m.store, host.ClientID, host.IPForwardMode, host.CustomHeaders) + forwardIP := forwardIPForHTTP(r, mode) + meta := &protocol.LinkMeta{ + ConnType: protocol.ConnTypeHTTP, + Target: host.TargetAddr, + RemoteAddr: forwardIP, + } + stream, err := m.bridge.OpenStream(host.ClientID, meta) + if err != nil { + http.Error(w, "tunnel error", http.StatusBadGateway) + return + } + defer stream.Close() + + transport := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) { + return stream, nil + }, + } + proxy := httputil.NewSingleHostReverseProxy(targetURL) + proxy.Transport = transport + originalDirector := proxy.Director + proxy.Director = func(req *http.Request) { + originalDirector(req) + req.Host = targetURL.Host + req.URL.Host = targetURL.Host + req.URL.Scheme = targetURL.Scheme + applyOutboundHeaders(req, r, mode, headers) + } + proxy.ErrorHandler = func(rw http.ResponseWriter, req *http.Request, e error) { + http.Error(rw, "proxy error", http.StatusBadGateway) + } + if isWebSocketUpgrade(r) { + proxy.ServeHTTP(w, r) + return + } + rec := &responseRecorder{ResponseWriter: w, status: 200} + proxy.ServeHTTP(rec, r) + inlet := int64(rec.written) + export := int64(r.ContentLength) + if export < 0 { + export = 0 + } + m.metrics.AddFlow(resourceType, host.ID, host.ClientID, inlet, export) +} + +func (m *Manager) proxyTunnelHTTP(w http.ResponseWriter, r *http.Request, t *store.Tunnel) { + host := &store.Host{ + ID: t.ID, + ClientID: t.ClientID, + TargetAddr: t.TargetAddr, + IPForwardMode: t.IPForwardMode, + CustomHeaders: t.CustomHeaders, + } + m.proxyHTTP(w, r, host, "tunnel") +} + +type responseRecorder struct { + http.ResponseWriter + status int + written int +} + +func (r *responseRecorder) Write(b []byte) (int, error) { + n, err := r.ResponseWriter.Write(b) + r.written += n + return n, err +} + +func (r *responseRecorder) Hijack() (net.Conn, *bufio.ReadWriter, error) { + if h, ok := r.ResponseWriter.(http.Hijacker); ok { + return h.Hijack() + } + return nil, nil, fmt.Errorf("hijack not supported") +} + +func (r *responseRecorder) Flush() { + if f, ok := r.ResponseWriter.(http.Flusher); ok { + f.Flush() + } +} + +func isWebSocketUpgrade(r *http.Request) bool { + return strings.EqualFold(r.Header.Get("Upgrade"), "websocket") +} + +func (m *Manager) handleTCPConnection(t *store.Tunnel, clientConn net.Conn) { + defer clientConn.Close() + ip := auth.AddrHost(clientConn.RemoteAddr()) + m.metrics.RecordRequestIP("tunnel", t.ID, ip, ip) + if !m.security.Allow(ip, t.ClientID, "tunnel", t.ID) { + return + } + if !m.resAuth.CheckTCP(clientConn.RemoteAddr(), "tunnel", t.ID) { + return + } + if !m.bridge.IsOnline(t.ClientID) { + return + } + mode, _ := resolveProxyConfig(m.store, t.ClientID, t.IPForwardMode, t.CustomHeaders) + meta := &protocol.LinkMeta{ + ConnType: protocol.ConnTypeTCP, + Target: t.TargetAddr, + RemoteAddr: forwardIPForTCP(clientConn.RemoteAddr().String(), mode), + } + stream, err := m.bridge.OpenStream(t.ClientID, meta) + if err != nil { + return + } + defer stream.Close() + inlet, export := bridge.CopyBoth(clientConn, stream) + m.metrics.AddFlow("tunnel", t.ID, t.ClientID, inlet, export) +} diff --git a/internal/proxy/tcp_udp.go b/internal/proxy/tcp_udp.go new file mode 100644 index 0000000..c304ba8 --- /dev/null +++ b/internal/proxy/tcp_udp.go @@ -0,0 +1,216 @@ +package proxy + +import ( + "log" + "net" + "sync" + "time" + + "github.com/wormhole/wormhole/internal/protocol" + "github.com/wormhole/wormhole/internal/store" +) + +type tcpServer struct { + manager *Manager + tunnel *store.Tunnel + ln net.Listener + stop chan struct{} + wg sync.WaitGroup +} + +func newTCPServer(m *Manager, t *store.Tunnel) Service { + return &tcpServer{ + manager: m, + tunnel: t, + stop: make(chan struct{}), + } +} + +func (s *tcpServer) ID() uint { return s.tunnel.ID } + +func (s *tcpServer) Start() error { + addr := net.JoinHostPort("0.0.0.0", itoa(s.tunnel.ListenPort)) + ln, err := net.Listen("tcp", addr) + if err != nil { + return err + } + s.ln = ln + log.Printf("[proxy] tcp tunnel %d listening on %s -> %s", s.tunnel.ID, addr, s.tunnel.TargetAddr) + go s.acceptLoop() + return nil +} + +func (s *tcpServer) acceptLoop() { + for { + conn, err := s.ln.Accept() + if err != nil { + select { + case <-s.stop: + return + default: + continue + } + } + s.wg.Add(1) + go func(c net.Conn) { + defer s.wg.Done() + s.manager.handleTCPConnection(s.tunnel, c) + }(conn) + } +} + +func (s *tcpServer) Stop() error { + close(s.stop) + if s.ln != nil { + _ = s.ln.Close() + } + s.wg.Wait() + return nil +} + +type udpSession struct { + stream net.Conn + last time.Time +} + +type udpServer struct { + manager *Manager + tunnel *store.Tunnel + conn *net.UDPConn + stop chan struct{} + mu sync.Mutex + sessions map[string]*udpSession +} + +func newUDPServer(m *Manager, t *store.Tunnel) Service { + return &udpServer{ + manager: m, + tunnel: t, + stop: make(chan struct{}), + sessions: make(map[string]*udpSession), + } +} + +func (s *udpServer) ID() uint { return s.tunnel.ID } + +func (s *udpServer) Start() error { + addr := net.JoinHostPort("0.0.0.0", itoa(s.tunnel.ListenPort)) + udpAddr, err := net.ResolveUDPAddr("udp", addr) + if err != nil { + return err + } + conn, err := net.ListenUDP("udp", udpAddr) + if err != nil { + return err + } + s.conn = conn + log.Printf("[proxy] udp tunnel %d listening on %s -> %s", s.tunnel.ID, addr, s.tunnel.TargetAddr) + go s.readLoop() + go s.sweeper() + return nil +} + +func (s *udpServer) readLoop() { + buf := make([]byte, 65535) + for { + n, remote, err := s.conn.ReadFromUDP(buf) + if err != nil { + select { + case <-s.stop: + return + default: + continue + } + } + ip := remote.IP.String() + s.manager.metrics.RecordRequestIP("tunnel", s.tunnel.ID, ip, ip) + if !s.manager.security.Allow(ip, s.tunnel.ClientID, "tunnel", s.tunnel.ID) { + continue + } + key := remote.String() + s.mu.Lock() + sess, ok := s.sessions[key] + if !ok { + sess = s.createSession(remote) + if sess == nil { + s.mu.Unlock() + continue + } + s.sessions[key] = sess + go s.runSession(key, sess, remote) + } + sess.last = time.Now() + stream := sess.stream + s.mu.Unlock() + _, _ = stream.Write(buf[:n]) + } +} + +func (s *udpServer) createSession(remote *net.UDPAddr) *udpSession { + if !s.manager.bridge.IsOnline(s.tunnel.ClientID) { + return nil + } + mode, _ := resolveProxyConfig(s.manager.store, s.tunnel.ClientID, s.tunnel.IPForwardMode, s.tunnel.CustomHeaders) + meta := &protocol.LinkMeta{ + ConnType: protocol.ConnTypeUDP, + Target: s.tunnel.TargetAddr, + RemoteAddr: forwardIPForTCP(remote.String(), mode), + } + stream, err := s.manager.bridge.OpenStream(s.tunnel.ClientID, meta) + if err != nil { + return nil + } + return &udpSession{stream: stream, last: time.Now()} +} + +func (s *udpServer) runSession(key string, sess *udpSession, remote *net.UDPAddr) { + buf := make([]byte, 65535) + for { + n, err := sess.stream.Read(buf) + if err != nil { + break + } + _, _ = s.conn.WriteToUDP(buf[:n], remote) + inlet := int64(n) + s.manager.metrics.AddFlow("tunnel", s.tunnel.ID, s.tunnel.ClientID, inlet, 0) + } + s.mu.Lock() + delete(s.sessions, key) + s.mu.Unlock() + _ = sess.stream.Close() +} + +func (s *udpServer) sweeper() { + ticker := time.NewTicker(time.Minute) + defer ticker.Stop() + for { + select { + case <-ticker.C: + now := time.Now() + s.mu.Lock() + for k, sess := range s.sessions { + if now.Sub(sess.last) > 120*time.Second { + _ = sess.stream.Close() + delete(s.sessions, k) + } + } + s.mu.Unlock() + case <-s.stop: + return + } + } +} + +func (s *udpServer) Stop() error { + close(s.stop) + if s.conn != nil { + _ = s.conn.Close() + } + s.mu.Lock() + for _, sess := range s.sessions { + _ = sess.stream.Close() + } + s.sessions = make(map[string]*udpSession) + s.mu.Unlock() + return nil +} diff --git a/internal/security/ipmatcher.go b/internal/security/ipmatcher.go new file mode 100644 index 0000000..86b0849 --- /dev/null +++ b/internal/security/ipmatcher.go @@ -0,0 +1,64 @@ +package security + +import ( + "net" + + "github.com/wormhole/wormhole/internal/cache" + "github.com/wormhole/wormhole/internal/store" +) + +type Service struct { + cache *cache.Manager + store *store.Store +} + +func NewService(c *cache.Manager, st *store.Store) *Service { + return &Service{cache: c, store: st} +} + +func (s *Service) Allow(ip string, clientID uint, resourceType string, resourceID uint) bool { + scopes := []cache.Scope{ + {Kind: "global", ResourceID: 0}, + {Kind: "client", ResourceID: clientID}, + } + if resourceType == "host" || resourceType == "tunnel" { + scopes = append(scopes, cache.Scope{Kind: resourceType, ResourceID: resourceID}) + } + return s.cache.AllowIP(ip, scopes) +} + +func (s *Service) BlockIP(ip, scope string, resourceID uint, remark string) error { + rule := &store.IPRule{ + Scope: scope, + ResourceID: resourceID, + Type: "deny", + Pattern: ip, + PatternKind: "exact", + Priority: 100, + Remark: remark, + } + if err := s.store.CreateIPRule(rule); err != nil { + return err + } + return s.cache.ReloadIPRules(s.store) +} + +func DetectPatternKind(pattern string) string { + if _, _, err := net.ParseCIDR(pattern); err == nil { + return "cidr" + } + if len(pattern) > 0 && (pattern[0] == '^' || pattern[len(pattern)-1] == '$' || containsMeta(pattern)) { + return "regex" + } + return "exact" +} + +func containsMeta(s string) bool { + for _, c := range s { + switch c { + case '.', '*', '+', '?', '[', ']', '(', ')', '|', '\\': + return true + } + } + return false +} diff --git a/internal/server/server.go b/internal/server/server.go new file mode 100644 index 0000000..6fc9400 --- /dev/null +++ b/internal/server/server.go @@ -0,0 +1,120 @@ +package server + +import ( + "context" + "flag" + "io/fs" + "log" + "net/http" + "os" + "os/signal" + "syscall" + "time" + + "github.com/gin-gonic/gin" + "github.com/wormhole/wormhole/internal/api" + "github.com/wormhole/wormhole/internal/auth" + "github.com/wormhole/wormhole/internal/bridge" + "github.com/wormhole/wormhole/internal/cache" + "github.com/wormhole/wormhole/internal/config" + "github.com/wormhole/wormhole/internal/metrics" + "github.com/wormhole/wormhole/internal/proxy" + "github.com/wormhole/wormhole/internal/security" + "github.com/wormhole/wormhole/internal/store" + webdist "github.com/wormhole/wormhole/web" +) + +func Run(args []string) { + fs := flag.NewFlagSet("server", flag.ExitOnError) + fs.Parse(args) + + st, err := store.Open(config.DefaultDBPath) + if err != nil { + log.Fatalf("open store: %v", err) + } + + cfg, err := st.LoadConfig() + if err != nil { + log.Fatalf("load settings: %v", err) + } + log.Printf("[server] settings loaded (%s)", cfg.Summary()) + + c := cache.NewManager() + if err := c.ReloadAll(st); err != nil { + log.Fatalf("reload cache: %v", err) + } + + authSvc := auth.NewService(&cfg.Auth) + resAuth := auth.NewResourceAuth(c, st, &cfg.Auth) + sec := security.NewService(c, st) + b := bridge.New(c, st) + mc := metrics.NewCollector(st, c, b) + pm := proxy.NewManager(c, st, b, sec, resAuth, mc) + + if err := b.Start(cfg.Server.BridgeAddr, cfg.Server.TLSCertFile, cfg.Server.TLSKeyFile); err != nil { + log.Fatalf("bridge start: %v", err) + } + mc.Start(cfg.Metrics.FlushInterval) + if err := pm.StartAll(); err != nil { + log.Printf("start tunnels: %v", err) + } + if err := pm.StartHTTPServer(cfg.Server.HTTPProxyPort, cfg.Server.HTTPSProxyPort, cfg.Server.TLSCertFile, cfg.Server.TLSKeyFile); err != nil { + log.Printf("start http proxy: %v", err) + } + + apiServer := api.NewServer(cfg, st, c, authSvc, resAuth, sec, b, pm, mc) + router := apiServer.Router() + router.NoRoute(serveSPA()) + + srv := &http.Server{ + Addr: cfg.Server.HTTPAddr, + Handler: router, + } + go func() { + log.Printf("[server] http api on %s", cfg.Server.HTTPAddr) + if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { + log.Fatalf("http server: %v", err) + } + }() + + sig := make(chan os.Signal, 1) + signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM) + <-sig + log.Println("[server] shutting down...") + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + mc.Stop() + if err := pm.Shutdown(ctx); err != nil { + log.Printf("[server] proxy shutdown: %v", err) + } + _ = b.Shutdown() + if err := srv.Shutdown(ctx); err != nil { + log.Printf("[server] api shutdown: %v", err) + } + log.Println("[server] stopped") +} + +func serveSPA() gin.HandlerFunc { + distFS, err := fs.Sub(webdist.Dist, "dist") + if err != nil { + return func(c *gin.Context) { + c.String(http.StatusOK, "Wormhole API running. Build web dist for UI.") + } + } + fileServer := http.FileServer(http.FS(distFS)) + return func(c *gin.Context) { + path := c.Request.URL.Path + if path == "/" { + path = "/index.html" + } + if f, err := distFS.Open(path[1:]); err == nil { + _ = f.Close() + fileServer.ServeHTTP(c.Writer, c.Request) + return + } + c.Request.URL.Path = "/" + fileServer.ServeHTTP(c.Writer, c.Request) + } +} diff --git a/internal/store/apikey.go b/internal/store/apikey.go new file mode 100644 index 0000000..52366ee --- /dev/null +++ b/internal/store/apikey.go @@ -0,0 +1,87 @@ +package store + +import ( + "crypto/rand" + "crypto/sha256" + "encoding/hex" + "errors" + "fmt" +) + +func hashAPIKey(key string) string { + sum := sha256.Sum256([]byte(key)) + return hex.EncodeToString(sum[:]) +} + +func generateAPIKeyPlain() (string, string, error) { + b := make([]byte, 24) + if _, err := rand.Read(b); err != nil { + return "", "", err + } + plain := "wh_" + hex.EncodeToString(b) + prefix := plain + if len(prefix) > 12 { + prefix = prefix[:12] + } + return plain, prefix, nil +} + +func (s *Store) ListAPIKeys(userID uint, isAdmin bool) ([]APIKey, error) { + var keys []APIKey + q := s.db.Order("id asc") + if !isAdmin { + q = q.Where("user_id = ?", userID) + } + return keys, q.Find(&keys).Error +} + +func (s *Store) CreateAPIKey(name string, userID uint) (*APIKey, string, error) { + if name == "" { + return nil, "", errors.New("name required") + } + plain, prefix, err := generateAPIKeyPlain() + if err != nil { + return nil, "", err + } + key := &APIKey{ + Name: name, + KeyPrefix: prefix, + KeyHash: hashAPIKey(plain), + UserID: userID, + Status: true, + } + if err := s.db.Create(key).Error; err != nil { + return nil, "", err + } + return key, plain, nil +} + +func (s *Store) DeleteAPIKey(id uint, userID uint, isAdmin bool) error { + var key APIKey + if err := s.db.First(&key, id).Error; err != nil { + return err + } + if !isAdmin && key.UserID != userID { + return fmt.Errorf("permission denied") + } + return s.db.Delete(&APIKey{}, id).Error +} + +func (s *Store) ValidateAPIKey(plain string) (*User, error) { + if plain == "" { + return nil, errors.New("empty api key") + } + hash := hashAPIKey(plain) + var key APIKey + if err := s.db.Where("key_hash = ? AND status = ?", hash, true).First(&key).Error; err != nil { + return nil, errors.New("invalid api key") + } + user, err := s.GetUserByID(key.UserID) + if err != nil { + return nil, err + } + if !user.Status { + return nil, errors.New("user disabled") + } + return user, nil +} diff --git a/internal/store/domain_forward.go b/internal/store/domain_forward.go new file mode 100644 index 0000000..515e54a --- /dev/null +++ b/internal/store/domain_forward.go @@ -0,0 +1,176 @@ +package store + +import ( + "fmt" + "net/url" + "strings" + + "github.com/wormhole/wormhole/internal/forwardplugin" +) + +func normalizeDomainForwardRoute(host, location string) (string, string) { + host = strings.TrimSpace(strings.ToLower(host)) + location = strings.TrimSpace(location) + if location == "" { + location = "/" + } + if !strings.HasPrefix(location, "/") { + location = "/" + location + } + return host, location +} + +func (s *Store) ListDomainForwards() ([]DomainForward, error) { + var items []DomainForward + err := s.db.Order("id asc").Find(&items).Error + return items, err +} + +func (s *Store) GetDomainForwardByID(id uint) (*DomainForward, error) { + var df DomainForward + if err := s.db.First(&df, id).Error; err != nil { + return nil, err + } + return &df, nil +} + +func (s *Store) CreateDomainForward(df *DomainForward) error { + df.SourceHost, df.SourceLocation = normalizeDomainForwardRoute(df.SourceHost, df.SourceLocation) + return s.db.Create(df).Error +} + +func (s *Store) UpdateDomainForward(df *DomainForward) error { + df.SourceHost, df.SourceLocation = normalizeDomainForwardRoute(df.SourceHost, df.SourceLocation) + return s.db.Save(df).Error +} + +func (s *Store) DeleteDomainForward(id uint) error { + return s.db.Delete(&DomainForward{}, id).Error +} + +func (s *Store) DomainForwardRouteInUse(host, location string, excludeID uint) (bool, error) { + host, location = normalizeDomainForwardRoute(host, location) + q := s.db.Model(&DomainForward{}).Where("source_host = ? AND source_location = ?", host, location) + if excludeID > 0 { + q = q.Where("id <> ?", excludeID) + } + var count int64 + if err := q.Count(&count).Error; err != nil { + return false, err + } + return count > 0, nil +} + +// RouteConflict checks domain forward vs penetration host on same host+location. +func (s *Store) RouteConflict(host, location string, excludeForwardID, excludeHostID uint) error { + host, location = normalizeDomainForwardRoute(host, location) + inUse, err := s.DomainForwardRouteInUse(host, location, excludeForwardID) + if err != nil { + return err + } + if inUse { + return fmt.Errorf("域名与路径前缀已被其他转发规则占用") + } + hostInUse, err := s.HostRouteInUse(host, location, excludeHostID) + if err != nil { + return err + } + if hostInUse { + return fmt.Errorf("域名与路径前缀已被穿透域名占用") + } + return nil +} + +func ValidateDomainForward(df *DomainForward) error { + if strings.TrimSpace(df.SourceHost) == "" { + return fmt.Errorf("源域名不能为空") + } + target := strings.TrimSpace(df.TargetURL) + if target == "" { + return fmt.Errorf("目标 URL 不能为空") + } + u, err := url.Parse(target) + if err != nil || u.Scheme == "" || u.Host == "" { + return fmt.Errorf("目标 URL 格式无效,需包含协议和主机,如 https://example.com") + } + if u.Scheme != "http" && u.Scheme != "https" { + return fmt.Errorf("目标 URL 仅支持 http/https") + } + df.TargetURL = u.String() + + switch df.Mode { + case "redirect", "proxy": + default: + return fmt.Errorf("模式无效") + } + if df.Mode == "redirect" { + if df.RedirectMode == "" { + df.RedirectMode = "preserve" + } + if df.RedirectMode != "preserve" && df.RedirectMode != "fixed" { + return fmt.Errorf("跳转策略无效") + } + if df.RedirectCode == 0 { + df.RedirectCode = 302 + } + if df.RedirectCode != 301 && df.RedirectCode != 302 { + return fmt.Errorf("跳转状态码仅支持 301 或 302") + } + } + if df.Mode == "proxy" { + if df.ProxyType == "" { + df.ProxyType = "http" + } + if df.ProxyType != "http" && df.ProxyType != "socks5" && df.ProxyType != "http_proxy" { + return fmt.Errorf("代理类型无效") + } + if df.ProxyType == "socks5" && strings.TrimSpace(df.Socks5Addr) == "" { + return fmt.Errorf("SOCKS5 代理地址不能为空") + } + if df.ProxyType == "http_proxy" && strings.TrimSpace(df.HTTPProxyAddr) == "" { + return fmt.Errorf("HTTP 代理地址不能为空") + } + normalized, err := forwardplugin.ValidateAndNormalizePlugins(toPluginEntries(df.Plugins)) + if err != nil { + return err + } + df.Plugins = fromPluginEntries(normalized) + } + if df.SourceScheme == "" { + df.SourceScheme = "all" + } + if df.SourceLocation == "" { + df.SourceLocation = "/" + } + return nil +} + +func toPluginEntries(plugins ForwardPlugins) []forwardplugin.PluginEntry { + if len(plugins) == 0 { + return nil + } + out := make([]forwardplugin.PluginEntry, len(plugins)) + for i, p := range plugins { + out[i] = forwardplugin.PluginEntry{ + Type: p.Type, + Enabled: p.Enabled, + Config: p.Config, + } + } + return out +} + +func fromPluginEntries(entries []forwardplugin.PluginEntry) ForwardPlugins { + if len(entries) == 0 { + return nil + } + out := make(ForwardPlugins, len(entries)) + for i, e := range entries { + out[i] = ForwardPluginEntry{ + Type: e.Type, + Enabled: e.Enabled, + Config: e.Config, + } + } + return out +} diff --git a/internal/store/export.go b/internal/store/export.go new file mode 100644 index 0000000..ac7eda3 --- /dev/null +++ b/internal/store/export.go @@ -0,0 +1,145 @@ +package store + +import ( + "errors" + "time" +) + +const ExportVersion = 1 + +type TunnelExportItem struct { + ClientID uint `json:"client_id"` + ClientName string `json:"client_name,omitempty"` + Name string `json:"name"` + Mode string `json:"mode"` + ListenIP string `json:"listen_ip"` + ListenPort int `json:"listen_port"` + TargetAddr string `json:"target_addr"` + IPForwardMode string `json:"ip_forward_mode"` + CustomHeaders string `json:"custom_headers"` + Status bool `json:"status"` +} + +type HostExportItem struct { + ClientID uint `json:"client_id"` + ClientName string `json:"client_name,omitempty"` + Host string `json:"host"` + Location string `json:"location"` + Scheme string `json:"scheme"` + TargetAddr string `json:"target_addr"` + AutoHTTPS bool `json:"auto_https"` + IPForwardMode string `json:"ip_forward_mode"` + CustomHeaders string `json:"custom_headers"` + Status bool `json:"status"` +} + +type TunnelExportDoc struct { + Version int `json:"version"` + ExportedAt time.Time `json:"exported_at"` + Items []TunnelExportItem `json:"items"` +} + +type HostExportDoc struct { + Version int `json:"version"` + ExportedAt time.Time `json:"exported_at"` + Items []HostExportItem `json:"items"` +} + +func TunnelToExportItem(t Tunnel, clientName string) TunnelExportItem { + return TunnelExportItem{ + ClientID: t.ClientID, + ClientName: clientName, + Name: t.Name, + Mode: t.Mode, + ListenIP: t.ListenIP, + ListenPort: t.ListenPort, + TargetAddr: t.TargetAddr, + IPForwardMode: t.IPForwardMode, + CustomHeaders: t.CustomHeaders, + Status: t.Status, + } +} + +func HostToExportItem(h Host, clientName string) HostExportItem { + return HostExportItem{ + ClientID: h.ClientID, + ClientName: clientName, + Host: h.Host, + Location: h.Location, + Scheme: h.Scheme, + TargetAddr: h.TargetAddr, + AutoHTTPS: h.AutoHTTPS, + IPForwardMode: h.IPForwardMode, + CustomHeaders: h.CustomHeaders, + Status: h.Status, + } +} + +func (s *Store) FindTunnelByPort(port int) (*Tunnel, error) { + var t Tunnel + if err := s.db.Where("listen_port = ?", port).First(&t).Error; err != nil { + return nil, err + } + return &t, nil +} + +func (s *Store) FindHostByRouteGlobal(host, location string) (*Host, error) { + if location == "" { + location = "/" + } + var h Host + if err := s.db.Where("host = ? AND location = ?", host, location).First(&h).Error; err != nil { + return nil, err + } + return &h, nil +} + +func (s *Store) GetClientByName(name string) (*Client, error) { + var c Client + if err := s.db.Where("name = ?", name).First(&c).Error; err != nil { + return nil, err + } + return &c, nil +} + +func (s *Store) FindTunnelByListen(clientID uint, listenIP string, listenPort int) (*Tunnel, error) { + if listenIP == "" { + listenIP = "0.0.0.0" + } + var t Tunnel + if err := s.db.Where("client_id = ? AND listen_ip = ? AND listen_port = ?", clientID, listenIP, listenPort).First(&t).Error; err != nil { + return nil, err + } + return &t, nil +} + +func (s *Store) FindHostByRoute(clientID uint, host, location string) (*Host, error) { + if location == "" { + location = "/" + } + var h Host + if err := s.db.Where("client_id = ? AND host = ? AND location = ?", clientID, host, location).First(&h).Error; err != nil { + return nil, err + } + return &h, nil +} + +func ResolveImportClientID(s *Store, clientID uint, clientName string, ownerID uint, isAdmin bool) (uint, error) { + if clientID > 0 { + if err := ClientOwnerCheck(s, clientID, ownerID, isAdmin); err != nil { + return 0, err + } + return clientID, nil + } + if clientName == "" { + return 0, errors.New("client_id or client_name required") + } + c, err := s.GetClientByName(clientName) + if err != nil { + return 0, errors.New("client not found: " + clientName) + } + if err := ClientOwnerCheck(s, c.ID, ownerID, isAdmin); err != nil { + return 0, err + } + return c.ID, nil +} diff --git a/internal/store/models.go b/internal/store/models.go new file mode 100644 index 0000000..7242237 --- /dev/null +++ b/internal/store/models.go @@ -0,0 +1,236 @@ +package store + +import ( + "database/sql/driver" + "encoding/json" + "fmt" + "strings" + "time" +) + +type User struct { + ID uint `gorm:"primaryKey" json:"id"` + Username string `gorm:"uniqueIndex;size:64;not null" json:"username"` + PasswordHash string `gorm:"size:255;not null" json:"-"` + Role string `gorm:"size:16;not null;default:visitor" json:"role"` + Status bool `gorm:"not null;default:true" json:"status"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type Client struct { + ID uint `gorm:"primaryKey" json:"id"` + Name string `gorm:"size:128;not null" json:"name"` + VerifyKey string `gorm:"uniqueIndex;size:64;not null" json:"verify_key"` + OwnerUserID uint `gorm:"index;not null" json:"owner_user_id"` + RateLimit int64 `gorm:"default:0" json:"rate_limit"` + MaxConn int `gorm:"default:0" json:"max_conn"` + ExpireAt *time.Time `json:"expire_at"` + Status bool `gorm:"not null;default:true" json:"status"` + IPForwardMode string `gorm:"size:16;default:replace" json:"ip_forward_mode"` // replace, append + CustomHeaders string `gorm:"type:text" json:"custom_headers"` // JSON map + InletFlow int64 `gorm:"default:0" json:"inlet_flow"` + ExportFlow int64 `gorm:"default:0" json:"export_flow"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type Tunnel struct { + ID uint `gorm:"primaryKey" json:"id"` + ClientID uint `gorm:"index;not null" json:"client_id"` + Name string `gorm:"size:128" json:"name"` + Mode string `gorm:"size:16;not null" json:"mode"` // tcp, udp + ListenIP string `gorm:"size:64;default:0.0.0.0" json:"listen_ip"` + ListenPort int `gorm:"not null;uniqueIndex" json:"listen_port"` + TargetAddr string `gorm:"size:256;not null" json:"target_addr"` + IPForwardMode string `gorm:"size:16;default:replace" json:"ip_forward_mode"` // replace, append + CustomHeaders string `gorm:"type:text" json:"custom_headers"` // JSON map + Status bool `gorm:"not null;default:true" json:"status"` + RunStatus bool `gorm:"not null;default:false" json:"run_status"` + InletFlow int64 `gorm:"default:0" json:"inlet_flow"` + ExportFlow int64 `gorm:"default:0" json:"export_flow"` + VisitorAuthEnabled bool `gorm:"not null;default:false" json:"visitor_auth_enabled"` + VisitorBindMode string `gorm:"size:16;default:all" json:"visitor_bind_mode"` // all, selected + VisitorTTLSeconds int `gorm:"default:7200" json:"visitor_ttl_seconds"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type Host struct { + ID uint `gorm:"primaryKey" json:"id"` + ClientID uint `gorm:"index;not null" json:"client_id"` + Host string `gorm:"size:256;not null;uniqueIndex:idx_host_route" json:"host"` + Location string `gorm:"size:256;default:/;uniqueIndex:idx_host_route" json:"location"` + Scheme string `gorm:"size:16;default:all" json:"scheme"` // http, https, all + TargetAddr string `gorm:"size:256;not null" json:"target_addr"` + CertPath string `gorm:"size:512" json:"cert_path"` + KeyPath string `gorm:"size:512" json:"key_path"` + AutoHTTPS bool `gorm:"default:false" json:"auto_https"` + IPForwardMode string `gorm:"size:16;default:replace" json:"ip_forward_mode"` // replace, append + CustomHeaders string `gorm:"type:text" json:"custom_headers"` // JSON map + Status bool `gorm:"not null;default:true" json:"status"` + InletFlow int64 `gorm:"default:0" json:"inlet_flow"` + ExportFlow int64 `gorm:"default:0" json:"export_flow"` + VisitorAuthEnabled bool `gorm:"not null;default:false" json:"visitor_auth_enabled"` + VisitorBindMode string `gorm:"size:16;default:all" json:"visitor_bind_mode"` // all, selected + VisitorTTLSeconds int `gorm:"default:7200" json:"visitor_ttl_seconds"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type ResourceVisitor struct { + ID uint `gorm:"primaryKey" json:"id"` + ResourceType string `gorm:"size:16;not null;uniqueIndex:idx_rv_bind" json:"resource_type"` + ResourceID uint `gorm:"not null;uniqueIndex:idx_rv_bind" json:"resource_id"` + UserID uint `gorm:"not null;uniqueIndex:idx_rv_bind" json:"user_id"` + CreatedAt time.Time `json:"created_at"` +} + +type IPRule struct { + ID uint `gorm:"primaryKey" json:"id"` + Scope string `gorm:"size:16;not null;index" json:"scope"` // global, client, host, tunnel + ResourceID uint `gorm:"index;default:0" json:"resource_id"` + Type string `gorm:"size:8;not null" json:"type"` // allow, deny + Pattern string `gorm:"size:512;not null" json:"pattern"` + PatternKind string `gorm:"size:16;not null;default:exact" json:"pattern_kind"` // exact, cidr, regex + Priority int `gorm:"default:0" json:"priority"` + Remark string `gorm:"size:256" json:"remark"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type AuthPolicy struct { + ID uint `gorm:"primaryKey" json:"id"` + ResourceType string `gorm:"size:16;not null;index" json:"resource_type"` // host, tunnel + ResourceID uint `gorm:"index;not null" json:"resource_id"` + Type string `gorm:"size:16;not null" json:"type"` // basic, form, callback + Password string `gorm:"size:256" json:"-"` + CallbackURL string `gorm:"size:512" json:"callback_url"` + Enabled bool `gorm:"not null;default:true" json:"enabled"` + TTLSeconds int `gorm:"default:7200" json:"ttl_seconds"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type FlowStat struct { + ID uint `gorm:"primaryKey" json:"id"` + ResourceType string `gorm:"size:16;not null;uniqueIndex:idx_flow_resource" json:"resource_type"` + ResourceID uint `gorm:"not null;uniqueIndex:idx_flow_resource" json:"resource_id"` + InletBytes int64 `gorm:"default:0" json:"inlet_bytes"` + ExportBytes int64 `gorm:"default:0" json:"export_bytes"` + UpdatedAt time.Time `json:"updated_at"` +} + +type RequestIP struct { + ID uint `gorm:"primaryKey" json:"id"` + ResourceType string `gorm:"size:16;not null;uniqueIndex:idx_req_ip" json:"resource_type"` + ResourceID uint `gorm:"not null;uniqueIndex:idx_req_ip" json:"resource_id"` + IP string `gorm:"size:64;not null;uniqueIndex:idx_req_ip" json:"ip"` + DirectIP string `gorm:"size:64" json:"direct_ip"` + HitCount int64 `gorm:"default:0" json:"hit_count"` + LastSeenAt time.Time `json:"last_seen_at"` +} + +type Session struct { + ID uint `gorm:"primaryKey" json:"id"` + Token string `gorm:"uniqueIndex;size:512;not null" json:"token"` + UserID uint `gorm:"index;not null" json:"user_id"` + ExpiresAt time.Time `gorm:"index" json:"expires_at"` + CreatedAt time.Time `json:"created_at"` +} + +type APIKey struct { + ID uint `gorm:"primaryKey" json:"id"` + Name string `gorm:"size:128;not null" json:"name"` + KeyPrefix string `gorm:"size:16;not null" json:"key_prefix"` + KeyHash string `gorm:"size:64;not null;uniqueIndex" json:"-"` + UserID uint `gorm:"index;not null" json:"user_id"` + Status bool `gorm:"not null;default:true" json:"status"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +// VisitorAccessLog records visitor login and resource access (max 200 per user retained). +type VisitorAccessLog struct { + ID uint `gorm:"primaryKey" json:"id"` + UserID uint `gorm:"index:idx_va_user_time;not null" json:"user_id"` + ResourceType string `gorm:"size:16;not null" json:"resource_type"` + ResourceID uint `gorm:"not null" json:"resource_id"` + Action string `gorm:"size:16;not null" json:"action"` // login, access + Method string `gorm:"size:16" json:"method"` + Path string `gorm:"size:512" json:"path"` + IP string `gorm:"size:64" json:"ip"` + UserAgent string `gorm:"size:256" json:"user_agent"` + CreatedAt time.Time `gorm:"index:idx_va_user_time" json:"created_at"` +} + +// DomainForward maps a public source domain to another URL (redirect or reverse proxy). +// Unlike Host (penetration), this is handled entirely on the server without Agent. +type DomainForward struct { + ID uint `gorm:"primaryKey" json:"id"` + SourceHost string `gorm:"size:256;not null;uniqueIndex:idx_df_route" json:"source_host"` + SourceLocation string `gorm:"size:256;default:/;uniqueIndex:idx_df_route" json:"source_location"` + SourceScheme string `gorm:"size:16;default:all" json:"source_scheme"` // http, https, all + Mode string `gorm:"size:16;not null" json:"mode"` // redirect, proxy + TargetURL string `gorm:"size:1024;not null" json:"target_url"` + RedirectMode string `gorm:"size:16;default:preserve" json:"redirect_mode"` // preserve, fixed + RedirectCode int `gorm:"default:302" json:"redirect_code"` + ProxyType string `gorm:"size:16;default:http" json:"proxy_type"` // http(direct), socks5, http_proxy + Socks5Addr string `gorm:"size:256" json:"socks5_addr"` + Socks5User string `gorm:"size:128" json:"socks5_user"` + Socks5Pass string `gorm:"size:128" json:"-"` + HTTPProxyAddr string `gorm:"size:512" json:"http_proxy_addr"` + HTTPProxyUser string `gorm:"size:128" json:"http_proxy_user"` + HTTPProxyPass string `gorm:"size:128" json:"-"` + PreserveHost bool `gorm:"default:false" json:"preserve_host"` + Plugins ForwardPlugins `gorm:"type:text" json:"plugins"` + Status bool `gorm:"not null;default:true" json:"status"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type ForwardPluginEntry struct { + Type string `json:"type"` + Enabled bool `json:"enabled"` + Config json.RawMessage `json:"config"` +} + +type ForwardPlugins []ForwardPluginEntry + +func (p ForwardPlugins) Value() (driver.Value, error) { + if len(p) == 0 { + return "[]", nil + } + b, err := json.Marshal([]ForwardPluginEntry(p)) + if err != nil { + return nil, err + } + return string(b), nil +} + +func (p *ForwardPlugins) Scan(value interface{}) error { + if value == nil { + *p = nil + return nil + } + var raw string + switch v := value.(type) { + case string: + raw = v + case []byte: + raw = string(v) + default: + return fmt.Errorf("unsupported plugins value type %T", value) + } + raw = strings.TrimSpace(raw) + if raw == "" || raw == "null" { + *p = nil + return nil + } + var items []ForwardPluginEntry + if err := json.Unmarshal([]byte(raw), &items); err != nil { + return err + } + *p = items + return nil +} diff --git a/internal/store/query.go b/internal/store/query.go new file mode 100644 index 0000000..f1b3d9d --- /dev/null +++ b/internal/store/query.go @@ -0,0 +1,213 @@ +package store + +import ( + "fmt" + "strconv" + + "gorm.io/gorm" +) + +type PageParams struct { + Page int + PageSize int + Q string +} + +func NormalizePage(p PageParams) (offset, limit int) { + if p.Page < 1 { + p.Page = 1 + } + if p.PageSize < 1 { + p.PageSize = 20 + } + if p.PageSize > 200 { + p.PageSize = 200 + } + return (p.Page - 1) * p.PageSize, p.PageSize +} + +func tunnelOwnerScope(db *gorm.DB, clientID, ownerID uint, isAdmin bool) *gorm.DB { + q := db.Model(&Tunnel{}) + if clientID > 0 { + return q.Where("client_id = ?", clientID) + } + if !isAdmin { + var ids []uint + db.Model(&Client{}).Where("owner_user_id = ?", ownerID).Pluck("id", &ids) + if len(ids) == 0 { + return q.Where("1 = 0") + } + return q.Where("client_id IN ?", ids) + } + return q +} + +func hostOwnerScope(db *gorm.DB, clientID, ownerID uint, isAdmin bool) *gorm.DB { + q := db.Model(&Host{}) + if clientID > 0 { + return q.Where("client_id = ?", clientID) + } + if !isAdmin { + var ids []uint + db.Model(&Client{}).Where("owner_user_id = ?", ownerID).Pluck("id", &ids) + if len(ids) == 0 { + return q.Where("1 = 0") + } + return q.Where("client_id IN ?", ids) + } + return q +} + +func applyTunnelSearch(q *gorm.DB, keyword string) *gorm.DB { + if keyword == "" { + return q + } + like := "%" + keyword + "%" + portLike := "%" + keyword + "%" + return q.Where( + "name LIKE ? OR target_addr LIKE ? OR CAST(listen_port AS TEXT) LIKE ?", + like, like, portLike, + ) +} + +func applyHostSearch(q *gorm.DB, keyword string) *gorm.DB { + if keyword == "" { + return q + } + like := "%" + keyword + "%" + return q.Where("host LIKE ? OR target_addr LIKE ? OR location LIKE ?", like, like, like) +} + +func applyDomainForwardSearch(q *gorm.DB, keyword string) *gorm.DB { + if keyword == "" { + return q + } + like := "%" + keyword + "%" + return q.Where( + "source_host LIKE ? OR target_url LIKE ? OR source_location LIKE ?", + like, like, like, + ) +} + +func (s *Store) ListDomainForwardsPaged(p PageParams) ([]DomainForward, int64, error) { + var items []DomainForward + var total int64 + q := applyDomainForwardSearch(s.db.Model(&DomainForward{}), p.Q) + if err := q.Count(&total).Error; err != nil { + return nil, 0, err + } + offset, limit := NormalizePage(p) + err := q.Order("id asc").Offset(offset).Limit(limit).Find(&items).Error + return items, total, err +} + +func (s *Store) ListTunnelsPaged(clientID, ownerID uint, isAdmin bool, p PageParams) ([]Tunnel, int64, error) { + var tunnels []Tunnel + var total int64 + q := tunnelOwnerScope(s.db, clientID, ownerID, isAdmin) + q = applyTunnelSearch(q, p.Q) + if err := q.Count(&total).Error; err != nil { + return nil, 0, err + } + offset, limit := NormalizePage(p) + err := q.Order("id asc").Offset(offset).Limit(limit).Find(&tunnels).Error + return tunnels, total, err +} + +func (s *Store) ListHostsPaged(clientID, ownerID uint, isAdmin bool, p PageParams) ([]Host, int64, error) { + var hosts []Host + var total int64 + q := hostOwnerScope(s.db, clientID, ownerID, isAdmin) + q = applyHostSearch(q, p.Q) + if err := q.Count(&total).Error; err != nil { + return nil, 0, err + } + offset, limit := NormalizePage(p) + err := q.Order("id asc").Offset(offset).Limit(limit).Find(&hosts).Error + return hosts, total, err +} + +func (s *Store) TunnelPortInUse(port int, excludeID uint) (bool, error) { + if port <= 0 { + return false, fmt.Errorf("invalid port") + } + q := s.db.Model(&Tunnel{}).Where("listen_port = ?", port) + if excludeID > 0 { + q = q.Where("id <> ?", excludeID) + } + var count int64 + if err := q.Count(&count).Error; err != nil { + return false, err + } + return count > 0, nil +} + +func (s *Store) HostRouteInUse(host, location string, excludeID uint) (bool, error) { + if host == "" { + return false, fmt.Errorf("host required") + } + if location == "" { + location = "/" + } + q := s.db.Model(&Host{}).Where("host = ? AND location = ?", host, location) + if excludeID > 0 { + q = q.Where("id <> ?", excludeID) + } + var count int64 + if err := q.Count(&count).Error; err != nil { + return false, err + } + return count > 0, nil +} + +func (s *Store) ListTunnelsByFlow(limit, offset int) ([]Tunnel, int64, error) { + var tunnels []Tunnel + var total int64 + q := s.db.Model(&Tunnel{}) + if err := q.Count(&total).Error; err != nil { + return nil, 0, err + } + if limit <= 0 { + limit = 10 + } + err := q.Order("(inlet_flow + export_flow) desc").Offset(offset).Limit(limit).Find(&tunnels).Error + return tunnels, total, err +} + +func (s *Store) ListHostsByFlow(limit, offset int) ([]Host, int64, error) { + var hosts []Host + var total int64 + q := s.db.Model(&Host{}) + if err := q.Count(&total).Error; err != nil { + return nil, 0, err + } + if limit <= 0 { + limit = 10 + } + err := q.Order("(inlet_flow + export_flow) desc").Offset(offset).Limit(limit).Find(&hosts).Error + return hosts, total, err +} + +func (s *Store) ListAllRequestIPs(limit, offset int, qstr string) ([]RequestIP, int64, error) { + var items []RequestIP + var total int64 + q := s.db.Model(&RequestIP{}) + if qstr != "" { + like := "%" + qstr + "%" + q = q.Where("ip LIKE ? OR direct_ip LIKE ?", like, like) + } + if err := q.Count(&total).Error; err != nil { + return nil, 0, err + } + if limit <= 0 { + limit = 50 + } + err := q.Order("hit_count desc").Offset(offset).Limit(limit).Find(&items).Error + return items, total, err +} + +func ParsePageQuery(pageStr, pageSizeStr, q string) PageParams { + page, _ := strconv.Atoi(pageStr) + pageSize, _ := strconv.Atoi(pageSizeStr) + return PageParams{Page: page, PageSize: pageSize, Q: q} +} diff --git a/internal/store/settings.go b/internal/store/settings.go new file mode 100644 index 0000000..d45f60d --- /dev/null +++ b/internal/store/settings.go @@ -0,0 +1,71 @@ +package store + +import ( + "encoding/json" + "errors" + "time" + + "github.com/wormhole/wormhole/internal/config" + "gorm.io/gorm" +) + +const systemSettingsID = 1 + +type SystemSettings struct { + ID uint `gorm:"primaryKey" json:"id"` + Payload string `gorm:"type:text;not null" json:"-"` + UpdatedAt time.Time `json:"updated_at"` +} + +func (s *Store) ensureSystemSettings() error { + var row SystemSettings + err := s.db.First(&row, systemSettingsID).Error + if err == nil { + return nil + } + if !errors.Is(err, gorm.ErrRecordNotFound) { + return err + } + cfg := config.Default() + payload, err := json.Marshal(cfg) + if err != nil { + return err + } + return s.db.Create(&SystemSettings{ + ID: systemSettingsID, + Payload: string(payload), + }).Error +} + +func (s *Store) LoadConfig() (*config.Config, error) { + if err := s.ensureSystemSettings(); err != nil { + return nil, err + } + var row SystemSettings + if err := s.db.First(&row, systemSettingsID).Error; err != nil { + return nil, err + } + cfg := config.Default() + if err := json.Unmarshal([]byte(row.Payload), cfg); err != nil { + return nil, err + } + cfg.Database.Path = config.DefaultDBPath + cfg.Normalize() + return cfg, nil +} + +func (s *Store) SaveConfig(cfg *config.Config) error { + if err := s.ensureSystemSettings(); err != nil { + return err + } + cfg.Database.Path = config.DefaultDBPath + cfg.Normalize() + payload, err := json.Marshal(cfg) + if err != nil { + return err + } + return s.db.Model(&SystemSettings{}).Where("id = ?", systemSettingsID).Updates(map[string]interface{}{ + "payload": string(payload), + "updated_at": time.Now(), + }).Error +} diff --git a/internal/store/store.go b/internal/store/store.go new file mode 100644 index 0000000..afda738 --- /dev/null +++ b/internal/store/store.go @@ -0,0 +1,516 @@ +package store + +import ( + "fmt" + "os" + "path/filepath" + "time" + + "github.com/google/uuid" + "golang.org/x/crypto/bcrypt" + "gorm.io/driver/sqlite" + "gorm.io/gorm" + "gorm.io/gorm/logger" +) + +type Store struct { + db *gorm.DB +} + +func Open(path string) (*Store, error) { + dir := filepath.Dir(path) + if err := os.MkdirAll(dir, 0755); err != nil { + return nil, err + } + db, err := gorm.Open(sqlite.Open(path), &gorm.Config{ + Logger: logger.Default.LogMode(logger.Warn), + }) + if err != nil { + return nil, err + } + sqlDB, err := db.DB() + if err != nil { + return nil, err + } + sqlDB.SetMaxOpenConns(1) + if _, err := sqlDB.Exec("PRAGMA journal_mode=WAL"); err != nil { + return nil, fmt.Errorf("enable WAL: %w", err) + } + if _, err := sqlDB.Exec("PRAGMA busy_timeout=5000"); err != nil { + return nil, fmt.Errorf("set busy_timeout: %w", err) + } + s := &Store{db: db} + if err := s.migrate(); err != nil { + return nil, err + } + if err := s.seed(); err != nil { + return nil, err + } + return s, nil +} + +func (s *Store) DB() *gorm.DB { + return s.db +} + +func (s *Store) migrate() error { + return s.db.AutoMigrate( + &User{}, + &Client{}, + &Tunnel{}, + &Host{}, + &IPRule{}, + &AuthPolicy{}, + &FlowStat{}, + &RequestIP{}, + &Session{}, + &SystemSettings{}, + &APIKey{}, + &ResourceVisitor{}, + &VisitorAccessLog{}, + &DomainForward{}, + ) +} + +func (s *Store) seed() error { + var count int64 + s.db.Model(&User{}).Count(&count) + if count > 0 { + return nil + } + hash, err := bcrypt.GenerateFromPassword([]byte("admin"), bcrypt.DefaultCost) + if err != nil { + return err + } + admin := User{ + Username: "admin", + PasswordHash: string(hash), + Role: "admin", + Status: true, + } + return s.db.Create(&admin).Error +} + +func GenerateVerifyKey() string { + return uuid.New().String() +} + +func HashPassword(password string) (string, error) { + hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) + if err != nil { + return "", err + } + return string(hash), nil +} + +func CheckPassword(hash, password string) bool { + return bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) == nil +} + +func (s *Store) ListClients(ownerID uint, isAdmin bool) ([]Client, error) { + var clients []Client + q := s.db.Order("id asc") + if !isAdmin { + q = q.Where("owner_user_id = ?", ownerID) + } + return clients, q.Find(&clients).Error +} + +func (s *Store) GetClientByID(id uint) (*Client, error) { + var c Client + if err := s.db.First(&c, id).Error; err != nil { + return nil, err + } + return &c, nil +} + +func (s *Store) GetClientByVerifyKey(key string) (*Client, error) { + var c Client + if err := s.db.Where("verify_key = ? AND status = ?", key, true).First(&c).Error; err != nil { + return nil, err + } + return &c, nil +} + +func (s *Store) CreateClient(c *Client) error { + if c.VerifyKey == "" { + c.VerifyKey = GenerateVerifyKey() + } + return s.db.Create(c).Error +} + +func (s *Store) UpdateClient(c *Client) error { + return s.db.Save(c).Error +} + +func (s *Store) DeleteClient(id uint) error { + return s.db.Transaction(func(tx *gorm.DB) error { + var tunnelIDs, hostIDs []uint + tx.Model(&Tunnel{}).Where("client_id = ?", id).Pluck("id", &tunnelIDs) + tx.Model(&Host{}).Where("client_id = ?", id).Pluck("id", &hostIDs) + + for _, tid := range tunnelIDs { + if err := tx.Where("resource_type = ? AND resource_id = ?", "tunnel", tid).Delete(&AuthPolicy{}).Error; err != nil { + return err + } + if err := tx.Where("resource_type = ? AND resource_id = ?", "tunnel", tid).Delete(&ResourceVisitor{}).Error; err != nil { + return err + } + if err := tx.Where("scope = ? AND resource_id = ?", "tunnel", tid).Delete(&IPRule{}).Error; err != nil { + return err + } + if err := tx.Where("resource_type = ? AND resource_id = ?", "tunnel", tid).Delete(&FlowStat{}).Error; err != nil { + return err + } + if err := tx.Where("resource_type = ? AND resource_id = ?", "tunnel", tid).Delete(&RequestIP{}).Error; err != nil { + return err + } + } + for _, hid := range hostIDs { + if err := tx.Where("resource_type = ? AND resource_id = ?", "host", hid).Delete(&AuthPolicy{}).Error; err != nil { + return err + } + if err := tx.Where("resource_type = ? AND resource_id = ?", "host", hid).Delete(&ResourceVisitor{}).Error; err != nil { + return err + } + if err := tx.Where("scope = ? AND resource_id = ?", "host", hid).Delete(&IPRule{}).Error; err != nil { + return err + } + if err := tx.Where("resource_type = ? AND resource_id = ?", "host", hid).Delete(&FlowStat{}).Error; err != nil { + return err + } + if err := tx.Where("resource_type = ? AND resource_id = ?", "host", hid).Delete(&RequestIP{}).Error; err != nil { + return err + } + } + if err := tx.Where("scope = ? AND resource_id = ?", "client", id).Delete(&IPRule{}).Error; err != nil { + return err + } + if err := tx.Where("client_id = ?", id).Delete(&Tunnel{}).Error; err != nil { + return err + } + if err := tx.Where("client_id = ?", id).Delete(&Host{}).Error; err != nil { + return err + } + return tx.Delete(&Client{}, id).Error + }) +} + +func (s *Store) ListTunnels(clientID uint, ownerID uint, isAdmin bool) ([]Tunnel, error) { + var tunnels []Tunnel + q := s.db.Order("id asc") + if clientID > 0 { + q = q.Where("client_id = ?", clientID) + } else if !isAdmin { + var ids []uint + s.db.Model(&Client{}).Where("owner_user_id = ?", ownerID).Pluck("id", &ids) + if len(ids) == 0 { + return tunnels, nil + } + q = q.Where("client_id IN ?", ids) + } + return tunnels, q.Find(&tunnels).Error +} + +func (s *Store) GetTunnelByID(id uint) (*Tunnel, error) { + var t Tunnel + if err := s.db.First(&t, id).Error; err != nil { + return nil, err + } + return &t, nil +} + +func (s *Store) CreateTunnel(t *Tunnel) error { + return s.db.Create(t).Error +} + +func (s *Store) UpdateTunnel(t *Tunnel) error { + return s.db.Save(t).Error +} + +func (s *Store) DeleteTunnel(id uint) error { + _ = s.DeleteResourceVisitors("tunnel", id) + return s.db.Delete(&Tunnel{}, id).Error +} + +func (s *Store) ListHosts(clientID uint, ownerID uint, isAdmin bool) ([]Host, error) { + var hosts []Host + q := s.db.Order("id asc") + if clientID > 0 { + q = q.Where("client_id = ?", clientID) + } else if !isAdmin { + var ids []uint + s.db.Model(&Client{}).Where("owner_user_id = ?", ownerID).Pluck("id", &ids) + if len(ids) == 0 { + return hosts, nil + } + q = q.Where("client_id IN ?", ids) + } + return hosts, q.Find(&hosts).Error +} + +func (s *Store) GetHostByID(id uint) (*Host, error) { + var h Host + if err := s.db.First(&h, id).Error; err != nil { + return nil, err + } + return &h, nil +} + +func (s *Store) CreateHost(h *Host) error { + return s.db.Create(h).Error +} + +func (s *Store) UpdateHost(h *Host) error { + return s.db.Save(h).Error +} + +func (s *Store) DeleteHost(id uint) error { + _ = s.DeleteResourceVisitors("host", id) + return s.db.Delete(&Host{}, id).Error +} + +func (s *Store) ListIPRules(scope string, resourceID uint) ([]IPRule, error) { + var rules []IPRule + q := s.db.Order("priority desc, id asc") + if scope != "" { + q = q.Where("scope = ?", scope) + } + if resourceID > 0 { + q = q.Where("resource_id = ?", resourceID) + } + return rules, q.Find(&rules).Error +} + +func (s *Store) CreateIPRule(r *IPRule) error { + return s.db.Create(r).Error +} + +func (s *Store) DeleteIPRule(id uint) error { + return s.db.Delete(&IPRule{}, id).Error +} + +func (s *Store) ListAuthPolicies(resourceType string, resourceID uint) ([]AuthPolicy, error) { + var policies []AuthPolicy + q := s.db.Order("id desc") + if resourceType != "" { + q = q.Where("resource_type = ?", resourceType) + } + if resourceID > 0 { + q = q.Where("resource_id = ?", resourceID) + } + return policies, q.Find(&policies).Error +} + +func (s *Store) GetAuthPolicy(id uint) (*AuthPolicy, error) { + var p AuthPolicy + if err := s.db.First(&p, id).Error; err != nil { + return nil, err + } + return &p, nil +} + +func (s *Store) CreateAuthPolicy(p *AuthPolicy) error { + return s.db.Create(p).Error +} + +func (s *Store) UpdateAuthPolicy(p *AuthPolicy) error { + return s.db.Save(p).Error +} + +func (s *Store) DeleteAuthPolicy(id uint) error { + return s.db.Delete(&AuthPolicy{}, id).Error +} + +func (s *Store) ListUsers() ([]User, error) { + var users []User + return users, s.db.Order("id asc").Find(&users).Error +} + +func (s *Store) GetUserByUsername(username string) (*User, error) { + var u User + if err := s.db.Where("username = ?", username).First(&u).Error; err != nil { + return nil, err + } + return &u, nil +} + +func (s *Store) GetUserByID(id uint) (*User, error) { + var u User + if err := s.db.First(&u, id).Error; err != nil { + return nil, err + } + return &u, nil +} + +func (s *Store) CreateUser(u *User) error { + return s.db.Create(u).Error +} + +func (s *Store) UpdateUser(u *User) error { + return s.db.Save(u).Error +} + +func (s *Store) DeleteUser(id uint, currentUserID uint) error { + if id == currentUserID { + return fmt.Errorf("cannot delete yourself") + } + user, err := s.GetUserByID(id) + if err != nil { + return err + } + if user.Role == "admin" { + var adminCount int64 + s.db.Model(&User{}).Where("role = ?", "admin").Count(&adminCount) + if adminCount <= 1 { + return fmt.Errorf("cannot delete the last admin") + } + } + _ = s.DeleteVisitorAccessLogs(id) + return s.db.Delete(&User{}, id).Error +} + +func (s *Store) RecordRequestIP(resourceType string, resourceID uint, visitorIP, directIP string) error { + var rec RequestIP + err := s.db.Where("resource_type = ? AND resource_id = ? AND ip = ?", + resourceType, resourceID, visitorIP).First(&rec).Error + now := time.Now() + if err == gorm.ErrRecordNotFound { + rec = RequestIP{ + ResourceType: resourceType, + ResourceID: resourceID, + IP: visitorIP, + DirectIP: directIP, + HitCount: 1, + LastSeenAt: now, + } + return s.db.Create(&rec).Error + } + if err != nil { + return err + } + return s.db.Model(&rec).Updates(map[string]interface{}{ + "hit_count": rec.HitCount + 1, + "last_seen_at": now, + "direct_ip": directIP, + }).Error +} + +func (s *Store) ListRequestIPs(resourceType string, resourceID uint, limit, offset int) ([]RequestIP, int64, error) { + var items []RequestIP + var total int64 + q := s.db.Model(&RequestIP{}) + if resourceType != "" { + q = q.Where("resource_type = ?", resourceType) + } + if resourceID > 0 { + q = q.Where("resource_id = ?", resourceID) + } + q.Count(&total) + err := q.Order("last_seen_at desc").Limit(limit).Offset(offset).Find(&items).Error + return items, total, err +} + +func (s *Store) UpsertFlowStat(resourceType string, resourceID uint, inlet, export int64) error { + var stat FlowStat + err := s.db.Where("resource_type = ? AND resource_id = ?", resourceType, resourceID).First(&stat).Error + if err == gorm.ErrRecordNotFound { + stat = FlowStat{ + ResourceType: resourceType, + ResourceID: resourceID, + InletBytes: inlet, + ExportBytes: export, + } + return s.db.Create(&stat).Error + } + if err != nil { + return err + } + return s.db.Model(&stat).Updates(map[string]interface{}{ + "inlet_bytes": gorm.Expr("inlet_bytes + ?", inlet), + "export_bytes": gorm.Expr("export_bytes + ?", export), + }).Error +} + +func (s *Store) AddClientFlow(id uint, inlet, export int64) error { + return s.db.Model(&Client{}).Where("id = ?", id).Updates(map[string]interface{}{ + "inlet_flow": gorm.Expr("inlet_flow + ?", inlet), + "export_flow": gorm.Expr("export_flow + ?", export), + }).Error +} + +func (s *Store) AddTunnelFlow(id uint, inlet, export int64) error { + return s.db.Model(&Tunnel{}).Where("id = ?", id).Updates(map[string]interface{}{ + "inlet_flow": gorm.Expr("inlet_flow + ?", inlet), + "export_flow": gorm.Expr("export_flow + ?", export), + }).Error +} + +func (s *Store) AddHostFlow(id uint, inlet, export int64) error { + return s.db.Model(&Host{}).Where("id = ?", id).Updates(map[string]interface{}{ + "inlet_flow": gorm.Expr("inlet_flow + ?", inlet), + "export_flow": gorm.Expr("export_flow + ?", export), + }).Error +} + +func (s *Store) DashboardStats() (map[string]interface{}, error) { + var clientTotal, clientOnline int64 + var tunnelTotal, tunnelRunning int64 + var hostTotal int64 + var inletFlow, exportFlow int64 + + s.db.Model(&Client{}).Count(&clientTotal) + s.db.Model(&Tunnel{}).Count(&tunnelTotal) + s.db.Model(&Tunnel{}).Where("run_status = ?", true).Count(&tunnelRunning) + s.db.Model(&Host{}).Count(&hostTotal) + s.db.Model(&Client{}).Select("COALESCE(SUM(inlet_flow),0)").Scan(&inletFlow) + s.db.Model(&Client{}).Select("COALESCE(SUM(export_flow),0)").Scan(&exportFlow) + + return map[string]interface{}{ + "client_total": clientTotal, + "client_online": clientOnline, + "tunnel_total": tunnelTotal, + "tunnel_running": tunnelRunning, + "host_total": hostTotal, + "inlet_flow": inletFlow, + "export_flow": exportFlow, + }, nil +} + +func (s *Store) TopClientsByFlow(limit int) ([]Client, error) { + var clients []Client + err := s.db.Order("(inlet_flow + export_flow) desc").Limit(limit).Find(&clients).Error + return clients, err +} + +func (s *Store) TopTunnelsByFlow(limit int) ([]Tunnel, error) { + var tunnels []Tunnel + err := s.db.Order("(inlet_flow + export_flow) desc").Limit(limit).Find(&tunnels).Error + return tunnels, err +} + +func (s *Store) TopHostsByFlow(limit int) ([]Host, error) { + var hosts []Host + err := s.db.Order("(inlet_flow + export_flow) desc").Limit(limit).Find(&hosts).Error + return hosts, err +} + +func (s *Store) TopRequestIPs(limit int) ([]RequestIP, error) { + var items []RequestIP + err := s.db.Order("hit_count desc").Limit(limit).Find(&items).Error + return items, err +} + +func ClientOwnerCheck(s *Store, clientID, userID uint, isAdmin bool) error { + if isAdmin { + return nil + } + c, err := s.GetClientByID(clientID) + if err != nil { + return err + } + if c.OwnerUserID != userID { + return fmt.Errorf("permission denied") + } + return nil +} diff --git a/internal/store/visitor.go b/internal/store/visitor.go new file mode 100644 index 0000000..c5ce090 --- /dev/null +++ b/internal/store/visitor.go @@ -0,0 +1,88 @@ +package store + +import "gorm.io/gorm" + +func (s *Store) ListVisitors() ([]User, error) { + var users []User + err := s.db.Where("role = ?", "visitor").Order("id asc").Find(&users).Error + return users, err +} + +func (s *Store) ListResourceVisitorIDs(resourceType string, resourceID uint) ([]uint, error) { + var bindings []ResourceVisitor + err := s.db.Where("resource_type = ? AND resource_id = ?", resourceType, resourceID). + Order("user_id asc").Find(&bindings).Error + if err != nil { + return nil, err + } + ids := make([]uint, len(bindings)) + for i, b := range bindings { + ids[i] = b.UserID + } + return ids, nil +} + +func (s *Store) SetResourceVisitors(resourceType string, resourceID uint, userIDs []uint) error { + return s.db.Transaction(func(tx *gorm.DB) error { + if err := tx.Where("resource_type = ? AND resource_id = ?", resourceType, resourceID). + Delete(&ResourceVisitor{}).Error; err != nil { + return err + } + for _, uid := range userIDs { + rv := ResourceVisitor{ + ResourceType: resourceType, + ResourceID: resourceID, + UserID: uid, + } + if err := tx.Create(&rv).Error; err != nil { + return err + } + } + return nil + }) +} + +func (s *Store) DeleteResourceVisitors(resourceType string, resourceID uint) error { + return s.db.Where("resource_type = ? AND resource_id = ?", resourceType, resourceID). + Delete(&ResourceVisitor{}).Error +} + +func (s *Store) ListAllResourceVisitors() ([]ResourceVisitor, error) { + var items []ResourceVisitor + err := s.db.Order("resource_type, resource_id, user_id").Find(&items).Error + return items, err +} + +const MaxVisitorAccessLogsPerUser = 200 + +func (s *Store) AppendVisitorAccessLog(entry *VisitorAccessLog) error { + return s.db.Transaction(func(tx *gorm.DB) error { + if err := tx.Create(entry).Error; err != nil { + return err + } + var keepIDs []uint + if err := tx.Model(&VisitorAccessLog{}).Where("user_id = ?", entry.UserID). + Order("id desc").Limit(MaxVisitorAccessLogsPerUser).Pluck("id", &keepIDs).Error; err != nil { + return err + } + if len(keepIDs) == 0 { + return nil + } + return tx.Where("user_id = ? AND id NOT IN ?", entry.UserID, keepIDs). + Delete(&VisitorAccessLog{}).Error + }) +} + +func (s *Store) ListVisitorAccessLogs(userID uint, limit int) ([]VisitorAccessLog, error) { + if limit <= 0 || limit > MaxVisitorAccessLogsPerUser { + limit = MaxVisitorAccessLogsPerUser + } + var items []VisitorAccessLog + err := s.db.Where("user_id = ?", userID). + Order("id desc").Limit(limit).Find(&items).Error + return items, err +} + +func (s *Store) DeleteVisitorAccessLogs(userID uint) error { + return s.db.Where("user_id = ?", userID).Delete(&VisitorAccessLog{}).Error +} diff --git a/internal/version/version.go b/internal/version/version.go new file mode 100644 index 0000000..31646b0 --- /dev/null +++ b/internal/version/version.go @@ -0,0 +1,3 @@ +package version + +const Version = "0.1.0" diff --git a/migrations/001_init.sql b/migrations/001_init.sql new file mode 100644 index 0000000..b698710 --- /dev/null +++ b/migrations/001_init.sql @@ -0,0 +1,113 @@ +-- Wormhole schema (also applied via GORM AutoMigrate) + +CREATE TABLE IF NOT EXISTS users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + username TEXT NOT NULL UNIQUE, + password_hash TEXT NOT NULL, + role TEXT NOT NULL DEFAULT 'user', + status INTEGER NOT NULL DEFAULT 1, + created_at DATETIME, + updated_at DATETIME +); + +CREATE TABLE IF NOT EXISTS clients ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + verify_key TEXT NOT NULL UNIQUE, + owner_user_id INTEGER NOT NULL, + rate_limit INTEGER DEFAULT 0, + max_conn INTEGER DEFAULT 0, + expire_at DATETIME, + status INTEGER NOT NULL DEFAULT 1, + inlet_flow INTEGER DEFAULT 0, + export_flow INTEGER DEFAULT 0, + created_at DATETIME, + updated_at DATETIME +); + +CREATE TABLE IF NOT EXISTS tunnels ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id INTEGER NOT NULL, + name TEXT, + mode TEXT NOT NULL, + listen_ip TEXT DEFAULT '0.0.0.0', + listen_port INTEGER NOT NULL, + target_addr TEXT NOT NULL, + status INTEGER NOT NULL DEFAULT 1, + run_status INTEGER NOT NULL DEFAULT 0, + inlet_flow INTEGER DEFAULT 0, + export_flow INTEGER DEFAULT 0, + created_at DATETIME, + updated_at DATETIME +); + +CREATE TABLE IF NOT EXISTS hosts ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + client_id INTEGER NOT NULL, + host TEXT NOT NULL, + location TEXT DEFAULT '/', + scheme TEXT DEFAULT 'all', + target_addr TEXT NOT NULL, + cert_path TEXT, + key_path TEXT, + auto_https INTEGER DEFAULT 0, + status INTEGER NOT NULL DEFAULT 1, + inlet_flow INTEGER DEFAULT 0, + export_flow INTEGER DEFAULT 0, + created_at DATETIME, + updated_at DATETIME +); + +CREATE TABLE IF NOT EXISTS ip_rules ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + scope TEXT NOT NULL, + resource_id INTEGER DEFAULT 0, + type TEXT NOT NULL, + pattern TEXT NOT NULL, + pattern_kind TEXT NOT NULL DEFAULT 'exact', + priority INTEGER DEFAULT 0, + remark TEXT, + created_at DATETIME, + updated_at DATETIME +); + +CREATE TABLE IF NOT EXISTS auth_policies ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + resource_type TEXT NOT NULL, + resource_id INTEGER NOT NULL, + type TEXT NOT NULL, + password TEXT, + callback_url TEXT, + enabled INTEGER NOT NULL DEFAULT 1, + ttl_seconds INTEGER DEFAULT 7200, + created_at DATETIME, + updated_at DATETIME +); + +CREATE TABLE IF NOT EXISTS flow_stats ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + resource_type TEXT NOT NULL, + resource_id INTEGER NOT NULL, + inlet_bytes INTEGER DEFAULT 0, + export_bytes INTEGER DEFAULT 0, + updated_at DATETIME, + UNIQUE(resource_type, resource_id) +); + +CREATE TABLE IF NOT EXISTS request_ips ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + resource_type TEXT NOT NULL, + resource_id INTEGER NOT NULL, + ip TEXT NOT NULL, + hit_count INTEGER DEFAULT 0, + last_seen_at DATETIME, + UNIQUE(resource_type, resource_id, ip) +); + +CREATE TABLE IF NOT EXISTS sessions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + token TEXT NOT NULL UNIQUE, + user_id INTEGER NOT NULL, + expires_at DATETIME, + created_at DATETIME +); diff --git a/migrations/002_proxy_headers.sql b/migrations/002_proxy_headers.sql new file mode 100644 index 0000000..9ba1f0c --- /dev/null +++ b/migrations/002_proxy_headers.sql @@ -0,0 +1,10 @@ +-- Proxy headers and IP forward mode for clients, tunnels, hosts + +ALTER TABLE clients ADD COLUMN ip_forward_mode TEXT DEFAULT 'real'; +ALTER TABLE clients ADD COLUMN custom_headers TEXT DEFAULT ''; + +ALTER TABLE tunnels ADD COLUMN ip_forward_mode TEXT DEFAULT 'real'; +ALTER TABLE tunnels ADD COLUMN custom_headers TEXT DEFAULT ''; + +ALTER TABLE hosts ADD COLUMN ip_forward_mode TEXT DEFAULT 'real'; +ALTER TABLE hosts ADD COLUMN custom_headers TEXT DEFAULT ''; diff --git a/migrations/003_system_settings.sql b/migrations/003_system_settings.sql new file mode 100644 index 0000000..b9ded79 --- /dev/null +++ b/migrations/003_system_settings.sql @@ -0,0 +1,7 @@ +-- System settings stored in DB (also via GORM AutoMigrate) + +CREATE TABLE IF NOT EXISTS system_settings ( + id INTEGER PRIMARY KEY, + payload TEXT NOT NULL, + updated_at DATETIME +); diff --git a/scripts/docker-build-push-amd64.sh b/scripts/docker-build-push-amd64.sh new file mode 100755 index 0000000..bc04013 --- /dev/null +++ b/scripts/docker-build-push-amd64.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# 构建 linux/amd64 镜像并推送到私有仓库(不推 Docker Hub) +set -euo pipefail + +REGISTRY="${REGISTRY:-registry.rc707blog.top/rose_cat707}" +PLATFORM="${PLATFORM:-linux/amd64}" +TAG="${TAG:-latest}" +IMAGE="${IMAGE:-wormhole}" +FULL_IMAGE="${REGISTRY}/${IMAGE}:${TAG}" + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$ROOT" + +echo "==> 私有仓库: ${FULL_IMAGE}" +echo "==> 平台: ${PLATFORM}" + +if ! docker info >/dev/null 2>&1; then + echo "error: Docker 未运行,请先启动 Docker Desktop" >&2 + exit 1 +fi + +echo "==> building (local cache, no Docker Hub pull)..." +docker build \ + --platform "${PLATFORM}" \ + --pull=false \ + -f Dockerfile \ + -t "${FULL_IMAGE}" \ + . + +echo "==> pushing to private registry..." +docker push "${FULL_IMAGE}" + +echo "==> done" +echo " ${FULL_IMAGE}" +echo "" +echo "服务端: docker run ... ${FULL_IMAGE}" +echo "Agent: docker run ... ${FULL_IMAGE} agent -server :8528 -key [-tls]" diff --git a/scripts/docker-build-push-multiarch.sh b/scripts/docker-build-push-multiarch.sh new file mode 100755 index 0000000..163789d --- /dev/null +++ b/scripts/docker-build-push-multiarch.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +# 构建并推送多架构镜像 (amd64 + arm64) +set -euo pipefail + +REGISTRY="${REGISTRY:-registry.rc707blog.top/rose_cat707}" +PLATFORM="${PLATFORM:-linux/amd64,linux/arm64}" +TAG="${TAG:-latest}" +IMAGE="${IMAGE:-wormhole}" + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$ROOT" + +if ! docker info >/dev/null 2>&1; then + echo "error: Docker 未运行" >&2 + exit 1 +fi + +if ! docker buildx inspect wormhole-builder >/dev/null 2>&1; then + docker buildx create --name wormhole-builder --use +else + docker buildx use wormhole-builder +fi +docker buildx inspect --bootstrap >/dev/null + +docker buildx build \ + --platform "$PLATFORM" \ + -f Dockerfile \ + -t "${REGISTRY}/${IMAGE}:${TAG}" \ + --push \ + . + +echo "pushed ${REGISTRY}/${IMAGE}:${TAG} (${PLATFORM})" diff --git a/scripts/docker-entrypoint.sh b/scripts/docker-entrypoint.sh new file mode 100644 index 0000000..71026d9 --- /dev/null +++ b/scripts/docker-entrypoint.sh @@ -0,0 +1,3 @@ +#!/bin/sh +set -eu +exec /usr/local/bin/wormhole "$@" diff --git a/web/.npmrc b/web/.npmrc new file mode 100644 index 0000000..7549542 --- /dev/null +++ b/web/.npmrc @@ -0,0 +1 @@ +registry=https://registry.npmmirror.com diff --git a/web/dist/assets/index-6-ZkUqlB.js b/web/dist/assets/index-6-ZkUqlB.js new file mode 100644 index 0000000..2f9b31d --- /dev/null +++ b/web/dist/assets/index-6-ZkUqlB.js @@ -0,0 +1,172 @@ +var tee=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var xQe=tee((Wi,Gi)=>{(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))r(a);new MutationObserver(a=>{for(const i of a)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(a){const i={};return a.integrity&&(i.integrity=a.integrity),a.referrerPolicy&&(i.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?i.credentials="include":a.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(a){if(a.ep)return;a.ep=!0;const i=n(a);fetch(a.href,i)}})();/** +* @vue/shared v3.5.38 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function QA(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const hr={},zh=[],It=()=>{},Hz=()=>!1,cw=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),dw=e=>e.startsWith("onUpdate:"),Zr=Object.assign,eI=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},nee=Object.prototype.hasOwnProperty,un=(e,t)=>nee.call(e,t),Me=Array.isArray,Hh=e=>sy(e)==="[object Map]",fw=e=>sy(e)==="[object Set]",dc=e=>sy(e)==="[object Date]",et=e=>typeof e=="function",qe=e=>typeof e=="string",Xi=e=>typeof e=="symbol",yt=e=>e!==null&&typeof e=="object",fc=e=>(yt(e)||et(e))&&et(e.then)&&et(e.catch),Wz=Object.prototype.toString,sy=e=>Wz.call(e),ree=e=>sy(e).slice(8,-1),Qg=e=>sy(e)==="[object Object]",hw=e=>qe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,xg=QA(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),vw=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},aee=/-\w/g,ga=vw(e=>e.replace(aee,t=>t.slice(1).toUpperCase())),iee=/\B([A-Z])/g,ru=vw(e=>e.replace(iee,"-$1").toLowerCase()),ly=vw(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ud=vw(e=>e?`on${ly(e)}`:""),As=(e,t)=>!Object.is(e,t),Vb=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},tI=e=>{const t=parseFloat(e);return isNaN(t)?e:t},oee=e=>{const t=qe(e)?Number(e):NaN;return isNaN(t)?e:t};let RD;const pw=()=>RD||(RD=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function tt(e){if(Me(e)){const t={};for(let n=0;n{if(n){const r=n.split(lee);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function B(e){let t="";if(qe(e))t=e;else if(Me(e))for(let n=0;ncf(n,t))}const Yz=e=>!!(e&&e.__v_isRef===!0),ce=e=>qe(e)?e:e==null?"":Me(e)||yt(e)&&(e.toString===Wz||!et(e.toString))?Yz(e)?ce(e.value):JSON.stringify(e,jz,2):String(e),jz=(e,t)=>Yz(t)?jz(e,t.value):Hh(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,a],i)=>(n[ex(r,i)+" =>"]=a,n),{})}:fw(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ex(n))}:Xi(t)?ex(t):yt(t)&&!Me(t)&&!Qg(t)?String(t):t,ex=(e,t="")=>{var n;return Xi(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.38 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let na;class qz{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&na&&(na.active?(this.parent=na,this.index=(na.scopes||(na.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!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;t0&&--this._on===0){if(na===this)na=this.prevScope;else{let t=na;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,r;for(n=0,r=this.effects.length;n0)return;if(Tg){let t=Tg;for(Tg=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Cg;){let t=Cg;for(Cg=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function t6(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function n6(e){let t,n=e.depsTail,r=n;for(;r;){const a=r.prevDep;r.version===-1?(r===n&&(n=a),iI(r),vee(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=a}e.deps=t,e.depsTail=n}function I2(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(r6(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function r6(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===em)||(e.globalVersion=em,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!I2(e))))return;e.flags|=2;const t=e.dep,n=yr,r=Uo;yr=e,Uo=!0;try{t6(e);const a=e.fn(e._value);(t.version===0||As(a,e._value))&&(e.flags|=128,e._value=a,t.version++)}catch(a){throw t.version++,a}finally{yr=n,Uo=r,n6(e),e.flags&=-3}}function iI(e,t=!1){const{dep:n,prevSub:r,nextSub:a}=e;if(r&&(r.nextSub=a,e.prevSub=void 0),a&&(a.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)iI(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function vee(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Uo=!0;const a6=[];function Hl(){a6.push(Uo),Uo=!1}function Wl(){const e=a6.pop();Uo=e===void 0?!0:e}function OD(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=yr;yr=void 0;try{t()}finally{yr=n}}}let em=0;class pee{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 oI{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(!yr||!Uo||yr===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==yr)n=this.activeLink=new pee(yr,this),yr.deps?(n.prevDep=yr.depsTail,yr.depsTail.nextDep=n,yr.depsTail=n):yr.deps=yr.depsTail=n,i6(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=yr.depsTail,n.nextDep=void 0,yr.depsTail.nextDep=n,yr.depsTail=n,yr.deps===n&&(yr.deps=r)}return n}trigger(t){this.version++,em++,this.notify(t)}notify(t){rI();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{aI()}}}function i6(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)i6(r)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const k1=new WeakMap,Kd=Symbol(""),M2=Symbol(""),tm=Symbol("");function Ba(e,t,n){if(Uo&&yr){let r=k1.get(e);r||k1.set(e,r=new Map);let a=r.get(n);a||(r.set(n,a=new oI),a.map=r,a.key=n),a.track()}}function kl(e,t,n,r,a,i){const o=k1.get(e);if(!o){em++;return}const s=l=>{l&&l.trigger()};if(rI(),t==="clear")o.forEach(s);else{const l=Me(e),u=l&&hw(n);if(l&&n==="length"){const c=Number(r);o.forEach((d,f)=>{(f==="length"||f===tm||!Xi(f)&&f>=c)&&s(d)})}else switch((n!==void 0||o.has(void 0))&&s(o.get(n)),u&&s(o.get(tm)),t){case"add":l?u&&s(o.get("length")):(s(o.get(Kd)),Hh(e)&&s(o.get(M2)));break;case"delete":l||(s(o.get(Kd)),Hh(e)&&s(o.get(M2)));break;case"set":Hh(e)&&s(o.get(Kd));break}}aI()}function gee(e,t){const n=k1.get(e);return n&&n.get(t)}function Yf(e){const t=$n(e);return t===e?t:(Ba(t,"iterate",tm),Ui(e)?t:t.map(Xo))}function gw(e){return Ba(e=$n(e),"iterate",tm),e}function Es(e,t){return Gl(e)?av(Yd(e)?Xo(t):t):Xo(t)}const mee={__proto__:null,[Symbol.iterator](){return nx(this,Symbol.iterator,e=>Es(this,e))},concat(...e){return Yf(this).concat(...e.map(t=>Me(t)?Yf(t):t))},entries(){return nx(this,"entries",e=>(e[1]=Es(this,e[1]),e))},every(e,t){return pl(this,"every",e,t,void 0,arguments)},filter(e,t){return pl(this,"filter",e,t,n=>n.map(r=>Es(this,r)),arguments)},find(e,t){return pl(this,"find",e,t,n=>Es(this,n),arguments)},findIndex(e,t){return pl(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return pl(this,"findLast",e,t,n=>Es(this,n),arguments)},findLastIndex(e,t){return pl(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return pl(this,"forEach",e,t,void 0,arguments)},includes(...e){return rx(this,"includes",e)},indexOf(...e){return rx(this,"indexOf",e)},join(e){return Yf(this).join(e)},lastIndexOf(...e){return rx(this,"lastIndexOf",e)},map(e,t){return pl(this,"map",e,t,void 0,arguments)},pop(){return gp(this,"pop")},push(...e){return gp(this,"push",e)},reduce(e,...t){return ND(this,"reduce",e,t)},reduceRight(e,...t){return ND(this,"reduceRight",e,t)},shift(){return gp(this,"shift")},some(e,t){return pl(this,"some",e,t,void 0,arguments)},splice(...e){return gp(this,"splice",e)},toReversed(){return Yf(this).toReversed()},toSorted(e){return Yf(this).toSorted(e)},toSpliced(...e){return Yf(this).toSpliced(...e)},unshift(...e){return gp(this,"unshift",e)},values(){return nx(this,"values",e=>Es(this,e))}};function nx(e,t,n){const r=gw(e),a=r[t]();return r!==e&&!Ui(e)&&(a._next=a.next,a.next=()=>{const i=a._next();return i.done||(i.value=n(i.value)),i}),a}const yee=Array.prototype;function pl(e,t,n,r,a,i){const o=gw(e),s=o!==e&&!Ui(e),l=o[t];if(l!==yee[t]){const d=l.apply(e,i);return s?Xo(d):d}let u=n;o!==e&&(s?u=function(d,f){return n.call(this,Es(e,d),f,e)}:n.length>2&&(u=function(d,f){return n.call(this,d,f,e)}));const c=l.call(o,u,r);return s&&a?a(c):c}function ND(e,t,n,r){const a=gw(e),i=a!==e&&!Ui(e);let o=n,s=!1;a!==e&&(i?(s=r.length===0,o=function(u,c,d){return s&&(s=!1,u=Es(e,u)),n.call(this,u,Es(e,c),d,e)}):n.length>3&&(o=function(u,c,d){return n.call(this,u,c,d,e)}));const l=a[t](o,...r);return s?Es(e,l):l}function rx(e,t,n){const r=$n(e);Ba(r,"iterate",tm);const a=r[t](...n);return(a===-1||a===!1)&&_w(n[0])?(n[0]=$n(n[0]),r[t](...n)):a}function gp(e,t,n=[]){Hl(),rI();const r=$n(e)[t].apply(e,n);return aI(),Wl(),r}const bee=QA("__proto__,__v_isRef,__isVue"),o6=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Xi));function _ee(e){Xi(e)||(e=String(e));const t=$n(this);return Ba(t,"has",e),t.hasOwnProperty(e)}class s6{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){if(n==="__v_skip")return t.__v_skip;const a=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!a;if(n==="__v_isReadonly")return a;if(n==="__v_isShallow")return i;if(n==="__v_raw")return r===(a?i?h6:f6:i?d6:c6).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const o=Me(t);if(!a){let l;if(o&&(l=mee[n]))return l;if(n==="hasOwnProperty")return _ee}const s=Reflect.get(t,n,Hn(t)?t:r);if((Xi(n)?o6.has(n):bee(n))||(a||Ba(t,"get",n),i))return s;if(Hn(s)){const l=o&&hw(n)?s:s.value;return a&&yt(l)?rv(l):l}return yt(s)?a?rv(s):Qt(s):s}}class l6 extends s6{constructor(t=!1){super(!1,t)}set(t,n,r,a){let i=t[n];const o=Me(t)&&hw(n);if(!this._isShallow){const u=Gl(i);if(!Ui(r)&&!Gl(r)&&(i=$n(i),r=$n(r)),!o&&Hn(i)&&!Hn(r))return u||(i.value=r),!0}const s=o?Number(n)e,l0=e=>Reflect.getPrototypeOf(e);function Tee(e,t,n){return function(...r){const a=this.__v_raw,i=$n(a),o=Hh(i),s=e==="entries"||e===Symbol.iterator&&o,l=e==="keys"&&o,u=a[e](...r),c=n?P2:t?av:Xo;return!t&&Ba(i,"iterate",l?M2:Kd),Zr(Object.create(u),{next(){const{value:d,done:f}=u.next();return f?{value:d,done:f}:{value:s?[c(d[0]),c(d[1])]:c(d),done:f}}})}}function u0(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Eee(e,t){const n={get(a){const i=this.__v_raw,o=$n(i),s=$n(a);e||(As(a,s)&&Ba(o,"get",a),Ba(o,"get",s));const{has:l}=l0(o),u=t?P2:e?av:Xo;if(l.call(o,a))return u(i.get(a));if(l.call(o,s))return u(i.get(s));i!==o&&i.get(a)},get size(){const a=this.__v_raw;return!e&&Ba($n(a),"iterate",Kd),a.size},has(a){const i=this.__v_raw,o=$n(i),s=$n(a);return e||(As(a,s)&&Ba(o,"has",a),Ba(o,"has",s)),a===s?i.has(a):i.has(a)||i.has(s)},forEach(a,i){const o=this,s=o.__v_raw,l=$n(s),u=t?P2:e?av:Xo;return!e&&Ba(l,"iterate",Kd),s.forEach((c,d)=>a.call(i,u(c),u(d),o))}};return Zr(n,e?{add:u0("add"),set:u0("set"),delete:u0("delete"),clear:u0("clear")}:{add(a){const i=$n(this),o=l0(i),s=$n(a),l=!t&&!Ui(a)&&!Gl(a)?s:a;return o.has.call(i,l)||As(a,l)&&o.has.call(i,a)||As(s,l)&&o.has.call(i,s)||(i.add(l),kl(i,"add",l,l)),this},set(a,i){!t&&!Ui(i)&&!Gl(i)&&(i=$n(i));const o=$n(this),{has:s,get:l}=l0(o);let u=s.call(o,a);u||(a=$n(a),u=s.call(o,a));const c=l.call(o,a);return o.set(a,i),u?As(i,c)&&kl(o,"set",a,i):kl(o,"add",a,i),this},delete(a){const i=$n(this),{has:o,get:s}=l0(i);let l=o.call(i,a);l||(a=$n(a),l=o.call(i,a)),s&&s.call(i,a);const u=i.delete(a);return l&&kl(i,"delete",a,void 0),u},clear(){const a=$n(this),i=a.size!==0,o=a.clear();return i&&kl(a,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(a=>{n[a]=Tee(a,e,t)}),n}function mw(e,t){const n=Eee(e,t);return(r,a,i)=>a==="__v_isReactive"?!e:a==="__v_isReadonly"?e:a==="__v_raw"?r:Reflect.get(un(n,a)&&a in r?n:r,a,i)}const kee={get:mw(!1,!1)},Aee={get:mw(!1,!0)},Iee={get:mw(!0,!1)},Mee={get:mw(!0,!0)},c6=new WeakMap,d6=new WeakMap,f6=new WeakMap,h6=new WeakMap;function Pee(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Qt(e){return Gl(e)?e:bw(e,!1,wee,kee,c6)}function yw(e){return bw(e,!1,xee,Aee,d6)}function rv(e){return bw(e,!0,See,Iee,f6)}function v6(e){return bw(e,!0,Cee,Mee,h6)}function bw(e,t,n,r,a){if(!yt(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const i=a.get(e);if(i)return i;const o=Pee(ree(e));if(o===0)return e;const s=new Proxy(e,o===2?r:n);return a.set(e,s),s}function Yd(e){return Gl(e)?Yd(e.__v_raw):!!(e&&e.__v_isReactive)}function Gl(e){return!!(e&&e.__v_isReadonly)}function Ui(e){return!!(e&&e.__v_isShallow)}function _w(e){return e?!!e.__v_raw:!1}function $n(e){const t=e&&e.__v_raw;return t?$n(t):e}function $s(e){return!un(e,"__v_skip")&&Object.isExtensible(e)&&Gz(e,"__v_skip",!0),e}const Xo=e=>yt(e)?Qt(e):e,av=e=>yt(e)?rv(e):e;function Hn(e){return e?e.__v_isRef===!0:!1}function H(e){return p6(e,!1)}function Ut(e){return p6(e,!0)}function p6(e,t){return Hn(e)?e:new Lee(e,t)}class Lee{constructor(t,n){this.dep=new oI,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:$n(t),this._value=n?t:Xo(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,r=this.__v_isShallow||Ui(t)||Gl(t);t=r?t:$n(t),As(t,n)&&(this._rawValue=t,this._value=r?t:Xo(t),this.dep.trigger())}}function $b(e){e.dep&&e.dep.trigger()}function y(e){return Hn(e)?e.value:e}function Ir(e){return et(e)?e():y(e)}const Dee={get:(e,t,n)=>t==="__v_raw"?e:y(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const a=e[t];return Hn(a)&&!Hn(n)?(a.value=n,!0):Reflect.set(e,t,n,r)}};function g6(e){return Yd(e)?e:new Proxy(e,Dee)}function Jr(e){const t=Me(e)?new Array(e.length):{};for(const n in e)t[n]=m6(e,n);return t}class Ree{constructor(t,n,r){this._object=t,this._defaultValue=r,this.__v_isRef=!0,this._value=void 0,this._key=Xi(n)?n:String(n),this._raw=$n(t);let a=!0,i=t;if(!Me(t)||Xi(this._key)||!hw(this._key))do a=!_w(i)||Ui(i);while(a&&(i=i.__v_raw));this._shallow=a}get value(){let t=this._object[this._key];return this._shallow&&(t=y(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&Hn(this._raw[this._key])){const n=this._object[this._key];if(Hn(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return gee(this._raw,this._key)}}class Oee{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function xn(e,t,n){return Hn(e)?e:et(e)?new Oee(e):yt(e)&&arguments.length>1?m6(e,t,n):H(e)}function m6(e,t,n){return new Ree(e,t,n)}class Nee{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new oI(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=em-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&yr!==this)return e6(this,!0),!0}get value(){const t=this.dep.track();return r6(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Vee(e,t,n=!1){let r,a;return et(e)?r=e:(r=e.get,a=e.set),new Nee(r,a,n)}const c0={},A1=new WeakMap;let vd;function $ee(e,t=!1,n=vd){if(n){let r=A1.get(n);r||A1.set(n,r=[]),r.push(e)}}function Bee(e,t,n=hr){const{immediate:r,deep:a,once:i,scheduler:o,augmentJob:s,call:l}=n,u=w=>a?w:Ui(w)||a===!1||a===0?Al(w,1):Al(w);let c,d,f,h,v=!1,p=!1;if(Hn(e)?(d=()=>e.value,v=Ui(e)):Yd(e)?(d=()=>u(e),v=!0):Me(e)?(p=!0,v=e.some(w=>Yd(w)||Ui(w)),d=()=>e.map(w=>{if(Hn(w))return w.value;if(Yd(w))return u(w);if(et(w))return l?l(w,2):w()})):et(e)?t?d=l?()=>l(e,2):e:d=()=>{if(f){Hl();try{f()}finally{Wl()}}const w=vd;vd=c;try{return l?l(e,3,[h]):e(h)}finally{vd=w}}:d=It,t&&a){const w=d,S=a===!0?1/0:a;d=()=>Al(w(),S)}const g=nI(),m=()=>{c.stop(),g&&g.active&&eI(g.effects,c)};if(i&&t){const w=t;t=(...S)=>{const x=w(...S);return m(),x}}let b=p?new Array(e.length).fill(c0):c0;const _=w=>{if(!(!(c.flags&1)||!c.dirty&&!w))if(t){const S=c.run();if(w||a||v||(p?S.some((x,C)=>As(x,b[C])):As(S,b))){f&&f();const x=vd;vd=c;try{const C=[S,b===c0?void 0:p&&b[0]===c0?[]:b,h];b=S,l?l(t,3,C):t(...C)}finally{vd=x}}}else c.run()};return s&&s(_),c=new Jz(d),c.scheduler=o?()=>o(_,!1):_,h=w=>$ee(w,!1,c),f=c.onStop=()=>{const w=A1.get(c);if(w){if(l)l(w,4);else for(const S of w)S();A1.delete(c)}},t?r?_(!0):b=c.run():o?o(_.bind(null,!0),!0):c.run(),m.pause=c.pause.bind(c),m.resume=c.resume.bind(c),m.stop=m,m}function Al(e,t=1/0,n){if(t<=0||!yt(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Hn(e))Al(e.value,t,n);else if(Me(e))for(let r=0;r{Al(r,t,n)});else if(Qg(e)){for(const r in e)Al(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Al(e[r],t,n)}return e}/** +* @vue/runtime-core v3.5.38 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function uy(e,t,n,r){try{return r?e(...r):e()}catch(a){ww(a,t,n)}}function wo(e,t,n,r){if(et(e)){const a=uy(e,t,n,r);return a&&fc(a)&&a.catch(i=>{ww(i,t,n)}),a}if(Me(e)){const a=[];for(let i=0;i>>1,a=ai[r],i=nm(a);i=nm(n)?ai.push(e):ai.splice(zee(t),0,e),e.flags|=1,b6()}}function b6(){I1||(I1=y6.then(w6))}function Hee(e){Me(e)?Wh.push(...e):Fu&&e.id===-1?Fu.splice(xh+1,0,e):e.flags&1||(Wh.push(e),e.flags|=1),b6()}function VD(e,t,n=Cs+1){for(;nnm(n)-nm(r));if(Wh.length=0,Fu){Fu.push(...t);return}for(Fu=t,xh=0;xhe.id==null?e.flags&2?-1:1/0:e.id;function w6(e){try{for(Cs=0;Cs{r._d&&D1(-1);const i=M1(t);let o;try{o=e(...a)}finally{M1(i),r._d&&D1(1)}return o};return r._n=!0,r._c=!0,r._d=!0,r}function gt(e,t){if(xa===null)return e;const n=Tw(xa),r=e.dirs||(e.dirs=[]);for(let a=0;a1)return n&&et(t)?t.call(r&&r.proxy):t}}function x6(){return!!(Tt()||jd)}const Wee=Symbol.for("v-scx"),Gee=()=>Ge(Wee);function Ua(e,t){return lI(e,null,t)}function _e(e,t,n){return lI(e,t,n)}function lI(e,t,n=hr){const{immediate:r,deep:a,flush:i,once:o}=n,s=Zr({},n),l=t&&r||!t&&i!=="post";let u;if(im){if(i==="sync"){const h=Gee();u=h.__watcherHandles||(h.__watcherHandles=[])}else if(!l){const h=()=>{};return h.stop=It,h.resume=It,h.pause=It,h}}const c=Fa;s.call=(h,v,p)=>wo(h,c,v,p);let d=!1;i==="post"?s.scheduler=h=>{Ja(h,c&&c.suspense)}:i!=="sync"&&(d=!0,s.scheduler=(h,v)=>{v?h():sI(h)}),s.augmentJob=h=>{t&&(h.flags|=4),d&&(h.flags|=2,c&&(h.id=c.uid,h.i=c))};const f=Bee(e,t,s);return im&&(u?u.push(f):l&&f()),f}function Uee(e,t,n){const r=this.proxy,a=qe(e)?e.includes(".")?C6(r,e):()=>r[e]:e.bind(r,r);let i;et(t)?i=t:(i=t.handler,n=t);const o=fy(this),s=lI(a,i.bind(r),n);return o(),s}function C6(e,t){const n=t.split(".");return()=>{let r=e;for(let a=0;ae.__isTeleport,Sd=e=>e&&(e.disabled||e.disabled===""),Kee=e=>e&&(e.defer||e.defer===""),$D=e=>typeof SVGElement<"u"&&e instanceof SVGElement,BD=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,L2=(e,t)=>{const n=e&&e.to;return qe(n)?t?t(n):null:n},Yee={name:"Teleport",__isTeleport:!0,process(e,t,n,r,a,i,o,s,l,u){const{mc:c,pc:d,pbc:f,o:{insert:h,querySelector:v,createText:p,createComment:g,parentNode:m}}=u,b=Sd(t.props);let{dynamicChildren:_}=t;const w=(C,T,E)=>{C.shapeFlag&16&&c(C.children,T,E,a,i,o,s,l)},S=(C=t)=>{const T=Sd(C.props),E=C.target=L2(C.props,v),k=D2(E,C,p,h);E&&(o!=="svg"&&$D(E)?o="svg":o!=="mathml"&&BD(E)&&(o="mathml"),a&&a.isCE&&(a.ce._teleportTargets||(a.ce._teleportTargets=new Set)).add(E),T||(w(C,E,k),ag(C,!1)))},x=C=>{const T=()=>{if(Du.get(C)===T){if(Du.delete(C),Sd(C.props)){const E=m(C.el)||n;w(C,E,C.anchor),ag(C,!0)}S(C)}};Du.set(C,T),Ja(T,i)};if(e==null){const C=t.el=p(""),T=t.anchor=p("");if(h(C,n,r),h(T,n,r),Kee(t.props)||i&&i.pendingBranch){x(t);return}b&&(w(t,n,T),ag(t,!0)),S()}else{t.el=e.el;const C=t.anchor=e.anchor,T=Du.get(e);if(T){T.flags|=8,Du.delete(e),x(t);return}t.targetStart=e.targetStart;const E=t.target=e.target,k=t.targetAnchor=e.targetAnchor,A=Sd(e.props),I=A?n:E,P=A?C:k;if(o==="svg"||$D(E)?o="svg":(o==="mathml"||BD(E))&&(o="mathml"),_?(f(e.dynamicChildren,_,I,a,i,o,s),gI(e,t,!0)):l||d(e,t,I,P,a,i,o,s,!1),b)A?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):d0(t,n,C,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const R=t.target=L2(t.props,v);R&&d0(t,R,null,u,0)}else A&&d0(t,E,k,u,1);ag(t,b)}},remove(e,t,n,{um:r,o:{remove:a}},i){const{shapeFlag:o,children:s,anchor:l,targetStart:u,targetAnchor:c,target:d,props:f}=e,h=i||!Sd(f),v=Du.get(e);if(v&&(v.flags|=8,Du.delete(e)),d&&(a(u),a(c)),i&&a(l),!v&&o&16)for(let p=0;p{e.isMounted=!0}),yn(()=>{e.isUnmounting=!0}),e}const Ji=[Function,Array],A6={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ji,onEnter:Ji,onAfterEnter:Ji,onEnterCancelled:Ji,onBeforeLeave:Ji,onLeave:Ji,onAfterLeave:Ji,onLeaveCancelled:Ji,onBeforeAppear:Ji,onAppear:Ji,onAfterAppear:Ji,onAppearCancelled:Ji},I6=e=>{const t=e.subTree;return t.component?I6(t.component):t},qee={name:"BaseTransition",props:A6,setup(e,{slots:t}){const n=Tt(),r=k6();return()=>{const a=t.default&&uI(t.default(),!0),i=a&&a.length?M6(a):n.subTree?fe():void 0;if(!i)return;const o=$n(e),{mode:s}=o;if(r.isLeaving)return ax(i);const l=FD(i);if(!l)return ax(i);let u=rm(l,o,r,n,d=>u=d);l.type!==Tr&&df(l,u);let c=n.subTree&&FD(n.subTree);if(c&&c.type!==Tr&&!xd(c,l)&&I6(n).type!==Tr){let d=rm(c,o,r,n);if(df(c,d),s==="out-in"&&l.type!==Tr)return r.isLeaving=!0,d.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete d.afterLeave,c=void 0},ax(i);s==="in-out"&&l.type!==Tr?d.delayLeave=(f,h,v)=>{const p=P6(r,c);p[String(c.key)]=c,f[uo]=()=>{h(),f[uo]=void 0,delete u.delayedLeave,c=void 0},u.delayedLeave=()=>{v(),delete u.delayedLeave,c=void 0}}:c=void 0}else c&&(c=void 0);return i}}};function M6(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==Tr){t=n;break}}return t}const Xee=qee;function P6(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function rm(e,t,n,r,a){const{appear:i,mode:o,persisted:s=!1,onBeforeEnter:l,onEnter:u,onAfterEnter:c,onEnterCancelled:d,onBeforeLeave:f,onLeave:h,onAfterLeave:v,onLeaveCancelled:p,onBeforeAppear:g,onAppear:m,onAfterAppear:b,onAppearCancelled:_}=t,w=String(e.key),S=P6(n,e),x=(E,k)=>{E&&wo(E,r,9,k)},C=(E,k)=>{const A=k[1];x(E,k),Me(E)?E.every(I=>I.length<=1)&&A():E.length<=1&&A()},T={mode:o,persisted:s,beforeEnter(E){let k=l;if(!n.isMounted)if(i)k=g||l;else return;E[uo]&&E[uo](!0);const A=S[w];A&&xd(e,A)&&A.el[uo]&&A.el[uo](),x(k,[E])},enter(E){if(S[w]===e)return;let k=u,A=c,I=d;if(!n.isMounted)if(i)k=m||u,A=b||c,I=_||d;else return;let P=!1;E[mp]=O=>{P||(P=!0,O?x(I,[E]):x(A,[E]),T.delayedLeave&&T.delayedLeave(),E[mp]=void 0)};const R=E[mp].bind(null,!1);k?C(k,[E,R]):R()},leave(E,k){const A=String(e.key);if(E[mp]&&E[mp](!0),n.isUnmounting)return k();x(f,[E]);let I=!1;E[uo]=R=>{I||(I=!0,k(),R?x(p,[E]):x(v,[E]),E[uo]=void 0,S[A]===e&&delete S[A])};const P=E[uo].bind(null,!1);S[A]=e,h?C(h,[E,P]):P()},clone(E){const k=rm(E,t,n,r,a);return a&&a(k),k}};return T}function ax(e){if(Sw(e))return e=js(e),e.children=null,e}function FD(e){if(!Sw(e))return E6(e.type)&&e.children?M6(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&et(n.default))return n.default()}}function df(e,t){e.shapeFlag&6&&e.component?(e.transition=t,df(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 uI(e,t=!1,n){let r=[],a=0;for(let i=0;i1)for(let i=0;iEg(p,t&&(Me(t)?t[g]:t),n,r,a));return}if(Gh(r)&&!a){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&Eg(e,t,n,r.component.subTree);return}const i=r.shapeFlag&4?Tw(r.component):r.el,o=a?null:i,{i:s,r:l}=e,u=t&&t.r,c=s.refs===hr?s.refs={}:s.refs,d=s.setupState,f=$n(d),h=d===hr?Hz:p=>zD(c,p)?!1:un(f,p),v=(p,g)=>!(g&&zD(c,g));if(u!=null&&u!==l){if(HD(t),qe(u))c[u]=null,h(u)&&(d[u]=null);else if(Hn(u)){const p=t;v(u,p.k)&&(u.value=null),p.k&&(c[p.k]=null)}}if(et(l))uy(l,s,12,[o,c]);else{const p=qe(l),g=Hn(l);if(p||g){const m=()=>{if(e.f){const b=p?h(l)?d[l]:c[l]:v()||!e.k?l.value:c[e.k];if(a)Me(b)&&eI(b,i);else if(Me(b))b.includes(i)||b.push(i);else if(p)c[l]=[i],h(l)&&(d[l]=c[l]);else{const _=[i];v(l,e.k)&&(l.value=_),e.k&&(c[e.k]=_)}}else p?(c[l]=o,h(l)&&(d[l]=o)):g&&(v(l,e.k)&&(l.value=o),e.k&&(c[e.k]=o))};if(o){const b=()=>{m(),P1.delete(e)};b.id=-1,P1.set(e,b),Ja(b,n)}else HD(e),m()}}}function HD(e){const t=P1.get(e);t&&(t.flags|=8,P1.delete(e))}pw().requestIdleCallback;pw().cancelIdleCallback;const Gh=e=>!!e.type.__asyncLoader,Sw=e=>e.type.__isKeepAlive;function cy(e,t){D6(e,"a",t)}function cI(e,t){D6(e,"da",t)}function D6(e,t,n=Fa){const r=e.__wdc||(e.__wdc=()=>{let a=n;for(;a;){if(a.isDeactivated)return;a=a.parent}return e()});if(xw(t,r,n),n){let a=n.parent;for(;a&&a.parent;)Sw(a.parent.vnode)&&Zee(r,t,n,a),a=a.parent}}function Zee(e,t,n,r){const a=xw(t,e,r,!0);il(()=>{eI(r[t],a)},n)}function xw(e,t,n=Fa,r=!1){if(n){const a=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{Hl();const s=fy(n),l=wo(t,n,e,o);return s(),Wl(),l});return r?a.unshift(i):a.push(i),i}}const au=e=>(t,n=Fa)=>{(!im||e==="sp")&&xw(e,(...r)=>t(...r),n)},dy=au("bm"),St=au("m"),dI=au("bu"),is=au("u"),yn=au("bum"),il=au("um"),Jee=au("sp"),Qee=au("rtg"),ete=au("rtc");function tte(e,t=Fa){xw("ec",e,t)}const fI="components",nte="directives";function Ie(e,t){return hI(fI,e,!0,t)||e}const R6=Symbol.for("v-ndc");function Et(e){return qe(e)?hI(fI,e,!1)||e:e||R6}function os(e){return hI(nte,e)}function hI(e,t,n=!0,r=!1){const a=xa||Fa;if(a){const i=a.type;if(e===fI){const s=$te(i,!1);if(s&&(s===t||s===ga(t)||s===ly(ga(t))))return i}const o=WD(a[e]||i[e],t)||WD(a.appContext[e],t);return!o&&r?i:o}}function WD(e,t){return e&&(e[t]||e[ga(t)]||e[ly(ga(t))])}function Lt(e,t,n,r){let a;const i=n,o=Me(e);if(o||qe(e)){const s=o&&Yd(e);let l=!1,u=!1;s&&(l=!Ui(e),u=Gl(e),e=gw(e)),a=new Array(e.length);for(let c=0,d=e.length;ct(s,l,void 0,i));else{const s=Object.keys(e);a=new Array(s.length);for(let l=0,u=s.length;l{const i=r.fn(...a);return i&&(i.key=r.key),i}:r.fn)}return e}function he(e,t,n={},r,a){if(xa.ce||xa.parent&&Gh(xa.parent)&&xa.parent.ce){const u=Object.keys(n).length>0;return t!=="default"&&(n.name=t),L(),ve(ze,null,[V("slot",n,r&&r())],u?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),L();const o=i&&O6(i(n)),s=n.key||o&&o.key,l=ve(ze,{key:(s&&!Xi(s)?s:`_${t}`)+(!o&&r?"_fb":"")},o||(r?r():[]),o&&e._===1?64:-2);return l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),i&&i._c&&(i._d=!0),l}function O6(e){return e.some(t=>Vn(t)?!(t.type===Tr||t.type===ze&&!O6(t.children)):!0)?e:null}function rte(e,t){const n={};for(const r in e)n[Ud(r)]=e[r];return n}const R2=e=>e?tH(e)?Tw(e):R2(e.parent):null,kg=Zr(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=>R2(e.parent),$root:e=>R2(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>$6(e),$forceUpdate:e=>e.f||(e.f=()=>{sI(e.update)}),$nextTick:e=>e.n||(e.n=Ue.bind(e.proxy)),$watch:e=>Uee.bind(e)}),ix=(e,t)=>e!==hr&&!e.__isScriptSetup&&un(e,t),ate={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:a,props:i,accessCache:o,type:s,appContext:l}=e;if(t[0]!=="$"){const f=o[t];if(f!==void 0)switch(f){case 1:return r[t];case 2:return a[t];case 4:return n[t];case 3:return i[t]}else{if(ix(r,t))return o[t]=1,r[t];if(a!==hr&&un(a,t))return o[t]=2,a[t];if(un(i,t))return o[t]=3,i[t];if(n!==hr&&un(n,t))return o[t]=4,n[t];O2&&(o[t]=0)}}const u=kg[t];let c,d;if(u)return t==="$attrs"&&Ba(e.attrs,"get",""),u(e);if((c=s.__cssModules)&&(c=c[t]))return c;if(n!==hr&&un(n,t))return o[t]=4,n[t];if(d=l.config.globalProperties,un(d,t))return d[t]},set({_:e},t,n){const{data:r,setupState:a,ctx:i}=e;return ix(a,t)?(a[t]=n,!0):r!==hr&&un(r,t)?(r[t]=n,!0):un(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:a,props:i,type:o}},s){let l;return!!(n[s]||e!==hr&&s[0]!=="$"&&un(e,s)||ix(t,s)||un(i,s)||un(r,s)||un(kg,s)||un(a.config.globalProperties,s)||(l=o.__cssModules)&&l[s])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:un(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function pr(){return N6().slots}function iu(){return N6().attrs}function N6(e){const t=Tt();return t.setupContext||(t.setupContext=rH(t))}function GD(e){return Me(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let O2=!0;function ite(e){const t=$6(e),n=e.proxy,r=e.ctx;O2=!1,t.beforeCreate&&UD(t.beforeCreate,e,"bc");const{data:a,computed:i,methods:o,watch:s,provide:l,inject:u,created:c,beforeMount:d,mounted:f,beforeUpdate:h,updated:v,activated:p,deactivated:g,beforeDestroy:m,beforeUnmount:b,destroyed:_,unmounted:w,render:S,renderTracked:x,renderTriggered:C,errorCaptured:T,serverPrefetch:E,expose:k,inheritAttrs:A,components:I,directives:P,filters:R}=t;if(u&&ote(u,r,null),o)for(const N in o){const D=o[N];et(D)&&(r[N]=D.bind(n))}if(a){const N=a.call(n,n);yt(N)&&(e.data=Qt(N))}if(O2=!0,i)for(const N in i){const D=i[N],F=et(D)?D.bind(n,n):et(D.get)?D.get.bind(n,n):It,W=!et(D)&&et(D.set)?D.set.bind(n):It,z=M({get:F,set:W});Object.defineProperty(r,N,{enumerable:!0,configurable:!0,get:()=>z.value,set:Y=>z.value=Y})}if(s)for(const N in s)V6(s[N],r,n,N);if(l){const N=et(l)?l.call(n):l;Reflect.ownKeys(N).forEach(D=>{Ft(D,N[D])})}c&&UD(c,e,"c");function $(N,D){Me(D)?D.forEach(F=>N(F.bind(n))):D&&N(D.bind(n))}if($(dy,d),$(St,f),$(dI,h),$(is,v),$(cy,p),$(cI,g),$(tte,T),$(ete,x),$(Qee,C),$(yn,b),$(il,w),$(Jee,E),Me(k))if(k.length){const N=e.exposed||(e.exposed={});k.forEach(D=>{Object.defineProperty(N,D,{get:()=>n[D],set:F=>n[D]=F,enumerable:!0})})}else e.exposed||(e.exposed={});S&&e.render===It&&(e.render=S),A!=null&&(e.inheritAttrs=A),I&&(e.components=I),P&&(e.directives=P),E&&L6(e)}function ote(e,t,n=It){Me(e)&&(e=N2(e));for(const r in e){const a=e[r];let i;yt(a)?"default"in a?i=Ge(a.from||r,a.default,!0):i=Ge(a.from||r):i=Ge(a),Hn(i)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[r]=i}}function UD(e,t,n){wo(Me(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function V6(e,t,n,r){let a=r.includes(".")?C6(n,r):()=>n[r];if(qe(e)){const i=t[e];et(i)&&_e(a,i)}else if(et(e))_e(a,e.bind(n));else if(yt(e))if(Me(e))e.forEach(i=>V6(i,t,n,r));else{const i=et(e.handler)?e.handler.bind(n):t[e.handler];et(i)&&_e(a,i,e)}}function $6(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:a,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,s=i.get(t);let l;return s?l=s:!a.length&&!n&&!r?l=t:(l={},a.length&&a.forEach(u=>L1(l,u,o,!0)),L1(l,t,o)),yt(t)&&i.set(t,l),l}function L1(e,t,n,r=!1){const{mixins:a,extends:i}=t;i&&L1(e,i,n,!0),a&&a.forEach(o=>L1(e,o,n,!0));for(const o in t)if(!(r&&o==="expose")){const s=ste[o]||n&&n[o];e[o]=s?s(e[o],t[o]):t[o]}return e}const ste={data:KD,props:YD,emits:YD,methods:ig,computed:ig,beforeCreate:Za,created:Za,beforeMount:Za,mounted:Za,beforeUpdate:Za,updated:Za,beforeDestroy:Za,beforeUnmount:Za,destroyed:Za,unmounted:Za,activated:Za,deactivated:Za,errorCaptured:Za,serverPrefetch:Za,components:ig,directives:ig,watch:ute,provide:KD,inject:lte};function KD(e,t){return t?e?function(){return Zr(et(e)?e.call(this,this):e,et(t)?t.call(this,this):t)}:t:e}function lte(e,t){return ig(N2(e),N2(t))}function N2(e){if(Me(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ga(t)}Modifiers`]||e[`${ru(t)}Modifiers`];function hte(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||hr;let a=n;const i=t.startsWith("update:"),o=i&&fte(r,t.slice(7));o&&(o.trim&&(a=n.map(c=>qe(c)?c.trim():c)),o.number&&(a=n.map(tI)));let s,l=r[s=Ud(t)]||r[s=Ud(ga(t))];!l&&i&&(l=r[s=Ud(ru(t))]),l&&wo(l,e,6,a);const u=r[s+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[s])return;e.emitted[s]=!0,wo(u,e,6,a)}}const vte=new WeakMap;function F6(e,t,n=!1){const r=n?vte:t.emitsCache,a=r.get(e);if(a!==void 0)return a;const i=e.emits;let o={},s=!1;if(!et(e)){const l=u=>{const c=F6(u,t,!0);c&&(s=!0,Zr(o,c))};!n&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!i&&!s?(yt(e)&&r.set(e,null),null):(Me(i)?i.forEach(l=>o[l]=null):Zr(o,i),yt(e)&&r.set(e,o),o)}function Cw(e,t){return!e||!cw(t)?!1:(t=t.slice(2).replace(/Once$/,""),un(e,t[0].toLowerCase()+t.slice(1))||un(e,ru(t))||un(e,t))}function jD(e){const{type:t,vnode:n,proxy:r,withProxy:a,propsOptions:[i],slots:o,attrs:s,emit:l,render:u,renderCache:c,props:d,data:f,setupState:h,ctx:v,inheritAttrs:p}=e,g=M1(e);let m,b;try{if(n.shapeFlag&4){const w=a||r,S=w;m=ks(u.call(S,w,c,d,h,f,v)),b=s}else{const w=t;m=ks(w.length>1?w(d,{attrs:s,slots:o,emit:l}):w(d,null)),b=t.props?s:pte(s)}}catch(w){Ag.length=0,ww(w,e,1),m=V(Tr)}let _=m;if(b&&p!==!1){const w=Object.keys(b),{shapeFlag:S}=_;w.length&&S&7&&(i&&w.some(dw)&&(b=gte(b,i)),_=js(_,b,!1,!0))}return n.dirs&&(_=js(_,null,!1,!0),_.dirs=_.dirs?_.dirs.concat(n.dirs):n.dirs),n.transition&&df(_,n.transition),m=_,M1(g),m}const pte=e=>{let t;for(const n in e)(n==="class"||n==="style"||cw(n))&&((t||(t={}))[n]=e[n]);return t},gte=(e,t)=>{const n={};for(const r in e)(!dw(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function mte(e,t,n){const{props:r,children:a,component:i}=e,{props:o,children:s,patchFlag:l}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return r?qD(r,o,u):!!o;if(l&8){const c=t.dynamicProps;for(let d=0;dObject.create(H6),G6=e=>Object.getPrototypeOf(e)===H6;function bte(e,t,n,r=!1){const a={},i=W6();e.propsDefaults=Object.create(null),U6(e,t,a,i);for(const o in e.propsOptions[0])o in a||(a[o]=void 0);n?e.props=r?a:yw(a):e.type.props?e.props=a:e.props=i,e.attrs=i}function _te(e,t,n,r){const{props:a,attrs:i,vnode:{patchFlag:o}}=e,s=$n(a),[l]=e.propsOptions;let u=!1;if((r||o>0)&&!(o&16)){if(o&8){const c=e.vnode.dynamicProps;for(let d=0;d{l=!0;const[f,h]=K6(d,t,!0);Zr(o,f),h&&s.push(...h)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!i&&!l)return yt(e)&&r.set(e,zh),zh;if(Me(i))for(let c=0;ce==="_"||e==="_ctx"||e==="$stable",pI=e=>Me(e)?e.map(ks):[ks(e)],Ste=(e,t,n)=>{if(t._n)return t;const r=G((...a)=>pI(t(...a)),n);return r._c=!1,r},Y6=(e,t,n)=>{const r=e._ctx;for(const a in e){if(vI(a))continue;const i=e[a];if(et(i))t[a]=Ste(a,i,r);else if(i!=null){const o=pI(i);t[a]=()=>o}}},j6=(e,t)=>{const n=pI(t);e.slots.default=()=>n},q6=(e,t,n)=>{for(const r in t)(n||!vI(r))&&(e[r]=t[r])},xte=(e,t,n)=>{const r=e.slots=W6();if(e.vnode.shapeFlag&32){const a=t._;a?(q6(r,t,n),n&&Gz(r,"_",a,!0)):Y6(t,r)}else t&&j6(e,t)},Cte=(e,t,n)=>{const{vnode:r,slots:a}=e;let i=!0,o=hr;if(r.shapeFlag&32){const s=t._;s?n&&s===1?i=!1:q6(a,t,n):(i=!t.$stable,Y6(t,a)),o=t}else t&&(j6(e,t),o={default:1});if(i)for(const s in a)!vI(s)&&o[s]==null&&delete a[s]},Ja=Ite;function Tte(e){return Ete(e)}function Ete(e,t){const n=pw();n.__VUE__=!0;const{insert:r,remove:a,patchProp:i,createElement:o,createText:s,createComment:l,setText:u,setElementText:c,parentNode:d,nextSibling:f,setScopeId:h=It,insertStaticContent:v}=e,p=(U,te,Q,ue=null,pe=null,me=null,Pe=void 0,Ne=null,ie=!!te.dynamicChildren)=>{if(U===te)return;U&&!xd(U,te)&&(ue=ne(U),Y(U,pe,me,!0),U=null),te.patchFlag===-2&&(ie=!1,te.dynamicChildren=null);const{type:ae,ref:ge,shapeFlag:be}=te;switch(ae){case Mf:g(U,te,Q,ue);break;case Tr:m(U,te,Q,ue);break;case sx:U==null&&b(te,Q,ue,Pe);break;case ze:I(U,te,Q,ue,pe,me,Pe,Ne,ie);break;default:be&1?S(U,te,Q,ue,pe,me,Pe,Ne,ie):be&6?P(U,te,Q,ue,pe,me,Pe,Ne,ie):(be&64||be&128)&&ae.process(U,te,Q,ue,pe,me,Pe,Ne,ie,J)}ge!=null&&pe?Eg(ge,U&&U.ref,me,te||U,!te):ge==null&&U&&U.ref!=null&&Eg(U.ref,null,me,U,!0)},g=(U,te,Q,ue)=>{if(U==null)r(te.el=s(te.children),Q,ue);else{const pe=te.el=U.el;te.children!==U.children&&u(pe,te.children)}},m=(U,te,Q,ue)=>{U==null?r(te.el=l(te.children||""),Q,ue):te.el=U.el},b=(U,te,Q,ue)=>{[U.el,U.anchor]=v(U.children,te,Q,ue,U.el,U.anchor)},_=({el:U,anchor:te},Q,ue)=>{let pe;for(;U&&U!==te;)pe=f(U),r(U,Q,ue),U=pe;r(te,Q,ue)},w=({el:U,anchor:te})=>{let Q;for(;U&&U!==te;)Q=f(U),a(U),U=Q;a(te)},S=(U,te,Q,ue,pe,me,Pe,Ne,ie)=>{if(te.type==="svg"?Pe="svg":te.type==="math"&&(Pe="mathml"),U==null)x(te,Q,ue,pe,me,Pe,Ne,ie);else{const ae=U.el&&U.el._isVueCE?U.el:null;try{ae&&ae._beginPatch(),E(U,te,pe,me,Pe,Ne,ie)}finally{ae&&ae._endPatch()}}},x=(U,te,Q,ue,pe,me,Pe,Ne)=>{let ie,ae;const{props:ge,shapeFlag:be,transition:$e,dirs:Re}=U;if(ie=U.el=o(U.type,me,ge&&ge.is,ge),be&8?c(ie,U.children):be&16&&T(U.children,ie,null,ue,pe,ox(U,me),Pe,Ne),Re&&Vc(U,null,ue,"created"),C(ie,U,U.scopeId,Pe,ue),ge){for(const Ae in ge)Ae!=="value"&&!xg(Ae)&&i(ie,Ae,null,ge[Ae],me,ue);"value"in ge&&i(ie,"value",null,ge.value,me),(ae=ge.onVnodeBeforeMount)&&vs(ae,ue,U)}Re&&Vc(U,null,ue,"beforeMount");const Se=kte(pe,$e);Se&&$e.beforeEnter(ie),r(ie,te,Q),((ae=ge&&ge.onVnodeMounted)||Se||Re)&&Ja(()=>{try{ae&&vs(ae,ue,U),Se&&$e.enter(ie),Re&&Vc(U,null,ue,"mounted")}finally{}},pe)},C=(U,te,Q,ue,pe)=>{if(Q&&h(U,Q),ue)for(let me=0;me{for(let ae=ie;ae{const Ne=te.el=U.el;let{patchFlag:ie,dynamicChildren:ae,dirs:ge}=te;ie|=U.patchFlag&16;const be=U.props||hr,$e=te.props||hr;let Re;if(Q&&$c(Q,!1),(Re=$e.onVnodeBeforeUpdate)&&vs(Re,Q,te,U),ge&&Vc(te,U,Q,"beforeUpdate"),Q&&$c(Q,!0),(be.innerHTML&&$e.innerHTML==null||be.textContent&&$e.textContent==null)&&c(Ne,""),ae?k(U.dynamicChildren,ae,Ne,Q,ue,ox(te,pe),me):Pe||D(U,te,Ne,null,Q,ue,ox(te,pe),me,!1),ie>0){if(ie&16)A(Ne,be,$e,Q,pe);else if(ie&2&&be.class!==$e.class&&i(Ne,"class",null,$e.class,pe),ie&4&&i(Ne,"style",be.style,$e.style,pe),ie&8){const Se=te.dynamicProps;for(let Ae=0;Ae{Re&&vs(Re,Q,te,U),ge&&Vc(te,U,Q,"updated")},ue)},k=(U,te,Q,ue,pe,me,Pe)=>{for(let Ne=0;Ne{if(te!==Q){if(te!==hr)for(const me in te)!xg(me)&&!(me in Q)&&i(U,me,te[me],null,pe,ue);for(const me in Q){if(xg(me))continue;const Pe=Q[me],Ne=te[me];Pe!==Ne&&me!=="value"&&i(U,me,Ne,Pe,pe,ue)}"value"in Q&&i(U,"value",te.value,Q.value,pe)}},I=(U,te,Q,ue,pe,me,Pe,Ne,ie)=>{const ae=te.el=U?U.el:s(""),ge=te.anchor=U?U.anchor:s("");let{patchFlag:be,dynamicChildren:$e,slotScopeIds:Re}=te;Re&&(Ne=Ne?Ne.concat(Re):Re),U==null?(r(ae,Q,ue),r(ge,Q,ue),T(te.children||[],Q,ge,pe,me,Pe,Ne,ie)):be>0&&be&64&&$e&&U.dynamicChildren&&U.dynamicChildren.length===$e.length?(k(U.dynamicChildren,$e,Q,pe,me,Pe,Ne),(te.key!=null||pe&&te===pe.subTree)&&gI(U,te,!0)):D(U,te,Q,ge,pe,me,Pe,Ne,ie)},P=(U,te,Q,ue,pe,me,Pe,Ne,ie)=>{te.slotScopeIds=Ne,U==null?te.shapeFlag&512?pe.ctx.activate(te,Q,ue,Pe,ie):R(te,Q,ue,pe,me,Pe,ie):O(U,te,ie)},R=(U,te,Q,ue,pe,me,Pe)=>{const Ne=U.component=Rte(U,ue,pe);if(Sw(U)&&(Ne.ctx.renderer=J),Ote(Ne,!1,Pe),Ne.asyncDep){if(pe&&pe.registerDep(Ne,$,Pe),!U.el){const ie=Ne.subTree=V(Tr);m(null,ie,te,Q),U.placeholder=ie.el}}else $(Ne,U,te,Q,pe,me,Pe)},O=(U,te,Q)=>{const ue=te.component=U.component;if(mte(U,te,Q))if(ue.asyncDep&&!ue.asyncResolved){N(ue,te,Q);return}else ue.next=te,ue.update();else te.el=U.el,ue.vnode=te},$=(U,te,Q,ue,pe,me,Pe)=>{const Ne=()=>{if(U.isMounted){let{next:be,bu:$e,u:Re,parent:Se,vnode:Ae}=U;{const Bt=X6(U);if(Bt){be&&(be.el=Ae.el,N(U,be,Pe)),Bt.asyncDep.then(()=>{Ja(()=>{U.isUnmounted||ae()},pe)});return}}let nt=be,at;$c(U,!1),be?(be.el=Ae.el,N(U,be,Pe)):be=Ae,$e&&Vb($e),(at=be.props&&be.props.onVnodeBeforeUpdate)&&vs(at,Se,be,Ae),$c(U,!0);const zt=jD(U),on=U.subTree;U.subTree=zt,p(on,zt,d(on.el),ne(on),U,pe,me),be.el=zt.el,nt===null&&yte(U,zt.el),Re&&Ja(Re,pe),(at=be.props&&be.props.onVnodeUpdated)&&Ja(()=>vs(at,Se,be,Ae),pe)}else{let be;const{el:$e,props:Re}=te,{bm:Se,m:Ae,parent:nt,root:at,type:zt}=U,on=Gh(te);$c(U,!1),Se&&Vb(Se),!on&&(be=Re&&Re.onVnodeBeforeMount)&&vs(be,nt,te),$c(U,!0);{at.ce&&at.ce._hasShadowRoot()&&at.ce._injectChildStyle(zt,U.parent?U.parent.type:void 0);const Bt=U.subTree=jD(U);p(null,Bt,Q,ue,U,pe,me),te.el=Bt.el}if(Ae&&Ja(Ae,pe),!on&&(be=Re&&Re.onVnodeMounted)){const Bt=te;Ja(()=>vs(be,nt,Bt),pe)}(te.shapeFlag&256||nt&&Gh(nt.vnode)&&nt.vnode.shapeFlag&256)&&U.a&&Ja(U.a,pe),U.isMounted=!0,te=Q=ue=null}};U.scope.on();const ie=U.effect=new Jz(Ne);U.scope.off();const ae=U.update=ie.run.bind(ie),ge=U.job=ie.runIfDirty.bind(ie);ge.i=U,ge.id=U.uid,ie.scheduler=()=>sI(ge),$c(U,!0),ae()},N=(U,te,Q)=>{te.component=U;const ue=U.vnode.props;U.vnode=te,U.next=null,_te(U,te.props,ue,Q),Cte(U,te.children,Q),Hl(),VD(U),Wl()},D=(U,te,Q,ue,pe,me,Pe,Ne,ie=!1)=>{const ae=U&&U.children,ge=U?U.shapeFlag:0,be=te.children,{patchFlag:$e,shapeFlag:Re}=te;if($e>0){if($e&128){W(ae,be,Q,ue,pe,me,Pe,Ne,ie);return}else if($e&256){F(ae,be,Q,ue,pe,me,Pe,Ne,ie);return}}Re&8?(ge&16&&se(ae,pe,me),be!==ae&&c(Q,be)):ge&16?Re&16?W(ae,be,Q,ue,pe,me,Pe,Ne,ie):se(ae,pe,me,!0):(ge&8&&c(Q,""),Re&16&&T(be,Q,ue,pe,me,Pe,Ne,ie))},F=(U,te,Q,ue,pe,me,Pe,Ne,ie)=>{U=U||zh,te=te||zh;const ae=U.length,ge=te.length,be=Math.min(ae,ge);let $e;for($e=0;$ege?se(U,pe,me,!0,!1,be):T(te,Q,ue,pe,me,Pe,Ne,ie,be)},W=(U,te,Q,ue,pe,me,Pe,Ne,ie)=>{let ae=0;const ge=te.length;let be=U.length-1,$e=ge-1;for(;ae<=be&&ae<=$e;){const Re=U[ae],Se=te[ae]=ie?Tl(te[ae]):ks(te[ae]);if(xd(Re,Se))p(Re,Se,Q,null,pe,me,Pe,Ne,ie);else break;ae++}for(;ae<=be&&ae<=$e;){const Re=U[be],Se=te[$e]=ie?Tl(te[$e]):ks(te[$e]);if(xd(Re,Se))p(Re,Se,Q,null,pe,me,Pe,Ne,ie);else break;be--,$e--}if(ae>be){if(ae<=$e){const Re=$e+1,Se=Re$e)for(;ae<=be;)Y(U[ae],pe,me,!0),ae++;else{const Re=ae,Se=ae,Ae=new Map;for(ae=Se;ae<=$e;ae++){const xe=te[ae]=ie?Tl(te[ae]):ks(te[ae]);xe.key!=null&&Ae.set(xe.key,ae)}let nt,at=0;const zt=$e-Se+1;let on=!1,Bt=0;const it=new Array(zt);for(ae=0;ae=zt){Y(xe,pe,me,!0);continue}let rt;if(xe.key!=null)rt=Ae.get(xe.key);else for(nt=Se;nt<=$e;nt++)if(it[nt-Se]===0&&xd(xe,te[nt])){rt=nt;break}rt===void 0?Y(xe,pe,me,!0):(it[rt-Se]=ae+1,rt>=Bt?Bt=rt:on=!0,p(xe,te[rt],Q,null,pe,me,Pe,Ne,ie),at++)}const At=on?Ate(it):zh;for(nt=At.length-1,ae=zt-1;ae>=0;ae--){const xe=Se+ae,rt=te[xe],Te=te[xe+1],Qe=xe+1{const{el:me,type:Pe,transition:Ne,children:ie,shapeFlag:ae}=U;if(ae&6){z(U.component.subTree,te,Q,ue);return}if(ae&128){U.suspense.move(te,Q,ue);return}if(ae&64){Pe.move(U,te,Q,J);return}if(Pe===ze){r(me,te,Q);for(let be=0;beNe.enter(me),pe));else{const{leave:be,delayLeave:$e,afterLeave:Re}=Ne,Se=()=>{U.ctx.isUnmounted?a(me):r(me,te,Q)},Ae=()=>{const nt=me._isLeaving||!!me[uo];me._isLeaving&&me[uo](!0),Ne.persisted&&!nt?Se():be(me,()=>{Se(),Re&&Re()})};$e?$e(me,Se,Ae):Ae()}else r(me,te,Q)},Y=(U,te,Q,ue=!1,pe=!1)=>{const{type:me,props:Pe,ref:Ne,children:ie,dynamicChildren:ae,shapeFlag:ge,patchFlag:be,dirs:$e,cacheIndex:Re,memo:Se}=U;if(be===-2&&(pe=!1),Ne!=null&&(Hl(),Eg(Ne,null,Q,U,!0),Wl()),Re!=null&&(te.renderCache[Re]=void 0),ge&256){te.ctx.deactivate(U);return}const Ae=ge&1&&$e,nt=!Gh(U);let at;if(nt&&(at=Pe&&Pe.onVnodeBeforeUnmount)&&vs(at,te,U),ge&6)ee(U.component,Q,ue);else{if(ge&128){U.suspense.unmount(Q,ue);return}Ae&&Vc(U,null,te,"beforeUnmount"),ge&64?U.type.remove(U,te,Q,J,ue):ae&&!ae.hasOnce&&(me!==ze||be>0&&be&64)?se(ae,te,Q,!1,!0):(me===ze&&be&384||!pe&&ge&16)&&se(ie,te,Q),ue&&q(U)}const zt=Se!=null&&Re==null;(nt&&(at=Pe&&Pe.onVnodeUnmounted)||Ae||zt)&&Ja(()=>{at&&vs(at,te,U),Ae&&Vc(U,null,te,"unmounted"),zt&&(U.el=null)},Q)},q=U=>{const{type:te,el:Q,anchor:ue,transition:pe}=U;if(te===ze){re(Q,ue);return}if(te===sx){w(U);return}const me=()=>{a(Q),pe&&!pe.persisted&&pe.afterLeave&&pe.afterLeave()};if(U.shapeFlag&1&&pe&&!pe.persisted){const{leave:Pe,delayLeave:Ne}=pe,ie=()=>Pe(Q,me);Ne?Ne(U.el,me,ie):ie()}else me()},re=(U,te)=>{let Q;for(;U!==te;)Q=f(U),a(U),U=Q;a(te)},ee=(U,te,Q)=>{const{bum:ue,scope:pe,job:me,subTree:Pe,um:Ne,m:ie,a:ae}=U;ZD(ie),ZD(ae),ue&&Vb(ue),pe.stop(),me&&(me.flags|=8,Y(Pe,U,te,Q)),Ne&&Ja(Ne,te),Ja(()=>{U.isUnmounted=!0},te)},se=(U,te,Q,ue=!1,pe=!1,me=0)=>{for(let Pe=me;Pe{if(U.shapeFlag&6)return ne(U.component.subTree);if(U.shapeFlag&128)return U.suspense.next();const te=f(U.anchor||U.el),Q=te&&te[T6];return Q?f(Q):te};let de=!1;const le=(U,te,Q)=>{let ue;U==null?te._vnode&&(Y(te._vnode,null,null,!0),ue=te._vnode.component):p(te._vnode||null,U,te,null,null,null,Q),te._vnode=U,de||(de=!0,VD(ue),_6(),de=!1)},J={p,um:Y,m:z,r:q,mt:R,mc:T,pc:D,pbc:k,n:ne,o:e};return{render:le,hydrate:void 0,createApp:dte(le)}}function ox({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 $c({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function kte(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function gI(e,t,n=!1){const r=e.children,a=t.children;if(Me(r)&&Me(a))for(let i=0;i>1,e[n[s]]0&&(t[r]=n[i-1]),n[i]=r)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function X6(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:X6(t)}function ZD(e){if(e)for(let t=0;te.__isSuspense;function Ite(e,t){t&&t.pendingBranch?Me(e)?t.effects.push(...e):t.effects.push(e):Hee(e)}const ze=Symbol.for("v-fgt"),Mf=Symbol.for("v-txt"),Tr=Symbol.for("v-cmt"),sx=Symbol.for("v-stc"),Ag=[];let $i=null;function L(e=!1){Ag.push($i=e?null:[])}function Mte(){Ag.pop(),$i=Ag[Ag.length-1]||null}let am=1;function D1(e,t=!1){am+=e,e<0&&$i&&t&&($i.hasOnce=!0)}function Q6(e){return e.dynamicChildren=am>0?$i||zh:null,Mte(),am>0&&$i&&$i.push(e),e}function K(e,t,n,r,a,i){return Q6(j(e,t,n,r,a,i,!0))}function ve(e,t,n,r,a){return Q6(V(e,t,n,r,a,!0))}function Vn(e){return e?e.__v_isVNode===!0:!1}function xd(e,t){return e.type===t.type&&e.key===t.key}const eH=({key:e})=>e??null,Bb=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?qe(e)||Hn(e)||et(e)?{i:xa,r:e,k:t,f:!!n}:e:null);function j(e,t=null,n=null,r=0,a=null,i=e===ze?0:1,o=!1,s=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&eH(t),ref:t&&Bb(t),scopeId:S6,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:a,dynamicChildren:null,appContext:null,ctx:xa};return s?(mI(l,n),i&128&&e.normalize(l)):n&&(l.shapeFlag|=qe(n)?8:16),am>0&&!o&&$i&&(l.patchFlag>0||i&6)&&l.patchFlag!==32&&$i.push(l),l}const V=Pte;function Pte(e,t=null,n=null,r=0,a=null,i=!1){if((!e||e===R6)&&(e=Tr),Vn(e)){const s=js(e,t,!0);return n&&mI(s,n),am>0&&!i&&$i&&(s.shapeFlag&6?$i[$i.indexOf(e)]=s:$i.push(s)),s.patchFlag=-2,s}if(Bte(e)&&(e=e.__vccOpts),t){t=Rl(t);let{class:s,style:l}=t;s&&!qe(s)&&(t.class=B(s)),yt(l)&&(_w(l)&&!Me(l)&&(l=Zr({},l)),t.style=tt(l))}const o=qe(e)?1:J6(e)?128:E6(e)?64:yt(e)?4:et(e)?2:0;return j(e,t,n,r,a,o,i,!0)}function Rl(e){return e?_w(e)||G6(e)?Zr({},e):e:null}function js(e,t,n=!1,r=!1){const{props:a,ref:i,patchFlag:o,children:s,transition:l}=e,u=t?Mt(a||{},t):a,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&eH(u),ref:t&&t.ref?n&&i?Me(i)?i.concat(Bb(t)):[i,Bb(t)]:Bb(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:s,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ze?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:l,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&js(e.ssContent),ssFallback:e.ssFallback&&js(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return l&&r&&df(c,l.clone(c)),c}function Le(e=" ",t=0){return V(Mf,null,e,t)}function fe(e="",t=!1){return t?(L(),ve(Tr,null,e)):V(Tr,null,e)}function ks(e){return e==null||typeof e=="boolean"?V(Tr):Me(e)?V(ze,null,e.slice()):Vn(e)?Tl(e):V(Mf,null,String(e))}function Tl(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:js(e)}function mI(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(Me(t))n=16;else if(typeof t=="object")if(r&65){const a=t.default;a&&(a._c&&(a._d=!1),mI(e,a()),a._c&&(a._d=!0));return}else{n=32;const a=t._;!a&&!G6(t)?t._ctx=xa:a===3&&xa&&(xa.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else et(t)?(t={default:t,_ctx:xa},n=32):(t=String(t),r&64?(n=16,t=[Le(t)]):n=8);e.children=t,e.shapeFlag|=n}function Mt(...e){const t={};for(let n=0;nFa||xa;let R1,$2;{const e=pw(),t=(n,r)=>{let a;return(a=e[n])||(a=e[n]=[]),a.push(r),i=>{a.length>1?a.forEach(o=>o(i)):a[0](i)}};R1=t("__VUE_INSTANCE_SETTERS__",n=>Fa=n),$2=t("__VUE_SSR_SETTERS__",n=>im=n)}const fy=e=>{const t=Fa;return R1(e),e.scope.on(),()=>{e.scope.off(),R1(t)}},JD=()=>{Fa&&Fa.scope.off(),R1(null)};function tH(e){return e.vnode.shapeFlag&4}let im=!1;function Ote(e,t=!1,n=!1){t&&$2(t);const{props:r,children:a}=e.vnode,i=tH(e);bte(e,r,i,t),xte(e,a,n||t);const o=i?Nte(e,t):void 0;return t&&$2(!1),o}function Nte(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,ate);const{setup:r}=n;if(r){Hl();const a=e.setupContext=r.length>1?rH(e):null,i=fy(e),o=uy(r,e,0,[e.props,a]),s=fc(o);if(Wl(),i(),(s||e.sp)&&!Gh(e)&&L6(e),s){if(o.then(JD,JD),t)return o.then(l=>{QD(e,l)}).catch(l=>{ww(l,e,0)});e.asyncDep=o}else QD(e,o)}else nH(e)}function QD(e,t,n){et(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:yt(t)&&(e.setupState=g6(t)),nH(e)}function nH(e,t,n){const r=e.type;e.render||(e.render=r.render||It);{const a=fy(e);Hl();try{ite(e)}finally{Wl(),a()}}}const Vte={get(e,t){return Ba(e,"get",""),e[t]}};function rH(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Vte),slots:e.slots,emit:e.emit,expose:t}}function Tw(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(g6($s(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in kg)return kg[n](e)},has(t,n){return n in t||n in kg}})):e.proxy}function $te(e,t=!0){return et(e)?e.displayName||e.name:e.name||t&&e.__name}function Bte(e){return et(e)&&"__vccOpts"in e}const M=(e,t)=>Vee(e,t,im);function ot(e,t,n){try{D1(-1);const r=arguments.length;return r===2?yt(t)&&!Me(t)?Vn(t)?V(e,null,[t]):V(e,t):V(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Vn(n)&&(n=[n]),V(e,t,n))}finally{D1(1)}}const Fte="3.5.38",zte=It;/** +* @vue/runtime-dom v3.5.38 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let B2;const eR=typeof window<"u"&&window.trustedTypes;if(eR)try{B2=eR.createPolicy("vue",{createHTML:e=>e})}catch{}const aH=B2?e=>B2.createHTML(e):e=>e,Hte="http://www.w3.org/2000/svg",Wte="http://www.w3.org/1998/Math/MathML",Sl=typeof document<"u"?document:null,tR=Sl&&Sl.createElement("template"),Gte={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const a=t==="svg"?Sl.createElementNS(Hte,e):t==="mathml"?Sl.createElementNS(Wte,e):n?Sl.createElement(e,{is:n}):Sl.createElement(e);return e==="select"&&r&&r.multiple!=null&&a.setAttribute("multiple",r.multiple),a},createText:e=>Sl.createTextNode(e),createComment:e=>Sl.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Sl.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,a,i){const o=n?n.previousSibling:t.lastChild;if(a&&(a===i||a.nextSibling))for(;t.insertBefore(a.cloneNode(!0),n),!(a===i||!(a=a.nextSibling)););else{tR.innerHTML=aH(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);const s=tR.content;if(r==="svg"||r==="mathml"){const l=s.firstChild;for(;l.firstChild;)s.appendChild(l.firstChild);s.removeChild(l)}t.insertBefore(s,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},wu="transition",yp="animation",iv=Symbol("_vtc"),iH={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},oH=Zr({},A6,iH),Ute=e=>(e.displayName="Transition",e.props=oH,e),ya=Ute((e,{slots:t})=>ot(Xee,sH(e),t)),Bc=(e,t=[])=>{Me(e)?e.forEach(n=>n(...t)):e&&e(...t)},nR=e=>e?Me(e)?e.some(t=>t.length>1):e.length>1:!1;function sH(e){const t={};for(const I in e)I in iH||(t[I]=e[I]);if(e.css===!1)return t;const{name:n="v",type:r,duration:a,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:s=`${n}-enter-to`,appearFromClass:l=i,appearActiveClass:u=o,appearToClass:c=s,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:f=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,v=Kte(a),p=v&&v[0],g=v&&v[1],{onBeforeEnter:m,onEnter:b,onEnterCancelled:_,onLeave:w,onLeaveCancelled:S,onBeforeAppear:x=m,onAppear:C=b,onAppearCancelled:T=_}=t,E=(I,P,R,O)=>{I._enterCancelled=O,Ru(I,P?c:s),Ru(I,P?u:o),R&&R()},k=(I,P)=>{I._isLeaving=!1,Ru(I,d),Ru(I,h),Ru(I,f),P&&P()},A=I=>(P,R)=>{const O=I?C:b,$=()=>E(P,I,R);Bc(O,[P,$]),rR(()=>{Ru(P,I?l:i),ws(P,I?c:s),nR(O)||aR(P,r,p,$)})};return Zr(t,{onBeforeEnter(I){Bc(m,[I]),ws(I,i),ws(I,o)},onBeforeAppear(I){Bc(x,[I]),ws(I,l),ws(I,u)},onEnter:A(!1),onAppear:A(!0),onLeave(I,P){I._isLeaving=!0;const R=()=>k(I,P);ws(I,d),I._enterCancelled?(ws(I,f),F2(I)):(F2(I),ws(I,f)),rR(()=>{I._isLeaving&&(Ru(I,d),ws(I,h),nR(w)||aR(I,r,g,R))}),Bc(w,[I,R])},onEnterCancelled(I){E(I,!1,void 0,!0),Bc(_,[I])},onAppearCancelled(I){E(I,!0,void 0,!0),Bc(T,[I])},onLeaveCancelled(I){k(I),Bc(S,[I])}})}function Kte(e){if(e==null)return null;if(yt(e))return[lx(e.enter),lx(e.leave)];{const t=lx(e);return[t,t]}}function lx(e){return oee(e)}function ws(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[iv]||(e[iv]=new Set)).add(t)}function Ru(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[iv];n&&(n.delete(t),n.size||(e[iv]=void 0))}function rR(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Yte=0;function aR(e,t,n,r){const a=e._endId=++Yte,i=()=>{a===e._endId&&r()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:s,propCount:l}=lH(e,t);if(!o)return r();const u=o+"end";let c=0;const d=()=>{e.removeEventListener(u,f),i()},f=h=>{h.target===e&&++c>=l&&d()};setTimeout(()=>{c(n[v]||"").split(", "),a=r(`${wu}Delay`),i=r(`${wu}Duration`),o=iR(a,i),s=r(`${yp}Delay`),l=r(`${yp}Duration`),u=iR(s,l);let c=null,d=0,f=0;t===wu?o>0&&(c=wu,d=o,f=i.length):t===yp?u>0&&(c=yp,d=u,f=l.length):(d=Math.max(o,u),c=d>0?o>u?wu:yp:null,f=c?c===wu?i.length:l.length:0);const h=c===wu&&/\b(?:transform|all)(?:,|$)/.test(r(`${wu}Property`).toString());return{type:c,timeout:d,propCount:f,hasTransform:h}}function iR(e,t){for(;e.lengthoR(n)+oR(e[r])))}function oR(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function F2(e){return(e?e.ownerDocument:document).body.offsetHeight}function jte(e,t,n){const r=e[iv];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const O1=Symbol("_vod"),yI=Symbol("_vsh"),ln={name:"show",beforeMount(e,{value:t},{transition:n}){e[O1]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):bp(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),bp(e,!0),r.enter(e)):r.leave(e,()=>{bp(e,!1)}):bp(e,t))},beforeUnmount(e,{value:t}){bp(e,t)}};function bp(e,t){e.style.display=t?e[O1]:"none",e[yI]=!t}const qte=Symbol(""),Xte=/(?:^|;)\s*display\s*:/;function Zte(e,t,n){const r=e.style,a=qe(n);let i=!1;if(n&&!a){if(t)if(qe(t))for(const o of t.split(";")){const s=o.slice(0,o.indexOf(":")).trim();n[s]==null&&og(r,s,"")}else for(const o in t)n[o]==null&&og(r,o,"");for(const o in n){o==="display"&&(i=!0);const s=n[o];s!=null?Qte(e,o,!qe(t)&&t?t[o]:void 0,s)||og(r,o,s):og(r,o,"")}}else if(a){if(t!==n){const o=r[qte];o&&(n+=";"+o),r.cssText=n,i=Xte.test(n)}}else t&&e.removeAttribute("style");O1 in e&&(e[O1]=i?r.display:"",e[yI]&&(r.display="none"))}const sR=/\s*!important$/;function og(e,t,n){if(Me(n))n.forEach(r=>og(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Jte(e,t);sR.test(n)?e.setProperty(ru(r),n.replace(sR,""),"important"):e[r]=n}}const lR=["Webkit","Moz","ms"],ux={};function Jte(e,t){const n=ux[t];if(n)return n;let r=ga(t);if(r!=="filter"&&r in e)return ux[t]=r;r=ly(r);for(let a=0;acx||(rne.then(()=>cx=0),cx=Date.now());function ine(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;const a=n.value;if(Me(a)){const i=r.stopImmediatePropagation;r.stopImmediatePropagation=()=>{i.call(r),r._stopped=!0};const o=a.slice(),s=[r];for(let l=0;le.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,one=(e,t,n,r,a,i)=>{const o=a==="svg";t==="class"?jte(e,r,o):t==="style"?Zte(e,n,r):cw(t)?dw(t)||tne(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):sne(e,t,r,o))?(dR(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&cR(e,t,r,o,i,t!=="value")):e._isVueCE&&(lne(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!qe(r)))?dR(e,ga(t),r,i,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),cR(e,t,r,o))};function sne(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&vR(t)&&et(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 a=e.tagName;if(a==="IMG"||a==="VIDEO"||a==="CANVAS"||a==="SOURCE")return!1}return vR(t)&&qe(n)?!1:t in e}function lne(e,t){const n=e._def.props;if(!n)return!1;const r=ga(t);return Array.isArray(n)?n.some(a=>ga(a)===r):Object.keys(n).some(a=>ga(a)===r)}const uH=new WeakMap,cH=new WeakMap,N1=Symbol("_moveCb"),pR=Symbol("_enterCb"),une=e=>(delete e.props.mode,e),cne=une({name:"TransitionGroup",props:Zr({},oH,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Tt(),r=k6();let a,i;return is(()=>{if(!a.length)return;const o=e.moveClass||`${e.name||"v"}-move`;if(!vne(a[0].el,n.vnode.el,o)){a=[];return}a.forEach(dne),a.forEach(fne);const s=a.filter(hne);F2(n.vnode.el),s.forEach(l=>{const u=l.el,c=u.style;ws(u,o),c.transform=c.webkitTransform=c.transitionDuration="";const d=u[N1]=f=>{f&&f.target!==u||(!f||f.propertyName.endsWith("transform"))&&(u.removeEventListener("transitionend",d),u[N1]=null,Ru(u,o))};u.addEventListener("transitionend",d)}),a=[]}),()=>{const o=$n(e),s=sH(o);let l=o.tag||ze;if(a=[],i)for(let u=0;u{s.split(/\s+/).forEach(l=>l&&r.classList.remove(l))}),n.split(/\s+/).forEach(s=>s&&r.classList.add(s)),r.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(r);const{hasTransform:o}=lH(r);return i.removeChild(r),o}const ov=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Me(t)?n=>Vb(t,n):t};function pne(e){e.target.composing=!0}function gR(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Ol=Symbol("_assign");function mR(e,t,n){return t&&(e=e.trim()),n&&(e=tI(e)),e}const hH={created(e,{modifiers:{lazy:t,trim:n,number:r}},a){e[Ol]=ov(a);const i=r||a.props&&a.props.type==="number";Gu(e,t?"change":"input",o=>{o.target.composing||e[Ol](mR(e.value,n,i))}),(n||i)&&Gu(e,"change",()=>{e.value=mR(e.value,n,i)}),t||(Gu(e,"compositionstart",pne),Gu(e,"compositionend",gR),Gu(e,"change",gR))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:a,number:i}},o){if(e[Ol]=ov(o),e.composing)return;const s=(i||e.type==="number")&&!/^0\d/.test(e.value)?tI(e.value):e.value,l=t??"";if(s===l)return;const u=e.getRootNode();(u instanceof Document||u instanceof ShadowRoot)&&u.activeElement===e&&e.type!=="range"&&(r&&t===n||a&&e.value.trim()===l)||(e.value=l)}},vH={deep:!0,created(e,t,n){e[Ol]=ov(n),Gu(e,"change",()=>{const r=e._modelValue,a=gH(e),i=e.checked,o=e[Ol];if(Me(r)){const s=Kz(r,a),l=s!==-1;if(i&&!l)o(r.concat(a));else if(!i&&l){const u=[...r];u.splice(s,1),o(u)}}else if(fw(r)){const s=new Set(r);i?s.add(a):s.delete(a),o(s)}else o(mH(e,i))})},mounted:yR,beforeUpdate(e,t,n){e[Ol]=ov(n),yR(e,t,n)}};function yR(e,{value:t,oldValue:n},r){e._modelValue=t;let a;if(Me(t))a=Kz(t,r.props.value)>-1;else if(fw(t))a=t.has(r.props.value);else{if(t===n)return;a=cf(t,mH(e,!0))}e.checked!==a&&(e.checked=a)}const pH={created(e,{value:t},n){e.checked=cf(t,n.props.value),e[Ol]=ov(n),Gu(e,"change",()=>{e[Ol](gH(e))})},beforeUpdate(e,{value:t,oldValue:n},r){e[Ol]=ov(r),t!==n&&(e.checked=cf(t,r.props.value))}};function gH(e){return"_value"in e?e._value:e.value}function mH(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const gne=["ctrl","shift","alt","meta"],mne={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)=>gne.some(n=>e[`${n}Key`]&&!t.includes(n))},ut=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(a,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=a=>{if(!("key"in a))return;const i=ru(a.key);if(t.some(o=>o===i||yne[o]===i))return e(a)})},bne=Zr({patchProp:one},Gte);let bR;function yH(){return bR||(bR=Tte(bne))}const hc=(...e)=>{yH().render(...e)},bH=(...e)=>{const t=yH().createApp(...e),{mount:n}=t;return t.mount=r=>{const a=wne(r);if(!a)return;const i=t._component;!et(i)&&!i.render&&!i.template&&(i.template=a.innerHTML),a.nodeType===1&&(a.textContent="");const o=n(a,!1,_ne(a));return a instanceof Element&&(a.removeAttribute("v-cloak"),a.setAttribute("data-v-app","")),o},t};function _ne(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function wne(e){return qe(e)?document.querySelector(e):e}const De={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"},Sne=["year","years","month","months","date","dates","week","datetime","datetimerange","daterange","monthrange","yearrange"],dx=["sun","mon","tue","wed","thu","fri","sat"],mt="update:modelValue",Vt="change",Mr="input",_R=Symbol("INSTALLED_KEY"),ss=["","default","small","large"],wR=["left","center","right"];var _H=typeof global=="object"&&global&&global.Object===Object&&global,xne=typeof self=="object"&&self&&self.Object===Object&&self,ls=_H||xne||Function("return this")(),So=ls.Symbol,wH=Object.prototype,Cne=wH.hasOwnProperty,Tne=wH.toString,_p=So?So.toStringTag:void 0;function Ene(e){var t=Cne.call(e,_p),n=e[_p];try{e[_p]=void 0;var r=!0}catch{}var a=Tne.call(e);return r&&(t?e[_p]=n:delete e[_p]),a}var kne=Object.prototype,Ane=kne.toString;function Ine(e){return Ane.call(e)}var Mne="[object Null]",Pne="[object Undefined]",SR=So?So.toStringTag:void 0;function Pf(e){return e==null?e===void 0?Pne:Mne:SR&&SR in Object(e)?Ene(e):Ine(e)}function qs(e){return e!=null&&typeof e=="object"}var Lne="[object Symbol]";function Ew(e){return typeof e=="symbol"||qs(e)&&Pf(e)==Lne}function bI(e,t){for(var n=-1,r=e==null?0:e.length,a=Array(r);++n0){if(++t>=ore)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function cre(e){return function(){return e}}var V1=function(){try{var e=Df(Object,"defineProperty");return e({},"",{}),e}catch{}}(),dre=V1?function(e,t){return V1(e,"toString",{configurable:!0,enumerable:!1,value:cre(t),writable:!0})}:_I,CH=ure(dre);function fre(e,t){for(var n=-1,r=e==null?0:e.length;++n-1}var mre=9007199254740991,yre=/^(?:0|[1-9]\d*)$/;function kw(e,t){var n=typeof e;return t=t??mre,!!t&&(n=="number"||n!="symbol"&&yre.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=wre}function zv(e){return e!=null&&xI(e.length)&&!wI(e)}function Sre(e,t,n){if(!di(n))return!1;var r=typeof t;return(r=="number"?zv(n)&&kw(t,n.length):r=="string"&&t in n)?hy(n[t],e):!1}function xre(e){return kH(function(t,n){var r=-1,a=n.length,i=a>1?n[a-1]:void 0,o=a>2?n[2]:void 0;for(i=e.length>3&&typeof i=="function"?(a--,i):void 0,o&&Sre(n[0],n[1],o)&&(i=a<3?void 0:i,a=1),t=Object(t);++r-1}function Dae(e,t){var n=this.__data__,r=Iw(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}function ou(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t0&&n(s)?t>1?gy(s,t-1,n,r,a):AI(a,s):r||(a[a.length]=s)}return a}function $1(e){var t=e==null?0:e.length;return t?gy(e,1):[]}function DH(e){return CH(EH(e,void 0,$1),e+"")}var II=LH(Object.getPrototypeOf,Object),jae="[object Object]",qae=Function.prototype,Xae=Object.prototype,RH=qae.toString,Zae=Xae.hasOwnProperty,Jae=RH.call(Object);function MI(e){if(!qs(e)||Pf(e)!=jae)return!1;var t=II(e);if(t===null)return!0;var n=Zae.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&RH.call(n)==Jae}function Qae(e,t,n){var r=-1,a=e.length;t<0&&(t=-t>a?0:a+t),n=n>a?a:n,n<0&&(n+=a),a=t>n?0:n-t>>>0,t>>>=0;for(var i=Array(a);++r=t?e:t)),e}function Ei(e,t,n){return n===void 0&&(n=t,t=void 0),n!==void 0&&(n=Ig(n),n=n===n?n:0),t!==void 0&&(t=Ig(t),t=t===t?t:0),eie(Ig(e),t,n)}function tie(){this.__data__=new ou,this.size=0}function nie(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}function rie(e){return this.__data__.get(e)}function aie(e){return this.__data__.has(e)}var iie=200;function oie(e,t){var n=this.__data__;if(n instanceof ou){var r=n.__data__;if(!um||r.lengths))return!1;var u=i.get(e),c=i.get(t);if(u&&c)return u==t&&c==e;var d=-1,f=!0,h=n&Roe?new cm:void 0;for(i.set(e,t),i.set(t,e);++d=t||C<0||d&&T>=i}function m(){var x=px();if(g(x))return b(x);s=setTimeout(m,p(x))}function b(x){return s=void 0,f&&r?h(x):(r=a=void 0,o)}function _(){s!==void 0&&clearTimeout(s),u=0,r=l=a=s=void 0}function w(){return s===void 0?o:b(px())}function S(){var x=px(),C=g(x);if(r=arguments,a=this,l=x,C){if(s===void 0)return v(l);if(d)return clearTimeout(s),s=setTimeout(m,t),h(l)}return s===void 0&&(s=setTimeout(m,t)),o}return S.cancel=_,S.flush=w,S}function U2(e,t,n){(n!==void 0&&!hy(e[t],n)||n===void 0&&!(t in e))&&Aw(e,t,n)}function QH(e){return qs(e)&&zv(e)}function K2(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}function xse(e){return Fv(e,py(e))}function Cse(e,t,n,r,a,i,o){var s=K2(e,n),l=K2(t,n),u=o.get(l);if(u){U2(e,n,u);return}var c=i?i(s,l,n+"",e,t,o):void 0,d=c===void 0;if(d){var f=ci(l),h=!f&&sm(l),v=!f&&!h&&EI(l);c=l,f||h||v?ci(s)?c=s:QH(s)?c=xH(s):h?(d=!1,c=NH(l,!0)):v?(d=!1,c=zH(l,!0)):c=[]:MI(l)||om(l)?(c=s,om(s)?c=xse(s):(!di(s)||wI(s))&&(c=HH(l))):d=!1}d&&(o.set(l,c),a(c,l,r,i,o),o.delete(l)),U2(e,n,c)}function eW(e,t,n,r,a){e!==t&&JH(t,function(i,o){if(a||(a=new Ko),di(i))Cse(e,t,o,n,eW,r,a);else{var s=r?r(K2(e,o),i,o+"",e,t,a):void 0;s===void 0&&(s=i),U2(e,o,s)}},py)}function Tse(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}function tW(e,t,n){var r=e==null?0:e.length;if(!r)return-1;var a=r-1;return TH(e,ZH(t),a,!0)}function Ese(e,t){var n=-1,r=zv(e)?Array(e.length):[];return bse(e,function(a,i,o){r[++n]=t(a,i,o)}),r}function kse(e,t){var n=ci(e)?bI:Ese;return n(e,ZH(t))}function nW(e,t){return gy(kse(e,t),1)}var Ase=1/0;function Ise(e){var t=e==null?0:e.length;return t?gy(e,Ase):[]}function lv(e){for(var t=-1,n=e==null?0:e.length,r={};++t1),i}),Fv(e,FH(e),n),r&&(n=Pg(n,Ose|Nse|Vse,Rse));for(var a=t.length;a--;)Dse(n,t[a]);return n});function iW(e,t,n,r){if(!di(e))return e;t=Hv(t,e);for(var a=-1,i=t.length,o=i-1,s=e;s!=null&&++a=Gse){var u=Wse(e);if(u)return DI(u);o=!1,a=KH,l=new cm}else l=s;e:for(;++re===void 0,En=e=>typeof e=="boolean",Je=e=>typeof e=="number",oi=e=>!e&&e!==0||Me(e)&&e.length===0||yt(e)&&!Object.keys(e).length,ki=e=>typeof Element>"u"?!1:e instanceof Element,Bi=e=>wr(e),Kse=e=>qe(e)?!Number.isNaN(Number(e)):!1,yy=e=>e===window,dm=e=>Object.keys(e),oW=e=>Object.entries(e),ic=(e,t,n)=>({get value(){return _r(e,t,n)},set value(r){Fse(e,t,r)}}),Yse="__epPropKey",oe=e=>e,jse=e=>yt(e)&&!!e.__epPropKey,us=(e,t)=>{if(!yt(e)||jse(e))return e;const{values:n,required:r,default:a,type:i,validator:o}=e,s={type:i,required:!!r,validator:n||o?l=>{let u=!1,c=[];if(n&&(c=Array.from(n),un(e,"default")&&c.push(a),u||(u=c.includes(l))),o&&(u||(u=o(l))),!u&&c.length>0){const d=[...new Set(c)].map(f=>JSON.stringify(f)).join(", ");zte(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${d}], got value ${JSON.stringify(l)}.`)}return u}:void 0,[Yse]:!0};return un(e,"default")&&(s.default=a),s},Oe=e=>lv(Object.entries(e).map(([t,n])=>[t,us(n,t)])),qse=Oe({zIndex:{type:oe([Number,String]),default:100},target:{type:String,default:""},offset:{type:Number,default:0},position:{type:String,values:["top","bottom"],default:"top"},teleported:Boolean,appendTo:{type:oe([String,Object]),default:"body"}}),Xse={scroll:({scrollTop:e,fixed:t})=>Je(e)&&En(t),[Vt]:e=>En(e)};var sW=class extends Error{constructor(e){super(e),this.name="ElementPlusError"}};function nr(e,t){throw new sW(`[${e}] ${t}`)}function wn(e,t){{const n=qe(e)?new sW(`[${e}] ${t}`):e;console.warn(n)}}const Zse=["class","style"],Jse=/^on[A-Z]/,Ow=(e={})=>{const{excludeListeners:t=!1,excludeKeys:n}=e,r=M(()=>((n==null?void 0:n.value)||[]).concat(Zse)),a=Tt();return a?M(()=>{var i;return lv(Object.entries((i=a.proxy)==null?void 0:i.$attrs).filter(([o])=>!r.value.includes(o)&&!(t&&Jse.test(o))))}):(wn("use-attrs","getCurrentInstance() returned null. useAttrs() must be called at the top of a setup function"),M(()=>({})))};function lW(e,t){var n;const r=Ut();return Ua(()=>{r.value=e()},{...t,flush:(n=t==null?void 0:t.flush)!==null&&n!==void 0?n:"sync"}),rv(r)}function Wv(e,t){return nI()?(Zz(e,t),!0):!1}const mx=new WeakMap,Qse=(...e)=>{var t;const n=e[0],r=(t=Tt())===null||t===void 0?void 0:t.proxy,a=r??nI();if(a==null&&!x6())throw new Error("injectLocal must be called in setup");return a&&mx.has(a)&&n in mx.get(a)?mx.get(a)[n]:Ge(...e)},cn=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const ele=e=>typeof e<"u",uW=e=>e!=null,tle=Object.prototype.toString,nle=e=>tle.call(e)==="[object Object]",Nw=(e,t,n)=>Math.min(n,Math.max(t,e)),Si=()=>{},uv=rle();function rle(){var e,t,n;return cn&&!!(!((e=window)===null||e===void 0||(e=e.navigator)===null||e===void 0)&&e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window)===null||t===void 0||(t=t.navigator)===null||t===void 0?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test((n=window)===null||n===void 0?void 0:n.navigator.userAgent))}function cW(e,t){function n(...r){return new Promise((a,i)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(a).catch(i)})}return n}function ale(e,t={}){let n,r,a=Si;const i=l=>{clearTimeout(l),a(),a=Si};let o;return l=>{const u=Ir(e),c=Ir(t.maxWait);return n&&i(n),u<=0||c!==void 0&&c<=0?(r&&(i(r),r=void 0),Promise.resolve(l())):new Promise((d,f)=>{a=t.rejectOnCancel?f:d,o=l,c&&!r&&(r=setTimeout(()=>{n&&i(n),r=void 0,d(o())},c)),n=setTimeout(()=>{r&&i(r),r=void 0,d(l())},u)})}}function ile(...e){let t=0,n,r=!0,a=Si,i,o,s,l,u;!Hn(e[0])&&typeof e[0]=="object"?{delay:o,trailing:s=!0,leading:l=!0,rejectOnCancel:u=!1}=e[0]:[o,s=!0,l=!0,u=!1]=e;const c=()=>{n&&(clearTimeout(n),n=void 0,a(),a=Si)};return f=>{const h=Ir(o),v=Date.now()-t,p=()=>i=f();return c(),h<=0?(t=Date.now(),p()):(v>h?(t=Date.now(),(l||!r)&&p()):s&&(i=new Promise((g,m)=>{a=u?m:g,n=setTimeout(()=>{t=Date.now(),r=!0,g(p()),c()},Math.max(0,h-v))})),!l&&!n&&(n=setTimeout(()=>r=!0,h)),r=!1,i)}}function ZR(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function Kh(e){return Array.isArray(e)?e:[e]}function ole(e){return Tt()}function sle(e){return Qt(Hn(e)?new Proxy({},{get(t,n,r){return y(Reflect.get(e.value,n,r))},set(t,n,r){return Hn(e.value[n])&&!Hn(r)?e.value[n].value=r:e.value[n]=r,!0},deleteProperty(t,n){return Reflect.deleteProperty(e.value,n)},has(t,n){return Reflect.has(e.value,n)},ownKeys(){return Object.keys(e.value)},getOwnPropertyDescriptor(){return{enumerable:!0,configurable:!0}}}):e)}function lle(e){return sle(M(e))}function by(e,t=200,n={}){return cW(ale(t,n),e)}function ule(e,t=200,n={}){const r=H(Ir(e)),a=by(()=>{r.value=e.value},t,n);return _e(e,()=>a()),v6(r)}function dW(e,t=200,n=!1,r=!0,a=!1){return cW(ile(t,n,r,a),e)}function RI(e,t=!0,n){ole()?St(e,n):t?e():Ue(e)}function cv(e,t,n={}){const{immediate:r=!0,immediateCallback:a=!1}=n,i=Ut(!1);let o;function s(){o&&(clearTimeout(o),o=void 0)}function l(){i.value=!1,s()}function u(...c){a&&e(),s(),i.value=!0,o=setTimeout(()=>{i.value=!1,o=void 0,e(...c)},Ir(t))}return r&&(i.value=!0,cn&&u()),Wv(l),{isPending:v6(i),start:u,stop:l}}function cle(e,t,n){return _e(e,t,{...n,immediate:!0})}const ko=cn?window:void 0,dle=cn?window.document:void 0;function Lr(e){var t;const n=Ir(e);return(t=n==null?void 0:n.$el)!==null&&t!==void 0?t:n}function gn(...e){const t=(r,a,i,o)=>(r.addEventListener(a,i,o),()=>r.removeEventListener(a,i,o)),n=M(()=>{const r=Kh(Ir(e[0])).filter(a=>a!=null);return r.every(a=>typeof a!="string")?r:void 0});return cle(()=>{var r,a;return[(r=(a=n.value)===null||a===void 0?void 0:a.map(i=>Lr(i)))!==null&&r!==void 0?r:[ko].filter(i=>i!=null),Kh(Ir(n.value?e[1]:e[0])),Kh(y(n.value?e[2]:e[1])),Ir(n.value?e[3]:e[2])]},([r,a,i,o],s,l)=>{if(!(r!=null&&r.length)||!(a!=null&&a.length)||!(i!=null&&i.length))return;const u=nle(o)?{...o}:o,c=r.flatMap(d=>a.flatMap(f=>i.map(h=>t(d,f,h,u))));l(()=>{c.forEach(d=>d())})},{flush:"post"})}let JR=!1;function OI(e,t,n={}){const{window:r=ko,ignore:a=[],capture:i=!0,detectIframe:o=!1,controls:s=!1}=n;if(!r)return s?{stop:Si,cancel:Si,trigger:Si}:Si;if(uv&&!JR){JR=!0;const g={passive:!0};Array.from(r.document.body.children).forEach(m=>m.addEventListener("click",Si,g)),r.document.documentElement.addEventListener("click",Si,g)}let l=!0;const u=g=>Ir(a).some(m=>{if(typeof m=="string")return Array.from(r.document.querySelectorAll(m)).some(b=>b===g.target||g.composedPath().includes(b));{const b=Lr(m);return b&&(g.target===b||g.composedPath().includes(b))}});function c(g){const m=Ir(g);return m&&m.$.subTree.shapeFlag===16}function d(g,m){const b=Ir(g),_=b.$.subTree&&b.$.subTree.children;return _==null||!Array.isArray(_)?!1:_.some(w=>w.el===m.target||m.composedPath().includes(w.el))}const f=g=>{const m=Lr(e);if(g.target!=null&&!(!(m instanceof Element)&&c(e)&&d(e,g))&&!(!m||m===g.target||g.composedPath().includes(m))){if("detail"in g&&g.detail===0&&(l=!u(g)),!l){l=!0;return}t(g)}};let h=!1;const v=[gn(r,"click",g=>{h||(h=!0,setTimeout(()=>{h=!1},0),f(g))},{passive:!0,capture:i}),gn(r,"pointerdown",g=>{const m=Lr(e);l=!u(g)&&!!(m&&!g.composedPath().includes(m))},{passive:!0}),o&&gn(r,"blur",g=>{setTimeout(()=>{const m=Lr(e);let b=r.document.activeElement;for(;b!=null&&b.shadowRoot;)b=b.shadowRoot.activeElement;(b==null?void 0:b.tagName)==="IFRAME"&&!(m!=null&&m.contains(r.document.activeElement))&&t(g)},0)},{passive:!0})].filter(Boolean),p=()=>v.forEach(g=>g());return s?{stop:p,cancel:()=>{l=!1},trigger:g=>{l=!0,f(g),l=!1}}:p}function fle(){const e=Ut(!1),t=Tt();return t&&St(()=>{e.value=!0},t),e}function Vw(e){const t=fle();return M(()=>(t.value,!!e()))}function _y(e,t,n={}){const{window:r=ko,...a}=n;let i;const o=Vw(()=>r&&"MutationObserver"in r),s=()=>{i&&(i.disconnect(),i=void 0)},l=_e(M(()=>{const d=Kh(Ir(e)).map(Lr).filter(uW);return new Set(d)}),d=>{s(),o.value&&d.size&&(i=new MutationObserver(t),d.forEach(f=>i.observe(f,a)))},{immediate:!0,flush:"post"}),u=()=>i==null?void 0:i.takeRecords(),c=()=>{l(),s()};return Wv(c),{isSupported:o,stop:c,takeRecords:u}}function hle(e,t,n={}){const{window:r=ko,document:a=r==null?void 0:r.document,flush:i="sync"}=n;if(!r||!a)return Si;let o;const s=c=>{o==null||o(),o=c},l=Ua(()=>{const c=Lr(e);if(c){const{stop:d}=_y(a,f=>{f.map(h=>[...h.removedNodes]).flat().some(h=>h===c||h.contains(c))&&t(f)},{window:r,childList:!0,subtree:!0});s(d)}},{flush:i}),u=()=>{l(),s()};return Wv(u),u}function vle(e={}){var t;const{window:n=ko,deep:r=!0,triggerOnRemoval:a=!1}=e,i=(t=e.document)!==null&&t!==void 0?t:n==null?void 0:n.document,o=()=>{let u=i==null?void 0:i.activeElement;if(r)for(var c;u!=null&&u.shadowRoot;)u=u==null||(c=u.shadowRoot)===null||c===void 0?void 0:c.activeElement;return u},s=Ut(),l=()=>{s.value=o()};if(n){const u={capture:!0,passive:!0};gn(n,"blur",c=>{c.relatedTarget===null&&l()},u),gn(n,"focus",l,u)}return a&&hle(s,l,{document:i}),l(),s}const ple=Symbol("vueuse-ssr-width");function gle(){const e=x6()?Qse(ple,null):null;return typeof e=="number"?e:void 0}function mle(e,t={}){const{window:n=ko,ssrWidth:r=gle()}=t,a=Vw(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),i=Ut(typeof r=="number"),o=Ut(),s=Ut(!1),l=u=>{s.value=u.matches};return Ua(()=>{if(i.value){i.value=!a.value,s.value=Ir(e).split(",").some(u=>{const c=u.includes("not all"),d=u.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),f=u.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let h=!!(d||f);return d&&h&&(h=r>=ZR(d[1])),f&&h&&(h=r<=ZR(f[1])),c?!h:h});return}a.value&&(o.value=n.matchMedia(Ir(e)),s.value=o.value.matches)}),gn(o,"change",l,{passive:!0}),M(()=>s.value)}function yle(e){return JSON.parse(JSON.stringify(e))}function ble(e,t,n={}){const{window:r=ko,initialValue:a,observe:i=!1}=n,o=Ut(a),s=M(()=>{var u;return Lr(t)||(r==null||(u=r.document)===null||u===void 0?void 0:u.documentElement)});function l(){const u=Ir(e),c=Ir(s);if(c&&r&&u){var d;o.value=((d=r.getComputedStyle(c).getPropertyValue(u))===null||d===void 0?void 0:d.trim())||o.value||a}}return i&&_y(s,l,{attributeFilter:["style","class"],window:r}),_e([s,()=>Ir(e)],(u,c)=>{c[0]&&c[1]&&c[0].style.removeProperty(c[1]),l()},{immediate:!0}),_e([o,s],([u,c])=>{const d=Ir(e);c!=null&&c.style&&d&&(u==null?c.style.removeProperty(d):c.style.setProperty(d,u))},{immediate:!0}),o}function _le(e={}){const{document:t=dle}=e;if(!t)return Ut("visible");const n=Ut(t.visibilityState);return gn(t,"visibilitychange",()=>{n.value=t.visibilityState},{passive:!0}),n}function Kn(e,t,n={}){const{window:r=ko,...a}=n;let i;const o=Vw(()=>r&&"ResizeObserver"in r),s=()=>{i&&(i.disconnect(),i=void 0)},l=_e(M(()=>{const c=Ir(e);return Array.isArray(c)?c.map(d=>Lr(d)):[Lr(c)]}),c=>{if(s(),o.value&&r){i=new ResizeObserver(t);for(const d of c)d&&i.observe(d,a)}},{immediate:!0,flush:"post"}),u=()=>{s(),l()};return Wv(u),{isSupported:o,stop:u}}function QR(e,t={}){const{reset:n=!0,windowResize:r=!0,windowScroll:a=!0,immediate:i=!0,updateTiming:o="sync"}=t,s=Ut(0),l=Ut(0),u=Ut(0),c=Ut(0),d=Ut(0),f=Ut(0),h=Ut(0),v=Ut(0);function p(){const m=Lr(e);if(!m){n&&(s.value=0,l.value=0,u.value=0,c.value=0,d.value=0,f.value=0,h.value=0,v.value=0);return}const b=m.getBoundingClientRect();s.value=b.height,l.value=b.bottom,u.value=b.left,c.value=b.right,d.value=b.top,f.value=b.width,h.value=b.x,v.value=b.y}function g(){o==="sync"?p():o==="next-frame"&&requestAnimationFrame(()=>p())}return Kn(e,g),_e(()=>Lr(e),m=>!m&&g()),_y(e,g,{attributeFilter:["style","class"]}),a&&gn("scroll",g,{capture:!0,passive:!0}),r&&gn("resize",g,{passive:!0}),RI(()=>{i&&g()}),{height:s,bottom:l,left:u,right:c,top:d,width:f,x:h,y:v,update:g}}function Y2(e,t={width:0,height:0},n={}){const{window:r=ko,box:a="content-box"}=n,i=M(()=>{var d;return(d=Lr(e))===null||d===void 0||(d=d.namespaceURI)===null||d===void 0?void 0:d.includes("svg")}),o=Ut(t.width),s=Ut(t.height),{stop:l}=Kn(e,([d])=>{const f=a==="border-box"?d.borderBoxSize:a==="content-box"?d.contentBoxSize:d.devicePixelContentBoxSize;if(r&&i.value){const h=Lr(e);if(h){const v=h.getBoundingClientRect();o.value=v.width,s.value=v.height}}else if(f){const h=Kh(f);o.value=h.reduce((v,{inlineSize:p})=>v+p,0),s.value=h.reduce((v,{blockSize:p})=>v+p,0)}else o.value=d.contentRect.width,s.value=d.contentRect.height},n);RI(()=>{const d=Lr(e);d&&(o.value="offsetWidth"in d?d.offsetWidth:t.width,s.value="offsetHeight"in d?d.offsetHeight:t.height)});const u=_e(()=>Lr(e),d=>{o.value=d?t.width:0,s.value=d?t.height:0});function c(){l(),u()}return{width:o,height:s,stop:c}}function wle(e,t,n={}){const{root:r,rootMargin:a,threshold:i=0,window:o=ko,immediate:s=!0}=n,l=Vw(()=>o&&"IntersectionObserver"in o),u=M(()=>Kh(Ir(e)).map(Lr).filter(uW));let c=Si;const d=Ut(s),f=l.value?_e(()=>[u.value,Lr(r),Ir(a),d.value],([v,p,g])=>{if(c(),!d.value||!v.length)return;const m=new IntersectionObserver(t,{root:Lr(p),rootMargin:g,threshold:i});v.forEach(b=>b&&m.observe(b)),c=()=>{m.disconnect(),c=Si}},{immediate:s,flush:"post"}):Si,h=()=>{c(),f(),d.value=!1};return Wv(h),{isSupported:l,isActive:d,pause(){c(),d.value=!1},resume(){d.value=!0},stop:h}}function Sle(e,t,n,r={}){var a,i;const{clone:o=!1,passive:s=!1,eventName:l,deep:u=!1,defaultValue:c,shouldEmit:d}=r,f=Tt(),h=(f==null?void 0:f.emit)||(f==null||(a=f.$emit)===null||a===void 0?void 0:a.bind(f))||(f==null||(i=f.proxy)===null||i===void 0||(i=i.$emit)===null||i===void 0?void 0:i.bind(f==null?void 0:f.proxy));let v=l;v=v||`update:${t.toString()}`;const p=b=>o?typeof o=="function"?o(b):yle(b):b,g=()=>ele(e[t])?p(e[t]):c,m=b=>{d?d(b)&&h(v,b):h(v,b)};if(s){const b=H(g());let _=!1;return _e(()=>e[t],w=>{_||(_=!0,b.value=p(w),Ue(()=>_=!1))}),_e(b,w=>{!_&&(w!==e[t]||u)&&m(w)},{deep:u}),b}else return M({get(){return g()},set(b){m(b)}})}function xle(e={}){const{window:t=ko}=e;if(!t)return Ut(!1);const n=Ut(t.document.hasFocus()),r={passive:!0};return gn(t,"blur",()=>{n.value=!1},r),gn(t,"focus",()=>{n.value=!0},r),n}function NI(e={}){const{window:t=ko,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:a=!0,includeScrollbar:i=!0,type:o="inner"}=e,s=Ut(n),l=Ut(r),u=()=>{if(t)if(o==="outer")s.value=t.outerWidth,l.value=t.outerHeight;else if(o==="visual"&&t.visualViewport){const{width:d,height:f,scale:h}=t.visualViewport;s.value=Math.round(d*h),l.value=Math.round(f*h)}else i?(s.value=t.innerWidth,l.value=t.innerHeight):(s.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight)};u(),RI(u);const c={passive:!0};return gn("resize",u,c),t&&o==="visual"&&t.visualViewport&&gn(t.visualViewport,"resize",u,c),a&&_e(mle("(orientation: portrait)"),()=>u()),{width:s,height:l}}function VI(){const e=Ut(),t=H(0),n=M(()=>({minWidth:`${Math.max(t.value,11)}px`}));return Kn(e,()=>{var a;t.value=((a=e.value)==null?void 0:a.getBoundingClientRect().width)??0}),{calculatorRef:e,calculatorWidth:t,inputStyle:n}}const Bs=({from:e,replacement:t,scope:n,version:r,ref:a,type:i="API"},o)=>{_e(()=>y(o),s=>{s&&wn(n,`[${i}] ${e} is about to be deprecated in version ${r}, please use ${t} instead. +For more detail, please visit: ${a} +`)},{immediate:!0})},Cle='a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])',fW=e=>typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot,eO=e=>typeof Element>"u"?!1:e instanceof Element,Tle=e=>getComputedStyle(e).position==="fixed"?!1:e.offsetParent!==null,tO=e=>Array.from(e.querySelectorAll(Cle)).filter(t=>vf(t)&&Tle(t)),vf=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.tabIndex<0||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},Fb=function(e,t,...n){let r;t.includes("mouse")||t.includes("click")?r="MouseEvents":t.includes("key")?r="KeyboardEvent":r="HTMLEvents";const a=document.createEvent(r);return a.initEvent(t,...n),e.dispatchEvent(a),e},hW=e=>!e.getAttribute("aria-owns"),vW=(e,t,n)=>{const{parentNode:r}=e;if(!r)return null;const a=r.querySelectorAll(n);return a[Array.prototype.indexOf.call(a,e)+t]||null},wy=(e,t)=>{if(!e||!e.focus)return;let n=!1;eO(e)&&!vf(e)&&!e.getAttribute("tabindex")&&(e.setAttribute("tabindex","-1"),n=!0),e.focus(t),eO(e)&&n&&e.removeAttribute("tabindex")},Yh=e=>{e&&(wy(e),!hW(e)&&e.click())},$w=()=>cn&&/firefox/i.test(window.navigator.userAgent),pW=()=>cn&&/android/i.test(window.navigator.userAgent),$I=(e="")=>e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d"),yx=e=>ly(e),Ele="utils/dom/style",gW=(e="")=>e.split(" ").filter(t=>!!t.trim()),Fs=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},go=(e,t)=>{!e||!t.trim()||e.classList.add(...gW(t))},Ha=(e,t)=>{!e||!t.trim()||e.classList.remove(...gW(t))},Il=(e,t)=>{var r;if(!cn||!e||!t||fW(e))return"";let n=ga(t);n==="float"&&(n="cssFloat");try{const a=e.style[n];if(a)return a;const i=(r=document.defaultView)==null?void 0:r.getComputedStyle(e,"");return i?i[n]:""}catch{return e.style[n]}},mW=(e,t,n)=>{if(!(!e||!t))if(yt(t))oW(t).forEach(([r,a])=>mW(e,r,a));else{const r=ga(t);e.style[r]=n}};function ur(e,t="px"){if(!e&&e!==0)return"";if(Je(e)||Kse(e))return`${e}${t}`;if(qe(e))return e;wn(Ele,"binding value must be a string or number")}const yW=(e,t,n,r)=>{const a={offsetX:0,offsetY:0},i=H(!1),o=(f,h)=>{if(e.value){const{offsetX:v,offsetY:p}=a,g=e.value.getBoundingClientRect(),m=Math.max(g.left,0),b=Math.max(g.top,0),_=g.width,w=g.height,S=document.documentElement.clientWidth,x=document.documentElement.clientHeight,C=-m+v,T=-b+p,E=S-m-_+v,k=x-b-(w{const h=f.clientX,v=f.clientY,{offsetX:p,offsetY:g}=a,m=_=>{i.value||(i.value=!0),o(p+_.clientX-h,g+_.clientY-v)},b=()=>{i.value=!1,document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",b)};document.addEventListener("mousemove",m),document.addEventListener("mouseup",b)},l=()=>{t.value&&e.value&&(t.value.addEventListener("mousedown",s),window.addEventListener("resize",d))},u=()=>{t.value&&e.value&&(t.value.removeEventListener("mousedown",s),window.removeEventListener("resize",d))},c=()=>{a.offsetX=0,a.offsetY=0,e.value&&(e.value.style.transform="")},d=()=>{const{offsetX:f,offsetY:h}=a;o(f,h)};return St(()=>{Ua(()=>{n.value?l():u()})}),yn(()=>{u()}),{isDragging:i,resetPosition:c,updatePosition:d}};var kle={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color.",alphaLabel:"pick alpha value",alphaDescription:"alpha {alpha}, current color is {color}",hueLabel:"pick hue value",hueDescription:"hue {hue}, current color is {color}",svLabel:"pick saturation and brightness value",svDescription:"saturation {saturation}, brightness {brightness}, current color is {color}",predefineDescription:"select {value} as the color"},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},mention:{loading:"Loading"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum",selectAllLabel:"Select all rows",selectRowLabel:"Select this row",expandRowLabel:"Expand this row",collapseRowLabel:"Collapse this row",sortLabel:"Sort by {column}",filterLabel:"Filter by {column}"},tag:{close:"Close this tag"},tour:{next:"Next",previous:"Previous",finish:"Finish",close:"Close this dialog"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"},inputOTP:{groupLabel:"OTP Input",defaultLabel:"Please enter OTP character {index}"}}};const Ale=e=>(t,n)=>Ile(t,n,y(e)),Ile=(e,t,n)=>_r(n,e,e).replace(/\{(\w+)\}/g,(r,a)=>`${(t==null?void 0:t[a])??`{${a}}`}`),Mle=e=>({lang:M(()=>y(e).name),locale:Hn(e)?e:H(e),t:Ale(e)}),bW=Symbol("localeContextKey"),Yt=e=>{const t=e||Ge(bW,H());return Mle(M(()=>t.value||kle))},Ple="is-",Fc=(e,t,n,r,a)=>{let i=`${e}-${t}`;return n&&(i+=`-${n}`),r&&(i+=`__${r}`),a&&(i+=`--${a}`),i},_W=Symbol("namespaceContextKey"),BI=e=>{const t=e||(Tt()?Ge(_W,H("el")):H("el"));return M(()=>y(t)||"el")},Ee=(e,t)=>{const n=BI(t);return{namespace:n,b:(p="")=>Fc(n.value,e,p,"",""),e:p=>p?Fc(n.value,e,"",p,""):"",m:p=>p?Fc(n.value,e,"","",p):"",be:(p,g)=>p&&g?Fc(n.value,e,p,g,""):"",em:(p,g)=>p&&g?Fc(n.value,e,"",p,g):"",bm:(p,g)=>p&&g?Fc(n.value,e,p,"",g):"",bem:(p,g,m)=>p&&g&&m?Fc(n.value,e,p,g,m):"",is:(p,...g)=>{const m=g.length>=1?g[0]:!0;return p&&m?`${Ple}${p}`:""},cssVar:p=>{const g={};for(const m in p)p[m]&&(g[`--${n.value}-${m}`]=p[m]);return g},cssVarName:p=>`--${n.value}-${p}`,cssVarBlock:p=>{const g={};for(const m in p)p[m]&&(g[`--${n.value}-${e}-${m}`]=p[m]);return g},cssVarBlockName:p=>`--${n.value}-${e}-${p}`}};function Lle(e,t,n,r){const a=n-t;return e/=r/2,e<1?a/2*e*e*e+t:a/2*((e-=2)*e*e+2)+t}const Pi=e=>cn?window.requestAnimationFrame(e):setTimeout(e,16),Zo=e=>cn?window.cancelAnimationFrame(e):clearTimeout(e),Dle=(e,t)=>{if(!cn)return!1;const n={undefined:"overflow",true:"overflow-y",false:"overflow-x"}[String(t)],r=Il(e,n);return["scroll","auto","overlay"].some(a=>r.includes(a))},FI=(e,t)=>{if(!cn)return;let n=e;for(;n;){if([window,document,document.documentElement].includes(n))return window;if(Dle(n,t))return n;fW(n)?n=n.host:n=n.parentNode}return n};let h0;const wW=e=>{var i;if(!cn)return 0;if(h0!==void 0)return h0;const t=document.createElement("div");t.className=`${e}-scrollbar__wrap`,t.style.visibility="hidden",t.style.width="100px",t.style.position="absolute",t.style.top="-9999px",document.body.appendChild(t);const n=t.offsetWidth;t.style.overflow="scroll";const r=document.createElement("div");r.style.width="100%",t.appendChild(r);const a=r.offsetWidth;return(i=t.parentNode)==null||i.removeChild(t),h0=n-a,h0};function zI(e,t){if(!cn)return;if(!t){e.scrollTop=0;return}const n=[];let r=t.offsetParent;for(;r!==null&&e!==r&&e.contains(r);)n.push(r),r=r.offsetParent;const a=t.offsetTop+n.reduce((l,u)=>l+u.offsetTop,0),i=a+t.offsetHeight,o=e.scrollTop,s=o+e.clientHeight;as&&(e.scrollTop=i-e.clientHeight)}function Rle(e,t,n,r,a){const i=Date.now();let o;const s=()=>{const l=Date.now()-i,u=Lle(l>r?r:l,t,n,r);yy(e)?e.scrollTo(window.pageXOffset,u):e.scrollTop=u,l{o&&Zo(o)}}const nO=(e,t)=>yy(t)?e.ownerDocument.documentElement:t,rO=e=>yy(e)?window.scrollY:e.scrollTop,Bw=(e,t={})=>{Hn(e)||nr("[useLockscreen]","You need to pass a ref param to this function");const n=t.ns||Ee("popup"),r=M(()=>n.bm("parent","hidden"));let a=0,i=!1,o="0",s=!1;const l=()=>{s||(s=!0,setTimeout(()=>{typeof document>"u"||i&&document&&(document.body.style.width=o,Ha(document.body,r.value))},200))};_e(e,u=>{if(!u){l();return}s=!1,i=!Fs(document.body,r.value),i&&(o=document.body.style.width,go(document.body,r.value)),a=wW(n.namespace.value);const c=document.documentElement.clientHeight0&&(c||d==="scroll")&&i&&(document.body.style.width=`calc(100% - ${a}px)`)}),Zz(()=>l())},Yr=(e,t,{checkForDefaultPrevented:n=!0}={})=>a=>{const i=e==null?void 0:e(a);if(n===!1||!i)return t==null?void 0:t(a)},aO=e=>t=>t.pointerType==="mouse"?e(t):void 0,Mn=e=>{if(e.code&&e.code!=="Unidentified")return e.code;const t=SW(e);if(t){if(Object.values(De).includes(t))return t;switch(t){case" ":return De.space;default:return""}}return""},SW=e=>{let t=e.key&&e.key!=="Unidentified"?e.key:"";if(!t&&e.type==="keyup"&&pW()){const n=e.target;t=n.value.charAt(n.selectionStart-1)}return t},Ole=us({type:oe(Boolean),default:null}),Nle=us({type:oe(Function)}),Vle=e=>{const t=`update:${e}`,n=`onUpdate:${e}`,r=[t],a={[e]:Ole,[n]:Nle};return{useModelToggle:({indicator:o,toggleReason:s,shouldHideWhenRouteChanges:l,shouldProceed:u,onShow:c,onHide:d})=>{const f=Tt(),{emit:h}=f,v=f.props,p=M(()=>et(v[n])),g=M(()=>v[e]===null),m=C=>{o.value!==!0&&(o.value=!0,s&&(s.value=C),et(c)&&c(C))},b=C=>{o.value!==!1&&(o.value=!1,s&&(s.value=C),et(d)&&d(C))},_=C=>{if(v.disabled===!0||et(u)&&!u())return;const T=p.value&&cn;T&&h(t,!0),(g.value||!T)&&m(C)},w=C=>{if(v.disabled===!0||!cn)return;const T=p.value&&cn;T&&h(t,!1),(g.value||!T)&&b(C)},S=C=>{En(C)&&(v.disabled&&C?p.value&&h(t,!1):o.value!==C&&(C?m():b()))},x=()=>{o.value?w():_()};return _e(()=>v[e],S),l&&f.appContext.config.globalProperties.$route!==void 0&&_e(()=>({...f.proxy.$route}),()=>{l.value&&o.value&&w()}),St(()=>{S(v[e])}),{hide:w,show:_,toggle:x,hasUpdateHandler:p}},useModelToggleProps:a,useModelToggleEmits:r}},xW=e=>{const t=Tt();return M(()=>{var n,r;return(r=(n=t==null?void 0:t.proxy)==null?void 0:n.$props)==null?void 0:r[e]})};var Ai="top",xo="bottom",Co="right",Ii="left",HI="auto",Sy=[Ai,xo,Co,Ii],dv="start",fm="end",$le="clippingParents",CW="viewport",wp="popper",Ble="reference",iO=Sy.reduce(function(e,t){return e.concat([t+"-"+dv,t+"-"+fm])},[]),ol=[].concat(Sy,[HI]).reduce(function(e,t){return e.concat([t,t+"-"+dv,t+"-"+fm])},[]),Fle="beforeRead",zle="read",Hle="afterRead",Wle="beforeMain",Gle="main",Ule="afterMain",Kle="beforeWrite",Yle="write",jle="afterWrite",qle=[Fle,zle,Hle,Wle,Gle,Ule,Kle,Yle,jle];function Zs(e){return e?(e.nodeName||"").toLowerCase():null}function Zi(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function pf(e){var t=Zi(e).Element;return e instanceof t||e instanceof Element}function bo(e){var t=Zi(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function WI(e){if(typeof ShadowRoot>"u")return!1;var t=Zi(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function Xle(e){var t=e.state;Object.keys(t.elements).forEach(function(n){var r=t.styles[n]||{},a=t.attributes[n]||{},i=t.elements[n];!bo(i)||!Zs(i)||(Object.assign(i.style,r),Object.keys(a).forEach(function(o){var s=a[o];s===!1?i.removeAttribute(o):i.setAttribute(o,s===!0?"":s)}))})}function Zle(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(r){var a=t.elements[r],i=t.attributes[r]||{},o=Object.keys(t.styles.hasOwnProperty(r)?t.styles[r]:n[r]),s=o.reduce(function(l,u){return l[u]="",l},{});!bo(a)||!Zs(a)||(Object.assign(a.style,s),Object.keys(i).forEach(function(l){a.removeAttribute(l)}))})}}var TW={name:"applyStyles",enabled:!0,phase:"write",fn:Xle,effect:Zle,requires:["computeStyles"]};function zs(e){return e.split("-")[0]}var qd=Math.max,F1=Math.min,fv=Math.round;function j2(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function EW(){return!/^((?!chrome|android).)*safari/i.test(j2())}function hv(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r=e.getBoundingClientRect(),a=1,i=1;t&&bo(e)&&(a=e.offsetWidth>0&&fv(r.width)/e.offsetWidth||1,i=e.offsetHeight>0&&fv(r.height)/e.offsetHeight||1);var o=pf(e)?Zi(e):window,s=o.visualViewport,l=!EW()&&n,u=(r.left+(l&&s?s.offsetLeft:0))/a,c=(r.top+(l&&s?s.offsetTop:0))/i,d=r.width/a,f=r.height/i;return{width:d,height:f,top:c,right:u+d,bottom:c+f,left:u,x:u,y:c}}function GI(e){var t=hv(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function kW(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&WI(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function Kl(e){return Zi(e).getComputedStyle(e)}function Jle(e){return["table","td","th"].indexOf(Zs(e))>=0}function Ic(e){return((pf(e)?e.ownerDocument:e.document)||window.document).documentElement}function Fw(e){return Zs(e)==="html"?e:e.assignedSlot||e.parentNode||(WI(e)?e.host:null)||Ic(e)}function oO(e){return!bo(e)||Kl(e).position==="fixed"?null:e.offsetParent}function Qle(e){var t=/firefox/i.test(j2()),n=/Trident/i.test(j2());if(n&&bo(e)){var r=Kl(e);if(r.position==="fixed")return null}var a=Fw(e);for(WI(a)&&(a=a.host);bo(a)&&["html","body"].indexOf(Zs(a))<0;){var i=Kl(a);if(i.transform!=="none"||i.perspective!=="none"||i.contain==="paint"||["transform","perspective"].indexOf(i.willChange)!==-1||t&&i.willChange==="filter"||t&&i.filter&&i.filter!=="none")return a;a=a.parentNode}return null}function xy(e){for(var t=Zi(e),n=oO(e);n&&Jle(n)&&Kl(n).position==="static";)n=oO(n);return n&&(Zs(n)==="html"||Zs(n)==="body"&&Kl(n).position==="static")?t:n||Qle(e)||t}function UI(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Lg(e,t,n){return qd(e,F1(t,n))}function eue(e,t,n){var r=Lg(e,t,n);return r>n?n:r}function AW(){return{top:0,right:0,bottom:0,left:0}}function IW(e){return Object.assign({},AW(),e)}function MW(e,t){return t.reduce(function(n,r){return n[r]=e,n},{})}var tue=function(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,IW(typeof e!="number"?e:MW(e,Sy))};function nue(e){var t,n=e.state,r=e.name,a=e.options,i=n.elements.arrow,o=n.modifiersData.popperOffsets,s=zs(n.placement),l=UI(s),u=[Ii,Co].indexOf(s)>=0,c=u?"height":"width";if(!(!i||!o)){var d=tue(a.padding,n),f=GI(i),h=l==="y"?Ai:Ii,v=l==="y"?xo:Co,p=n.rects.reference[c]+n.rects.reference[l]-o[l]-n.rects.popper[c],g=o[l]-n.rects.reference[l],m=xy(i),b=m?l==="y"?m.clientHeight||0:m.clientWidth||0:0,_=p/2-g/2,w=d[h],S=b-f[c]-d[v],x=b/2-f[c]/2+_,C=Lg(w,x,S),T=l;n.modifiersData[r]=(t={},t[T]=C,t.centerOffset=C-x,t)}}function rue(e){var t=e.state,n=e.options,r=n.element,a=r===void 0?"[data-popper-arrow]":r;a!=null&&(typeof a=="string"&&(a=t.elements.popper.querySelector(a),!a)||kW(t.elements.popper,a)&&(t.elements.arrow=a))}var aue={name:"arrow",enabled:!0,phase:"main",fn:nue,effect:rue,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function vv(e){return e.split("-")[1]}var iue={top:"auto",right:"auto",bottom:"auto",left:"auto"};function oue(e,t){var n=e.x,r=e.y,a=t.devicePixelRatio||1;return{x:fv(n*a)/a||0,y:fv(r*a)/a||0}}function sO(e){var t,n=e.popper,r=e.popperRect,a=e.placement,i=e.variation,o=e.offsets,s=e.position,l=e.gpuAcceleration,u=e.adaptive,c=e.roundOffsets,d=e.isFixed,f=o.x,h=f===void 0?0:f,v=o.y,p=v===void 0?0:v,g=typeof c=="function"?c({x:h,y:p}):{x:h,y:p};h=g.x,p=g.y;var m=o.hasOwnProperty("x"),b=o.hasOwnProperty("y"),_=Ii,w=Ai,S=window;if(u){var x=xy(n),C="clientHeight",T="clientWidth";if(x===Zi(n)&&(x=Ic(n),Kl(x).position!=="static"&&s==="absolute"&&(C="scrollHeight",T="scrollWidth")),x=x,a===Ai||(a===Ii||a===Co)&&i===fm){w=xo;var E=d&&x===S&&S.visualViewport?S.visualViewport.height:x[C];p-=E-r.height,p*=l?1:-1}if(a===Ii||(a===Ai||a===xo)&&i===fm){_=Co;var k=d&&x===S&&S.visualViewport?S.visualViewport.width:x[T];h-=k-r.width,h*=l?1:-1}}var A=Object.assign({position:s},u&&iue),I=c===!0?oue({x:h,y:p},Zi(n)):{x:h,y:p};if(h=I.x,p=I.y,l){var P;return Object.assign({},A,(P={},P[w]=b?"0":"",P[_]=m?"0":"",P.transform=(S.devicePixelRatio||1)<=1?"translate("+h+"px, "+p+"px)":"translate3d("+h+"px, "+p+"px, 0)",P))}return Object.assign({},A,(t={},t[w]=b?p+"px":"",t[_]=m?h+"px":"",t.transform="",t))}function sue(e){var t=e.state,n=e.options,r=n.gpuAcceleration,a=r===void 0?!0:r,i=n.adaptive,o=i===void 0?!0:i,s=n.roundOffsets,l=s===void 0?!0:s,u={placement:zs(t.placement),variation:vv(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:a,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,sO(Object.assign({},u,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:o,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,sO(Object.assign({},u,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}var PW={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:sue,data:{}},v0={passive:!0};function lue(e){var t=e.state,n=e.instance,r=e.options,a=r.scroll,i=a===void 0?!0:a,o=r.resize,s=o===void 0?!0:o,l=Zi(t.elements.popper),u=[].concat(t.scrollParents.reference,t.scrollParents.popper);return i&&u.forEach(function(c){c.addEventListener("scroll",n.update,v0)}),s&&l.addEventListener("resize",n.update,v0),function(){i&&u.forEach(function(c){c.removeEventListener("scroll",n.update,v0)}),s&&l.removeEventListener("resize",n.update,v0)}}var LW={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:lue,data:{}},uue={left:"right",right:"left",bottom:"top",top:"bottom"};function zb(e){return e.replace(/left|right|bottom|top/g,function(t){return uue[t]})}var cue={start:"end",end:"start"};function lO(e){return e.replace(/start|end/g,function(t){return cue[t]})}function KI(e){var t=Zi(e),n=t.pageXOffset,r=t.pageYOffset;return{scrollLeft:n,scrollTop:r}}function YI(e){return hv(Ic(e)).left+KI(e).scrollLeft}function due(e,t){var n=Zi(e),r=Ic(e),a=n.visualViewport,i=r.clientWidth,o=r.clientHeight,s=0,l=0;if(a){i=a.width,o=a.height;var u=EW();(u||!u&&t==="fixed")&&(s=a.offsetLeft,l=a.offsetTop)}return{width:i,height:o,x:s+YI(e),y:l}}function fue(e){var t,n=Ic(e),r=KI(e),a=(t=e.ownerDocument)==null?void 0:t.body,i=qd(n.scrollWidth,n.clientWidth,a?a.scrollWidth:0,a?a.clientWidth:0),o=qd(n.scrollHeight,n.clientHeight,a?a.scrollHeight:0,a?a.clientHeight:0),s=-r.scrollLeft+YI(e),l=-r.scrollTop;return Kl(a||n).direction==="rtl"&&(s+=qd(n.clientWidth,a?a.clientWidth:0)-i),{width:i,height:o,x:s,y:l}}function jI(e){var t=Kl(e),n=t.overflow,r=t.overflowX,a=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+a+r)}function DW(e){return["html","body","#document"].indexOf(Zs(e))>=0?e.ownerDocument.body:bo(e)&&jI(e)?e:DW(Fw(e))}function Dg(e,t){var n;t===void 0&&(t=[]);var r=DW(e),a=r===((n=e.ownerDocument)==null?void 0:n.body),i=Zi(r),o=a?[i].concat(i.visualViewport||[],jI(r)?r:[]):r,s=t.concat(o);return a?s:s.concat(Dg(Fw(o)))}function q2(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function hue(e,t){var n=hv(e,!1,t==="fixed");return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function uO(e,t,n){return t===CW?q2(due(e,n)):pf(t)?hue(t,n):q2(fue(Ic(e)))}function vue(e){var t=Dg(Fw(e)),n=["absolute","fixed"].indexOf(Kl(e).position)>=0,r=n&&bo(e)?xy(e):e;return pf(r)?t.filter(function(a){return pf(a)&&kW(a,r)&&Zs(a)!=="body"}):[]}function pue(e,t,n,r){var a=t==="clippingParents"?vue(e):[].concat(t),i=[].concat(a,[n]),o=i[0],s=i.reduce(function(l,u){var c=uO(e,u,r);return l.top=qd(c.top,l.top),l.right=F1(c.right,l.right),l.bottom=F1(c.bottom,l.bottom),l.left=qd(c.left,l.left),l},uO(e,o,r));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}function RW(e){var t=e.reference,n=e.element,r=e.placement,a=r?zs(r):null,i=r?vv(r):null,o=t.x+t.width/2-n.width/2,s=t.y+t.height/2-n.height/2,l;switch(a){case Ai:l={x:o,y:t.y-n.height};break;case xo:l={x:o,y:t.y+t.height};break;case Co:l={x:t.x+t.width,y:s};break;case Ii:l={x:t.x-n.width,y:s};break;default:l={x:t.x,y:t.y}}var u=a?UI(a):null;if(u!=null){var c=u==="y"?"height":"width";switch(i){case dv:l[u]=l[u]-(t[c]/2-n[c]/2);break;case fm:l[u]=l[u]+(t[c]/2-n[c]/2);break}}return l}function hm(e,t){t===void 0&&(t={});var n=t,r=n.placement,a=r===void 0?e.placement:r,i=n.strategy,o=i===void 0?e.strategy:i,s=n.boundary,l=s===void 0?$le:s,u=n.rootBoundary,c=u===void 0?CW:u,d=n.elementContext,f=d===void 0?wp:d,h=n.altBoundary,v=h===void 0?!1:h,p=n.padding,g=p===void 0?0:p,m=IW(typeof g!="number"?g:MW(g,Sy)),b=f===wp?Ble:wp,_=e.rects.popper,w=e.elements[v?b:f],S=pue(pf(w)?w:w.contextElement||Ic(e.elements.popper),l,c,o),x=hv(e.elements.reference),C=RW({reference:x,element:_,placement:a}),T=q2(Object.assign({},_,C)),E=f===wp?T:x,k={top:S.top-E.top+m.top,bottom:E.bottom-S.bottom+m.bottom,left:S.left-E.left+m.left,right:E.right-S.right+m.right},A=e.modifiersData.offset;if(f===wp&&A){var I=A[a];Object.keys(k).forEach(function(P){var R=[Co,xo].indexOf(P)>=0?1:-1,O=[Ai,xo].indexOf(P)>=0?"y":"x";k[P]+=I[O]*R})}return k}function gue(e,t){t===void 0&&(t={});var n=t,r=n.placement,a=n.boundary,i=n.rootBoundary,o=n.padding,s=n.flipVariations,l=n.allowedAutoPlacements,u=l===void 0?ol:l,c=vv(r),d=c?s?iO:iO.filter(function(v){return vv(v)===c}):Sy,f=d.filter(function(v){return u.indexOf(v)>=0});f.length===0&&(f=d);var h=f.reduce(function(v,p){return v[p]=hm(e,{placement:p,boundary:a,rootBoundary:i,padding:o})[zs(p)],v},{});return Object.keys(h).sort(function(v,p){return h[v]-h[p]})}function mue(e){if(zs(e)===HI)return[];var t=zb(e);return[lO(e),t,lO(t)]}function yue(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var a=n.mainAxis,i=a===void 0?!0:a,o=n.altAxis,s=o===void 0?!0:o,l=n.fallbackPlacements,u=n.padding,c=n.boundary,d=n.rootBoundary,f=n.altBoundary,h=n.flipVariations,v=h===void 0?!0:h,p=n.allowedAutoPlacements,g=t.options.placement,m=zs(g),b=m===g,_=l||(b||!v?[zb(g)]:mue(g)),w=[g].concat(_).reduce(function(re,ee){return re.concat(zs(ee)===HI?gue(t,{placement:ee,boundary:c,rootBoundary:d,padding:u,flipVariations:v,allowedAutoPlacements:p}):ee)},[]),S=t.rects.reference,x=t.rects.popper,C=new Map,T=!0,E=w[0],k=0;k=0,O=R?"width":"height",$=hm(t,{placement:A,boundary:c,rootBoundary:d,altBoundary:f,padding:u}),N=R?P?Co:Ii:P?xo:Ai;S[O]>x[O]&&(N=zb(N));var D=zb(N),F=[];if(i&&F.push($[I]<=0),s&&F.push($[N]<=0,$[D]<=0),F.every(function(re){return re})){E=A,T=!1;break}C.set(A,F)}if(T)for(var W=v?3:1,z=function(re){var ee=w.find(function(se){var ne=C.get(se);if(ne)return ne.slice(0,re).every(function(de){return de})});if(ee)return E=ee,"break"},Y=W;Y>0;Y--){var q=z(Y);if(q==="break")break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}}var bue={name:"flip",enabled:!0,phase:"main",fn:yue,requiresIfExists:["offset"],data:{_skip:!1}};function cO(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function dO(e){return[Ai,Co,xo,Ii].some(function(t){return e[t]>=0})}function _ue(e){var t=e.state,n=e.name,r=t.rects.reference,a=t.rects.popper,i=t.modifiersData.preventOverflow,o=hm(t,{elementContext:"reference"}),s=hm(t,{altBoundary:!0}),l=cO(o,r),u=cO(s,a,i),c=dO(l),d=dO(u);t.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:u,isReferenceHidden:c,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":c,"data-popper-escaped":d})}var wue={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:_ue};function Sue(e,t,n){var r=zs(e),a=[Ii,Ai].indexOf(r)>=0?-1:1,i=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,o=i[0],s=i[1];return o=o||0,s=(s||0)*a,[Ii,Co].indexOf(r)>=0?{x:s,y:o}:{x:o,y:s}}function xue(e){var t=e.state,n=e.options,r=e.name,a=n.offset,i=a===void 0?[0,0]:a,o=ol.reduce(function(c,d){return c[d]=Sue(d,t.rects,i),c},{}),s=o[t.placement],l=s.x,u=s.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=u),t.modifiersData[r]=o}var Cue={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:xue};function Tue(e){var t=e.state,n=e.name;t.modifiersData[n]=RW({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})}var OW={name:"popperOffsets",enabled:!0,phase:"read",fn:Tue,data:{}};function Eue(e){return e==="x"?"y":"x"}function kue(e){var t=e.state,n=e.options,r=e.name,a=n.mainAxis,i=a===void 0?!0:a,o=n.altAxis,s=o===void 0?!1:o,l=n.boundary,u=n.rootBoundary,c=n.altBoundary,d=n.padding,f=n.tether,h=f===void 0?!0:f,v=n.tetherOffset,p=v===void 0?0:v,g=hm(t,{boundary:l,rootBoundary:u,padding:d,altBoundary:c}),m=zs(t.placement),b=vv(t.placement),_=!b,w=UI(m),S=Eue(w),x=t.modifiersData.popperOffsets,C=t.rects.reference,T=t.rects.popper,E=typeof p=="function"?p(Object.assign({},t.rects,{placement:t.placement})):p,k=typeof E=="number"?{mainAxis:E,altAxis:E}:Object.assign({mainAxis:0,altAxis:0},E),A=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,I={x:0,y:0};if(x){if(i){var P,R=w==="y"?Ai:Ii,O=w==="y"?xo:Co,$=w==="y"?"height":"width",N=x[w],D=N+g[R],F=N-g[O],W=h?-T[$]/2:0,z=b===dv?C[$]:T[$],Y=b===dv?-T[$]:-C[$],q=t.elements.arrow,re=h&&q?GI(q):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:AW(),se=ee[R],ne=ee[O],de=Lg(0,C[$],re[$]),le=_?C[$]/2-W-de-se-k.mainAxis:z-de-se-k.mainAxis,J=_?-C[$]/2+W+de+ne+k.mainAxis:Y+de+ne+k.mainAxis,Z=t.elements.arrow&&xy(t.elements.arrow),U=Z?w==="y"?Z.clientTop||0:Z.clientLeft||0:0,te=(P=A==null?void 0:A[w])!=null?P:0,Q=N+le-te-U,ue=N+J-te,pe=Lg(h?F1(D,Q):D,N,h?qd(F,ue):F);x[w]=pe,I[w]=pe-N}if(s){var me,Pe=w==="x"?Ai:Ii,Ne=w==="x"?xo:Co,ie=x[S],ae=S==="y"?"height":"width",ge=ie+g[Pe],be=ie-g[Ne],$e=[Ai,Ii].indexOf(m)!==-1,Re=(me=A==null?void 0:A[S])!=null?me:0,Se=$e?ge:ie-C[ae]-T[ae]-Re+k.altAxis,Ae=$e?ie+C[ae]+T[ae]-Re-k.altAxis:be,nt=h&&$e?eue(Se,ie,Ae):Lg(h?Se:ge,ie,h?Ae:be);x[S]=nt,I[S]=nt-ie}t.modifiersData[r]=I}}var Aue={name:"preventOverflow",enabled:!0,phase:"main",fn:kue,requiresIfExists:["offset"]};function Iue(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function Mue(e){return e===Zi(e)||!bo(e)?KI(e):Iue(e)}function Pue(e){var t=e.getBoundingClientRect(),n=fv(t.width)/e.offsetWidth||1,r=fv(t.height)/e.offsetHeight||1;return n!==1||r!==1}function Lue(e,t,n){n===void 0&&(n=!1);var r=bo(t),a=bo(t)&&Pue(t),i=Ic(t),o=hv(e,a,n),s={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(r||!r&&!n)&&((Zs(t)!=="body"||jI(i))&&(s=Mue(t)),bo(t)?(l=hv(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):i&&(l.x=YI(i))),{x:o.left+s.scrollLeft-l.x,y:o.top+s.scrollTop-l.y,width:o.width,height:o.height}}function Due(e){var t=new Map,n=new Set,r=[];e.forEach(function(i){t.set(i.name,i)});function a(i){n.add(i.name);var o=[].concat(i.requires||[],i.requiresIfExists||[]);o.forEach(function(s){if(!n.has(s)){var l=t.get(s);l&&a(l)}}),r.push(i)}return e.forEach(function(i){n.has(i.name)||a(i)}),r}function Rue(e){var t=Due(e);return qle.reduce(function(n,r){return n.concat(t.filter(function(a){return a.phase===r}))},[])}function Oue(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function Nue(e){var t=e.reduce(function(n,r){var a=n[r.name];return n[r.name]=a?Object.assign({},a,r,{options:Object.assign({},a.options,r.options),data:Object.assign({},a.data,r.data)}):r,n},{});return Object.keys(t).map(function(n){return t[n]})}var fO={placement:"bottom",modifiers:[],strategy:"absolute"};function hO(){for(var e=arguments.length,t=new Array(e),n=0;n{const r={name:"updateState",enabled:!0,phase:"write",fn:({state:l})=>{const u=zue(l);Object.assign(o.value,u)},requires:["computeStyles"]},a=M(()=>{const{onFirstUpdate:l,placement:u,strategy:c,modifiers:d}=y(n);return{onFirstUpdate:l,placement:u||"bottom",strategy:c||"absolute",modifiers:[...d||[],r,{name:"applyStyles",enabled:!1}]}}),i=Ut(),o=H({styles:{popper:{position:y(a).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),s=()=>{i.value&&(i.value.destroy(),i.value=void 0)};return _e(a,l=>{const u=y(i);u&&u.setOptions(l)},{deep:!0}),_e([e,t],([l,u])=>{s(),!(!l||!u)&&(i.value=Bue(l,u,y(a)))}),yn(()=>{s()}),{state:M(()=>{var l;return{...((l=y(i))==null?void 0:l.state)||{}}}),styles:M(()=>y(o).styles),attributes:M(()=>y(o).attributes),update:()=>{var l;return(l=y(i))==null?void 0:l.update()},forceUpdate:()=>{var l;return(l=y(i))==null?void 0:l.forceUpdate()},instanceRef:M(()=>y(i))}};function zue(e){const t=Object.keys(e.elements);return{styles:lv(t.map(n=>[n,e.styles[n]||{}])),attributes:lv(t.map(n=>[n,e.attributes[n]]))}}const XI=e=>{if(!e)return{onClick:It,onMousedown:It,onMouseup:It};let t=!1,n=!1;return{onClick:o=>{t&&n&&e(o),t=n=!1},onMousedown:o=>{t=o.target===o.currentTarget},onMouseup:o=>{n=o.target===o.currentTarget}}},Hue=(e,t=0)=>{if(t===0)return e;const n=H(yt(t)&&!!t.initVal);let r=null;const a=o=>{if(qt(o)){n.value=e.value;return}r&&clearTimeout(r),r=setTimeout(()=>{n.value=e.value},o)},i=o=>{o==="leading"?Je(t)?a(t):a(t.leading):yt(t)?a(t.trailing):n.value=!1};return St(()=>i("leading")),_e(()=>e.value,o=>{i(o?"leading":"trailing")}),n};function vO(){let e;const t=(r,a)=>{n(),e=globalThis.setTimeout(r,a)},n=()=>{e!==void 0&&(globalThis.clearTimeout(e),e=void 0)};return Wv(()=>n()),{registerTimeout:t,cancelTimeout:n}}const X2={prefix:Math.floor(Math.random()*1e4),current:0},Wue=Symbol("elIdInjection"),ZI=()=>Tt()?Ge(Wue,X2):X2,ba=e=>{const t=ZI();!cn&&t===X2&&wn("IdInjection",`Looks like you are using server rendering, you must provide a id provider to ensure the hydration process to be succeed +usage: app.provide(ID_INJECTION_KEY, { + prefix: number, + current: number, +})`);const n=BI();return lW(()=>y(e)||`${n.value}-id-${t.prefix}-${t.current++}`)};let Ch=[];const pO=e=>{Mn(e)===De.esc&&Ch.forEach(t=>t(e))},Gue=e=>{St(()=>{Ch.length===0&&document.addEventListener("keydown",pO),cn&&Ch.push(e)}),yn(()=>{Ch=Ch.filter(t=>t!==e),Ch.length===0&&cn&&document.removeEventListener("keydown",pO)})},NW=()=>{const e=BI(),t=ZI(),n=M(()=>`${e.value}-popper-container-${t.prefix}`);return{id:n,selector:M(()=>`#${n.value}`)}},Uue=e=>{const t=document.createElement("div");return t.id=e,document.body.appendChild(t),t},Kue=()=>{const{id:e,selector:t}=NW();return dy(()=>{cn&&(document.body.querySelector(t.value)||Uue(e.value))}),{id:e,selector:t}},Yue=Oe({showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0}}),jue=({showAfter:e,hideAfter:t,autoClose:n,open:r,close:a})=>{const{registerTimeout:i}=vO(),{registerTimeout:o,cancelTimeout:s}=vO();return{onOpen:(c,d=y(e))=>{i(()=>{r(c);const f=y(n);Je(f)&&f>0&&o(()=>{a(c)},f)},d)},onClose:(c,d=y(t))=>{s(),i(()=>{a(c)},d)}}},VW=Symbol("elForwardRef"),que=e=>{Ft(VW,{setForwardRef:n=>{e.value=n}})},Xue=e=>({mounted(t){e(t)},updated(t){e(t)},unmounted(){e(null)}}),gO={current:0},mO=H(0),$W=2e3,yO=Symbol("elZIndexContextKey"),BW=Symbol("zIndexContextKey"),Cy=e=>{const t=Tt()?Ge(yO,gO):gO,n=e||(Tt()?Ge(BW,void 0):void 0),r=M(()=>{const o=y(n);return Je(o)?o:$W}),a=M(()=>r.value+mO.value),i=()=>(t.current++,mO.value=t.current,a.value);return!cn&&!Ge(yO)&&wn("ZIndexInjection",`Looks like you are using server rendering, you must provide a z-index provider to ensure the hydration process to be succeed +usage: app.provide(ZINDEX_INJECTION_KEY, { current: 0 })`),{initialZIndex:r,currentZIndex:a,nextZIndex:i}},pv=Math.min,Xd=Math.max,z1=Math.round,p0=Math.floor,Hs=e=>({x:e,y:e}),Zue={left:"right",right:"left",bottom:"top",top:"bottom"};function Z2(e,t,n){return Xd(e,pv(t,n))}function Ty(e,t){return typeof e=="function"?e(t):e}function gf(e){return e.split("-")[0]}function Ey(e){return e.split("-")[1]}function FW(e){return e==="x"?"y":"x"}function JI(e){return e==="y"?"height":"width"}function Yu(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function QI(e){return FW(Yu(e))}function Jue(e,t,n){n===void 0&&(n=!1);const r=Ey(e),a=QI(e),i=JI(a);let o=a==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[i]>t.floating[i]&&(o=H1(o)),[o,H1(o)]}function Que(e){const t=H1(e);return[J2(e),t,J2(t)]}function J2(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const bO=["left","right"],_O=["right","left"],ece=["top","bottom"],tce=["bottom","top"];function nce(e,t,n){switch(e){case"top":case"bottom":return n?t?_O:bO:t?bO:_O;case"left":case"right":return t?ece:tce;default:return[]}}function rce(e,t,n,r){const a=Ey(e);let i=nce(gf(e),n==="start",r);return a&&(i=i.map(o=>o+"-"+a),t&&(i=i.concat(i.map(J2)))),i}function H1(e){const t=gf(e);return Zue[t]+e.slice(t.length)}function ace(e){return{top:0,right:0,bottom:0,left:0,...e}}function zW(e){return typeof e!="number"?ace(e):{top:e,right:e,bottom:e,left:e}}function W1(e){const{x:t,y:n,width:r,height:a}=e;return{width:r,height:a,top:n,left:t,right:t+r,bottom:n+a,x:t,y:n}}function wO(e,t,n){let{reference:r,floating:a}=e;const i=Yu(t),o=QI(t),s=JI(o),l=gf(t),u=i==="y",c=r.x+r.width/2-a.width/2,d=r.y+r.height/2-a.height/2,f=r[s]/2-a[s]/2;let h;switch(l){case"top":h={x:c,y:r.y-a.height};break;case"bottom":h={x:c,y:r.y+r.height};break;case"right":h={x:r.x+r.width,y:d};break;case"left":h={x:r.x-a.width,y:d};break;default:h={x:r.x,y:r.y}}switch(Ey(t)){case"start":h[o]-=f*(n&&u?-1:1);break;case"end":h[o]+=f*(n&&u?-1:1);break}return h}async function HW(e,t){var n;t===void 0&&(t={});const{x:r,y:a,platform:i,rects:o,elements:s,strategy:l}=e,{boundary:u="clippingAncestors",rootBoundary:c="viewport",elementContext:d="floating",altBoundary:f=!1,padding:h=0}=Ty(t,e),v=zW(h),g=s[f?d==="floating"?"reference":"floating":d],m=W1(await i.getClippingRect({element:(n=await(i.isElement==null?void 0:i.isElement(g)))==null||n?g:g.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(s.floating)),boundary:u,rootBoundary:c,strategy:l})),b=d==="floating"?{x:r,y:a,width:o.floating.width,height:o.floating.height}:o.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(s.floating)),w=await(i.isElement==null?void 0:i.isElement(_))?await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1}:{x:1,y:1},S=W1(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:b,offsetParent:_,strategy:l}):b);return{top:(m.top-S.top+v.top)/w.y,bottom:(S.bottom-m.bottom+v.bottom)/w.y,left:(m.left-S.left+v.left)/w.x,right:(S.right-m.right+v.right)/w.x}}const ice=50,oce=async(e,t,n)=>{const{placement:r="bottom",strategy:a="absolute",middleware:i=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:HW},l=await(o.isRTL==null?void 0:o.isRTL(t));let u=await o.getElementRects({reference:e,floating:t,strategy:a}),{x:c,y:d}=wO(u,r,l),f=r,h=0;const v={};for(let p=0;p({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:a,rects:i,platform:o,elements:s,middlewareData:l}=t,{element:u,padding:c=0}=Ty(e,t)||{};if(u==null)return{};const d=zW(c),f={x:n,y:r},h=QI(a),v=JI(h),p=await o.getDimensions(u),g=h==="y",m=g?"top":"left",b=g?"bottom":"right",_=g?"clientHeight":"clientWidth",w=i.reference[v]+i.reference[h]-f[h]-i.floating[v],S=f[h]-i.reference[h],x=await(o.getOffsetParent==null?void 0:o.getOffsetParent(u));let C=x?x[_]:0;(!C||!await(o.isElement==null?void 0:o.isElement(x)))&&(C=s.floating[_]||i.floating[v]);const T=w/2-S/2,E=C/2-p[v]/2-1,k=pv(d[m],E),A=pv(d[b],E),I=k,P=C-p[v]-A,R=C/2-p[v]/2+T,O=Z2(I,R,P),$=!l.arrow&&Ey(a)!=null&&R!==O&&i.reference[v]/2-(RR<=0)){var A,I;const R=(((A=i.flip)==null?void 0:A.index)||0)+1,O=C[R];if(O&&(!(d==="alignment"?b!==Yu(O):!1)||k.every(D=>Yu(D.placement)===b?D.overflows[0]>0:!0)))return{data:{index:R,overflows:k},reset:{placement:O}};let $=(I=k.filter(N=>N.overflows[0]<=0).sort((N,D)=>N.overflows[1]-D.overflows[1])[0])==null?void 0:I.placement;if(!$)switch(h){case"bestFit":{var P;const N=(P=k.filter(D=>{if(x){const F=Yu(D.placement);return F===b||F==="y"}return!0}).map(D=>[D.placement,D.overflows.filter(F=>F>0).reduce((F,W)=>F+W,0)]).sort((D,F)=>D[1]-F[1])[0])==null?void 0:P[0];N&&($=N);break}case"initialPlacement":$=s;break}if(a!==$)return{reset:{placement:$}}}return{}}}},uce=new Set(["left","top"]);async function cce(e,t){const{placement:n,platform:r,elements:a}=e,i=await(r.isRTL==null?void 0:r.isRTL(a.floating)),o=gf(n),s=Ey(n),l=Yu(n)==="y",u=uce.has(o)?-1:1,c=i&&l?-1:1,d=Ty(t,e);let{mainAxis:f,crossAxis:h,alignmentAxis:v}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof v=="number"&&(h=s==="end"?v*-1:v),l?{x:h*c,y:f*u}:{x:f*u,y:h*c}}const dce=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:a,y:i,placement:o,middlewareData:s}=t,l=await cce(t,e);return o===((n=s.offset)==null?void 0:n.placement)&&(r=s.arrow)!=null&&r.alignmentOffset?{}:{x:a+l.x,y:i+l.y,data:{...l,placement:o}}}}},fce=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:a,platform:i}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:l={fn:m=>{let{x:b,y:_}=m;return{x:b,y:_}}},...u}=Ty(e,t),c={x:n,y:r},d=await i.detectOverflow(t,u),f=Yu(gf(a)),h=FW(f);let v=c[h],p=c[f];if(o){const m=h==="y"?"top":"left",b=h==="y"?"bottom":"right",_=v+d[m],w=v-d[b];v=Z2(_,v,w)}if(s){const m=f==="y"?"top":"left",b=f==="y"?"bottom":"right",_=p+d[m],w=p-d[b];p=Z2(_,p,w)}const g=l.fn({...t,[h]:v,[f]:p});return{...g,data:{x:g.x-n,y:g.y-r,enabled:{[h]:o,[f]:s}}}}}};function zw(){return typeof window<"u"}function Gv(e){return WW(e)?(e.nodeName||"").toLowerCase():"#document"}function Ki(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function sl(e){var t;return(t=(WW(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function WW(e){return zw()?e instanceof Node||e instanceof Ki(e).Node:!1}function Jo(e){return zw()?e instanceof Element||e instanceof Ki(e).Element:!1}function lu(e){return zw()?e instanceof HTMLElement||e instanceof Ki(e).HTMLElement:!1}function SO(e){return!zw()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof Ki(e).ShadowRoot}function ky(e){const{overflow:t,overflowX:n,overflowY:r,display:a}=Qo(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&a!=="inline"&&a!=="contents"}function hce(e){return/^(table|td|th)$/.test(Gv(e))}function Hw(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const vce=/transform|translate|scale|rotate|perspective|filter/,pce=/paint|layout|strict|content/,zc=e=>!!e&&e!=="none";let bx;function eM(e){const t=Jo(e)?Qo(e):e;return zc(t.transform)||zc(t.translate)||zc(t.scale)||zc(t.rotate)||zc(t.perspective)||!tM()&&(zc(t.backdropFilter)||zc(t.filter))||vce.test(t.willChange||"")||pce.test(t.contain||"")}function gce(e){let t=vc(e);for(;lu(t)&&!gv(t);){if(eM(t))return t;if(Hw(t))return null;t=vc(t)}return null}function tM(){return bx==null&&(bx=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),bx}function gv(e){return/^(html|body|#document)$/.test(Gv(e))}function Qo(e){return Ki(e).getComputedStyle(e)}function Ww(e){return Jo(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function vc(e){if(Gv(e)==="html")return e;const t=e.assignedSlot||e.parentNode||SO(e)&&e.host||sl(e);return SO(t)?t.host:t}function GW(e){const t=vc(e);return gv(t)?e.ownerDocument?e.ownerDocument.body:e.body:lu(t)&&ky(t)?t:GW(t)}function vm(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);const a=GW(e),i=a===((r=e.ownerDocument)==null?void 0:r.body),o=Ki(a);if(i){const s=Q2(o);return t.concat(o,o.visualViewport||[],ky(a)?a:[],s&&n?vm(s):[])}else return t.concat(a,vm(a,[],n))}function Q2(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function UW(e){const t=Qo(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const a=lu(e),i=a?e.offsetWidth:n,o=a?e.offsetHeight:r,s=z1(n)!==i||z1(r)!==o;return s&&(n=i,r=o),{width:n,height:r,$:s}}function nM(e){return Jo(e)?e:e.contextElement}function jh(e){const t=nM(e);if(!lu(t))return Hs(1);const n=t.getBoundingClientRect(),{width:r,height:a,$:i}=UW(t);let o=(i?z1(n.width):n.width)/r,s=(i?z1(n.height):n.height)/a;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}const mce=Hs(0);function KW(e){const t=Ki(e);return!tM()||!t.visualViewport?mce:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function yce(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==Ki(e)?!1:t}function mf(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const a=e.getBoundingClientRect(),i=nM(e);let o=Hs(1);t&&(r?Jo(r)&&(o=jh(r)):o=jh(e));const s=yce(i,n,r)?KW(i):Hs(0);let l=(a.left+s.x)/o.x,u=(a.top+s.y)/o.y,c=a.width/o.x,d=a.height/o.y;if(i){const f=Ki(i),h=r&&Jo(r)?Ki(r):r;let v=f,p=Q2(v);for(;p&&r&&h!==v;){const g=jh(p),m=p.getBoundingClientRect(),b=Qo(p),_=m.left+(p.clientLeft+parseFloat(b.paddingLeft))*g.x,w=m.top+(p.clientTop+parseFloat(b.paddingTop))*g.y;l*=g.x,u*=g.y,c*=g.x,d*=g.y,l+=_,u+=w,v=Ki(p),p=Q2(v)}}return W1({width:c,height:d,x:l,y:u})}function Gw(e,t){const n=Ww(e).scrollLeft;return t?t.left+n:mf(sl(e)).left+n}function YW(e,t){const n=e.getBoundingClientRect(),r=n.left+t.scrollLeft-Gw(e,n),a=n.top+t.scrollTop;return{x:r,y:a}}function bce(e){let{elements:t,rect:n,offsetParent:r,strategy:a}=e;const i=a==="fixed",o=sl(r),s=t?Hw(t.floating):!1;if(r===o||s&&i)return n;let l={scrollLeft:0,scrollTop:0},u=Hs(1);const c=Hs(0),d=lu(r);if((d||!d&&!i)&&((Gv(r)!=="body"||ky(o))&&(l=Ww(r)),d)){const h=mf(r);u=jh(r),c.x=h.x+r.clientLeft,c.y=h.y+r.clientTop}const f=o&&!d&&!i?YW(o,l):Hs(0);return{width:n.width*u.x,height:n.height*u.y,x:n.x*u.x-l.scrollLeft*u.x+c.x+f.x,y:n.y*u.y-l.scrollTop*u.y+c.y+f.y}}function _ce(e){return Array.from(e.getClientRects())}function wce(e){const t=sl(e),n=Ww(e),r=e.ownerDocument.body,a=Xd(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),i=Xd(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let o=-n.scrollLeft+Gw(e);const s=-n.scrollTop;return Qo(r).direction==="rtl"&&(o+=Xd(t.clientWidth,r.clientWidth)-a),{width:a,height:i,x:o,y:s}}const xO=25;function Sce(e,t){const n=Ki(e),r=sl(e),a=n.visualViewport;let i=r.clientWidth,o=r.clientHeight,s=0,l=0;if(a){i=a.width,o=a.height;const c=tM();(!c||c&&t==="fixed")&&(s=a.offsetLeft,l=a.offsetTop)}const u=Gw(r);if(u<=0){const c=r.ownerDocument,d=c.body,f=getComputedStyle(d),h=c.compatMode==="CSS1Compat"&&parseFloat(f.marginLeft)+parseFloat(f.marginRight)||0,v=Math.abs(r.clientWidth-d.clientWidth-h);v<=xO&&(i-=v)}else u<=xO&&(i+=u);return{width:i,height:o,x:s,y:l}}function xce(e,t){const n=mf(e,!0,t==="fixed"),r=n.top+e.clientTop,a=n.left+e.clientLeft,i=lu(e)?jh(e):Hs(1),o=e.clientWidth*i.x,s=e.clientHeight*i.y,l=a*i.x,u=r*i.y;return{width:o,height:s,x:l,y:u}}function CO(e,t,n){let r;if(t==="viewport")r=Sce(e,n);else if(t==="document")r=wce(sl(e));else if(Jo(t))r=xce(t,n);else{const a=KW(e);r={x:t.x-a.x,y:t.y-a.y,width:t.width,height:t.height}}return W1(r)}function jW(e,t){const n=vc(e);return n===t||!Jo(n)||gv(n)?!1:Qo(n).position==="fixed"||jW(n,t)}function Cce(e,t){const n=t.get(e);if(n)return n;let r=vm(e,[],!1).filter(s=>Jo(s)&&Gv(s)!=="body"),a=null;const i=Qo(e).position==="fixed";let o=i?vc(e):e;for(;Jo(o)&&!gv(o);){const s=Qo(o),l=eM(o);!l&&s.position==="fixed"&&(a=null),(i?!l&&!a:!l&&s.position==="static"&&!!a&&(a.position==="absolute"||a.position==="fixed")||ky(o)&&!l&&jW(e,o))?r=r.filter(c=>c!==o):a=s,o=vc(o)}return t.set(e,r),r}function Tce(e){let{element:t,boundary:n,rootBoundary:r,strategy:a}=e;const o=[...n==="clippingAncestors"?Hw(t)?[]:Cce(t,this._c):[].concat(n),r],s=CO(t,o[0],a);let l=s.top,u=s.right,c=s.bottom,d=s.left;for(let f=1;f{o(!1,1e-7)},1e3)}C===1&&!XW(u,e.getBoundingClientRect())&&o(),w=!1}try{n=new IntersectionObserver(S,{..._,root:a.ownerDocument})}catch{n=new IntersectionObserver(S,_)}n.observe(e)}return o(!0),i}function Lce(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:a=!0,ancestorResize:i=!0,elementResize:o=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:l=!1}=r,u=nM(e),c=a||i?[...u?vm(u):[],...t?vm(t):[]]:[];c.forEach(m=>{a&&m.addEventListener("scroll",n,{passive:!0}),i&&m.addEventListener("resize",n)});const d=u&&s?Pce(u,n):null;let f=-1,h=null;o&&(h=new ResizeObserver(m=>{let[b]=m;b&&b.target===u&&h&&t&&(h.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var _;(_=h)==null||_.observe(t)})),n()}),u&&!l&&h.observe(u),t&&h.observe(t));let v,p=l?mf(e):null;l&&g();function g(){const m=mf(e);p&&!XW(p,m)&&n(),p=m,v=requestAnimationFrame(g)}return n(),()=>{var m;c.forEach(b=>{a&&b.removeEventListener("scroll",n),i&&b.removeEventListener("resize",n)}),d==null||d(),(m=h)==null||m.disconnect(),h=null,l&&cancelAnimationFrame(v)}}const Dce=HW,Rce=dce,Oce=fce,Nce=lce,Vce=sce,$ce=(e,t,n)=>{const r=new Map,a={platform:Mce,...n},i={...a.platform,_c:r};return oce(e,t,{...a,platform:i})};function Bce(e){let t;function n(){if(e.value==null)return;const{selectionStart:a,selectionEnd:i,value:o}=e.value;a==null||i==null||(t={selectionStart:a,selectionEnd:i,value:o,beforeTxt:o.slice(0,Math.max(0,a)),afterTxt:o.slice(Math.max(0,i))})}function r(){if(e.value==null||t==null)return;const{value:a}=e.value,{beforeTxt:i,afterTxt:o,selectionStart:s}=t;if(i==null||o==null||s==null)return;let l=a.length;if(a.endsWith(o))l=a.length-o.length;else if(a.startsWith(i))l=i.length;else{const u=i[s-1],c=a.indexOf(u,s-1);c!==-1&&(l=c+1)}e.value.setSelectionRange(l,l)}return[n,r]}const Fce="utils/vue/vnode";function eE(e){return Vn(e)&&e.type===ze}function ZW(e){return Vn(e)&&e.type===Tr}function zce(e){return Vn(e)&&!eE(e)&&!ZW(e)}const Hce=e=>{if(!Vn(e))return wn(Fce,"[getNormalizedProps] must be a VNode"),{};const t=e.props||{},n=(Vn(e.type)?e.type.props:void 0)||{},r={};return Object.keys(n).forEach(a=>{un(n[a],"default")&&(r[a]=n[a].default)}),Object.keys(t).forEach(a=>{r[ga(a)]=t[a]}),r},Fi=e=>{const t=Me(e)?e:[e],n=[];return t.forEach(r=>{var a;Me(r)?n.push(...Fi(r)):Vn(r)&&((a=r.component)!=null&&a.subTree)?n.push(r,...Fi(r.component.subTree)):Vn(r)&&Me(r.children)?n.push(...Fi(r.children)):Vn(r)&&r.shapeFlag===2?n.push(...Fi(r.type())):n.push(r)}),n},Wce=(e,t,n)=>Fi(e.subTree).filter(r=>{var a;return Vn(r)&&((a=r.type)==null?void 0:a.name)===t&&!!r.component}).map(r=>r.component.uid).map(r=>n[r]).filter(r=>!!r),Uw=(e,t)=>{const n=Ut({}),r=Ut([]),a=new WeakMap,i=u=>{n.value[u.uid]=u,$b(n),St(()=>{const c=u.getVnode().el,d=c.parentNode;if(!a.has(d)){a.set(d,[]);const f=d.insertBefore.bind(d);d.insertBefore=(h,v)=>(a.get(d).some(p=>h===p||v===p)&&$b(n),f(h,v))}a.get(d).push(c)})},o=u=>{delete n.value[u.uid],$b(n);const c=u.getVnode().el,d=c.parentNode,f=a.get(d),h=f.indexOf(c);f.splice(h,1)},s=()=>{r.value=Wce(e,t,n.value)},l=u=>u.render();return{children:r,addChild:i,removeChild:o,ChildrenSorter:ye({setup(u,{slots:c}){return()=>(s(),c.default?ot(l,{render:c.default}):null)}})}},$r=us({type:String,values:ss,required:!1}),JW=Symbol("size"),QW=()=>{const e=Ge(JW,{});return M(()=>y(e.size)||"")};function uu(e,{disabled:t,beforeFocus:n,afterFocus:r,beforeBlur:a,afterBlur:i}={}){const{emit:o}=Tt(),s=Ut(),l=H(!1),u=f=>{const h=et(n)?n(f):!1;y(t)||l.value||h||(l.value=!0,o("focus",f),r==null||r())},c=f=>{var v;const h=et(a)?a(f):!1;y(t)||f.relatedTarget&&((v=s.value)!=null&&v.contains(f.relatedTarget))||h||(l.value=!1,o("blur",f),i==null||i())},d=f=>{var h,v;y(t)||vf(f.target)||(h=s.value)!=null&&h.contains(document.activeElement)&&s.value!==document.activeElement||(v=e.value)==null||v.focus()};return _e([s,()=>y(t)],([f,h])=>{f&&(h?f.removeAttribute("tabindex"):f.setAttribute("tabindex","-1"))}),gn(s,"focus",u,!0),gn(s,"blur",c,!0),gn(s,"click",d,!0),{isFocused:l,wrapperRef:s,handleFocus:u,handleBlur:c}}function Ay({afterComposition:e,emit:t}){const n=H(!1),r=s=>{t==null||t("compositionstart",s),n.value=!0},a=s=>{t==null||t("compositionupdate",s),n.value=!0},i=s=>{t==null||t("compositionend",s),n.value&&(n.value=!1,Ue(()=>e(s)))};return{isComposing:n,handleComposition:s=>{s.type==="compositionend"?i(s):a(s)},handleCompositionStart:r,handleCompositionUpdate:a,handleCompositionEnd:i}}const eG=Symbol("emptyValuesContextKey"),Gce="use-empty-values",Uce=["",void 0,null],Rf=Oe({emptyValues:Array,valueOnClear:{type:oe([String,Number,Boolean,Function]),default:void 0,validator:e=>(e=et(e)?e():e,Me(e)?e.every(t=>!t):!e)}}),Iy=(e,t)=>{const n=Tt()?Ge(eG,H({})):H({}),r=M(()=>e.emptyValues||n.value.emptyValues||Uce),a=M(()=>et(e.valueOnClear)?e.valueOnClear():e.valueOnClear!==void 0?e.valueOnClear:et(n.value.valueOnClear)?n.value.valueOnClear():n.value.valueOnClear!==void 0?n.value.valueOnClear:t!==void 0?t:void 0),i=o=>{let s=!0;return Me(o)?s=r.value.some(l=>or(o,l)):s=r.value.includes(o),s};return i(a.value)||wn(Gce,"value-on-clear should be a value of empty-values"),{emptyValues:r,valueOnClear:a,isEmptyValue:i}},Kce=Oe({ariaLabel:String,ariaOrientation:{type:String,values:["horizontal","vertical","undefined"]},ariaControls:String}),ja=e=>Ul(Kce,e),tG=e=>{const t=e.props,n=Me(t)?lv(t.map(r=>[r,{}])):t;e.setPropsDefaults=r=>{if(n){for(const[a,i]of Object.entries(r)){const o=n[a];if(un(n,a)){if(MI(o)){n[a]={...o,default:i};continue}n[a]={type:o,default:i}}}e.props=n}}},xt=(e,t)=>{if(e.install=n=>{for(const r of[e,...Object.values(t??{})])n.component(r.name,r)},t)for(const[n,r]of Object.entries(t))e[n]=r;return tG(e),e},nG=(e,t)=>(e.install=n=>{e._context=n._context,n.config.globalProperties[t]=e},e),Yce=(e,t)=>(e.install=n=>{n.directive(t,e)},e),rr=e=>(e.install=It,tG(e),e),EO="ElAffix";var jce=ye({name:EO,__name:"affix",props:qse,emits:Xse,setup(e,{expose:t,emit:n}){const r=e,a=n,i=Ee("affix"),o=Ut(),s=Ut(),l=Ut(),{height:u}=NI(),{height:c,width:d,top:f,bottom:h,left:v,update:p}=QR(s,{windowScroll:!1}),g=QR(o),m=H(!1),b=H(0),_=H(0),w=M(()=>!r.teleported||!m.value),S=M(()=>({display:"flow-root",height:m.value?`${c.value}px`:"",width:m.value?`${d.value}px`:""})),x=M(()=>{if(!m.value)return{};const k=ur(r.offset);return{height:`${c.value}px`,width:`${d.value}px`,top:r.position==="top"?k:"",bottom:r.position==="bottom"?k:"",left:r.teleported?`${v.value}px`:"",transform:_.value?`translateY(${_.value}px)`:"",zIndex:r.zIndex}}),C=()=>{if(!l.value)return;b.value=l.value instanceof Window?document.documentElement.scrollTop:l.value.scrollTop||0;const{position:k,target:A,offset:I}=r,P=I+c.value;if(k==="top")if(A){const R=g.bottom.value-P;m.value=I>f.value&&g.bottom.value>0,_.value=R<0?R:0}else m.value=I>f.value;else if(A){const R=u.value-g.top.value-P;m.value=u.value-Ig.top.value,_.value=R<0?-R:0}else m.value=u.value-I{if(!m.value){p();return}m.value=!1,await Ue(),p(),m.value=!0},E=async()=>{p(),await Ue(),a("scroll",{scrollTop:b.value,fixed:m.value})};return _e(m,k=>a(Vt,k)),St(()=>{r.target?(o.value=document.querySelector(r.target)??void 0,o.value||nr(EO,`Target does not exist: ${r.target}`)):o.value=document.documentElement,l.value=FI(s.value,!0),p()}),cy(()=>{Ue(T)}),cI(()=>{m.value=!1}),gn(l,"scroll",E),Ua(C),t({update:C,updateRoot:T}),(k,A)=>(L(),K("div",{ref_key:"root",ref:s,class:B(y(i).b()),style:tt(S.value)},[(L(),ve(Bv,{disabled:w.value,to:e.appendTo},[j("div",{class:B({[y(i).m("fixed")]:m.value}),style:tt(x.value)},[he(k.$slots,"default")],6)],8,["disabled","to"]))],6))}}),qce=jce;const Xce=xt(qce);/*! Element Plus Icons Vue v2.3.2 */var Zce=ye({name:"ArrowDown",__name:"arrow-down",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M831.872 340.864 512 652.672 192.128 340.864a30.59 30.59 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.59 30.59 0 0 0-42.752 0z"})]))}}),ll=Zce,Jce=ye({name:"ArrowLeft",__name:"arrow-left",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.59 30.59 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.59 30.59 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0"})]))}}),Yl=Jce,Qce=ye({name:"ArrowRight",__name:"arrow-right",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M340.864 149.312a30.59 30.59 0 0 0 0 42.752L652.736 512 340.864 831.872a30.59 30.59 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})]))}}),Wa=Qce,ede=ye({name:"ArrowUp",__name:"arrow-up",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"})]))}}),Kw=ede,tde=ye({name:"Back",__name:"back",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"}),j("path",{fill:"currentColor",d:"m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"})]))}}),nde=tde,rde=ye({name:"Calendar",__name:"calendar",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64"})]))}}),ade=rde,ide=ye({name:"CaretRight",__name:"caret-right",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M384 192v640l384-320.064z"})]))}}),rG=ide,ode=ye({name:"CaretTop",__name:"caret-top",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M512 320 192 704h639.936z"})]))}}),sde=ode,lde=ye({name:"Check",__name:"check",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z"})]))}}),mv=lde,ude=ye({name:"CircleCheckFilled",__name:"circle-check-filled",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.27 38.27 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),cde=ude,dde=ye({name:"CircleCheck",__name:"circle-check",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),j("path",{fill:"currentColor",d:"M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752z"})]))}}),rM=dde,fde=ye({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),aM=fde,hde=ye({name:"CircleClose",__name:"circle-close",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z"}),j("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}}),ul=hde,vde=ye({name:"Clock",__name:"clock",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),j("path",{fill:"currentColor",d:"M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"}),j("path",{fill:"currentColor",d:"M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32"})]))}}),aG=vde,pde=ye({name:"Close",__name:"close",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),To=pde,gde=ye({name:"Connection",__name:"connection",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M640 384v64H448a128 128 0 0 0-128 128v128a128 128 0 0 0 128 128h320a128 128 0 0 0 128-128V576a128 128 0 0 0-64-110.848V394.88c74.56 26.368 128 97.472 128 181.056v128a192 192 0 0 1-192 192H448a192 192 0 0 1-192-192V576a192 192 0 0 1 192-192z"}),j("path",{fill:"currentColor",d:"M384 640v-64h192a128 128 0 0 0 128-128V320a128 128 0 0 0-128-128H256a128 128 0 0 0-128 128v128a128 128 0 0 0 64 110.848v70.272A192.06 192.06 0 0 1 64 448V320a192 192 0 0 1 192-192h320a192 192 0 0 1 192 192v128a192 192 0 0 1-192 192z"})]))}}),mde=gde,yde=ye({name:"DArrowLeft",__name:"d-arrow-left",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.59 30.59 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.59 30.59 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672zm256 0a29.12 29.12 0 0 1 41.728 0 30.59 30.59 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.59 30.59 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672z"})]))}}),pc=yde,bde=ye({name:"DArrowRight",__name:"d-arrow-right",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.59 30.59 0 0 1 0-42.752L764.736 512 452.864 192a30.59 30.59 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.59 30.59 0 0 1 0-42.752L508.736 512 196.864 192a30.59 30.59 0 0 1 0-42.688"})]))}}),gc=bde,_de=ye({name:"Delete",__name:"delete",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32"})]))}}),wde=_de,Sde=ye({name:"Document",__name:"document",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z"})]))}}),xde=Sde,Cde=ye({name:"FullScreen",__name:"full-screen",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"})]))}}),Tde=Cde,Ede=ye({name:"Hide",__name:"hide",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M876.8 156.8c0-9.6-3.2-16-9.6-22.4s-12.8-9.6-22.4-9.6-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176S0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4s3.2 16 9.6 22.4 12.8 9.6 22.4 9.6 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4m-646.4 528Q115.2 579.2 76.8 512q43.2-72 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4m140.8-96Q352 555.2 352 512c0-44.8 16-83.2 48-112s67.2-48 112-48c28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6q-43.2 72-153.6 172.8c-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176S1024 528 1024 512s-48.001-73.6-134.401-176"}),j("path",{fill:"currentColor",d:"M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112s-67.2 48-112 48"})]))}}),kde=Ede,Ade=ye({name:"InfoFilled",__name:"info-filled",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.99 12.99 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),pm=Ade,Ide=ye({name:"Link",__name:"link",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M715.648 625.152 670.4 579.904l90.496-90.56c75.008-74.944 85.12-186.368 22.656-248.896-62.528-62.464-173.952-52.352-248.96 22.656L444.16 353.6l-45.248-45.248 90.496-90.496c100.032-99.968 251.968-110.08 339.456-22.656 87.488 87.488 77.312 239.424-22.656 339.456l-90.496 90.496zm-90.496 90.496-90.496 90.496C434.624 906.112 282.688 916.224 195.2 828.8c-87.488-87.488-77.312-239.424 22.656-339.456l90.496-90.496 45.248 45.248-90.496 90.56c-75.008 74.944-85.12 186.368-22.656 248.896 62.528 62.464 173.952 52.352 248.96-22.656l90.496-90.496zm0-362.048 45.248 45.248L398.848 670.4 353.6 625.152z"})]))}}),Mde=Ide,Pde=ye({name:"Loading",__name:"loading",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248m452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248M828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0"})]))}}),es=Pde,Lde=ye({name:"Lock",__name:"lock",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M224 448a32 32 0 0 0-32 32v384a32 32 0 0 0 32 32h576a32 32 0 0 0 32-32V480a32 32 0 0 0-32-32zm0-64h576a96 96 0 0 1 96 96v384a96 96 0 0 1-96 96H224a96 96 0 0 1-96-96V480a96 96 0 0 1 96-96"}),j("path",{fill:"currentColor",d:"M512 544a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V576a32 32 0 0 1 32-32m192-160v-64a192 192 0 1 0-384 0v64zM512 64a256 256 0 0 1 256 256v128H256V320A256 256 0 0 1 512 64"})]))}}),Dde=Lde,Rde=ye({name:"Minus",__name:"minus",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"})]))}}),Ode=Rde,Nde=ye({name:"Monitor",__name:"monitor",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M544 768v128h192a32 32 0 1 1 0 64H288a32 32 0 1 1 0-64h192V768H192A128 128 0 0 1 64 640V256a128 128 0 0 1 128-128h640a128 128 0 0 1 128 128v384a128 128 0 0 1-128 128zM192 192a64 64 0 0 0-64 64v384a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64z"})]))}}),kO=Nde,Vde=ye({name:"MoreFilled",__name:"more-filled",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224"})]))}}),AO=Vde,$de=ye({name:"More",__name:"more",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"})]))}}),Bde=$de,Fde=ye({name:"Odometer",__name:"odometer",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),j("path",{fill:"currentColor",d:"M192 512a320 320 0 1 1 640 0 32 32 0 1 1-64 0 256 256 0 1 0-512 0 32 32 0 0 1-64 0"}),j("path",{fill:"currentColor",d:"M570.432 627.84A96 96 0 1 1 509.568 608l60.992-187.776A32 32 0 1 1 631.424 440l-60.992 187.776zM502.08 734.464a32 32 0 1 0 19.84-60.928 32 32 0 0 0-19.84 60.928"})]))}}),zde=Fde,Hde=ye({name:"PictureFilled",__name:"picture-filled",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384"})]))}}),Wde=Hde,Gde=ye({name:"Plus",__name:"plus",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"})]))}}),iG=Gde,Ude=ye({name:"QuestionFilled",__name:"question-filled",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592q0-64.416-42.24-101.376c-28.16-25.344-65.472-37.312-111.232-37.312m-12.672 406.208a54.27 54.27 0 0 0-38.72 14.784 49.4 49.4 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.85 54.85 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.97 51.97 0 0 0-15.488-38.016 55.94 55.94 0 0 0-39.424-14.784"})]))}}),Kde=Ude,Yde=ye({name:"RefreshLeft",__name:"refresh-left",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z"})]))}}),jde=Yde,qde=ye({name:"RefreshRight",__name:"refresh-right",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88"})]))}}),Xde=qde,Zde=ye({name:"ScaleToOriginal",__name:"scale-to-original",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.12 30.12 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.12 30.12 0 0 0-30.118-30.118m-361.412 0a30.12 30.12 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.12 30.12 0 0 0-30.118-30.118M512 361.412a30.12 30.12 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.12 30.12 0 0 0 512 361.412M512 512a30.12 30.12 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.12 30.12 0 0 0 512 512"})]))}}),Jde=Zde,Qde=ye({name:"Search",__name:"search",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704"})]))}}),efe=Qde,tfe=ye({name:"Setting",__name:"setting",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M600.704 64a32 32 0 0 1 30.464 22.208l35.2 109.376c14.784 7.232 28.928 15.36 42.432 24.512l112.384-24.192a32 32 0 0 1 34.432 15.36L944.32 364.8a32 32 0 0 1-4.032 37.504l-77.12 85.12a357 357 0 0 1 0 49.024l77.12 85.248a32 32 0 0 1 4.032 37.504l-88.704 153.6a32 32 0 0 1-34.432 15.296L708.8 803.904c-13.44 9.088-27.648 17.28-42.368 24.512l-35.264 109.376A32 32 0 0 1 600.704 960H423.296a32 32 0 0 1-30.464-22.208L357.696 828.48a352 352 0 0 1-42.56-24.64l-112.32 24.256a32 32 0 0 1-34.432-15.36L79.68 659.2a32 32 0 0 1 4.032-37.504l77.12-85.248a357 357 0 0 1 0-48.896l-77.12-85.248A32 32 0 0 1 79.68 364.8l88.704-153.6a32 32 0 0 1 34.432-15.296l112.32 24.256c13.568-9.152 27.776-17.408 42.56-24.64l35.2-109.312A32 32 0 0 1 423.232 64H600.64zm-23.424 64H446.72l-36.352 113.088-24.512 11.968a294 294 0 0 0-34.816 20.096l-22.656 15.36-116.224-25.088-65.28 113.152 79.68 88.192-1.92 27.136a293 293 0 0 0 0 40.192l1.92 27.136-79.808 88.192 65.344 113.152 116.224-25.024 22.656 15.296a294 294 0 0 0 34.816 20.096l24.512 11.968L446.72 896h130.688l36.48-113.152 24.448-11.904a288 288 0 0 0 34.752-20.096l22.592-15.296 116.288 25.024 65.28-113.152-79.744-88.192 1.92-27.136a293 293 0 0 0 0-40.256l-1.92-27.136 79.808-88.128-65.344-113.152-116.288 24.96-22.592-15.232a288 288 0 0 0-34.752-20.096l-24.448-11.904L577.344 128zM512 320a192 192 0 1 1 0 384 192 192 0 0 1 0-384m0 64a128 128 0 1 0 0 256 128 128 0 0 0 0-256"})]))}}),nfe=tfe,rfe=ye({name:"Share",__name:"share",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"m679.872 348.8-301.76 188.608a127.8 127.8 0 0 1 5.12 52.16l279.936 104.96a128 128 0 1 1-22.464 59.904l-279.872-104.96a128 128 0 1 1-16.64-166.272l301.696-188.608a128 128 0 1 1 33.92 54.272z"})]))}}),afe=rfe,ife=ye({name:"SortDown",__name:"sort-down",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0"})]))}}),ofe=ife,sfe=ye({name:"SortUp",__name:"sort-up",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248"})]))}}),lfe=sfe,ufe=ye({name:"StarFilled",__name:"star-filled",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M313.6 924.48a70.4 70.4 0 0 1-74.152-5.365 70.4 70.4 0 0 1-27.992-68.875l37.888-220.928L88.96 472.96a70.4 70.4 0 0 1 3.788-104.225A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 100.246-28.595 70.4 70.4 0 0 1 25.962 28.595l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"})]))}}),g0=ufe,cfe=ye({name:"Star",__name:"star",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"})]))}}),dfe=cfe,ffe=ye({name:"SuccessFilled",__name:"success-filled",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.27 38.27 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),oG=ffe,hfe=ye({name:"User",__name:"user",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M512 512a192 192 0 1 0 0-384 192 192 0 0 0 0 384m0 64a256 256 0 1 1 0-512 256 256 0 0 1 0 512m320 320v-96a96 96 0 0 0-96-96H288a96 96 0 0 0-96 96v96a32 32 0 1 1-64 0v-96a160 160 0 0 1 160-160h448a160 160 0 0 1 160 160v96a32 32 0 1 1-64 0"})]))}}),vfe=hfe,pfe=ye({name:"View",__name:"view",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288m0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.19 160.19 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160"})]))}}),gfe=pfe,mfe=ye({name:"WarningFilled",__name:"warning-filled",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.43 58.43 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.43 58.43 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),Yw=mfe,yfe=ye({name:"ZoomIn",__name:"zoom-in",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z"})]))}}),sG=yfe,bfe=ye({name:"ZoomOut",__name:"zoom-out",setup(e){return(t,n)=>(L(),K("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[j("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64"})]))}}),_fe=bfe;const An=oe([String,Object,Function]),lG={Close:To},iM={Close:To,SuccessFilled:oG,InfoFilled:pm,WarningFilled:Yw,CircleCloseFilled:aM},mc={primary:pm,success:oG,warning:Yw,error:aM,info:pm},jw={validating:es,success:rM,error:ul},wfe=["light","dark"],Sfe=Oe({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:dm(mc),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:wfe,default:"light"}}),xfe={close:e=>e instanceof MouseEvent},Cfe=Oe({size:{type:oe([Number,String])},color:{type:String}});var Tfe=ye({name:"ElIcon",inheritAttrs:!1,__name:"icon",props:Cfe,setup(e){const t=e,n=Ee("icon"),r=M(()=>{const{size:a,color:i}=t,o=ur(a);return!o&&!i?{}:{fontSize:o,"--color":i}});return(a,i)=>(L(),K("i",Mt({class:y(n).b(),style:r.value},a.$attrs),[he(a.$slots,"default")],16))}}),Efe=Tfe;const Ze=xt(Efe);var kfe=ye({name:"ElAlert",__name:"alert",props:Sfe,emits:xfe,setup(e,{emit:t}){const{Close:n}=iM,r=e,a=t,i=pr(),o=Ee("alert"),s=H(!0),l=M(()=>mc[r.type]),u=M(()=>{var f;if(r.description)return!0;const d=(f=i.default)==null?void 0:f.call(i);return d?Fi(d).some(h=>!ZW(h)):!1}),c=d=>{s.value=!1,a("close",d)};return(d,f)=>(L(),ve(ya,{name:y(o).b("fade"),persisted:""},{default:G(()=>[gt(j("div",{class:B([y(o).b(),y(o).m(e.type),y(o).is("center",e.center),y(o).is(e.effect)]),role:"alert"},[e.showIcon&&(d.$slots.icon||l.value)?(L(),ve(y(Ze),{key:0,class:B([y(o).e("icon"),y(o).is("big",u.value)])},{default:G(()=>[he(d.$slots,"icon",{},()=>[(L(),ve(Et(l.value)))])]),_:3},8,["class"])):fe("v-if",!0),j("div",{class:B(y(o).e("content"))},[e.title||d.$slots.title?(L(),K("span",{key:0,class:B([y(o).e("title"),{"with-description":u.value}])},[he(d.$slots,"title",{},()=>[Le(ce(e.title),1)])],2)):fe("v-if",!0),u.value?(L(),K("p",{key:1,class:B(y(o).e("description"))},[he(d.$slots,"default",{},()=>[Le(ce(e.description),1)])],2)):fe("v-if",!0),e.closable?(L(),K(ze,{key:2},[e.closeText?(L(),K("div",{key:0,class:B([y(o).e("close-btn"),y(o).is("customed")]),onClick:c},ce(e.closeText),3)):(L(),ve(y(Ze),{key:1,class:B(y(o).e("close-btn")),onClick:c},{default:G(()=>[V(y(n))]),_:1},8,["class"]))],64)):fe("v-if",!0)],2)],2),[[ln,s.value]])]),_:3},8,["name"]))}}),Afe=kfe;const Ife=xt(Afe),uG=["dialog","grid","group","listbox","menu","navigation","tooltip","tree"],cG=Oe({role:{type:String,values:uG,default:"tooltip"}}),oM=Symbol("popper"),dG=Symbol("popperContent");var Mfe=ye({name:"ElPopperArrow",inheritAttrs:!1,__name:"arrow",setup(e,{expose:t}){const n=Ee("popper"),{arrowRef:r,arrowStyle:a}=Ge(dG,void 0);return yn(()=>{r.value=void 0}),t({arrowRef:r}),(i,o)=>(L(),K("span",{ref_key:"arrowRef",ref:r,class:B(y(n).e("arrow")),style:tt(y(a)),"data-popper-arrow":""},null,6))}}),Pfe=Mfe;const fG=Oe({virtualRef:{type:oe(Object)},virtualTriggering:Boolean,onMouseenter:{type:oe(Function)},onMouseleave:{type:oe(Function)},onClick:{type:oe(Function)},onKeydown:{type:oe(Function)},onFocus:{type:oe(Function)},onBlur:{type:oe(Function)},onContextmenu:{type:oe(Function)},id:String,open:Boolean}),Sx="ElOnlyChild",hG=ye({name:Sx,setup(e,{slots:t,attrs:n}){var a;const r=Xue(((a=Ge(VW))==null?void 0:a.setForwardRef)??It);return()=>{var l;const i=(l=t.default)==null?void 0:l.call(t,n);if(!i)return null;const[o,s]=vG(i);return o?(s>1&&wn(Sx,"requires exact only one valid child."),gt(js(o,n),[[r]])):(wn(Sx,"no valid child node found"),null)}}});function vG(e){if(!e)return[null,0];const t=e,n=t.filter(r=>r.type!==Tr).length;for(const r of t){if(yt(r))switch(r.type){case Tr:continue;case Mf:case"svg":return[IO(r),n];case ze:return vG(r.children);default:return[r,n]}return[IO(r),n]}return[null,0]}function IO(e){return V("span",{class:Ee("only-child").e("content")},[e])}var Lfe=ye({name:"ElPopperTrigger",inheritAttrs:!1,__name:"trigger",props:fG,setup(e,{expose:t}){const n=e,{role:r,triggerRef:a}=Ge(oM,void 0);que(a);const i=M(()=>s.value?n.id:void 0),o=M(()=>{if(r&&r.value==="tooltip")return n.open&&n.id?n.id:void 0}),s=M(()=>{if(r&&r.value!=="tooltip")return r.value}),l=M(()=>s.value?`${n.open}`:void 0);let u;const c=["onMouseenter","onMouseleave","onClick","onKeydown","onFocus","onBlur","onContextmenu"];return St(()=>{_e(()=>n.virtualRef,d=>{d&&(a.value=Lr(d))},{immediate:!0}),_e(a,(d,f)=>{u==null||u(),u=void 0,ki(f)&&c.forEach(h=>{const v=n[h];v&&f.removeEventListener(h.slice(2).toLowerCase(),v,["onFocus","onBlur"].includes(h))}),ki(d)&&(c.forEach(h=>{const v=n[h];v&&d.addEventListener(h.slice(2).toLowerCase(),v,["onFocus","onBlur"].includes(h))}),vf(d)&&(u=_e([i,o,s,l],h=>{["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach((v,p)=>{wr(h[p])?d.removeAttribute(v):d.setAttribute(v,h[p])})},{immediate:!0}))),ki(f)&&vf(f)&&["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach(h=>f.removeAttribute(h))},{immediate:!0})}),yn(()=>{if(u==null||u(),u=void 0,a.value&&ki(a.value)){const d=a.value;c.forEach(f=>{const h=n[f];h&&d.removeEventListener(f.slice(2).toLowerCase(),h,["onFocus","onBlur"].includes(f))}),a.value=void 0}}),t({triggerRef:a}),(d,f)=>e.virtualTriggering?fe("v-if",!0):(L(),ve(y(hG),Mt({key:0},d.$attrs,{"aria-controls":i.value,"aria-describedby":o.value,"aria-expanded":l.value,"aria-haspopup":s.value}),{default:G(()=>[he(d.$slots,"default")]),_:3},16,["aria-controls","aria-describedby","aria-expanded","aria-haspopup"]))}}),Dfe=Lfe;const pG=Oe({arrowOffset:{type:Number,default:5}}),Rfe=Oe({boundariesPadding:{type:Number,default:0},fallbackPlacements:{type:oe(Array),default:void 0},gpuAcceleration:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:String,values:ol,default:"bottom"},popperOptions:{type:oe(Object),default:()=>({})},strategy:{type:String,values:["fixed","absolute"],default:"absolute"}}),gG=Oe({...Rfe,...pG,id:String,style:{type:oe([String,Array,Object,Boolean]),default:void 0},className:{type:oe([String,Array,Object])},effect:{type:oe(String),default:"dark"},visible:Boolean,enterable:{type:Boolean,default:!0},pure:Boolean,focusOnShow:Boolean,trapping:Boolean,popperClass:{type:oe([String,Array,Object])},popperStyle:{type:oe([String,Array,Object,Boolean]),default:void 0},referenceEl:{type:oe(Object)},triggerTargetEl:{type:oe(Object)},stopPopperMouseEvent:{type:Boolean,default:!0},virtualTriggering:Boolean,zIndex:Number,...ja(["ariaLabel"]),loop:Boolean}),Ofe={mouseenter:e=>e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,focus:()=>!0,blur:()=>!0,close:()=>!0},Nfe=Oe({size:{type:String,values:ss},disabled:Boolean}),Vfe=Oe({...Nfe,model:Object,rules:{type:oe(Object)},labelPosition:{type:String,values:["left","right","top"],default:"right"},requireAsteriskPosition:{type:String,values:["left","right"],default:"left"},labelWidth:{type:[String,Number],default:""},labelSuffix:{type:String,default:""},inline:Boolean,inlineMessage:Boolean,statusIcon:Boolean,showMessage:{type:Boolean,default:!0},validateOnRuleChange:{type:Boolean,default:!0},hideRequiredAsterisk:Boolean,scrollToError:Boolean,scrollIntoViewOptions:{type:oe([Object,Boolean]),default:!0}}),$fe={validate:(e,t,n)=>(Me(e)||qe(e))&&En(t)&&qe(n)},Of=Symbol("formContextKey"),Js=Symbol("formItemContextKey"),Rr=(e,t={})=>{const n=H(void 0),r=t.prop?n:xW("size"),a=t.global?n:QW(),i=t.form?{size:void 0}:Ge(Of,void 0),o=t.formItem?{size:void 0}:Ge(Js,void 0);return M(()=>r.value||y(e)||(o==null?void 0:o.size)||(i==null?void 0:i.size)||a.value||"")},ar=e=>{const t=xW("disabled"),n=Ge(Of,void 0);return M(()=>t.value??y(e)??(n==null?void 0:n.disabled)??!1)},ea=()=>({form:Ge(Of,void 0),formItem:Ge(Js,void 0)}),Di=(e,{formItemContext:t,disableIdGeneration:n,disableIdManagement:r})=>{n||(n=H(!1)),r||(r=H(!1));const a=Tt(),i=()=>{let u=a==null?void 0:a.parent;for(;u;){if(u.type.name==="ElFormItem")return!1;if(u.type.name==="ElLabelWrap")return!0;u=u.parent}return!1},o=H();let s;const l=M(()=>{var u;return!!(!(e.label||e.ariaLabel)&&t&&t.inputIds&&((u=t.inputIds)==null?void 0:u.length)<=1)});return St(()=>{s=_e([xn(e,"id"),n],([u,c])=>{const d=u??(c?void 0:ba().value);d!==o.value&&(t!=null&&t.removeInputId&&!i()&&(o.value&&t.removeInputId(o.value),!(r!=null&&r.value)&&!c&&d&&t.addInputId(d)),o.value=d)},{immediate:!0})}),il(()=>{s&&s(),t!=null&&t.removeInputId&&o.value&&t.removeInputId(o.value)}),{isLabeledByFormItem:l,inputId:o}},Bfe=["","error","validating","success"],Ffe=Oe({label:String,labelWidth:{type:[String,Number]},labelPosition:{type:String,values:["left","right","top",""],default:""},prop:{type:oe([String,Array])},required:{type:Boolean,default:void 0},rules:{type:oe([Object,Array])},error:String,validateStatus:{type:String,values:Bfe},for:String,inlineMessage:{type:Boolean,default:void 0},showMessage:{type:Boolean,default:!0},size:{type:String,values:ss}}),MO=e=>[...new Set(e)],Sp=e=>Me(e)?e[0]:e,za=e=>!e&&e!==0?[]:Me(e)?e:[e],zfe="ElForm";function Hfe(){const e=H([]),t=M(()=>{if(!e.value.length)return"0";const i=Math.max(...e.value);return i?`${i}px`:""});function n(i){const o=e.value.indexOf(i);return o===-1&&t.value==="0"&&wn(zfe,`unexpected width ${i}`),o}function r(i,o){if(i&&o){const s=n(o);e.value.splice(s,1,i)}else i&&e.value.push(i)}function a(i){const o=n(i);o>-1&&e.value.splice(o,1)}return{autoLabelWidth:t,registerLabelWidth:r,deregisterLabelWidth:a}}const m0=(e,t)=>{const n=jr(t).map(r=>Me(r)?r.join("."):r);return n.length>0?e.filter(r=>r.propString&&n.includes(r.propString)):e},jf="ElForm";var Wfe=ye({name:jf,__name:"form",props:Vfe,emits:$fe,setup(e,{expose:t,emit:n}){const r=e,a=n,i=H(),o=Qt([]),s=new Map,l=Rr(),u=Ee("form"),c=M(()=>{const{labelPosition:C,inline:T}=r;return[u.b(),u.m(l.value||"default"),{[u.m(`label-${C}`)]:C,[u.m("inline")]:T}]}),d=C=>m0(o,[C])[0],f=C=>{o.includes(C)||o.push(C),C.propString&&(s.has(C.propString)?C.setInitialValue(s.get(C.propString)):s.set(C.propString,Ps(C.fieldValue)))},h=(C,T)=>{if(T){s.delete(T);return}const E=o.indexOf(C);E>-1&&(o.splice(E,1),C.propString&&s.set(C.propString,Ps(C.getInitialValue())))},v=C=>{if(!r.model){wn(jf,"model is required for setInitialValues to work.");return}if(!C){wn(jf,"initModel is required for setInitialValues to work.");return}for(const T of s.keys())s.set(T,Ps(ic(C,T).value));o.forEach(T=>{T.prop&&T.setInitialValue(ic(C,T.prop).value)})},p=(C=[])=>{if(!r.model){wn(jf,"model is required for resetFields to work.");return}m0(o,C).forEach(k=>k.resetField());const T=new Set(o.map(k=>k.propString).filter(Boolean)),E=C.length>0?jr(C).map(k=>Me(k)?k.join("."):k):[...s.keys()];for(const k of E)!T.has(k)&&s.has(k)&&(ic(r.model,k).value=Ps(s.get(k)))},g=(C=[])=>{m0(o,C).forEach(T=>T.clearValidate())},m=M(()=>{const C=!!r.model;return C||wn(jf,"model is required for validate to work."),C}),b=C=>{if(o.length===0)return[];const T=m0(o,C);return T.length?T:(wn(jf,"please pass correct props!"),[])},_=async C=>S(void 0,C),w=async(C=[])=>{if(!m.value)return!1;const T=b(C);if(T.length===0)return!0;let E={};for(const k of T)try{await k.validate(""),k.validateState==="error"&&!k.error&&k.resetField()}catch(A){E={...E,...A}}return Object.keys(E).length===0?!0:Promise.reject(E)},S=async(C=[],T)=>{var A;let E=!1;const k=!et(T);try{return E=await w(C),E===!0&&await(T==null?void 0:T(E)),E}catch(I){if(I instanceof Error)throw I;const P=I;return r.scrollToError&&i.value&&((A=i.value.querySelector(`.${u.b()}-item.is-error`))==null||A.scrollIntoView(r.scrollIntoViewOptions)),!E&&await(T==null?void 0:T(!1,P)),k&&Promise.reject(P)}},x=C=>{var E;const T=d(C);T&&((E=T.$el)==null||E.scrollIntoView(r.scrollIntoViewOptions))};return _e(()=>r.rules,()=>{r.validateOnRuleChange&&_().catch(It)},{deep:!0,flush:"post"}),Ft(Of,Qt({...Jr(r),emit:a,resetFields:p,clearValidate:g,validateField:S,getField:d,addField:f,removeField:h,setInitialValues:v,...Hfe()})),t({validate:_,validateField:S,resetFields:p,clearValidate:g,scrollToField:x,getField:d,fields:o,setInitialValues:v}),(C,T)=>(L(),K("form",{ref_key:"formRef",ref:i,class:B(c.value)},[he(C.$slots,"default")],2))}}),Gfe=Wfe;const PO="ElLabelWrap";var Ufe=ye({name:PO,props:{isAutoWidth:Boolean,updateAll:Boolean},setup(e,{slots:t}){const n=Ge(Of,void 0),r=Ge(Js);r||nr(PO,"usage: ");const a=Ee("form"),i=H(),o=H(0),s=()=>{var c;if((c=i.value)!=null&&c.firstElementChild){const d=window.getComputedStyle(i.value.firstElementChild).width;return Math.ceil(Number.parseFloat(d))}else return 0},l=(c="update")=>{Ue(()=>{t.default&&e.isAutoWidth&&(c==="update"?o.value=s():c==="remove"&&(n==null||n.deregisterLabelWidth(o.value)))})},u=()=>l("update");return St(()=>{u()}),yn(()=>{l("remove")}),is(()=>u()),_e(o,(c,d)=>{e.updateAll&&(n==null||n.registerLabelWidth(c,d))}),Kn(M(()=>{var c;return((c=i.value)==null?void 0:c.firstElementChild)??null}),u),()=>{var d,f;if(!t)return null;const{isAutoWidth:c}=e;if(c){const h=n==null?void 0:n.autoLabelWidth,v=r==null?void 0:r.hasLabel,p={};if(v&&h&&h!=="auto"){const g=Math.max(0,Number.parseInt(h,10)-o.value),m=(r.labelPosition||n.labelPosition)==="left"?"marginRight":"marginLeft";g&&(p[m]=`${g}px`)}return V("div",{ref:i,class:[a.be("item","label-wrap")],style:p},[(d=t.default)==null?void 0:d.call(t)])}else return V(ze,{ref:i},[(f=t.default)==null?void 0:f.call(t)])}}});function Pd(){return Pd=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Hb(e,t,n){return Yfe()?Hb=Reflect.construct.bind():Hb=function(a,i,o){var s=[null];s.push.apply(s,i);var l=Function.bind.apply(a,s),u=new l;return o&&gm(u,o.prototype),u},Hb.apply(null,arguments)}function jfe(e){return Function.toString.call(e).indexOf("[native code]")!==-1}function nE(e){var t=typeof Map=="function"?new Map:void 0;return nE=function(r){if(r===null||!jfe(r))return r;if(typeof r!="function")throw new TypeError("Super expression must either be null or a function");if(typeof t<"u"){if(t.has(r))return t.get(r);t.set(r,a)}function a(){return Hb(r,arguments,tE(this).constructor)}return a.prototype=Object.create(r.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),gm(a,r)},nE(e)}var qfe=/%[sdj%]/g,Xfe=function(){};function rE(e){if(!e||!e.length)return null;var t={};return e.forEach(function(n){var r=n.field;t[r]=t[r]||[],t[r].push(n)}),t}function zi(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r=i)return s;switch(s){case"%s":return String(n[a++]);case"%d":return Number(n[a++]);case"%j":try{return JSON.stringify(n[a++])}catch{return"[Circular]"}break;default:return s}});return o}return e}function Zfe(e){return e==="string"||e==="url"||e==="hex"||e==="email"||e==="date"||e==="pattern"}function la(e,t){return!!(e==null||t==="array"&&Array.isArray(e)&&!e.length||Zfe(t)&&typeof e=="string"&&!e)}function Jfe(e,t,n){var r=[],a=0,i=e.length;function o(s){r.push.apply(r,s||[]),a++,a===i&&n(r)}e.forEach(function(s){t(s,o)})}function LO(e,t,n){var r=0,a=e.length;function i(o){if(o&&o.length){n(o);return}var s=r;r=r+1,s()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},sg={integer:function(t){return sg.number(t)&&parseInt(t,10)===t},float:function(t){return sg.number(t)&&!sg.integer(t)},array:function(t){return Array.isArray(t)},regexp:function(t){if(t instanceof RegExp)return!0;try{return!!new RegExp(t)}catch{return!1}},date:function(t){return typeof t.getTime=="function"&&typeof t.getMonth=="function"&&typeof t.getYear=="function"&&!isNaN(t.getTime())},number:function(t){return isNaN(t)?!1:typeof t=="number"},object:function(t){return typeof t=="object"&&!sg.array(t)},method:function(t){return typeof t=="function"},email:function(t){return typeof t=="string"&&t.length<=320&&!!t.match(NO.email)},url:function(t){return typeof t=="string"&&t.length<=2048&&!!t.match(ahe())},hex:function(t){return typeof t=="string"&&!!t.match(NO.hex)}},ihe=function(t,n,r,a,i){if(t.required&&n===void 0){mG(t,n,r,a,i);return}var o=["integer","float","array","regexp","object","method","email","number","date","url","hex"],s=t.type;o.indexOf(s)>-1?sg[s](n)||a.push(zi(i.messages.types[s],t.fullField,t.type)):s&&typeof n!==t.type&&a.push(zi(i.messages.types[s],t.fullField,t.type))},ohe=function(t,n,r,a,i){var o=typeof t.len=="number",s=typeof t.min=="number",l=typeof t.max=="number",u=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=n,d=null,f=typeof n=="number",h=typeof n=="string",v=Array.isArray(n);if(f?d="number":h?d="string":v&&(d="array"),!d)return!1;v&&(c=n.length),h&&(c=n.replace(u,"_").length),o?c!==t.len&&a.push(zi(i.messages[d].len,t.fullField,t.len)):s&&!l&&ct.max?a.push(zi(i.messages[d].max,t.fullField,t.max)):s&&l&&(ct.max)&&a.push(zi(i.messages[d].range,t.fullField,t.min,t.max))},qf="enum",she=function(t,n,r,a,i){t[qf]=Array.isArray(t[qf])?t[qf]:[],t[qf].indexOf(n)===-1&&a.push(zi(i.messages[qf],t.fullField,t[qf].join(", ")))},lhe=function(t,n,r,a,i){if(t.pattern){if(t.pattern instanceof RegExp)t.pattern.lastIndex=0,t.pattern.test(n)||a.push(zi(i.messages.pattern.mismatch,t.fullField,n,t.pattern));else if(typeof t.pattern=="string"){var o=new RegExp(t.pattern);o.test(n)||a.push(zi(i.messages.pattern.mismatch,t.fullField,n,t.pattern))}}},zn={required:mG,whitespace:rhe,type:ihe,range:ohe,enum:she,pattern:lhe},uhe=function(t,n,r,a,i){var o=[],s=t.required||!t.required&&a.hasOwnProperty(t.field);if(s){if(la(n,"string")&&!t.required)return r();zn.required(t,n,a,o,i,"string"),la(n,"string")||(zn.type(t,n,a,o,i),zn.range(t,n,a,o,i),zn.pattern(t,n,a,o,i),t.whitespace===!0&&zn.whitespace(t,n,a,o,i))}r(o)},che=function(t,n,r,a,i){var o=[],s=t.required||!t.required&&a.hasOwnProperty(t.field);if(s){if(la(n)&&!t.required)return r();zn.required(t,n,a,o,i),n!==void 0&&zn.type(t,n,a,o,i)}r(o)},dhe=function(t,n,r,a,i){var o=[],s=t.required||!t.required&&a.hasOwnProperty(t.field);if(s){if(n===""&&(n=void 0),la(n)&&!t.required)return r();zn.required(t,n,a,o,i),n!==void 0&&(zn.type(t,n,a,o,i),zn.range(t,n,a,o,i))}r(o)},fhe=function(t,n,r,a,i){var o=[],s=t.required||!t.required&&a.hasOwnProperty(t.field);if(s){if(la(n)&&!t.required)return r();zn.required(t,n,a,o,i),n!==void 0&&zn.type(t,n,a,o,i)}r(o)},hhe=function(t,n,r,a,i){var o=[],s=t.required||!t.required&&a.hasOwnProperty(t.field);if(s){if(la(n)&&!t.required)return r();zn.required(t,n,a,o,i),la(n)||zn.type(t,n,a,o,i)}r(o)},vhe=function(t,n,r,a,i){var o=[],s=t.required||!t.required&&a.hasOwnProperty(t.field);if(s){if(la(n)&&!t.required)return r();zn.required(t,n,a,o,i),n!==void 0&&(zn.type(t,n,a,o,i),zn.range(t,n,a,o,i))}r(o)},phe=function(t,n,r,a,i){var o=[],s=t.required||!t.required&&a.hasOwnProperty(t.field);if(s){if(la(n)&&!t.required)return r();zn.required(t,n,a,o,i),n!==void 0&&(zn.type(t,n,a,o,i),zn.range(t,n,a,o,i))}r(o)},ghe=function(t,n,r,a,i){var o=[],s=t.required||!t.required&&a.hasOwnProperty(t.field);if(s){if(n==null&&!t.required)return r();zn.required(t,n,a,o,i,"array"),n!=null&&(zn.type(t,n,a,o,i),zn.range(t,n,a,o,i))}r(o)},mhe=function(t,n,r,a,i){var o=[],s=t.required||!t.required&&a.hasOwnProperty(t.field);if(s){if(la(n)&&!t.required)return r();zn.required(t,n,a,o,i),n!==void 0&&zn.type(t,n,a,o,i)}r(o)},yhe="enum",bhe=function(t,n,r,a,i){var o=[],s=t.required||!t.required&&a.hasOwnProperty(t.field);if(s){if(la(n)&&!t.required)return r();zn.required(t,n,a,o,i),n!==void 0&&zn[yhe](t,n,a,o,i)}r(o)},_he=function(t,n,r,a,i){var o=[],s=t.required||!t.required&&a.hasOwnProperty(t.field);if(s){if(la(n,"string")&&!t.required)return r();zn.required(t,n,a,o,i),la(n,"string")||zn.pattern(t,n,a,o,i)}r(o)},whe=function(t,n,r,a,i){var o=[],s=t.required||!t.required&&a.hasOwnProperty(t.field);if(s){if(la(n,"date")&&!t.required)return r();if(zn.required(t,n,a,o,i),!la(n,"date")){var l;n instanceof Date?l=n:l=new Date(n),zn.type(t,l,a,o,i),l&&zn.range(t,l.getTime(),a,o,i)}}r(o)},She=function(t,n,r,a,i){var o=[],s=Array.isArray(n)?"array":typeof n;zn.required(t,n,a,o,i,s),r(o)},xx=function(t,n,r,a,i){var o=t.type,s=[],l=t.required||!t.required&&a.hasOwnProperty(t.field);if(l){if(la(n,o)&&!t.required)return r();zn.required(t,n,a,s,i,o),la(n,o)||zn.type(t,n,a,s,i)}r(s)},xhe=function(t,n,r,a,i){var o=[],s=t.required||!t.required&&a.hasOwnProperty(t.field);if(s){if(la(n)&&!t.required)return r();zn.required(t,n,a,o,i)}r(o)},Rg={string:uhe,method:che,number:dhe,boolean:fhe,regexp:hhe,integer:vhe,float:phe,array:ghe,object:mhe,enum:bhe,pattern:_he,date:whe,url:xx,hex:xx,email:xx,required:She,any:xhe};function aE(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var t=JSON.parse(JSON.stringify(this));return t.clone=this.clone,t}}}var iE=aE(),My=function(){function e(n){this.rules=null,this._messages=iE,this.define(n)}var t=e.prototype;return t.define=function(r){var a=this;if(!r)throw new Error("Cannot configure a schema with no rules");if(typeof r!="object"||Array.isArray(r))throw new Error("Rules must be an object");this.rules={},Object.keys(r).forEach(function(i){var o=r[i];a.rules[i]=Array.isArray(o)?o:[o]})},t.messages=function(r){return r&&(this._messages=OO(aE(),r)),this._messages},t.validate=function(r,a,i){var o=this;a===void 0&&(a={}),i===void 0&&(i=function(){});var s=r,l=a,u=i;if(typeof l=="function"&&(u=l,l={}),!this.rules||Object.keys(this.rules).length===0)return u&&u(null,s),Promise.resolve(s);function c(p){var g=[],m={};function b(w){if(Array.isArray(w)){var S;g=(S=g).concat.apply(S,w)}else g.push(w)}for(var _=0;_n.labelPosition||(a==null?void 0:a.labelPosition)),m=M(()=>g.value==="top"?{}:{width:ur(n.labelWidth??(a==null?void 0:a.labelWidth))}),b=M(()=>{if(g.value==="top"||a!=null&&a.inline)return{};if(!n.label&&!n.labelWidth&&k)return{};const J=ur(n.labelWidth??(a==null?void 0:a.labelWidth));return!n.label&&!r.label?{marginLeft:J}:{}}),_=M(()=>[s.b(),s.m(o.value),s.is("error",c.value==="error"),s.is("validating",c.value==="validating"),s.is("success",c.value==="success"),s.is("required",O.value||n.required),s.is("no-asterisk",a==null?void 0:a.hideRequiredAsterisk),(a==null?void 0:a.requireAsteriskPosition)==="right"?"asterisk-right":"asterisk-left",{[s.m("feedback")]:a==null?void 0:a.statusIcon,[s.m(`label-${g.value}`)]:g.value}]),w=M(()=>En(n.inlineMessage)?n.inlineMessage:(a==null?void 0:a.inlineMessage)||!1),S=M(()=>[s.e("error"),{[s.em("error","inline")]:w.value}]),x=M(()=>n.prop?Me(n.prop)?n.prop.join("."):n.prop:""),C=M(()=>!!(n.label||r.label)),T=M(()=>n.for??(u.value.length===1?u.value[0]:void 0)),E=M(()=>!T.value&&C.value),k=!!i,A=M(()=>{const J=a==null?void 0:a.model;if(!(!J||!n.prop))return ic(J,n.prop).value}),I=M(()=>{const{required:J}=n,Z=[];n.rules&&Z.push(...jr(n.rules));const U=a==null?void 0:a.rules;if(U&&n.prop){const te=ic(U,n.prop).value;te&&Z.push(...jr(te))}if(J!==void 0){const te=Z.map((Q,ue)=>[Q,ue]).filter(([Q])=>"required"in Q);if(te.length>0)for(const[Q,ue]of te)Q.required!==J&&(Z[ue]={...Q,required:J});else Z.push({required:J})}return Z}),P=M(()=>I.value.length>0),R=J=>I.value.filter(Z=>!Z.trigger||!J?!0:Me(Z.trigger)?Z.trigger.includes(J):Z.trigger===J).map(({trigger:Z,...U})=>U),O=M(()=>I.value.some(J=>J.required)),$=M(()=>d.value==="error"&&n.showMessage&&((a==null?void 0:a.showMessage)??!0)),N=M(()=>`${n.label||""}${(a==null?void 0:a.labelSuffix)||""}`),D=J=>{c.value=J},F=J=>{var te;const{errors:Z,fields:U}=J;(!Z||!U)&&console.error(J),D("error"),f.value=Z?((te=Z==null?void 0:Z[0])==null?void 0:te.message)??`${n.prop} is required`:"",a==null||a.emit("validate",n.prop,!1,f.value)},W=()=>{D("success"),a==null||a.emit("validate",n.prop,!0,"")},z=async J=>{const Z=x.value;return new My({[Z]:J}).validate({[Z]:A.value},{firstFields:!0}).then(()=>(W(),!0)).catch(U=>(F(U),Promise.reject(U)))},Y=async(J,Z)=>{if(p||!n.prop)return!1;const U=et(Z);if(!P.value)return Z==null||Z(!1),!1;const te=R(J);return te.length===0?(Z==null||Z(!0),!0):(D("validating"),z(te).then(()=>(Z==null||Z(!0),!0)).catch(Q=>{const{fields:ue}=Q;return Z==null||Z(!1,ue),U?!1:Promise.reject(ue)}))},q=()=>{D(""),f.value="",p=!1},re=async()=>{const J=a==null?void 0:a.model;if(!J||!n.prop)return;const Z=ic(J,n.prop);p=!0,Z.value=Ps(v),await Ue(),q(),p=!1},ee=J=>{u.value.includes(J)||u.value.push(J)},se=J=>{u.value=u.value.filter(Z=>Z!==J)},ne=J=>{v=Ps(J)},de=()=>v;_e(()=>n.error,J=>{f.value=J||"",D(J?"error":"")},{immediate:!0}),_e(()=>n.validateStatus,J=>D(J||""));const le=Qt({...Jr(n),$el:h,size:o,validateMessage:f,validateState:c,labelId:l,inputIds:u,isGroup:E,hasLabel:C,fieldValue:A,addInputId:ee,removeInputId:se,resetField:re,clearValidate:q,validate:Y,propString:x,setInitialValue:ne,getInitialValue:de});return Ft(Js,le),_e(x,(J,Z)=>{!a||!Z||(a.removeField(le,Z),J&&(ne(A.value),a.addField(le)))}),St(()=>{n.prop&&(ne(A.value),a==null||a.addField(le))}),yn(()=>{a==null||a.removeField(le)}),t({size:o,validateMessage:f,validateState:c,validate:Y,clearValidate:q,resetField:re,setInitialValue:ne}),(J,Z)=>{var U;return L(),K("div",{ref_key:"formItemRef",ref:h,class:B(_.value),role:E.value?"group":void 0,"aria-labelledby":E.value?y(l):void 0},[V(y(Ufe),{"is-auto-width":m.value.width==="auto","update-all":((U=y(a))==null?void 0:U.labelWidth)==="auto"},{default:G(()=>[e.label||J.$slots.label?(L(),ve(Et(T.value?"label":"div"),{key:0,id:y(l),for:T.value,class:B(y(s).e("label")),style:tt(m.value)},{default:G(()=>[he(J.$slots,"label",{label:N.value},()=>[Le(ce(N.value),1)])]),_:3},8,["id","for","class","style"])):fe("v-if",!0)]),_:3},8,["is-auto-width","update-all"]),j("div",{class:B(y(s).e("content")),style:tt(b.value)},[he(J.$slots,"default"),V(dH,{name:`${y(s).namespace.value}-zoom-in-top`},{default:G(()=>[$.value?he(J.$slots,"error",{key:0,error:f.value},()=>[j("div",{class:B(S.value)},ce(f.value),3)]):fe("v-if",!0)]),_:3},8,["name"])],6)],10,Che)}}}),yG=The;const Ehe=xt(Gfe,{FormItem:yG}),khe=rr(yG),Cx="focus-trap.focus-after-trapped",Tx="focus-trap.focus-after-released",Ahe="focus-trap.focusout-prevented",VO={cancelable:!0,bubbles:!1},Ihe={cancelable:!0,bubbles:!1},$O="focusAfterTrapped",BO="focusAfterReleased",bG=Symbol("elFocusTrap"),sM=H(),qw=H(0),lM=H(0);let b0=0;const _G=e=>{const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const a=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||a?NodeFilter.FILTER_SKIP:r.tabIndex>=0||r===document.activeElement?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t},FO=(e,t)=>{for(const n of e)if(!Mhe(n,t))return n},Mhe=(e,t)=>{if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1},Phe=e=>{const t=_G(e);return[FO(t,e),FO(t.reverse(),e)]},Lhe=e=>e instanceof HTMLInputElement&&"select"in e,Ou=(e,t)=>{if(e){const n=document.activeElement;wy(e,{preventScroll:!0}),lM.value=window.performance.now(),e!==n&&Lhe(e)&&t&&e.select()}};function zO(e,t){const n=[...e],r=e.indexOf(t);return r!==-1&&n.splice(r,1),n}const Dhe=()=>{let e=[];return{push:r=>{const a=e[0];a&&r!==a&&a.pause(),e=zO(e,r),e.unshift(r)},remove:r=>{var a,i;e=zO(e,r),(i=(a=e[0])==null?void 0:a.resume)==null||i.call(a)}}},Rhe=(e,t=!1)=>{const n=document.activeElement;for(const r of e)if(Ou(r,t),document.activeElement!==n)return},HO=Dhe(),Ohe=()=>qw.value>lM.value,_0=()=>{sM.value="pointer",qw.value=window.performance.now()},WO=()=>{sM.value="keyboard",qw.value=window.performance.now()},Nhe=()=>(St(()=>{b0===0&&(document.addEventListener("mousedown",_0),document.addEventListener("touchstart",_0),document.addEventListener("keydown",WO)),b0++}),yn(()=>{b0--,b0<=0&&(document.removeEventListener("mousedown",_0),document.removeEventListener("touchstart",_0),document.removeEventListener("keydown",WO))}),{focusReason:sM,lastUserFocusTimestamp:qw,lastAutomatedFocusTimestamp:lM}),w0=e=>new CustomEvent(Ahe,{...Ihe,detail:e});var Vhe=ye({name:"ElFocusTrap",inheritAttrs:!1,props:{loop:Boolean,trapped:Boolean,focusTrapEl:Object,focusStartEl:{type:[Object,String],default:"first"}},emits:[$O,BO,"focusin","focusout","focusout-prevented","release-requested"],setup(e,{emit:t}){const n=H();let r,a;const{focusReason:i}=Nhe();Gue(v=>{e.trapped&&!o.paused&&t("release-requested",v)});const o={paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}},s=v=>{if(!e.loop&&!e.trapped||o.paused)return;const{altKey:p,ctrlKey:g,metaKey:m,currentTarget:b,shiftKey:_}=v,{loop:w}=e,S=Mn(v)===De.tab&&!p&&!g&&!m,x=document.activeElement;if(S&&x){const C=b,[T,E]=Phe(C);if(T&&E){if(!_&&x===E){const k=w0({focusReason:i.value});t("focusout-prevented",k),k.defaultPrevented||(v.preventDefault(),w&&Ou(T,!0))}else if(_&&[T,C].includes(x)){const k=w0({focusReason:i.value});t("focusout-prevented",k),k.defaultPrevented||(v.preventDefault(),w&&Ou(E,!0))}}else if(x===C){const k=w0({focusReason:i.value});t("focusout-prevented",k),k.defaultPrevented||v.preventDefault()}}};Ft(bG,{focusTrapRef:n,onKeydown:s}),_e(()=>e.focusTrapEl,v=>{v&&(n.value=v)},{immediate:!0}),_e([n],([v],[p])=>{v&&(v.addEventListener("keydown",s),v.addEventListener("focusin",c),v.addEventListener("focusout",d)),p&&(p.removeEventListener("keydown",s),p.removeEventListener("focusin",c),p.removeEventListener("focusout",d))});const l=v=>{t($O,v)},u=v=>t(BO,v),c=v=>{const p=y(n);if(!p)return;const g=v.target,m=v.relatedTarget,b=g&&p.contains(g);e.trapped||m&&p.contains(m)||(r=m),b&&t("focusin",v),!o.paused&&e.trapped&&(b?a=g:Ou(a,!0))},d=v=>{const p=y(n);if(!(o.paused||!p))if(e.trapped){const g=v.relatedTarget;!wr(g)&&!p.contains(g)&&setTimeout(()=>{if(!o.paused&&e.trapped){const m=w0({focusReason:i.value});t("focusout-prevented",m),m.defaultPrevented||Ou(a,!0)}},0)}else{const g=v.target;g&&p.contains(g)||t("focusout",v)}};async function f(){await Ue();const v=y(n);if(v){HO.push(o);const p=v.contains(document.activeElement)?r:document.activeElement;if(r=p,!v.contains(p)){const g=new Event(Cx,VO);v.addEventListener(Cx,l),v.dispatchEvent(g),g.defaultPrevented||Ue(()=>{let m=e.focusStartEl;qe(m)||(Ou(m),document.activeElement!==m&&(m="first")),m==="first"&&Rhe(_G(v),!0),(document.activeElement===p||m==="container")&&Ou(v)})}}}function h(){const v=y(n);if(v){v.removeEventListener(Cx,l);const p=new CustomEvent(Tx,{...VO,detail:{focusReason:i.value}});v.addEventListener(Tx,u),v.dispatchEvent(p),!p.defaultPrevented&&(i.value=="keyboard"||!Ohe()||v.contains(document.activeElement))&&Ou(r??document.body),v.removeEventListener(Tx,u),HO.remove(o),r=null,a=null}}return St(()=>{e.trapped&&f(),_e(()=>e.trapped,v=>{v?f():h()})}),yn(()=>{e.trapped&&h(),n.value&&(n.value.removeEventListener("keydown",s),n.value.removeEventListener("focusin",c),n.value.removeEventListener("focusout",d),n.value=void 0),r=null,a=null}),{onKeydown:s}}}),Gr=(e,t)=>{const n=e.__vccOpts||e;for(const[r,a]of t)n[r]=a;return n};function $he(e,t,n,r,a,i){return he(e.$slots,"default",{handleKeydown:e.onKeydown})}var Bhe=Gr(Vhe,[["render",$he]]),Uv=Bhe;const Fhe=(e,t=[])=>{const{placement:n,strategy:r,popperOptions:a}=e,i={placement:n,strategy:r,...a,modifiers:[...Hhe(e),...t]};return Whe(i,a==null?void 0:a.modifiers),i},zhe=e=>{if(cn)return Lr(e)};function Hhe(e){const{offset:t,gpuAcceleration:n,fallbackPlacements:r}=e;return[{name:"offset",options:{offset:[0,t??12]}},{name:"preventOverflow",options:{padding:{top:0,bottom:0,left:0,right:0}}},{name:"flip",options:{padding:5,fallbackPlacements:r}},{name:"computeStyles",options:{gpuAcceleration:n}}]}function Whe(e,t){t&&(e.modifiers=[...e.modifiers,...t??[]])}const Ghe=0,Uhe=e=>{const{popperInstanceRef:t,contentRef:n,triggerRef:r,role:a}=Ge(oM,void 0),i=H(),o=M(()=>e.arrowOffset),s=M(()=>({name:"eventListeners",enabled:!!e.visible})),l=M(()=>{const b=y(i),_=y(o)??Ghe;return{name:"arrow",enabled:!rW(b),options:{element:b,padding:_}}}),u=M(()=>({onFirstUpdate:()=>{v()},...Fhe(e,[y(l),y(s)])})),c=M(()=>zhe(e.referenceEl)||y(r)),{attributes:d,state:f,styles:h,update:v,forceUpdate:p,instanceRef:g}=Fue(c,n,u);_e(g,b=>t.value=b,{flush:"sync"}),St(()=>{_e(()=>{var b,_;return(_=(b=y(c))==null?void 0:b.getBoundingClientRect)==null?void 0:_.call(b)},()=>{v()})});let m;return _e(()=>e.visible,b=>{m==null||m(),m=void 0,b&&(m=Kn(n,v).stop)}),yn(()=>{t.value=void 0,m==null||m(),m=void 0}),{attributes:d,arrowRef:i,contentRef:n,instanceRef:g,state:f,styles:h,role:a,forceUpdate:p,update:v}},Khe=(e,{attributes:t,styles:n,role:r})=>{const{nextZIndex:a}=Cy(),i=Ee("popper"),o=M(()=>y(t).popper),s=H(Je(e.zIndex)?e.zIndex:a()),l=M(()=>[i.b(),i.is("pure",e.pure),i.is(e.effect),e.popperClass]),u=M(()=>[{zIndex:y(s)},y(n).popper,e.popperStyle||{}]),c=M(()=>r.value==="dialog"?"false":void 0),d=M(()=>y(n).arrow||{});return{ariaModal:c,arrowStyle:d,contentAttrs:o,contentClass:l,contentStyle:u,contentZIndex:s,updateZIndex:()=>{s.value=Je(e.zIndex)?e.zIndex:a()}}},Yhe=(e,t)=>{const n=H(!1),r=H(),a=()=>{t("focus")},i=u=>{var c;((c=u.detail)==null?void 0:c.focusReason)!=="pointer"&&(r.value="first",t("blur"))},o=u=>{e.visible&&!n.value&&(u.target&&(r.value=u.target),n.value=!0)},s=u=>{e.trapping||(u.detail.focusReason==="pointer"&&u.preventDefault(),n.value=!1)},l=()=>{n.value=!1,t("close")};return yn(()=>{r.value=void 0}),{focusStartRef:r,trapped:n,onFocusAfterReleased:i,onFocusAfterTrapped:a,onFocusInTrap:o,onFocusoutPrevented:s,onReleaseRequested:l}};var jhe=ye({name:"ElPopperContent",__name:"content",props:gG,emits:Ofe,setup(e,{expose:t,emit:n}){const r=n,a=e,{focusStartRef:i,trapped:o,onFocusAfterReleased:s,onFocusAfterTrapped:l,onFocusInTrap:u,onFocusoutPrevented:c,onReleaseRequested:d}=Yhe(a,r),{attributes:f,arrowRef:h,contentRef:v,styles:p,instanceRef:g,role:m,update:b}=Uhe(a),{ariaModal:_,arrowStyle:w,contentAttrs:S,contentClass:x,contentStyle:C,updateZIndex:T}=Khe(a,{styles:p,attributes:f,role:m}),E=Ge(Js,void 0);Ft(dG,{arrowStyle:w,arrowRef:h}),E&&Ft(Js,{...E,addInputId:It,removeInputId:It});let k;const A=(P=!0)=>{b(),P&&T()},I=()=>{A(!1),a.visible&&a.focusOnShow?o.value=!0:a.visible===!1&&(o.value=!1)};return St(()=>{_e(()=>a.triggerTargetEl,(P,R)=>{k==null||k(),k=void 0;const O=y(P||v.value),$=y(R||v.value);ki(O)&&(k=_e([m,()=>a.ariaLabel,_,()=>a.id],N=>{["role","aria-label","aria-modal","id"].forEach((D,F)=>{wr(N[F])?O.removeAttribute(D):O.setAttribute(D,N[F])})},{immediate:!0})),$!==O&&ki($)&&["role","aria-label","aria-modal","id"].forEach(N=>{$.removeAttribute(N)})},{immediate:!0}),_e(()=>a.visible,I,{immediate:!0})}),yn(()=>{k==null||k(),k=void 0,v.value=void 0}),t({popperContentRef:v,popperInstanceRef:g,updatePopper:A,contentStyle:C}),(P,R)=>(L(),K("div",Mt({ref_key:"contentRef",ref:v},y(S),{style:y(C),class:y(x),tabindex:"-1",onMouseenter:R[0]||(R[0]=O=>P.$emit("mouseenter",O)),onMouseleave:R[1]||(R[1]=O=>P.$emit("mouseleave",O))}),[V(y(Uv),{loop:e.loop,trapped:y(o),"trap-on-focus-in":!0,"focus-trap-el":y(v),"focus-start-el":y(i),onFocusAfterTrapped:y(l),onFocusAfterReleased:y(s),onFocusin:y(u),onFocusoutPrevented:y(c),onReleaseRequested:y(d)},{default:G(()=>[he(P.$slots,"default")]),_:3},8,["loop","trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusin","onFocusoutPrevented","onReleaseRequested"])],16))}}),qhe=jhe,Xhe=ye({name:"ElPopper",inheritAttrs:!1,__name:"popper",props:cG,setup(e,{expose:t}){const n=e,r={triggerRef:H(),popperInstanceRef:H(),contentRef:H(),referenceRef:H(),role:M(()=>n.role)};return t(r),Ft(oM,r),(a,i)=>he(a.$slots,"default")}}),Zhe=Xhe;const wG=xt(Zhe),Tn=Oe({...Yue,...gG,appendTo:{type:oe([String,Object])},content:{type:String,default:""},rawContent:Boolean,persistent:Boolean,visible:{type:oe(Boolean),default:null},transition:String,teleported:{type:Boolean,default:!0},disabled:Boolean,...ja(["ariaLabel"])}),Ws=Oe({...fG,disabled:Boolean,trigger:{type:oe([String,Array]),default:"hover"},triggerKeys:{type:oe(Array),default:()=>[De.enter,De.numpadEnter,De.space]},focusOnTarget:Boolean}),{useModelToggleProps:Jhe,useModelToggleEmits:Qhe,useModelToggle:eve}=Vle("visible"),tve=Oe({...cG,...Jhe,...Tn,...Ws,...pG,showArrow:{type:Boolean,default:!0}}),nve=[...Qhe,"before-show","before-hide","show","hide","open","close"],uM=Symbol("elTooltip"),oE=(e,t)=>Me(e)?e.includes(t):e===t,Xf=(e,t,n)=>r=>{oE(y(e),t)&&n(r)};var rve=ye({name:"ElTooltipTrigger",__name:"trigger",props:Ws,setup(e,{expose:t}){const n=e,r=Ee("tooltip"),{controlled:a,id:i,open:o,onOpen:s,onClose:l,onToggle:u}=Ge(uM,void 0),c=H(null),d=()=>{if(y(a)||n.disabled)return!0},f=xn(n,"trigger"),h=Yr(d,Xf(f,"hover",w=>{s(w),n.focusOnTarget&&w.target&&Ue(()=>{wy(w.target,{preventScroll:!0})})})),v=Yr(d,Xf(f,"hover",l)),p=Yr(d,Xf(f,"click",w=>{w.button===0&&u(w)})),g=Yr(d,Xf(f,"focus",s)),m=Yr(d,Xf(f,"focus",l)),b=Yr(d,Xf(f,"contextmenu",w=>{w.preventDefault(),u(w)})),_=Yr(d,w=>{const S=Mn(w);n.triggerKeys.includes(S)&&(w.preventDefault(),u(w))});return t({triggerRef:c}),(w,S)=>(L(),ve(y(Dfe),{id:y(i),"virtual-ref":e.virtualRef,open:y(o),"virtual-triggering":e.virtualTriggering,class:B(y(r).e("trigger")),onBlur:y(m),onClick:y(p),onContextmenu:y(b),onFocus:y(g),onMouseenter:y(h),onMouseleave:y(v),onKeydown:y(_)},{default:G(()=>[he(w.$slots,"default")]),_:3},8,["id","virtual-ref","open","virtual-triggering","class","onBlur","onClick","onContextmenu","onFocus","onMouseenter","onMouseleave","onKeydown"]))}}),ave=rve,ive=ye({name:"ElTooltipContent",inheritAttrs:!1,__name:"content",props:Tn,setup(e,{expose:t}){const n=e,{selector:r}=NW(),a=Ee("tooltip"),i=H(),o=lW(()=>{var D;return(D=i.value)==null?void 0:D.popperContentRef});let s;const{controlled:l,id:u,open:c,trigger:d,onClose:f,onOpen:h,onShow:v,onHide:p,onBeforeShow:g,onBeforeHide:m}=Ge(uM,void 0),b=M(()=>n.transition||`${a.namespace.value}-fade-in-linear`),_=M(()=>n.persistent);yn(()=>{s==null||s()});const w=M(()=>y(_)?!0:y(c)),S=M(()=>n.disabled?!1:y(c)),x=M(()=>n.appendTo||r.value),C=M(()=>n.style??{}),T=H(!0),E=()=>{p(),N()&&wy(document.body,{preventScroll:!0}),T.value=!0},k=()=>{if(y(l))return!0},A=Yr(k,()=>{n.enterable&&oE(y(d),"hover")&&h()}),I=Yr(k,()=>{oE(y(d),"hover")&&f()}),P=()=>{var D,F;(F=(D=i.value)==null?void 0:D.updatePopper)==null||F.call(D),g==null||g()},R=()=>{m==null||m()},O=()=>{v()},$=()=>{n.virtualTriggering||f()},N=D=>{var z;const F=(z=i.value)==null?void 0:z.popperContentRef,W=(D==null?void 0:D.relatedTarget)||document.activeElement;return F==null?void 0:F.contains(W)};return _e(()=>y(c),D=>{D?(T.value=!1,s=OI(o,()=>{y(l)||za(y(d)).every(F=>F!=="hover"&&F!=="focus")&&f()},{detectIframe:!0})):s==null||s()},{flush:"post"}),t({contentRef:i,isFocusInsideContent:N}),(D,F)=>(L(),ve(Bv,{disabled:!e.teleported,to:x.value},[w.value||!T.value?(L(),ve(ya,{key:0,name:b.value,appear:!_.value,onAfterLeave:E,onBeforeEnter:P,onAfterEnter:O,onBeforeLeave:R,persisted:""},{default:G(()=>[gt(V(y(qhe),Mt({id:y(u),ref_key:"contentRef",ref:i},D.$attrs,{"aria-label":e.ariaLabel,"aria-hidden":T.value,"boundaries-padding":e.boundariesPadding,"fallback-placements":e.fallbackPlacements,"gpu-acceleration":e.gpuAcceleration,offset:e.offset,placement:e.placement,"popper-options":e.popperOptions,"arrow-offset":e.arrowOffset,strategy:e.strategy,effect:e.effect,enterable:e.enterable,pure:e.pure,"popper-class":e.popperClass,"popper-style":[e.popperStyle,C.value],"reference-el":e.referenceEl,"trigger-target-el":e.triggerTargetEl,visible:S.value,"z-index":e.zIndex,loop:e.loop,onMouseenter:y(A),onMouseleave:y(I),onBlur:$,onClose:y(f)}),{default:G(()=>[he(D.$slots,"default")]),_:3},16,["id","aria-label","aria-hidden","boundaries-padding","fallback-placements","gpu-acceleration","offset","placement","popper-options","arrow-offset","strategy","effect","enterable","pure","popper-class","popper-style","reference-el","trigger-target-el","visible","z-index","loop","onMouseenter","onMouseleave","onClose"]),[[ln,S.value]])]),_:3},8,["name","appear"])):fe("v-if",!0)],8,["disabled","to"]))}}),ove=ive;const sve=["innerHTML"],lve={key:1};var uve=ye({name:"ElTooltip",__name:"tooltip",props:tve,emits:nve,setup(e,{expose:t,emit:n}){const r=e,a=n;Kue();const i=Ee("tooltip"),o=ba(),s=H(),l=H(),u=()=>{var S;const w=y(s);w&&((S=w.popperInstanceRef)==null||S.update())},c=H(!1),d=H(),{show:f,hide:h,hasUpdateHandler:v}=eve({indicator:c,toggleReason:d}),{onOpen:p,onClose:g}=jue({showAfter:xn(r,"showAfter"),hideAfter:xn(r,"hideAfter"),autoClose:xn(r,"autoClose"),open:f,close:h}),m=M(()=>En(r.visible)&&!v.value),b=M(()=>[i.b(),r.popperClass]);Ft(uM,{controlled:m,id:o,open:rv(c),trigger:xn(r,"trigger"),onOpen:p,onClose:g,onToggle:w=>{y(c)?g(w):p(w)},onShow:()=>{a("show",d.value)},onHide:()=>{a("hide",d.value)},onBeforeShow:()=>{a("before-show",d.value)},onBeforeHide:()=>{a("before-hide",d.value)},updatePopper:u}),_e(()=>r.disabled,w=>{w&&c.value&&(c.value=!1),!w&&En(r.visible)&&(c.value=r.visible)});const _=w=>{var S;return(S=l.value)==null?void 0:S.isFocusInsideContent(w)};return cI(()=>c.value&&h()),yn(()=>{d.value=void 0}),t({popperRef:s,contentRef:l,isFocusInsideContent:_,updatePopper:u,onOpen:p,onClose:g,hide:h}),(w,S)=>(L(),ve(y(wG),{ref_key:"popperRef",ref:s,role:e.role},{default:G(()=>[V(ave,{disabled:e.disabled,trigger:e.trigger,"trigger-keys":e.triggerKeys,"virtual-ref":e.virtualRef,"virtual-triggering":e.virtualTriggering,"focus-on-target":e.focusOnTarget},{default:G(()=>[w.$slots.default?he(w.$slots,"default",{key:0}):fe("v-if",!0)]),_:3},8,["disabled","trigger","trigger-keys","virtual-ref","virtual-triggering","focus-on-target"]),V(ove,{ref_key:"contentRef",ref:l,"aria-label":e.ariaLabel,"boundaries-padding":e.boundariesPadding,content:e.content,disabled:e.disabled,effect:e.effect,enterable:e.enterable,"fallback-placements":e.fallbackPlacements,"hide-after":e.hideAfter,"gpu-acceleration":e.gpuAcceleration,offset:e.offset,persistent:e.persistent,"popper-class":b.value,"popper-style":e.popperStyle,placement:e.placement,"popper-options":e.popperOptions,"arrow-offset":e.arrowOffset,pure:e.pure,"raw-content":e.rawContent,"reference-el":e.referenceEl,"trigger-target-el":e.triggerTargetEl,"show-after":e.showAfter,strategy:e.strategy,teleported:e.teleported,transition:e.transition,"virtual-triggering":e.virtualTriggering,"z-index":e.zIndex,"append-to":e.appendTo,loop:e.loop},{default:G(()=>[he(w.$slots,"content",{},()=>[e.rawContent?(L(),K("span",{key:0,innerHTML:e.content},null,8,sve)):(L(),K("span",lve,ce(e.content),1))]),e.showArrow?(L(),ve(y(Pfe),{key:0})):fe("v-if",!0)]),_:3},8,["aria-label","boundaries-padding","content","disabled","effect","enterable","fallback-placements","hide-after","gpu-acceleration","offset","persistent","popper-class","popper-style","placement","popper-options","arrow-offset","pure","raw-content","reference-el","trigger-target-el","show-after","strategy","teleported","transition","virtual-triggering","z-index","append-to","loop"])]),_:3},8,["role"]))}}),cve=uve;const ua=xt(cve),sr=e=>e,cM=Oe({id:{type:String,default:void 0},size:$r,disabled:{type:Boolean,default:void 0},modelValue:{type:oe([String,Number,Object]),default:""},modelModifiers:{type:oe(Object),default:()=>({})},maxlength:{type:[String,Number]},minlength:{type:[String,Number]},type:{type:oe(String),default:"text"},resize:{type:String,values:["none","both","horizontal","vertical"]},autosize:{type:oe([Boolean,Object]),default:!1},autocomplete:{type:oe(String),default:"off"},formatter:{type:Function},parser:{type:Function},placeholder:{type:String},form:{type:String},readonly:Boolean,clearable:Boolean,clearIcon:{type:An,default:ul},showPassword:Boolean,showWordLimit:Boolean,wordLimitPosition:{type:String,values:["inside","outside"],default:"inside"},suffixIcon:{type:An},prefixIcon:{type:An},containerRole:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},validateEvent:{type:Boolean,default:!0},inputStyle:{type:oe([Object,Array,String,Boolean]),default:()=>sr({})},countGraphemes:{type:oe(Function)},autofocus:Boolean,rows:{type:Number,default:2},...ja(["ariaLabel"]),inputmode:{type:oe(String),default:void 0},name:String}),dve={[mt]:e=>qe(e),input:e=>qe(e),change:(e,t)=>qe(e)&&(t instanceof Event||t===void 0),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:e=>e===void 0||e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,mouseenter:e=>e instanceof MouseEvent,keydown:e=>e instanceof Event,compositionstart:e=>e instanceof CompositionEvent,compositionupdate:e=>e instanceof CompositionEvent,compositionend:e=>e instanceof CompositionEvent};$s(ul);let Ma;const fve={height:"0",visibility:"hidden",overflow:$w()?"":"hidden",position:"absolute","z-index":"-1000",top:"0",right:"0"},hve=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing","word-break"],GO=e=>{const t=Number.parseFloat(e);return Number.isNaN(t)?e:t};function vve(e){const t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),r=Number.parseFloat(t.getPropertyValue("padding-bottom"))+Number.parseFloat(t.getPropertyValue("padding-top")),a=Number.parseFloat(t.getPropertyValue("border-bottom-width"))+Number.parseFloat(t.getPropertyValue("border-top-width"));return{contextStyle:hve.map(i=>[i,t.getPropertyValue(i)]),paddingSize:r,borderSize:a,boxSizing:n}}function UO(e,t=1,n){var c;if(!Ma){Ma=document.createElement("textarea");let d=document.body;!$w()&&e.parentNode&&(d=e.parentNode),d.appendChild(Ma)}const{paddingSize:r,borderSize:a,boxSizing:i,contextStyle:o}=vve(e);o.forEach(([d,f])=>Ma==null?void 0:Ma.style.setProperty(d,f)),Object.entries(fve).forEach(([d,f])=>Ma==null?void 0:Ma.style.setProperty(d,f,"important")),Ma.value=e.value||e.placeholder||"";let s=Ma.scrollHeight;const l={};i==="border-box"?s=s+a:i==="content-box"&&(s=s-r),Ma.value="";const u=Ma.scrollHeight-r;if(Je(t)){let d=u*t;i==="border-box"&&(d=d+r+a),s=Math.max(d,s),l.minHeight=`${d}px`}if(Je(n)){let d=u*n;i==="border-box"&&(d=d+r+a),s=Math.min(d,s)}return l.height=`${s}px`,(c=Ma.parentNode)==null||c.removeChild(Ma),Ma=void 0,l}const pve=["id","name","minlength","maxlength","type","disabled","readonly","autocomplete","tabindex","aria-label","placeholder","form","autofocus","role","inputmode"],gve=["id","name","minlength","maxlength","tabindex","disabled","readonly","autocomplete","aria-label","placeholder","form","autofocus","rows","role","inputmode"],KO="ElInput";var mve=ye({name:KO,inheritAttrs:!1,__name:"input",props:cM,emits:dve,setup(e,{expose:t,emit:n}){const r=e,a=n,i=iu(),o=pr(),s=M(()=>[r.type==="textarea"?m.b():g.b(),g.m(v.value),g.is("disabled",p.value),g.is("exceed",de.value),{[g.b("group")]:o.prepend||o.append,[g.m("prefix")]:o.prefix||r.prefixIcon,[g.m("suffix")]:o.suffix||r.suffixIcon||r.clearable||r.showPassword,[g.bm("suffix","password-clear")]:re.value&&ee.value,[g.b("hidden")]:r.type==="hidden"},i.class]),l=M(()=>[g.e("wrapper"),g.is("focus",P.value)]),u=Ow(),c=M(()=>{var it;return(it=r.maxlength)==null?void 0:it.toString()}),{form:d,formItem:f}=ea(),{inputId:h}=Di(r,{formItemContext:f}),v=Rr(),p=ar(),g=Ee("input"),m=Ee("textarea"),b=Ut(),_=Ut(),w=H(!1),S=H(!1),x=H(),C=H(),T=Ut(r.inputStyle),E=H(""),k=H(),A=M(()=>b.value||_.value),{wrapperRef:I,isFocused:P,handleFocus:R,handleBlur:O}=uu(A,{disabled:p,afterBlur(){var it;r.validateEvent&&((it=f==null?void 0:f.validate)==null||it.call(f,"blur").catch(It))}}),$=M(()=>(d==null?void 0:d.statusIcon)??!1),N=M(()=>(f==null?void 0:f.validateState)||""),D=M(()=>N.value&&jw[N.value]),F=M(()=>S.value?gfe:kde),W=M(()=>[i.style]),z=M(()=>[r.inputStyle,T.value,{resize:r.resize},k.value?{height:k.value}:void 0]),Y=M(()=>wr(r.modelValue)?"":String(r.modelValue)),q=M(()=>r.clearable&&!p.value&&!r.readonly),re=M(()=>q.value&&!!Y.value&&(P.value||w.value)),ee=M(()=>r.showPassword&&!p.value&&!!Y.value),se=M(()=>r.showWordLimit&&!!c.value&&(r.type==="text"||r.type==="textarea")&&!p.value&&!r.readonly&&!r.showPassword),ne=M(()=>r.countGraphemes&&r.showWordLimit?r.countGraphemes(Y.value):Y.value.length),de=M(()=>!!se.value&&ne.value>Number(c.value)),le=M(()=>!!o.suffix||!!r.suffixIcon||r.clearable||r.showPassword||se.value||!!N.value&&$.value),J=M(()=>!!Object.keys(r.modelModifiers).length),[Z,U]=Bce(b);let te;Kn(_,it=>{if(pe(),!se.value&&!q.value||r.resize!=="both"&&r.resize!=="horizontal")return;const{width:At}=it[0].target.getBoundingClientRect(),xe=()=>{te=void 0,x.value={right:`calc(100% - ${At-10}px)`},C.value={right:`calc(100% - ${At-11}px)`}};te&&Zo(te),te=Pi(xe)});const Q=()=>{const{type:it,autosize:At}=r;if(!(!cn||it!=="textarea"||!_.value))if(At){const xe=yt(At)?At.minRows:void 0,rt=yt(At)?At.maxRows:void 0,Te=UO(_.value,xe,rt);T.value={overflowY:"hidden",...Te},Ue(()=>{_.value.offsetHeight,T.value=Te})}else T.value={minHeight:UO(_.value).minHeight}},pe=(it=>{let At=!1;return()=>{var xe;if(At||!r.autosize){r.resize!=="none"&&setTimeout(()=>{var rt;k.value=(rt=_.value)==null?void 0:rt.style.height});return}((xe=_.value)==null?void 0:xe.offsetParent)!==null&&(setTimeout(it),At=!0)}})(Q),me=()=>{const it=A.value,At=r.formatter?r.formatter(Y.value):Y.value;!it||it.value===At||r.type==="file"||(it.value=At)},Pe=it=>{const{trim:At,number:xe}=r.modelModifiers;return At&&(it=it.trim()),xe&&(it=`${GO(it)}`),r.formatter&&r.parser&&(it=r.parser(it)),it},Ne=async it=>{if(ae.value)return;const{lazy:At}=r.modelModifiers;let{value:xe}=it.target,rt=!1;if(At){a(Mr,xe);return}if(xe=Pe(xe),r.countGraphemes&&c.value!=null){const Te=Number(c.value),Qe=r.countGraphemes(xe),jt=r.countGraphemes(E.value);if(Qe>Te&&Qe>jt)if(jt>Te)xe=E.value,rt=!0;else{const Xe=E.value,ft=xe;let vt=0;for(;vtvt&&Gt>vt&&Xe[kt-1]===ft[Gt-1];)kt--,Gt--;const fn=ft.slice(0,vt),bt=Xe.slice(vt,kt),Cn=ft.slice(vt,Gt),jn=ft.slice(Gt),We=jt-r.countGraphemes(bt),st=Math.max(0,Te-We);let we="";if(st>0)if(typeof Intl<"u"&&"Segmenter"in Intl){const He=new Intl.Segmenter(void 0,{granularity:"grapheme"});for(const{segment:je}of He.segment(Cn)){const Xt=we+je;if(r.countGraphemes(Xt)>st)break;we=Xt}}else for(const He of Array.from(Cn)){const je=we+He;if(r.countGraphemes(je)>st)break;we=je}xe=fn+we+jn,rt=!0}}if(String(xe)===Y.value){if(r.formatter||rt){const Te=it.target,Qe=Te.value,jt=Te.selectionStart,Xe=Te.selectionEnd;if(me(),rt&&A.value&&jt!=null&&Xe!=null){const ft=A.value.value,vt=Qe.slice(Math.max(0,Xe));let kt=Math.min(jt,ft.length);vt&&ft.endsWith(vt)&&(kt=ft.length-vt.length),A.value.setSelectionRange(kt,kt)}}return}E.value=xe,Z(),a(mt,xe),a(Mr,xe),await Ue(),(r.formatter&&r.parser||!J.value)&&me(),U()},ie=async it=>{let{value:At}=it.target;At=Pe(At),r.modelModifiers.lazy&&a(mt,At),a(Vt,At,it),await Ue(),me()},{isComposing:ae,handleCompositionStart:ge,handleCompositionUpdate:be,handleCompositionEnd:$e}=Ay({emit:a,afterComposition:Ne}),Re=()=>{S.value=!S.value},Se=()=>{var it;return(it=A.value)==null?void 0:it.focus()},Ae=()=>{var it;return(it=A.value)==null?void 0:it.blur()},nt=it=>{w.value=!1,a("mouseleave",it)},at=it=>{w.value=!0,a("mouseenter",it)},zt=it=>{a("keydown",it)},on=()=>{var it;(it=A.value)==null||it.select()},Bt=it=>{a(mt,""),a(Vt,""),a("clear",it),a(Mr,"")};return _e(()=>r.modelValue,()=>{var it;Ue(()=>{Q(),r.autosize&&(k.value=void 0)}),r.validateEvent&&((it=f==null?void 0:f.validate)==null||it.call(f,"change").catch(It))}),_e(()=>Y.value,it=>{E.value=it},{immediate:!0}),_e(Y,it=>{if(!A.value)return;const{trim:At,number:xe}=r.modelModifiers,rt=A.value.value,Te=(xe||r.type==="number")&&!/^0\d/.test(rt)?`${GO(rt)}`:rt;Te!==it&&(document.activeElement===A.value&&A.value.type!=="range"&&At&&Te.trim()===it||me())}),_e(()=>r.type,async()=>{await Ue(),me(),Q()}),St(()=>{!r.formatter&&r.parser&&wn(KO,"If you set the parser, you also need to set the formatter."),me(),Ue(Q)}),yn(()=>{te&&Zo(te)}),t({input:b,textarea:_,ref:A,textareaStyle:z,autosize:xn(r,"autosize"),isComposing:ae,passwordVisible:S,focus:Se,blur:Ae,select:on,clear:Bt,resizeTextarea:Q}),(it,At)=>(L(),K("div",{class:B([s.value,{[y(g).bm("group","append")]:it.$slots.append,[y(g).bm("group","prepend")]:it.$slots.prepend}]),style:tt(W.value),onMouseenter:at,onMouseleave:nt},[fe(" input "),e.type!=="textarea"?(L(),K(ze,{key:0},[fe(" prepend slot "),it.$slots.prepend?(L(),K("div",{key:0,class:B(y(g).be("group","prepend"))},[he(it.$slots,"prepend")],2)):fe("v-if",!0),j("div",{ref_key:"wrapperRef",ref:I,class:B(l.value)},[fe(" prefix slot "),it.$slots.prefix||e.prefixIcon?(L(),K("span",{key:0,class:B(y(g).e("prefix"))},[j("span",{class:B(y(g).e("prefix-inner"))},[he(it.$slots,"prefix"),e.prefixIcon?(L(),ve(y(Ze),{key:0,class:B(y(g).e("icon"))},{default:G(()=>[(L(),ve(Et(e.prefixIcon)))]),_:1},8,["class"])):fe("v-if",!0)],2)],2)):fe("v-if",!0),j("input",Mt({id:y(h),ref_key:"input",ref:b,class:y(g).e("inner")},y(u),{name:e.name,minlength:e.countGraphemes?void 0:e.minlength,maxlength:e.countGraphemes?void 0:c.value,type:e.showPassword?S.value?"text":"password":e.type,disabled:y(p),readonly:e.readonly,autocomplete:e.autocomplete,tabindex:e.tabindex,"aria-label":e.ariaLabel,placeholder:e.placeholder,style:e.inputStyle,form:e.form,autofocus:e.autofocus,role:e.containerRole,inputmode:e.inputmode,onCompositionstart:At[0]||(At[0]=(...xe)=>y(ge)&&y(ge)(...xe)),onCompositionupdate:At[1]||(At[1]=(...xe)=>y(be)&&y(be)(...xe)),onCompositionend:At[2]||(At[2]=(...xe)=>y($e)&&y($e)(...xe)),onInput:Ne,onChange:ie,onKeydown:zt}),null,16,pve),fe(" suffix slot "),le.value?(L(),K("span",{key:1,class:B(y(g).e("suffix"))},[j("span",{class:B(y(g).e("suffix-inner"))},[q.value?(L(),ve(y(Ze),{key:0,class:B([y(g).e("icon"),y(g).e("clear")]),style:tt({visibility:re.value?"visible":"hidden"}),onMousedown:ut(y(It),["prevent"]),onClick:Bt},{default:G(()=>[(L(),ve(Et(e.clearIcon)))]),_:1},8,["class","style","onMousedown"])):fe("v-if",!0),!re.value||!ee.value||!se.value?(L(),K(ze,{key:1},[he(it.$slots,"suffix"),e.suffixIcon?(L(),ve(y(Ze),{key:0,class:B(y(g).e("icon"))},{default:G(()=>[(L(),ve(Et(e.suffixIcon)))]),_:1},8,["class"])):fe("v-if",!0)],64)):fe("v-if",!0),ee.value?(L(),ve(y(Ze),{key:2,class:B([y(g).e("icon"),y(g).e("password")]),onClick:Re,onMousedown:ut(y(It),["prevent"]),onMouseup:ut(y(It),["prevent"])},{default:G(()=>[he(it.$slots,"password-icon",{visible:S.value},()=>[(L(),ve(Et(F.value)))])]),_:3},8,["class","onMousedown","onMouseup"])):fe("v-if",!0),se.value?(L(),K("span",{key:3,class:B([y(g).e("count"),y(g).is("outside",e.wordLimitPosition==="outside")])},[j("span",{class:B(y(g).e("count-inner"))},ce(ne.value)+" / "+ce(c.value),3)],2)):fe("v-if",!0),N.value&&D.value&&$.value?(L(),ve(y(Ze),{key:4,class:B([y(g).e("icon"),y(g).e("validateIcon"),y(g).is("loading",N.value==="validating")])},{default:G(()=>[(L(),ve(Et(D.value)))]),_:1},8,["class"])):fe("v-if",!0)],2)],2)):fe("v-if",!0)],2),fe(" append slot "),it.$slots.append?(L(),K("div",{key:1,class:B(y(g).be("group","append"))},[he(it.$slots,"append")],2)):fe("v-if",!0)],64)):(L(),K(ze,{key:1},[fe(" textarea "),j("textarea",Mt({id:y(h),ref_key:"textarea",ref:_,class:[y(m).e("inner"),y(g).is("focus",y(P)),y(m).is("clearable",e.clearable)]},y(u),{name:e.name,minlength:e.countGraphemes?void 0:e.minlength,maxlength:e.countGraphemes?void 0:c.value,tabindex:e.tabindex,disabled:y(p),readonly:e.readonly,autocomplete:e.autocomplete,style:z.value,"aria-label":e.ariaLabel,placeholder:e.placeholder,form:e.form,autofocus:e.autofocus,rows:e.rows,role:e.containerRole,inputmode:e.inputmode,onCompositionstart:At[3]||(At[3]=(...xe)=>y(ge)&&y(ge)(...xe)),onCompositionupdate:At[4]||(At[4]=(...xe)=>y(be)&&y(be)(...xe)),onCompositionend:At[5]||(At[5]=(...xe)=>y($e)&&y($e)(...xe)),onInput:Ne,onFocus:At[6]||(At[6]=(...xe)=>y(R)&&y(R)(...xe)),onBlur:At[7]||(At[7]=(...xe)=>y(O)&&y(O)(...xe)),onChange:ie,onKeydown:zt}),null,16,gve),re.value?(L(),ve(y(Ze),{key:0,class:B([y(m).e("icon"),y(m).e("clear")]),style:tt(C.value),onMousedown:ut(y(It),["prevent"]),onClick:Bt},{default:G(()=>[(L(),ve(Et(e.clearIcon)))]),_:1},8,["class","style","onMousedown"])):fe("v-if",!0),se.value?(L(),K("span",{key:1,style:tt(x.value),class:B([y(g).e("count"),y(g).is("outside",e.wordLimitPosition==="outside")])},ce(ne.value)+" / "+ce(c.value),7)):fe("v-if",!0)],64))],38))}}),yve=mve;const va=xt(yve),bve=Oe({...cM,valueKey:{type:String,default:"value"},modelValue:{type:[String,Number],default:""},debounce:{type:Number,default:300},placement:{type:oe(String),values:["top","top-start","top-end","bottom","bottom-start","bottom-end"],default:"bottom-start"},fetchSuggestions:{type:oe([Function,Array]),default:It},popperClass:Tn.popperClass,popperStyle:Tn.popperStyle,popperOptions:Tn.popperOptions,showArrow:{type:Boolean,default:!0},triggerOnFocus:{type:Boolean,default:!0},selectWhenUnmatched:Boolean,hideLoading:Boolean,teleported:Tn.teleported,appendTo:Tn.appendTo,highlightFirstItem:Boolean,fitInputWidth:Boolean,loopNavigation:{type:Boolean,default:!0}}),_ve={[mt]:e=>qe(e)||Je(e),[Mr]:e=>qe(e)||Je(e),[Vt]:e=>qe(e)||Je(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,select:e=>yt(e)},wve=Oe({distance:{type:Number,default:0},height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:Boolean,wrapStyle:{type:oe([String,Object,Array,Boolean]),default:""},wrapClass:{type:[String,Array],default:""},viewClass:{type:[String,Array],default:""},viewStyle:{type:oe([String,Object,Array,Boolean]),default:""},noresize:Boolean,tag:{type:String,default:"div"},always:Boolean,minSize:{type:Number,default:20},tabindex:{type:[String,Number],default:void 0},id:String,role:String,...ja(["ariaLabel","ariaOrientation"])}),mm={"end-reached":e=>["left","right","top","bottom"].includes(e),scroll:({scrollTop:e,scrollLeft:t})=>[e,t].every(Je)},SG={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}},Sve=({move:e,size:t,bar:n})=>({[n.size]:t,transform:`translate${n.axis}(${e}%)`}),xve=Oe({vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean}),dM=Symbol("scrollbarContextKey");function Gs(e,t,n=.03){return e-t>n}const Cve=Oe({always:{type:Boolean,default:!0},minSize:{type:Number,required:!0}}),Tve="Thumb";var Eve=ye({__name:"thumb",props:xve,setup(e){const t=e,n=Ge(dM),r=Ee("scrollbar");n||nr(Tve,"can not inject scrollbar context");const a=H(),i=H(),o=H({}),s=H(!1);let l=!1,u=!1,c=0,d=0,f=cn?document.onselectstart:null;const h=M(()=>SG[t.vertical?"vertical":"horizontal"]),v=M(()=>Sve({size:t.size,move:t.move,bar:h.value})),p=M(()=>a.value[h.value.offset]**2/n.wrapElement[h.value.scrollSize]/t.ratio/i.value[h.value.offset]),g=T=>{var k;if(T.stopPropagation(),T.ctrlKey||[1,2].includes(T.button))return;(k=window.getSelection())==null||k.removeAllRanges(),b(T);const E=T.currentTarget;E&&(o.value[h.value.axis]=E[h.value.offset]-(T[h.value.client]-E.getBoundingClientRect()[h.value.direction]))},m=T=>{if(!i.value||!a.value||!n.wrapElement)return;const E=(Math.abs(T.target.getBoundingClientRect()[h.value.direction]-T[h.value.client])-i.value[h.value.offset]/2)*100*p.value/a.value[h.value.offset];n.wrapElement[h.value.scroll]=E*n.wrapElement[h.value.scrollSize]/100},b=T=>{T.stopImmediatePropagation(),l=!0,c=n.wrapElement.scrollHeight,d=n.wrapElement.scrollWidth,document.addEventListener("mousemove",_),document.addEventListener("mouseup",w),f=document.onselectstart,document.onselectstart=()=>!1},_=T=>{if(!a.value||!i.value||l===!1)return;const E=o.value[h.value.axis];if(!E)return;const k=((a.value.getBoundingClientRect()[h.value.direction]-T[h.value.client])*-1-(i.value[h.value.offset]-E))*100*p.value/a.value[h.value.offset];h.value.scroll==="scrollLeft"?n.wrapElement[h.value.scroll]=k*d/100:n.wrapElement[h.value.scroll]=k*c/100},w=()=>{l=!1,o.value[h.value.axis]=0,document.removeEventListener("mousemove",_),document.removeEventListener("mouseup",w),C(),u&&(s.value=!1)},S=()=>{u=!1,s.value=!!t.size},x=()=>{u=!0,s.value=l};yn(()=>{C(),document.removeEventListener("mouseup",w)});const C=()=>{document.onselectstart!==f&&(document.onselectstart=f)};return gn(xn(n,"scrollbarElement"),"mousemove",S),gn(xn(n,"scrollbarElement"),"mouseleave",x),(T,E)=>(L(),ve(ya,{name:y(r).b("fade"),persisted:""},{default:G(()=>[gt(j("div",{ref_key:"instance",ref:a,class:B([y(r).e("bar"),y(r).is(h.value.key)]),onMousedown:m,onClick:E[0]||(E[0]=ut(()=>{},["stop"]))},[j("div",{ref_key:"thumb",ref:i,class:B(y(r).e("thumb")),style:tt(v.value),onMousedown:g},null,38)],34),[[ln,e.always||s.value]])]),_:1},8,["name"]))}}),YO=Eve,kve=ye({__name:"bar",props:Cve,setup(e,{expose:t}){const n=e,r=Ge(dM),a=H(0),i=H(0),o=H(""),s=H(""),l=H(1),u=H(1);return t({handleScroll:f=>{if(f){const h=f.offsetHeight-4,v=f.offsetWidth-4;i.value=f.scrollTop*100/h*l.value,a.value=f.scrollLeft*100/v*u.value}},update:()=>{const f=r==null?void 0:r.wrapElement;if(!f)return;const h=f.offsetHeight-4,v=f.offsetWidth-4,p=h**2/f.scrollHeight,g=v**2/f.scrollWidth,m=Math.max(p,n.minSize),b=Math.max(g,n.minSize);l.value=p/(h-p)/(m/(h-m)),u.value=g/(v-g)/(b/(v-b)),s.value=m+4(L(),K(ze,null,[V(YO,{move:a.value,ratio:u.value,size:o.value,always:e.always},null,8,["move","ratio","size","always"]),V(YO,{move:i.value,ratio:l.value,size:s.value,vertical:"",always:e.always},null,8,["move","ratio","size","always"])],64))}}),Ave=kve;const Ive=["tabindex"],Ex="ElScrollbar";var Mve=ye({name:Ex,__name:"scrollbar",props:wve,emits:mm,setup(e,{expose:t,emit:n}){const r=e,a=n,i=Ee("scrollbar");let o,s,l,u=0,c=0,d="";const f={bottom:!1,top:!1,right:!1,left:!1},h=H(),v=H(),p=H(),g=H(),m=M(()=>{const I={},P=ur(r.height),R=ur(r.maxHeight);return P&&(I.height=P),R&&(I.maxHeight=R),[r.wrapStyle,I]}),b=M(()=>[r.wrapClass,i.e("wrap"),{[i.em("wrap","hidden-default")]:!r.native}]),_=M(()=>[i.e("view"),r.viewClass]),w=I=>f[I]??!1,S={top:"bottom",bottom:"top",left:"right",right:"left"},x=I=>{const P=S[d];if(!P)return;const R=I[d],O=I[P];R&&!f[d]&&(f[d]=!0),!O&&f[P]&&(f[P]=!1)},C=()=>{var I;if(v.value){(I=g.value)==null||I.handleScroll(v.value);const P=u,R=c;u=v.value.scrollTop,c=v.value.scrollLeft;const O={bottom:!Gs(v.value.scrollHeight-r.distance,v.value.clientHeight+u),top:u<=r.distance&&P!==0,right:!Gs(v.value.scrollWidth-r.distance,v.value.clientWidth+c)&&R!==c,left:c<=r.distance&&R!==0};if(a("scroll",{scrollTop:u,scrollLeft:c}),P!==u&&(d=u>P?"bottom":"top"),R!==c&&(d=c>R?"right":"left"),r.distance>0){if(w(d))return;x(O)}O[d]&&a("end-reached",d)}};function T(I,P){yt(I)?v.value.scrollTo(I):Je(I)&&Je(P)&&v.value.scrollTo(I,P)}const E=I=>{if(!Je(I)){wn(Ex,"value must be a number");return}v.value.scrollTop=I},k=I=>{if(!Je(I)){wn(Ex,"value must be a number");return}v.value.scrollLeft=I},A=()=>{var I,P;(I=g.value)==null||I.update(),f[d]=!1,v.value&&((P=g.value)==null||P.handleScroll(v.value))};return _e(()=>r.noresize,I=>{I?(o==null||o(),s==null||s(),l==null||l()):({stop:o}=Kn(p,A),{stop:s}=Kn(v,A),l=gn("resize",A))},{immediate:!0}),_e(()=>[r.maxHeight,r.height],()=>{r.native||Ue(()=>{A()})}),Ft(dM,Qt({scrollbarElement:h,wrapElement:v})),cy(()=>{v.value&&(v.value.scrollTop=u,v.value.scrollLeft=c)}),St(()=>{r.native||Ue(()=>{A()})}),is(()=>A()),t({wrapRef:v,update:A,scrollTo:T,setScrollTop:E,setScrollLeft:k,handleScroll:C}),(I,P)=>(L(),K("div",{ref_key:"scrollbarRef",ref:h,class:B(y(i).b())},[j("div",{ref_key:"wrapRef",ref:v,class:B(b.value),style:tt(m.value),tabindex:e.tabindex,onScroll:C},[(L(),ve(Et(e.tag),{id:e.id,ref_key:"resizeRef",ref:p,class:B(_.value),style:tt(e.viewStyle),role:e.role,"aria-label":e.ariaLabel,"aria-orientation":e.ariaOrientation},{default:G(()=>[he(I.$slots,"default")]),_:3},8,["id","class","style","role","aria-label","aria-orientation"]))],46,Ive),e.native?fe("v-if",!0):(L(),ve(Ave,{key:0,ref_key:"barRef",ref:g,always:e.always,"min-size":e.minSize},null,8,["always","min-size"]))],2))}}),Pve=Mve;const ts=xt(Pve),Lve=["aria-expanded","aria-owns"],Dve={key:0},Rve=["id","aria-selected","onClick"],jO="ElAutocomplete";var Ove=ye({name:jO,inheritAttrs:!1,__name:"autocomplete",props:bve,emits:_ve,setup(e,{expose:t,emit:n}){const r=e,a=n,i=M(()=>{const J=va.props??[];return Ul(r,Me(J)?J:Object.keys(J))}),o=iu(),s=ar(),l=Ee("autocomplete"),u=H(),c=H(),d=H(),f=H();let h=!1,v=!1;const p=H([]),g=H(-1),m=H(""),b=H(!1),_=H(!1),w=H(!1),S=ba(),x=M(()=>o.style),C=M(()=>(p.value.length>0||w.value)&&b.value),T=M(()=>!r.hideLoading&&w.value),E=M(()=>u.value?Array.from(u.value.$el.querySelectorAll("input")):[]),k=()=>{C.value&&(m.value=`${u.value.$el.offsetWidth}px`)},A=()=>{g.value=-1},I=async J=>{if(_.value)return;const Z=U=>{w.value=!1,!_.value&&(Me(U)?(p.value=U,g.value=r.highlightFirstItem?0:-1):nr(jO,"autocomplete suggestions must be an array"))};if(w.value=!0,Me(r.fetchSuggestions))Z(r.fetchSuggestions);else{const U=await r.fetchSuggestions(J,Z);Me(U)&&Z(U)}},P=by(I,M(()=>r.debounce)),R=J=>{const Z=!!J;if(a(Mr,J),a(mt,J),_.value=!1,b.value||(b.value=Z),!r.triggerOnFocus&&!J){_.value=!0,p.value=[];return}P(J)},O=J=>{var Z;s.value||(((Z=J.target)==null?void 0:Z.tagName)!=="INPUT"||E.value.includes(document.activeElement))&&(b.value=!0)},$=J=>{a(Vt,J)},N=J=>{if(v)v=!1;else{b.value=!0,a("focus",J);const Z=r.modelValue??"";r.triggerOnFocus&&!h&&P(String(Z))}},D=J=>{setTimeout(()=>{var Z;if((Z=d.value)!=null&&Z.isFocusInsideContent()){v=!0;return}b.value&&Y(),a("blur",J)})},F=()=>{b.value=!1,a(mt,""),a("clear")},W=async()=>{var J;(J=u.value)!=null&&J.isComposing||(C.value&&g.value>=0&&g.value{C.value&&(J.preventDefault(),J.stopPropagation(),Y())},Y=()=>{b.value=!1},q=()=>{var J;(J=u.value)==null||J.focus()},re=()=>{var J;(J=u.value)==null||J.blur()},ee=async J=>{a(Mr,J[r.valueKey]),a(mt,J[r.valueKey]),a("select",J),p.value=[],g.value=-1},se=J=>{var me,Pe;if(!C.value||w.value)return;if(J<0){if(!r.loopNavigation){g.value=-1;return}J=p.value.length-1}J>=p.value.length&&(J=r.loopNavigation?0:p.value.length-1);const[Z,U]=ne(),te=U[J],Q=Z.scrollTop,{offsetTop:ue,scrollHeight:pe}=te;ue+pe>Q+Z.clientHeight&&(Z.scrollTop=ue+pe-Z.clientHeight),ue{const J=c.value.querySelector(`.${l.be("suggestion","wrap")}`);return[J,J.querySelectorAll(`.${l.be("suggestion","list")} li`)]},de=OI(f,J=>{var U;if((U=d.value)!=null&&U.isFocusInsideContent())return;const Z=v;v=!1,C.value&&(Z?D(new FocusEvent("blur",J)):Y())}),le=J=>{switch(Mn(J)){case De.up:J.preventDefault(),se(g.value-1);break;case De.down:J.preventDefault(),se(g.value+1);break;case De.enter:case De.numpadEnter:J.preventDefault(),W();break;case De.tab:Y();break;case De.esc:z(J);break;case De.home:J.preventDefault(),se(0);break;case De.end:J.preventDefault(),se(p.value.length-1);break;case De.pageUp:J.preventDefault(),se(Math.max(0,g.value-10));break;case De.pageDown:J.preventDefault(),se(Math.min(p.value.length-1,g.value+10));break}};return yn(()=>{de==null||de()}),St(()=>{var Z;const J=(Z=u.value)==null?void 0:Z.ref;J&&([{key:"role",value:"textbox"},{key:"aria-autocomplete",value:"list"},{key:"aria-controls",value:S.value},{key:"aria-activedescendant",value:`${S.value}-item-${g.value}`}].forEach(({key:U,value:te})=>J.setAttribute(U,te)),h=J.hasAttribute("readonly"))}),t({highlightedIndex:g,activated:b,loading:w,inputRef:u,popperRef:d,suggestions:p,handleSelect:ee,handleKeyEnter:W,focus:q,blur:re,close:Y,highlight:se,getData:I}),(J,Z)=>(L(),ve(y(ua),{ref_key:"popperRef",ref:d,visible:C.value,placement:e.placement,"fallback-placements":["bottom-start","top-start"],"popper-class":[y(l).e("popper"),e.popperClass],"popper-style":e.popperStyle,"popper-options":e.popperOptions,"show-arrow":e.showArrow,teleported:e.teleported,"append-to":e.appendTo,"gpu-acceleration":!1,pure:"","manual-mode":"",effect:"light",trigger:"click",transition:`${y(l).namespace.value}-zoom-in-top`,persistent:"",role:"listbox",onBeforeShow:k,onHide:A},{content:G(()=>[j("div",{ref_key:"regionRef",ref:c,class:B([y(l).b("suggestion"),y(l).is("loading",T.value)]),style:tt({[e.fitInputWidth?"width":"minWidth"]:m.value,outline:"none"}),role:"region"},[J.$slots.header?(L(),K("div",{key:0,class:B(y(l).be("suggestion","header")),onClick:Z[0]||(Z[0]=ut(()=>{},["stop"]))},[he(J.$slots,"header")],2)):fe("v-if",!0),V(y(ts),{id:y(S),tag:"ul","wrap-class":y(l).be("suggestion","wrap"),"view-class":y(l).be("suggestion","list"),role:"listbox"},{default:G(()=>[T.value?(L(),K("li",Dve,[he(J.$slots,"loading",{},()=>[V(y(Ze),{class:B(y(l).is("loading"))},{default:G(()=>[V(y(es))]),_:1},8,["class"])])])):(L(!0),K(ze,{key:1},Lt(p.value,(U,te)=>(L(),K("li",{id:`${y(S)}-item-${te}`,key:te,class:B({highlighted:g.value===te}),role:"option","aria-selected":g.value===te,onClick:Q=>ee(U)},[he(J.$slots,"default",{item:U},()=>[Le(ce(U[e.valueKey]),1)])],10,Rve))),128))]),_:3},8,["id","wrap-class","view-class"]),J.$slots.footer?(L(),K("div",{key:1,class:B(y(l).be("suggestion","footer")),onClick:Z[1]||(Z[1]=ut(()=>{},["stop"]))},[he(J.$slots,"footer")],2)):fe("v-if",!0)],6)]),default:G(()=>[j("div",{ref_key:"listboxRef",ref:f,class:B([y(l).b(),J.$attrs.class]),style:tt(x.value),role:"combobox","aria-haspopup":"listbox","aria-expanded":C.value,"aria-owns":y(S)},[V(y(va),Mt({ref_key:"inputRef",ref:u},Mt(i.value,J.$attrs),{"model-value":e.modelValue,disabled:y(s),onInput:R,onChange:$,onFocus:N,onBlur:D,onClear:F,onKeydown:le,onMousedown:O}),ui({_:2},[J.$slots.prepend?{name:"prepend",fn:G(()=>[he(J.$slots,"prepend")]),key:"0"}:void 0,J.$slots.append?{name:"append",fn:G(()=>[he(J.$slots,"append")]),key:"1"}:void 0,J.$slots.prefix?{name:"prefix",fn:G(()=>[he(J.$slots,"prefix")]),key:"2"}:void 0,J.$slots.suffix?{name:"suffix",fn:G(()=>[he(J.$slots,"suffix")]),key:"3"}:void 0]),1040,["model-value","disabled"])],14,Lve)]),_:3},8,["visible","placement","popper-class","popper-style","popper-options","show-arrow","teleported","append-to","transition"]))}}),Nve=Ove;const Vve=xt(Nve),$ve=Oe({size:{type:[Number,String],values:ss,validator:e=>Je(e)},shape:{type:String,values:["circle","square"]},icon:{type:An},src:{type:String,default:""},alt:String,srcSet:String,fit:{type:oe(String),default:"cover"}}),Bve={error:e=>e instanceof Event},xG=Symbol("avatarGroupContextKey"),Fve={size:{type:oe([Number,String]),values:ss,validator:e=>Je(e)},shape:{type:oe(String),values:["circle","square"]},collapseAvatars:Boolean,collapseAvatarsTooltip:Boolean,maxCollapseAvatars:{type:Number,default:1},effect:{type:oe(String),default:"light"},placement:{type:oe(String),values:ol,default:"top"},popperClass:Tn.popperClass,popperStyle:Tn.popperStyle,collapseClass:String,collapseStyle:{type:oe([String,Array,Object,Boolean]),default:void 0}},zve=["src","alt","srcset"];var Hve=ye({name:"ElAvatar",__name:"avatar",props:$ve,emits:Bve,setup(e,{emit:t}){const n=e,r=t,a=Ge(xG,void 0),i=Ee("avatar"),o=H(!1),s=M(()=>n.size??(a==null?void 0:a.size)),l=M(()=>n.shape??(a==null?void 0:a.shape)??"circle"),u=M(()=>{const{icon:h}=n,v=[i.b()];return qe(s.value)&&v.push(i.m(s.value)),h&&v.push(i.m("icon")),l.value&&v.push(i.m(l.value)),v}),c=M(()=>Je(s.value)?i.cssVarBlock({size:ur(s.value)}):void 0),d=M(()=>({objectFit:n.fit}));_e(()=>[n.src,n.srcSet],()=>o.value=!1);function f(h){o.value=!0,r("error",h)}return(h,v)=>(L(),K("span",{class:B(u.value),style:tt(c.value)},[(e.src||e.srcSet)&&!o.value?(L(),K("img",{key:0,src:e.src,alt:e.alt,srcset:e.srcSet,style:tt(d.value),onError:f},null,44,zve)):e.icon?(L(),ve(y(Ze),{key:1},{default:G(()=>[(L(),ve(Et(e.icon)))]),_:1})):he(h.$slots,"default",{key:2})],6))}}),CG=Hve,TG=ye({name:"ElAvatarGroup",props:Fve,setup(e,{slots:t}){const n=Ee("avatar-group");return Ft(xG,Qt({size:xn(e,"size"),shape:xn(e,"shape")})),()=>{var i;const r=Fi(((i=t.default)==null?void 0:i.call(t))??[]);let a=r;if(e.collapseAvatars&&r.length>e.maxCollapseAvatars){a=r.slice(0,e.maxCollapseAvatars);const o=r.slice(e.maxCollapseAvatars);a.push(V(ua,{popperClass:e.popperClass,popperStyle:e.popperStyle,placement:e.placement,effect:e.effect,disabled:!e.collapseAvatarsTooltip},{default:()=>V(CG,{size:e.size,shape:e.shape,class:e.collapseClass,style:e.collapseStyle},{default:()=>[Le("+ "),o.length]}),content:()=>V("div",{class:n.e("collapse-avatars")},[o.map((s,l)=>Vn(s)?js(s,{key:s.key??l}):s)])}))}return V("div",{class:n.b()},[a])}}});const Wve=xt(CG,{AvatarGroup:TG}),Gve=rr(TG),Uve={visibilityHeight:{type:Number,default:200},target:{type:String,default:""},right:{type:Number,default:40},bottom:{type:Number,default:40}},Kve={click:e=>e instanceof MouseEvent},Yve=(e,t,n)=>{const r=Ut(),a=Ut(),i=H(!1),o=()=>{r.value&&(i.value=r.value.scrollTop>=e.visibilityHeight)},s=l=>{var u;(u=r.value)==null||u.scrollTo({top:0,behavior:"smooth"}),t("click",l)};return gn(a,"scroll",dW(o,300,!0)),St(()=>{a.value=document,r.value=document.documentElement,e.target&&(r.value=document.querySelector(e.target)??void 0,r.value||nr(n,`target does not exist: ${e.target}`),a.value=r.value),o()}),{visible:i,handleClick:s}},qO="ElBacktop";var jve=ye({name:qO,__name:"backtop",props:Uve,emits:Kve,setup(e,{emit:t}){const n=e,r=t,a=Ee("backtop"),{handleClick:i,visible:o}=Yve(n,r,qO),s=M(()=>({right:`${n.right}px`,bottom:`${n.bottom}px`}));return(l,u)=>(L(),ve(ya,{name:`${y(a).namespace.value}-fade-in`},{default:G(()=>[y(o)?(L(),K("div",{key:0,style:tt(s.value),class:B(y(a).b()),onClick:u[0]||(u[0]=ut((...c)=>y(i)&&y(i)(...c),["stop"]))},[he(l.$slots,"default",{},()=>[V(y(Ze),{class:B(y(a).e("icon"))},{default:G(()=>[V(y(sde))]),_:1},8,["class"])])],6)):fe("v-if",!0)]),_:3},8,["name"]))}}),qve=jve;const Xve=xt(qve),Zve=Oe({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String,badgeStyle:{type:oe([String,Object,Array,Boolean]),default:void 0},offset:{type:oe(Array),default:()=>[0,0]},badgeClass:{type:String}});var Jve=ye({name:"ElBadge",__name:"badge",props:Zve,setup(e,{expose:t}){const n=e,r=Ee("badge"),a=M(()=>n.isDot?"":Je(n.value)&&Je(n.max)?n.max[{backgroundColor:n.color,marginRight:ur(-n.offset[0]),marginTop:ur(n.offset[1])},n.badgeStyle??{}]);return t({content:a}),(o,s)=>(L(),K("div",{class:B(y(r).b())},[he(o.$slots,"default"),V(ya,{name:`${y(r).namespace.value}-zoom-in-center`},{default:G(()=>[!e.hidden&&(a.value||e.isDot||o.$slots.content)?(L(),K("sup",{key:0,class:B([y(r).e("content"),y(r).em("content",e.type),y(r).is("fixed",!!o.$slots.default),y(r).is("dot",e.isDot),y(r).is("hide-zero",!e.showZero&&e.value===0),e.badgeClass]),style:tt(i.value)},[he(o.$slots,"content",{value:a.value},()=>[Le(ce(a.value),1)])],6)):fe("v-if",!0)]),_:3},8,["name"])],2))}}),Qve=Jve;const EG=xt(Qve),epe=Oe({separator:{type:String,default:"/"},separatorIcon:{type:An}}),kG=Symbol("breadcrumbKey"),tpe=Oe({to:{type:oe([String,Object]),default:""},replace:Boolean}),npe=["aria-label"];var rpe=ye({name:"ElBreadcrumb",__name:"breadcrumb",props:epe,setup(e){const{t}=Yt(),n=e,r=Ee("breadcrumb"),a=H();return Ft(kG,n),St(()=>{const i=a.value.querySelectorAll(`.${r.e("item")}`);i.length&&i[i.length-1].setAttribute("aria-current","page")}),(i,o)=>(L(),K("div",{ref_key:"breadcrumb",ref:a,class:B(y(r).b()),"aria-label":y(t)("el.breadcrumb.label"),role:"navigation"},[he(i.$slots,"default")],10,npe))}}),ape=rpe,ipe=ye({name:"ElBreadcrumbItem",__name:"breadcrumb-item",props:tpe,setup(e){const t=e,n=Tt(),r=Ge(kG,void 0),a=Ee("breadcrumb"),i=n.appContext.config.globalProperties.$router,o=()=>{!t.to||!i||(t.replace?i.replace(t.to):i.push(t.to))};return(s,l)=>{var u,c;return L(),K("span",{class:B(y(a).e("item"))},[j("span",{class:B([y(a).e("inner"),y(a).is("link",!!e.to)]),role:"link",onClick:o},[he(s.$slots,"default")],2),(u=y(r))!=null&&u.separatorIcon?(L(),ve(y(Ze),{key:0,class:B(y(a).e("separator"))},{default:G(()=>[(L(),ve(Et(y(r).separatorIcon)))]),_:1},8,["class"])):(L(),K("span",{key:1,class:B(y(a).e("separator")),role:"presentation"},ce((c=y(r))==null?void 0:c.separator),3))],2)}}}),AG=ipe;const ope=xt(ape,{BreadcrumbItem:AG}),spe=rr(AG),sE=["default","primary","success","warning","info","danger","text",""],lpe=["button","submit","reset"],lE=Oe({size:$r,disabled:{type:Boolean,default:void 0},type:{type:String,values:sE,default:""},icon:{type:An},nativeType:{type:String,values:lpe,default:"button"},loading:Boolean,loadingIcon:{type:An,default:()=>es},plain:{type:Boolean,default:void 0},text:{type:Boolean,default:void 0},link:Boolean,bg:Boolean,autofocus:Boolean,round:{type:Boolean,default:void 0},circle:Boolean,dashed:{type:Boolean,default:void 0},color:String,dark:Boolean,autoInsertSpace:{type:Boolean,default:void 0},tag:{type:oe([String,Object]),default:"button"}}),upe={click:e=>e instanceof MouseEvent},IG=Symbol(),G1=H();function cu(e,t=void 0){const n=Tt()?Ge(IG,G1):G1;return e?M(()=>{var r;return((r=n.value)==null?void 0:r[e])??t}):n}function Xw(e,t){const n=cu(),r=Ee(e,M(()=>{var s;return((s=n.value)==null?void 0:s.namespace)||"el"})),a=Yt(M(()=>{var s;return(s=n.value)==null?void 0:s.locale})),i=Cy(M(()=>{var l;const s=(l=n.value)==null?void 0:l.zIndex;return wr(s)||Number.isNaN(s)?$W:s})),o=M(()=>{var s;return y(t)||((s=n.value)==null?void 0:s.size)||""});return fM(M(()=>y(n)||{})),{ns:r,locale:a,zIndex:i,size:o}}const fM=(e,t,n=!1)=>{const r=!!Tt(),a=r?cu():void 0,i=(t==null?void 0:t.provide)??(r?Ft:void 0);if(!i){wn("provideGlobalConfig","provideGlobalConfig() can only be used inside setup().");return}const o=M(()=>{const s=y(e);return a!=null&&a.value?cpe(a.value,s):s});return i(IG,o),i(bW,M(()=>o.value.locale)),i(_W,M(()=>o.value.namespace)),i(BW,M(()=>o.value.zIndex)),i(JW,{size:M(()=>o.value.size||"")}),i(eG,M(()=>({emptyValues:o.value.emptyValues,valueOnClear:o.value.valueOnClear}))),(n||!G1.value)&&(G1.value=o.value),o},cpe=(e,t)=>{const n=[...new Set([...dm(e),...dm(t)])],r={};for(const a of n)r[a]=t[a]!==void 0?t[a]:e[a];return r},dpe=Oe({a11y:{type:Boolean,default:!0},locale:{type:oe(Object)},size:$r,button:{type:oe(Object)},card:{type:oe(Object)},dialog:{type:oe(Object)},link:{type:oe(Object)},experimentalFeatures:{type:oe(Object)},keyboardNavigation:{type:Boolean,default:!0},message:{type:oe(Object)},zIndex:Number,namespace:{type:String,default:"el"},table:{type:oe(Object)},...Rf}),Na={placement:"top"},fpe=ye({name:"ElConfigProvider",props:dpe,setup(e,{slots:t}){const n=fM(e);return _e(()=>e.message,r=>{var a;Object.assign(Na,((a=n==null?void 0:n.value)==null?void 0:a.message)??{},r??{})},{immediate:!0,deep:!0}),()=>he(t,"default",{config:n==null?void 0:n.value})}}),hpe=xt(fpe),MG=Symbol("buttonGroupContextKey"),vpe=(e,t)=>{Bs({from:"type.text",replacement:"link",version:"3.0.0",scope:"props",ref:"https://element-plus.org/en-US/component/button.html#button-attributes"},M(()=>e.type==="text"));const n=Ge(MG,void 0),r=cu("button"),{form:a}=ea(),i=Rr(M(()=>n==null?void 0:n.size)),o=ar(),s=H(),l=pr(),u=M(()=>{var b;return e.type||(n==null?void 0:n.type)||((b=r.value)==null?void 0:b.type)||""}),c=M(()=>{var b;return e.autoInsertSpace??((b=r.value)==null?void 0:b.autoInsertSpace)??!1}),d=M(()=>{var b;return e.plain??((b=r.value)==null?void 0:b.plain)??!1}),f=M(()=>{var b;return e.round??((b=r.value)==null?void 0:b.round)??!1}),h=M(()=>{var b;return e.text??((b=r.value)==null?void 0:b.text)??!1}),v=M(()=>{var b;return e.dashed??((b=r.value)==null?void 0:b.dashed)??!1}),p=M(()=>e.tag==="button"?{ariaDisabled:o.value||e.loading,disabled:o.value||e.loading,autofocus:e.autofocus,type:e.nativeType}:{}),g=M(()=>{var _;const b=(_=l.default)==null?void 0:_.call(l);if(c.value&&(b==null?void 0:b.length)===1){const w=b[0];if((w==null?void 0:w.type)===Mf){const S=w.children;return new RegExp("^\\p{Unified_Ideograph}{2}$","u").test(S.trim())}}return!1});return{_disabled:o,_size:i,_type:u,_ref:s,_props:p,_plain:d,_round:f,_text:h,_dashed:v,shouldAddSpace:g,handleClick:b=>{if(o.value||e.loading){b.stopPropagation();return}e.nativeType==="reset"&&(a==null||a.resetFields()),t("click",b)}}};function Ca(e,t){ppe(e)&&(e="100%");const n=gpe(e);return e=t===360?e:Math.min(t,Math.max(0,parseFloat(e))),n&&(e=parseInt(String(e*t),10)/100),Math.abs(e-t)<1e-6?1:(t===360?e=(e<0?e%t+t:e%t)/parseFloat(String(t)):e=e%t/parseFloat(String(t)),e)}function S0(e){return Math.min(1,Math.max(0,e))}function ppe(e){return typeof e=="string"&&e.indexOf(".")!==-1&&parseFloat(e)===1}function gpe(e){return typeof e=="string"&&e.indexOf("%")!==-1}function PG(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function x0(e){return Number(e)<=1?`${Number(e)*100}%`:e}function Ld(e){return e.length===1?"0"+e:String(e)}function mpe(e,t,n){return{r:Ca(e,255)*255,g:Ca(t,255)*255,b:Ca(n,255)*255}}function XO(e,t,n){e=Ca(e,255),t=Ca(t,255),n=Ca(n,255);const r=Math.max(e,t,n),a=Math.min(e,t,n);let i=0,o=0;const s=(r+a)/2;if(r===a)o=0,i=0;else{const l=r-a;switch(o=s>.5?l/(2-r-a):l/(r+a),r){case e:i=(t-n)/l+(t1&&(n-=1),n<1/6?e+(t-e)*(6*n):n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function ype(e,t,n){let r,a,i;if(e=Ca(e,360),t=Ca(t,100),n=Ca(n,100),t===0)a=n,i=n,r=n;else{const o=n<.5?n*(1+t):n+t-n*t,s=2*n-o;r=kx(s,o,e+1/3),a=kx(s,o,e),i=kx(s,o,e-1/3)}return{r:r*255,g:a*255,b:i*255}}function ZO(e,t,n){e=Ca(e,255),t=Ca(t,255),n=Ca(n,255);const r=Math.max(e,t,n),a=Math.min(e,t,n);let i=0;const o=r,s=r-a,l=r===0?0:s/r;if(r===a)i=0;else{switch(r){case e:i=(t-n)/s+(t>16,g:(e&65280)>>8,b:e&255}}const uE={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function Cpe(e){let t={r:0,g:0,b:0},n=1,r=null,a=null,i=null,o=!1,s=!1;return typeof e=="string"&&(e=kpe(e)),typeof e=="object"&&(Ri(e.r)&&Ri(e.g)&&Ri(e.b)?(t=mpe(e.r,e.g,e.b),o=!0,s=String(e.r).substr(-1)==="%"?"prgb":"rgb"):Ri(e.h)&&Ri(e.s)&&Ri(e.v)?(r=x0(e.s),a=x0(e.v),t=bpe(e.h,r,a),o=!0,s="hsv"):Ri(e.h)&&Ri(e.s)&&Ri(e.l)?(r=x0(e.s),i=x0(e.l),t=ype(e.h,r,i),o=!0,s="hsl"):Ri(e.c)&&Ri(e.m)&&Ri(e.y)&&Ri(e.k)&&(t=wpe(e.c,e.m,e.y,e.k),o=!0,s="cmyk"),Object.prototype.hasOwnProperty.call(e,"a")&&(n=e.a)),n=PG(n),{ok:o,format:e.format||s,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:n}}const Tpe="[-\\+]?\\d+%?",Epe="[-\\+]?\\d*\\.\\d+%?",ju="(?:"+Epe+")|(?:"+Tpe+")",Ax="[\\s|\\(]+("+ju+")[,|\\s]+("+ju+")[,|\\s]+("+ju+")\\s*\\)?",C0="[\\s|\\(]+("+ju+")[,|\\s]+("+ju+")[,|\\s]+("+ju+")[,|\\s]+("+ju+")\\s*\\)?",ro={CSS_UNIT:new RegExp(ju),rgb:new RegExp("rgb"+Ax),rgba:new RegExp("rgba"+C0),hsl:new RegExp("hsl"+Ax),hsla:new RegExp("hsla"+C0),hsv:new RegExp("hsv"+Ax),hsva:new RegExp("hsva"+C0),cmyk:new RegExp("cmyk"+C0),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function kpe(e){if(e=e.trim().toLowerCase(),e.length===0)return!1;let t=!1;if(uE[e])e=uE[e],t=!0;else if(e==="transparent")return{r:0,g:0,b:0,a:0,format:"name"};let n=ro.rgb.exec(e);return n?{r:n[1],g:n[2],b:n[3]}:(n=ro.rgba.exec(e),n?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=ro.hsl.exec(e),n?{h:n[1],s:n[2],l:n[3]}:(n=ro.hsla.exec(e),n?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=ro.hsv.exec(e),n?{h:n[1],s:n[2],v:n[3]}:(n=ro.hsva.exec(e),n?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=ro.cmyk.exec(e),n?{c:n[1],m:n[2],y:n[3],k:n[4]}:(n=ro.hex8.exec(e),n?{r:Ni(n[1]),g:Ni(n[2]),b:Ni(n[3]),a:eN(n[4]),format:t?"name":"hex8"}:(n=ro.hex6.exec(e),n?{r:Ni(n[1]),g:Ni(n[2]),b:Ni(n[3]),format:t?"name":"hex"}:(n=ro.hex4.exec(e),n?{r:Ni(n[1]+n[1]),g:Ni(n[2]+n[2]),b:Ni(n[3]+n[3]),a:eN(n[4]+n[4]),format:t?"name":"hex8"}:(n=ro.hex3.exec(e),n?{r:Ni(n[1]+n[1]),g:Ni(n[2]+n[2]),b:Ni(n[3]+n[3]),format:t?"name":"hex"}:!1))))))))))}function Ri(e){return typeof e=="number"?!Number.isNaN(e):ro.CSS_UNIT.test(e)}class mr{constructor(t="",n={}){if(t instanceof mr)return t;typeof t=="number"&&(t=xpe(t)),this.originalInput=t;const r=Cpe(t);this.originalInput=t,this.r=r.r,this.g=r.g,this.b=r.b,this.a=r.a,this.roundA=Math.round(100*this.a)/100,this.format=n.format??r.format,this.gradientType=n.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=r.ok}isDark(){return this.getBrightness()<128}isLight(){return!this.isDark()}getBrightness(){const t=this.toRgb();return(t.r*299+t.g*587+t.b*114)/1e3}getLuminance(){const t=this.toRgb();let n,r,a;const i=t.r/255,o=t.g/255,s=t.b/255;return i<=.03928?n=i/12.92:n=Math.pow((i+.055)/1.055,2.4),o<=.03928?r=o/12.92:r=Math.pow((o+.055)/1.055,2.4),s<=.03928?a=s/12.92:a=Math.pow((s+.055)/1.055,2.4),.2126*n+.7152*r+.0722*a}getAlpha(){return this.a}setAlpha(t){return this.a=PG(t),this.roundA=Math.round(100*this.a)/100,this}isMonochrome(){const{s:t}=this.toHsl();return t===0}toHsv(){const t=ZO(this.r,this.g,this.b);return{h:t.h*360,s:t.s,v:t.v,a:this.a}}toHsvString(){const t=ZO(this.r,this.g,this.b),n=Math.round(t.h*360),r=Math.round(t.s*100),a=Math.round(t.v*100);return this.a===1?`hsv(${n}, ${r}%, ${a}%)`:`hsva(${n}, ${r}%, ${a}%, ${this.roundA})`}toHsl(){const t=XO(this.r,this.g,this.b);return{h:t.h*360,s:t.s,l:t.l,a:this.a}}toHslString(){const t=XO(this.r,this.g,this.b),n=Math.round(t.h*360),r=Math.round(t.s*100),a=Math.round(t.l*100);return this.a===1?`hsl(${n}, ${r}%, ${a}%)`:`hsla(${n}, ${r}%, ${a}%, ${this.roundA})`}toHex(t=!1){return JO(this.r,this.g,this.b,t)}toHexString(t=!1){return"#"+this.toHex(t)}toHex8(t=!1){return _pe(this.r,this.g,this.b,this.a,t)}toHex8String(t=!1){return"#"+this.toHex8(t)}toHexShortString(t=!1){return this.a===1?this.toHexString(t):this.toHex8String(t)}toRgb(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}}toRgbString(){const t=Math.round(this.r),n=Math.round(this.g),r=Math.round(this.b);return this.a===1?`rgb(${t}, ${n}, ${r})`:`rgba(${t}, ${n}, ${r}, ${this.roundA})`}toPercentageRgb(){const t=n=>`${Math.round(Ca(n,255)*100)}%`;return{r:t(this.r),g:t(this.g),b:t(this.b),a:this.a}}toPercentageRgbString(){const t=n=>Math.round(Ca(n,255)*100);return this.a===1?`rgb(${t(this.r)}%, ${t(this.g)}%, ${t(this.b)}%)`:`rgba(${t(this.r)}%, ${t(this.g)}%, ${t(this.b)}%, ${this.roundA})`}toCmyk(){return{...QO(this.r,this.g,this.b)}}toCmykString(){const{c:t,m:n,y:r,k:a}=QO(this.r,this.g,this.b);return`cmyk(${t}, ${n}, ${r}, ${a})`}toName(){if(this.a===0)return"transparent";if(this.a<1)return!1;const t="#"+JO(this.r,this.g,this.b,!1);for(const[n,r]of Object.entries(uE))if(t===r)return n;return!1}toString(t){const n=!!t;t=t??this.format;let r=!1;const a=this.a<1&&this.a>=0;return!n&&a&&(t.startsWith("hex")||t==="name")?t==="name"&&this.a===0?this.toName():this.toRgbString():(t==="rgb"&&(r=this.toRgbString()),t==="prgb"&&(r=this.toPercentageRgbString()),(t==="hex"||t==="hex6")&&(r=this.toHexString()),t==="hex3"&&(r=this.toHexString(!0)),t==="hex4"&&(r=this.toHex8String(!0)),t==="hex8"&&(r=this.toHex8String()),t==="name"&&(r=this.toName()),t==="hsl"&&(r=this.toHslString()),t==="hsv"&&(r=this.toHsvString()),t==="cmyk"&&(r=this.toCmykString()),r||this.toHexString())}toNumber(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)}clone(){return new mr(this.toString())}lighten(t=10){const n=this.toHsl();return n.l+=t/100,n.l=S0(n.l),new mr(n)}brighten(t=10){const n=this.toRgb();return n.r=Math.max(0,Math.min(255,n.r-Math.round(255*-(t/100)))),n.g=Math.max(0,Math.min(255,n.g-Math.round(255*-(t/100)))),n.b=Math.max(0,Math.min(255,n.b-Math.round(255*-(t/100)))),new mr(n)}darken(t=10){const n=this.toHsl();return n.l-=t/100,n.l=S0(n.l),new mr(n)}tint(t=10){return this.mix("white",t)}shade(t=10){return this.mix("black",t)}desaturate(t=10){const n=this.toHsl();return n.s-=t/100,n.s=S0(n.s),new mr(n)}saturate(t=10){const n=this.toHsl();return n.s+=t/100,n.s=S0(n.s),new mr(n)}greyscale(){return this.desaturate(100)}spin(t){const n=this.toHsl(),r=(n.h+t)%360;return n.h=r<0?360+r:r,new mr(n)}mix(t,n=50){const r=this.toRgb(),a=new mr(t).toRgb(),i=n/100,o={r:(a.r-r.r)*i+r.r,g:(a.g-r.g)*i+r.g,b:(a.b-r.b)*i+r.b,a:(a.a-r.a)*i+r.a};return new mr(o)}analogous(t=6,n=30){const r=this.toHsl(),a=360/n,i=[this];for(r.h=(r.h-(a*t>>1)+720)%360;--t;)r.h=(r.h+a)%360,i.push(new mr(r));return i}complement(){const t=this.toHsl();return t.h=(t.h+180)%360,new mr(t)}monochromatic(t=6){const n=this.toHsv(),{h:r}=n,{s:a}=n;let{v:i}=n;const o=[],s=1/t;for(;t--;)o.push(new mr({h:r,s:a,v:i})),i=(i+s)%1;return o}splitcomplement(){const t=this.toHsl(),{h:n}=t;return[this,new mr({h:(n+72)%360,s:t.s,l:t.l}),new mr({h:(n+216)%360,s:t.s,l:t.l})]}onBackground(t){const n=this.toRgb(),r=new mr(t).toRgb(),a=n.a+r.a*(1-n.a);return new mr({r:(n.r*n.a+r.r*r.a*(1-n.a))/a,g:(n.g*n.a+r.g*r.a*(1-n.a))/a,b:(n.b*n.a+r.b*r.a*(1-n.a))/a,a})}triad(){return this.polyad(3)}tetrad(){return this.polyad(4)}polyad(t){const n=this.toHsl(),{h:r}=n,a=[this],i=360/t;for(let o=1;o{let r={},a=e.color;if(a){const i=a.match(/var\((.*?)\)/);i&&(a=window.getComputedStyle(window.document.documentElement).getPropertyValue(i[1]));const o=new mr(a),s=e.dark?o.tint(20).toString():ps(o,20);if(e.plain)r=n.cssVarBlock({"bg-color":e.dark?ps(o,90):o.tint(90).toString(),"text-color":a,"border-color":e.dark?ps(o,50):o.tint(50).toString(),"hover-text-color":`var(${n.cssVarName("color-white")})`,"hover-bg-color":a,"hover-border-color":a,"active-bg-color":s,"active-text-color":`var(${n.cssVarName("color-white")})`,"active-border-color":s}),t.value&&(r[n.cssVarBlockName("disabled-bg-color")]=e.dark?ps(o,90):o.tint(90).toString(),r[n.cssVarBlockName("disabled-text-color")]=e.dark?ps(o,50):o.tint(50).toString(),r[n.cssVarBlockName("disabled-border-color")]=e.dark?ps(o,80):o.tint(80).toString());else if(e.link||e.text){const l=e.dark?ps(o,30):o.tint(30).toString();if(r=n.cssVarBlock({"text-color":a,"hover-text-color":l,"active-text-color":s}),e.link&&(r[n.cssVarBlockName("hover-link-text-color")]=l,r[n.cssVarBlockName("active-color")]=s),t.value){const u=e.dark?ps(o,50):o.tint(50).toString();r[n.cssVarBlockName("disabled-bg-color")]="transparent",r[n.cssVarBlockName("disabled-text-color")]=u,r[n.cssVarBlockName("disabled-border-color")]="transparent"}}else{const l=e.dark?ps(o,30):o.tint(30).toString(),u=o.isDark()?`var(${n.cssVarName("color-white")})`:`var(${n.cssVarName("color-black")})`;if(r=n.cssVarBlock({"bg-color":a,"text-color":u,"border-color":a,"hover-bg-color":l,"hover-text-color":u,"hover-border-color":l,"active-bg-color":s,"active-border-color":s}),t.value){const c=e.dark?ps(o,50):o.tint(50).toString();r[n.cssVarBlockName("disabled-bg-color")]=c,r[n.cssVarBlockName("disabled-text-color")]=e.dark?"rgba(255, 255, 255, 0.5)":`var(${n.cssVarName("color-white")})`,r[n.cssVarBlockName("disabled-border-color")]=c}}}return r})}var Ipe=ye({name:"ElButton",__name:"button",props:lE,emits:upe,setup(e,{expose:t,emit:n}){const r=e,a=n,i=Ape(r),o=Ee("button"),{_ref:s,_size:l,_type:u,_disabled:c,_props:d,_plain:f,_round:h,_text:v,_dashed:p,shouldAddSpace:g,handleClick:m}=vpe(r,a),b=M(()=>[o.b(),o.m(u.value),o.m(l.value),o.is("disabled",c.value),o.is("loading",r.loading),o.is("plain",f.value),o.is("round",h.value),o.is("circle",r.circle),o.is("text",v.value),o.is("dashed",p.value),o.is("link",r.link),o.is("has-bg",r.bg)]);return t({ref:s,size:l,type:u,disabled:c,shouldAddSpace:g}),(_,w)=>(L(),ve(Et(e.tag),Mt({ref_key:"_ref",ref:s},y(d),{class:b.value,style:y(i),onClick:y(m)}),{default:G(()=>[e.loading?(L(),K(ze,{key:0},[_.$slots.loading?he(_.$slots,"loading",{key:0}):(L(),ve(y(Ze),{key:1,class:B(y(o).is("loading"))},{default:G(()=>[(L(),ve(Et(e.loadingIcon)))]),_:1},8,["class"]))],64)):e.icon||_.$slots.icon?(L(),ve(y(Ze),{key:1},{default:G(()=>[e.icon?(L(),ve(Et(e.icon),{key:0})):he(_.$slots,"icon",{key:1})]),_:3})):fe("v-if",!0),_.$slots.default?(L(),K("span",{key:2,class:B({[y(o).em("text","expand")]:y(g)})},[he(_.$slots,"default")],2)):fe("v-if",!0)]),_:3},16,["class","style","onClick"]))}}),Mpe=Ipe;const Ppe={size:lE.size,type:lE.type,direction:{type:oe(String),values:["horizontal","vertical"],default:"horizontal"}};var Lpe=ye({name:"ElButtonGroup",__name:"button-group",props:Ppe,setup(e){const t=e;Ft(MG,Qt({size:xn(t,"size"),type:xn(t,"type")}));const n=Ee("button");return(r,a)=>(L(),K("div",{class:B([y(n).b("group"),y(n).bm("group",t.direction)])},[he(r.$slots,"default")],2))}}),LG=Lpe;const Xr=xt(Mpe,{ButtonGroup:LG}),DG=rr(LG),Dpe=e=>Me(e)&&e.length===2&&e.every(t=>dc(t)),Rpe=Oe({modelValue:{type:Date},range:{type:oe(Array),validator:Dpe},controllerType:{type:String,values:["button","select"],default:"button"},formatter:{type:oe(Function)}}),Ope={[mt]:e=>dc(e),[Mr]:e=>dc(e)},tN=["hours","minutes","seconds"],cl="EP_PICKER_BASE",hM="ElPopperOptions",RG=Symbol("commonPickerContextKey"),nN="HH:mm:ss",Th="YYYY-MM-DD",Npe={date:Th,dates:Th,week:"gggg[w]ww",year:"YYYY",years:"YYYY",month:"YYYY-MM",months:"YYYY-MM",datetime:`${Th} ${nN}`,monthrange:"YYYY-MM",yearrange:"YYYY",daterange:Th,datetimerange:`${Th} ${nN}`};var du=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function fu(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var OG={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(du,function(){var n=1e3,r=6e4,a=36e5,i="millisecond",o="second",s="minute",l="hour",u="day",c="week",d="month",f="quarter",h="year",v="date",p="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,m=/\[([^\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,b={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(R){var O=["th","st","nd","rd"],$=R%100;return"["+R+(O[($-20)%10]||O[$]||O[0])+"]"}},_=function(R,O,$){var N=String(R);return!N||N.length>=O?R:""+Array(O+1-N.length).join($)+R},w={s:_,z:function(R){var O=-R.utcOffset(),$=Math.abs(O),N=Math.floor($/60),D=$%60;return(O<=0?"+":"-")+_(N,2,"0")+":"+_(D,2,"0")},m:function R(O,$){if(O.date()<$.date())return-R($,O);var N=12*($.year()-O.year())+($.month()-O.month()),D=O.clone().add(N,d),F=$-D<0,W=O.clone().add(N+(F?-1:1),d);return+(-(N+($-D)/(F?D-W:W-D))||0)},a:function(R){return R<0?Math.ceil(R)||0:Math.floor(R)},p:function(R){return{M:d,y:h,w:c,d:u,D:v,h:l,m:s,s:o,ms:i,Q:f}[R]||String(R||"").toLowerCase().replace(/s$/,"")},u:function(R){return R===void 0}},S="en",x={};x[S]=b;var C="$isDayjsObject",T=function(R){return R instanceof I||!(!R||!R[C])},E=function R(O,$,N){var D;if(!O)return S;if(typeof O=="string"){var F=O.toLowerCase();x[F]&&(D=F),$&&(x[F]=$,D=F);var W=O.split("-");if(!D&&W.length>1)return R(W[0])}else{var z=O.name;x[z]=O,D=z}return!N&&D&&(S=D),D||!N&&S},k=function(R,O){if(T(R))return R.clone();var $=typeof O=="object"?O:{};return $.date=R,$.args=arguments,new I($)},A=w;A.l=E,A.i=T,A.w=function(R,O){return k(R,{locale:O.$L,utc:O.$u,x:O.$x,$offset:O.$offset})};var I=function(){function R($){this.$L=E($.locale,null,!0),this.parse($),this.$x=this.$x||$.x||{},this[C]=!0}var O=R.prototype;return O.parse=function($){this.$d=function(N){var D=N.date,F=N.utc;if(D===null)return new Date(NaN);if(A.u(D))return new Date;if(D instanceof Date)return new Date(D);if(typeof D=="string"&&!/Z$/i.test(D)){var W=D.match(g);if(W){var z=W[2]-1||0,Y=(W[7]||"0").substring(0,3);return F?new Date(Date.UTC(W[1],z,W[3]||1,W[4]||0,W[5]||0,W[6]||0,Y)):new Date(W[1],z,W[3]||1,W[4]||0,W[5]||0,W[6]||0,Y)}}return new Date(D)}($),this.init()},O.init=function(){var $=this.$d;this.$y=$.getFullYear(),this.$M=$.getMonth(),this.$D=$.getDate(),this.$W=$.getDay(),this.$H=$.getHours(),this.$m=$.getMinutes(),this.$s=$.getSeconds(),this.$ms=$.getMilliseconds()},O.$utils=function(){return A},O.isValid=function(){return this.$d.toString()!==p},O.isSame=function($,N){var D=k($);return this.startOf(N)<=D&&D<=this.endOf(N)},O.isAfter=function($,N){return k($)[e>0?e-1:void 0,e,eArray.from(Array.from({length:e}).keys()),NG=e=>e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim(),VG=e=>e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g,"").trim(),rN=function(e,t){const n=dc(e),r=dc(t);return n&&r?e.getTime()===t.getTime():!n&&!r?e===t:!1},$G=function(e,t){const n=Me(e),r=Me(t);return n&&r?e.length!==t.length?!1:e.every((a,i)=>rN(a,t[i])):!n&&!r?rN(e,t):!1},aN=function(e,t,n){const r=oi(t)||t==="x"?_t(e).locale(n):_t(e,t).locale(n);return r.isValid()?r:void 0},iN=function(e,t,n){return oi(t)?e:t==="x"?+e:_t(e).locale(n).format(t)},Mx=(e,t)=>{const n=[],r=t==null?void 0:t();for(let a=0;aMe(e)?e.map(t=>t.toDate()):e.toDate(),vM=Oe({disabledHours:{type:oe(Function)},disabledMinutes:{type:oe(Function)},disabledSeconds:{type:oe(Function)}}),BG=Oe({visible:Boolean,actualVisible:{type:Boolean,default:void 0},format:{type:String,default:""}}),pM=Oe({automaticDropdown:{type:Boolean,default:!0},id:{type:oe([Array,String])},name:{type:oe([Array,String])},popperClass:Tn.popperClass,popperStyle:Tn.popperStyle,format:String,valueFormat:String,dateFormat:String,timeFormat:String,type:{type:String,default:""},clearable:{type:Boolean,default:!0},clearIcon:{type:oe([String,Object]),default:ul},editable:{type:Boolean,default:!0},saveOnBlur:{type:Boolean,default:!0},prefixIcon:{type:oe([String,Object]),default:""},size:$r,readonly:Boolean,disabled:{type:Boolean,default:void 0},placeholder:{type:String,default:""},popperOptions:{type:oe(Object),default:()=>({})},modelValue:{type:oe([Date,Array,String,Number]),default:""},rangeSeparator:{type:String,default:"-"},startPlaceholder:String,endPlaceholder:String,defaultValue:{type:oe([Date,Array])},defaultTime:{type:oe([Date,Array])},isRange:Boolean,...vM,disabledDate:{type:Function},cellClassName:{type:Function},shortcuts:{type:Array,default:()=>[]},arrowControl:Boolean,tabindex:{type:oe([String,Number]),default:0},validateEvent:{type:Boolean,default:!0},unlinkPanels:Boolean,singlePanel:Boolean,placement:{type:oe(String),values:ol,default:"bottom"},fallbackPlacements:{type:oe(Array),default:["bottom","top","right","left"]},...Rf,...ja(["ariaLabel"]),showNow:{type:Boolean,default:!0},showConfirm:{type:Boolean,default:!0},showFooter:{type:Boolean,default:!0},showWeekNumber:Boolean}),$pe=Oe({id:{type:oe(Array)},name:{type:oe(Array)},modelValue:{type:oe([Array,String])},startPlaceholder:String,endPlaceholder:String,disabled:Boolean}),FG=(e,t)=>{const{lang:n}=Yt(),r=H(!1),a=H(!1),i=H(null),o=M(()=>{const{modelValue:v}=e;return!v||Me(v)&&!v.filter(Boolean).length}),s=v=>{if(!$G(e.modelValue,v)){let p;Me(v)?p=v.map(g=>iN(g,e.valueFormat,n.value)):v&&(p=iN(v,e.valueFormat,n.value)),t(mt,v&&p,n.value)}},l=M(()=>{let v;if(o.value?u.value.getDefaultValue&&(v=u.value.getDefaultValue()):Me(e.modelValue)?v=e.modelValue.map(p=>aN(p,e.valueFormat,n.value)):v=aN(e.modelValue??"",e.valueFormat,n.value),u.value.getRangeAvailableTime){const p=u.value.getRangeAvailableTime(v);or(p,v)||(v=p,o.value||s(Wb(v)))}return Me(v)&&v.some(p=>!p)&&(v=[]),v}),u=H({});return{parsedValue:l,pickerActualVisible:a,pickerOptions:u,pickerVisible:r,userInput:i,valueIsEmpty:o,emitInput:s,onCalendarChange:v=>{t("calendar-change",v)},onPanelChange:(v,p,g)=>{t("panel-change",v,p,g)},onPick:(v="",p=!1)=>{r.value=p;let g;Me(v)?g=v.map(m=>m.toDate()):g=v&&v.toDate(),i.value=null,s(g)},onSetPickerOption:v=>{u.value[v[0]]=v[1],u.value.panelReady=!0}}},Bpe=["id","name","placeholder","value","disabled"],Fpe=["id","name","placeholder","value","disabled"];var zpe=ye({name:"PickerRangeTrigger",inheritAttrs:!1,__name:"picker-range-trigger",props:$pe,emits:["mouseenter","mouseleave","click","touchstart","focus","blur","startInput","endInput","startChange","endChange"],setup(e,{expose:t,emit:n}){const r=e,a=n,{formItem:i}=ea(),{inputId:o}=Di(Qt({id:M(()=>{var T;return(T=r.id)==null?void 0:T[0]})}),{formItemContext:i}),s=Ow(),l=Ee("date"),u=Ee("range"),c=H(),d=H(),{wrapperRef:f,isFocused:h}=uu(c,{disabled:M(()=>r.disabled)}),v=T=>{a("click",T)},p=T=>{a("mouseenter",T)},g=T=>{a("mouseleave",T)},m=T=>{a("touchstart",T)},b=T=>{a("startInput",T)},_=T=>{a("endInput",T)},w=T=>{a("startChange",T)},S=T=>{a("endChange",T)};return t({focus:()=>{var T;(T=c.value)==null||T.focus()},blur:()=>{var T,E;(T=c.value)==null||T.blur(),(E=d.value)==null||E.blur()}}),(T,E)=>(L(),K("div",{ref_key:"wrapperRef",ref:f,class:B([y(l).is("active",y(h)),T.$attrs.class]),style:tt(T.$attrs.style),onClick:v,onMouseenter:p,onMouseleave:g,onTouchstartPassive:m},[he(T.$slots,"prefix"),j("input",Mt(y(s),{id:y(o),ref_key:"inputRef",ref:c,name:T.name&&T.name[0],placeholder:T.startPlaceholder,value:T.modelValue&&T.modelValue[0],class:y(u).b("input"),disabled:T.disabled,onInput:b,onChange:w}),null,16,Bpe),he(T.$slots,"range-separator"),j("input",Mt(y(s),{id:T.id&&T.id[1],ref_key:"endInputRef",ref:d,name:T.name&&T.name[1],placeholder:T.endPlaceholder,value:T.modelValue&&T.modelValue[1],class:y(u).b("input"),disabled:T.disabled,onInput:_,onChange:S}),null,16,Fpe),he(T.$slots,"suffix")],38))}}),Hpe=zpe,Wpe=ye({name:"Picker",__name:"picker",props:pM,emits:[mt,Vt,"focus","blur","clear","calendar-change","panel-change","visible-change","keydown"],setup(e,{expose:t,emit:n}){const r=e,a=n,i=iu(),o=Ee("date"),s=Ee("input"),l=Ee("range"),{formItem:u}=ea(),c=Ge(hM,{}),d=Iy(r,null),f=H(),h=H(),v=H(null);let p=!1;const g=ar(),m=FG(r,a),{parsedValue:b,pickerActualVisible:_,userInput:w,pickerVisible:S,pickerOptions:x,valueIsEmpty:C,emitInput:T,onPick:E,onSetPickerOption:k,onCalendarChange:A,onPanelChange:I}=m,{isFocused:P,handleFocus:R,handleBlur:O}=uu(h,{disabled:g,beforeFocus(){return r.readonly},afterFocus(){r.automaticDropdown&&(S.value=!0)},beforeBlur(Te){var Qe;return!p&&((Qe=f.value)==null?void 0:Qe.isFocusInsideContent(Te))},afterBlur(){var Te,Qe;J.value&&!r.saveOnBlur?C.value||(Qe=(Te=x.value).handleCancel)==null||Qe.call(Te):Re(),S.value=!1,p=!1,r.validateEvent&&(u==null||u.validate("blur").catch(It))}}),$=H(!1),N=M(()=>[o.b("editor"),o.bm("editor",r.type),s.e("wrapper"),o.is("disabled",g.value),o.is("active",S.value),l.b("editor"),ge?l.bm("editor",ge.value):"",i.class]),D=M(()=>[s.e("icon"),l.e("close-icon"),ue.value?"":l.em("close-icon","hidden")]);_e(S,Te=>{Te?Ue(()=>{Te&&(v.value=r.modelValue)}):(w.value=null,Ue(()=>{F(r.modelValue)}))});const F=(Te,Qe)=>{(Qe||!$G(Te,v.value))&&(a(Vt,Te),Qe&&(v.value=Te),r.validateEvent&&(u==null||u.validate("change").catch(It)))},W=Te=>{a("keydown",Te)},z=M(()=>h.value?Array.from(h.value.$el.querySelectorAll("input")):[]),Y=(Te,Qe,jt)=>{const Xe=z.value;Xe.length&&(!jt||jt==="min"?(Xe[0].setSelectionRange(Te,Qe),Xe[0].focus()):jt==="max"&&(Xe[1].setSelectionRange(Te,Qe),Xe[1].focus()))},q=()=>{_.value=!0},re=()=>{a("visible-change",!0)},ee=()=>{_.value=!1,S.value=!1,a("visible-change",!1)},se=()=>{S.value=!0},ne=()=>{S.value=!1},de=M(()=>{const Te=Ae(b.value);return Me(w.value)?[w.value[0]??(Te&&Te[0])??"",w.value[1]??(Te&&Te[1])??""]:w.value!==null?w.value:J.value&&C.value&&!r.saveOnBlur||!J.value&&C.value||!S.value&&C.value?"":Te?Z.value||U.value||te.value?Te.join(", "):Te:""}),le=M(()=>r.type.includes("time")),J=M(()=>r.type.startsWith("time")),Z=M(()=>r.type==="dates"),U=M(()=>r.type==="months"),te=M(()=>r.type==="years"),Q=M(()=>r.prefixIcon||(le.value?aG:ade)),ue=M(()=>r.clearable&&!g.value&&!r.readonly&&!C.value&&($.value||P.value)),pe=Te=>{r.readonly||g.value||(ue.value&&(Te==null||Te.stopPropagation(),x.value.handleClear?x.value.handleClear():T(d.valueOnClear.value),F(d.valueOnClear.value,!0),ee()),a("clear"))},me=async Te=>{var Qe;r.readonly||g.value||(((Qe=Te.target)==null?void 0:Qe.tagName)!=="INPUT"||P.value||!r.automaticDropdown)&&(S.value=!0)},Pe=()=>{r.readonly||g.value||!C.value&&r.clearable&&($.value=!0)},Ne=()=>{$.value=!1},ie=Te=>{var Qe;r.readonly||g.value||(((Qe=Te.touches[0].target)==null?void 0:Qe.tagName)!=="INPUT"||P.value||!r.automaticDropdown)&&(S.value=!0)},ae=M(()=>r.type.includes("range")),ge=Rr(),be=M(()=>{var Te,Qe;return(Qe=(Te=y(f))==null?void 0:Te.popperRef)==null?void 0:Qe.contentRef}),$e=OI(h,Te=>{const Qe=y(be),jt=Lr(h);Qe&&(Te.target===Qe||Te.composedPath().includes(Qe))||Te.target===jt||jt&&Te.composedPath().includes(jt)||(S.value=!1)});yn(()=>{$e==null||$e()});const Re=()=>{if(J.value&&!r.saveOnBlur)return;const Te=Me(w.value)&&w.value.every(Qe=>Qe==="");if(w.value&&!Te){const Qe=Se(de.value);Qe&&(nt(Qe)&&T(Wb(Qe)),w.value=null)}(w.value===""||Te)&&(T(d.valueOnClear.value),F(d.valueOnClear.value,!0),w.value=null)},Se=Te=>Te?x.value.parseUserInput(Te):null,Ae=Te=>Te?Me(Te)?Te.map(Qe=>Qe.format(r.format)):Te.format(r.format):null,nt=Te=>x.value.isValidValue(Te),at=async Te=>{if(r.readonly||g.value)return;const Qe=Mn(Te);if(W(Te),Qe===De.esc){S.value===!0&&(S.value=!1,Te.preventDefault(),Te.stopPropagation());return}if(Qe===De.down&&(x.value.handleFocusPicker&&(Te.preventDefault(),Te.stopPropagation()),S.value===!1&&(S.value=!0,await Ue()),x.value.handleFocusPicker)){x.value.handleFocusPicker();return}if(Qe===De.tab){p=!0;return}if(Qe===De.enter||Qe===De.numpadEnter){S.value?(w.value===null||w.value===""||nt(Se(de.value)))&&(Re(),S.value=!1):S.value=!0,Te.preventDefault(),Te.stopPropagation();return}if(w.value){Te.stopPropagation();return}x.value.handleKeydownInput&&x.value.handleKeydownInput(Te)},zt=Te=>{w.value=Te,S.value||(S.value=!0)},on=Te=>{const Qe=Te.target;w.value?w.value=[Qe.value,w.value[1]]:w.value=[Qe.value,null]},Bt=Te=>{const Qe=Te.target;w.value?w.value=[w.value[0],Qe.value]:w.value=[null,Qe.value]},it=()=>{var Xe;const Te=w.value,Qe=Se(Te&&Te[0]),jt=y(b);if(Qe&&Qe.isValid()){w.value=[Ae(Qe),((Xe=de.value)==null?void 0:Xe[1])||null];const ft=[Qe,jt&&(jt[1]||null)];nt(ft)&&(T(Wb(ft)),w.value=null)}},At=()=>{var Xe;const Te=y(w),Qe=Se(Te&&Te[1]),jt=y(b);if(Qe&&Qe.isValid()){w.value=[((Xe=y(de))==null?void 0:Xe[0])||null,Ae(Qe)];const ft=[jt&&jt[0],Qe];nt(ft)&&(T(Wb(ft)),w.value=null)}},xe=()=>{var Te;(Te=h.value)==null||Te.focus()},rt=()=>{var Te;(Te=h.value)==null||Te.blur()};return Ft(cl,{props:r,emptyValues:d}),Ft(RG,m),t({focus:xe,blur:rt,handleOpen:se,handleClose:ne,onPick:E}),(Te,Qe)=>(L(),ve(y(ua),Mt({ref_key:"refPopper",ref:f,visible:y(S),effect:"light",pure:"",trigger:"click"},Te.$attrs,{role:"dialog",teleported:"",transition:`${y(o).namespace.value}-zoom-in-top`,"popper-class":[`${y(o).namespace.value}-picker__popper`,Te.popperClass],"popper-style":Te.popperStyle,"popper-options":y(c),"fallback-placements":Te.fallbackPlacements,"gpu-acceleration":!1,placement:Te.placement,"stop-popper-mouse-event":!1,"hide-after":0,persistent:"",onBeforeShow:q,onShow:re,onHide:ee}),{default:G(()=>[ae.value?(L(),ve(Hpe,{key:1,id:Te.id,ref_key:"inputRef",ref:h,"model-value":de.value,name:Te.name,disabled:y(g),readonly:!Te.editable||Te.readonly,"start-placeholder":Te.startPlaceholder,"end-placeholder":Te.endPlaceholder,class:B(N.value),style:tt(Te.$attrs.style),"aria-label":Te.ariaLabel,tabindex:Te.tabindex,autocomplete:"off",role:"combobox",onClick:me,onFocus:y(R),onBlur:y(O),onStartInput:on,onStartChange:it,onEndInput:Bt,onEndChange:At,onMousedown:me,onMouseenter:Pe,onMouseleave:Ne,onTouchstartPassive:ie,onKeydown:at},{prefix:G(()=>[Q.value?(L(),ve(y(Ze),{key:0,class:B([y(s).e("icon"),y(l).e("icon")])},{default:G(()=>[(L(),ve(Et(Q.value)))]),_:1},8,["class"])):fe("v-if",!0)]),"range-separator":G(()=>[he(Te.$slots,"range-separator",{},()=>[j("span",{class:B(y(l).b("separator"))},ce(Te.rangeSeparator),3)])]),suffix:G(()=>[Te.clearIcon?(L(),ve(y(Ze),{key:0,class:B(D.value),onMousedown:ut(y(It),["prevent"]),onClick:pe},{default:G(()=>[(L(),ve(Et(Te.clearIcon)))]),_:1},8,["class","onMousedown"])):fe("v-if",!0)]),_:3},8,["id","model-value","name","disabled","readonly","start-placeholder","end-placeholder","class","style","aria-label","tabindex","onFocus","onBlur"])):(L(),ve(y(va),{key:0,id:Te.id,ref_key:"inputRef",ref:h,"container-role":"combobox","model-value":de.value,name:Te.name,size:y(ge),disabled:y(g),placeholder:Te.placeholder,class:B([y(o).b("editor"),y(o).bm("editor",Te.type),y(o).is("focus",y(S)),Te.$attrs.class]),style:tt(Te.$attrs.style),readonly:!Te.editable||Te.readonly||Z.value||U.value||te.value||Te.type==="week","aria-label":Te.ariaLabel,tabindex:Te.tabindex,"validate-event":!1,onInput:zt,onFocus:y(R),onBlur:y(O),onKeydown:at,onChange:Re,onMousedown:me,onMouseenter:Pe,onMouseleave:Ne,onTouchstartPassive:ie,onClick:Qe[0]||(Qe[0]=ut(()=>{},["stop"]))},{prefix:G(()=>[Q.value?(L(),ve(y(Ze),{key:0,class:B(y(s).e("icon")),onMousedown:ut(me,["prevent"]),onTouchstartPassive:ie},{default:G(()=>[(L(),ve(Et(Q.value)))]),_:1},8,["class"])):fe("v-if",!0)]),suffix:G(()=>[ue.value&&Te.clearIcon?(L(),ve(y(Ze),{key:0,class:B(`${y(s).e("icon")} clear-icon`),onMousedown:ut(y(It),["prevent"]),onClick:pe},{default:G(()=>[(L(),ve(Et(Te.clearIcon)))]),_:1},8,["class","onMousedown"])):fe("v-if",!0)]),_:1},8,["id","model-value","name","size","disabled","placeholder","class","style","readonly","aria-label","tabindex","onFocus","onBlur"]))]),content:G(()=>[he(Te.$slots,"default",{visible:y(S),actualVisible:y(_),parsedValue:y(b),format:Te.format,dateFormat:Te.dateFormat,timeFormat:Te.timeFormat,unlinkPanels:Te.unlinkPanels,type:Te.type,defaultValue:Te.defaultValue,showNow:Te.showNow,showConfirm:Te.showConfirm,showFooter:Te.showFooter,showWeekNumber:Te.showWeekNumber,singlePanel:Te.singlePanel,onPick:Qe[1]||(Qe[1]=(...jt)=>y(E)&&y(E)(...jt)),onSelectRange:Y,onSetPickerOption:Qe[2]||(Qe[2]=(...jt)=>y(k)&&y(k)(...jt)),onCalendarChange:Qe[3]||(Qe[3]=(...jt)=>y(A)&&y(A)(...jt)),onClear:pe,onPanelChange:Qe[4]||(Qe[4]=(...jt)=>y(I)&&y(I)(...jt)),onMousedown:Qe[5]||(Qe[5]=ut(()=>{},["stop"]))})]),_:3},16,["visible","transition","popper-class","popper-style","popper-options","fallback-placements","placement"]))}}),zG=Wpe;const Nu=new Map;if(cn){let e;document.addEventListener("mousedown",t=>e=t),document.addEventListener("mouseup",t=>{if(e){for(const n of Nu.values())for(const{documentHandler:r}of n)r(t,e);e=void 0}})}function oN(e,t){let n=[];return Me(t.arg)?n=t.arg:ki(t.arg)&&n.push(t.arg),function(r,a){const i=t.instance.popperRef,o=r.target,s=a==null?void 0:a.target,l=!t||!t.instance,u=!o||!s,c=e.contains(o)||e.contains(s),d=e===o,f=n.length&&n.some(v=>v==null?void 0:v.contains(o))||n.length&&n.includes(s),h=i&&(i.contains(o)||i.contains(s));l||u||c||d||f||h||t.value(r,a)}}const yc={beforeMount(e,t){Nu.has(e)||Nu.set(e,[]),Nu.get(e).push({documentHandler:oN(e,t),bindingFn:t.value})},updated(e,t){Nu.has(e)||Nu.set(e,[]);const n=Nu.get(e),r=n.findIndex(i=>i.bindingFn===t.oldValue),a={documentHandler:oN(e,t),bindingFn:t.value};r>=0?n.splice(r,1,a):n.push(a)},unmounted(e){Nu.delete(e)}},T0="_RepeatClick",U1={beforeMount(e,t){const n=t.value,{interval:r=100,delay:a=600}=et(n)?{}:n;let i,o;const s=()=>et(n)?n():n.handler(),l=()=>{o&&(clearTimeout(o),o=void 0),i&&(clearInterval(i),i=void 0)},u=c=>{c.button===0&&(l(),s(),document.addEventListener("mouseup",l,{once:!0}),o=setTimeout(()=>{i=setInterval(()=>{s()},r)},a))};e[T0]={start:u,clear:l},e.addEventListener("mousedown",u)},unmounted(e){if(!e[T0])return;const{start:t,clear:n}=e[T0];t&&e.removeEventListener("mousedown",t),n&&(n(),document.removeEventListener("mouseup",n)),e[T0]=null}},cE="_trap-focus-children",Dd=[],sN=e=>{if(Dd.length===0)return;const t=Mn(e),n=Dd[Dd.length-1][cE];if(n.length>0&&t===De.tab){if(n.length===1){e.preventDefault(),document.activeElement!==n[0]&&n[0].focus();return}const r=e.shiftKey,a=e.target===n[0],i=e.target===n[n.length-1];a&&r&&(e.preventDefault(),n[n.length-1].focus()),i&&!r&&(e.preventDefault(),n[0].focus())}},Gpe={beforeMount(e){e[cE]=tO(e),Dd.push(e),Dd.length<=1&&document.addEventListener("keydown",sN)},updated(e){Ue(()=>{e[cE]=tO(e)})},unmounted(){Dd.shift(),Dd.length===0&&document.removeEventListener("keydown",sN)}};var lN=!1,Cd,dE,fE,Gb,Ub,HG,Kb,hE,vE,pE,WG,gE,mE,GG,UG;function yi(){if(!lN){lN=!0;var e=navigator.userAgent,t=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e),n=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(gE=/\b(iPhone|iP[ao]d)/.exec(e),mE=/\b(iP[ao]d)/.exec(e),pE=/Android/i.exec(e),GG=/FBAN\/\w+;/i.exec(e),UG=/Mobile/i.exec(e),WG=!!/Win64/.exec(e),t){Cd=t[1]?parseFloat(t[1]):t[5]?parseFloat(t[5]):NaN,Cd&&document&&document.documentMode&&(Cd=document.documentMode);var r=/(?:Trident\/(\d+.\d+))/.exec(e);HG=r?parseFloat(r[1])+4:Cd,dE=t[2]?parseFloat(t[2]):NaN,fE=t[3]?parseFloat(t[3]):NaN,Gb=t[4]?parseFloat(t[4]):NaN,Gb?(t=/(?:Chrome\/(\d+\.\d+))/.exec(e),Ub=t&&t[1]?parseFloat(t[1]):NaN):Ub=NaN}else Cd=dE=fE=Ub=Gb=NaN;if(n){if(n[1]){var a=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);Kb=a?parseFloat(a[1].replace("_",".")):!0}else Kb=!1;hE=!!n[2],vE=!!n[3]}else Kb=hE=vE=!1}}var yE={ie:function(){return yi()||Cd},ieCompatibilityMode:function(){return yi()||HG>Cd},ie64:function(){return yE.ie()&&WG},firefox:function(){return yi()||dE},opera:function(){return yi()||fE},webkit:function(){return yi()||Gb},safari:function(){return yE.webkit()},chrome:function(){return yi()||Ub},windows:function(){return yi()||hE},osx:function(){return yi()||Kb},linux:function(){return yi()||vE},iphone:function(){return yi()||gE},mobile:function(){return yi()||gE||mE||pE||UG},nativeApp:function(){return yi()||GG},android:function(){return yi()||pE},ipad:function(){return yi()||mE}},Upe=yE,Kpe=!!(typeof window<"u"&&window.document&&window.document.createElement),Ype={canUseDOM:Kpe},KG=Ype,YG;KG.canUseDOM&&(YG=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0);function jpe(e,t){if(!KG.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,r=n in document;if(!r){var a=document.createElement("div");a.setAttribute(n,"return;"),r=typeof a[n]=="function"}return!r&&YG&&e==="wheel"&&(r=document.implementation.hasFeature("Events.wheel","3.0")),r}var qpe=jpe,uN=10,cN=40,dN=800;function jG(e){var t=0,n=0,r=0,a=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=n,n=0),r=t*uN,a=n*uN,"deltaY"in e&&(a=e.deltaY),"deltaX"in e&&(r=e.deltaX),(r||a)&&e.deltaMode&&(e.deltaMode==1?(r*=cN,a*=cN):(r*=dN,a*=dN)),r&&!t&&(t=r<1?-1:1),a&&!n&&(n=a<1?-1:1),{spinX:t,spinY:n,pixelX:r,pixelY:a}}jG.getEventType=function(){return Upe.firefox()?"DOMMouseScroll":qpe("wheel")?"wheel":"mousewheel"};var Xpe=jG;/** +* Checks if an event is supported in the current execution environment. +* +* NOTE: This will not work correctly for non-generic events such as `change`, +* `reset`, `load`, `error`, and `select`. +* +* Borrows from Modernizr. +* +* @param {string} eventNameSuffix Event name, e.g. "click". +* @param {?boolean} capture Check if the capture phase is supported. +* @return {boolean} True if the event is supported. +* @internal +* @license Modernizr 3.0.0pre (Custom Build) | MIT +*/const bE="_Mousewheel",fN=function(e,t){if(e&&e.addEventListener){qG(e);const n=function(r){const a=Xpe(r);t&&Reflect.apply(t,this,[r,a])};e[bE]={wheelHandler:n},e.addEventListener("wheel",n,{passive:!0})}},qG=e=>{var t;(t=e._Mousewheel)!=null&&t.wheelHandler&&(e.removeEventListener("wheel",e[bE].wheelHandler),e[bE]=null)},hN={beforeMount(e,t){fN(e,t.value)},unmounted(e){qG(e)},updated(e,t){t.value!==t.oldValue&&fN(e,t.value)}},Zpe=Oe({...BG,datetimeRole:String,parsedValue:{type:oe(Object)}}),XG=({getAvailableHours:e,getAvailableMinutes:t,getAvailableSeconds:n})=>{const r=(o,s,l,u)=>{const c={hour:e,minute:t,second:n};let d=o;return["hour","minute","second"].forEach(f=>{if(c[f]){let h;const v=c[f];switch(f){case"minute":h=v(d.hour(),s,u);break;case"second":h=v(d.hour(),d.minute(),s,u);break;default:h=v(s,u);break}if(h!=null&&h.length&&!h.includes(d[f]())){const p=l?0:h.length-1;d=d[f](h[p])}}}),d},a={};return{timePickerOptions:a,getAvailableTime:r,onSetOption:([o,s])=>{a[o]=s}}},Px=e=>{const t=(r,a)=>r||a,n=r=>r!==!0;return e.map(t).filter(n)},ZG=(e,t,n)=>({getHoursList:(o,s)=>Mx(24,e&&(()=>e==null?void 0:e(o,s))),getMinutesList:(o,s,l)=>Mx(60,t&&(()=>t==null?void 0:t(o,s,l))),getSecondsList:(o,s,l,u)=>Mx(60,n&&(()=>n==null?void 0:n(o,s,l,u)))}),JG=(e,t,n)=>{const{getHoursList:r,getMinutesList:a,getSecondsList:i}=ZG(e,t,n);return{getAvailableHours:(u,c)=>Px(r(u,c)),getAvailableMinutes:(u,c,d)=>Px(a(u,c,d)),getAvailableSeconds:(u,c,d,f)=>Px(i(u,c,d,f))}},QG=(e,t)=>{const n=H(e.parsedValue);return _e(()=>e.visible,r=>{const a=Ir(t.modelValue),i=Ir(t.valueOnClear);if(r&&a===i){n.value=i;return}r||(n.value=e.parsedValue)}),n},Jpe=Oe({role:{type:String,required:!0},spinnerDate:{type:oe(Object),required:!0},showSeconds:{type:Boolean,default:!0},arrowControl:Boolean,amPmMode:{type:oe(String),default:""},...vM}),Qpe=["onClick"],ege=["onMouseenter"];var tge=ye({__name:"basic-time-spinner",props:Jpe,emits:[Vt,"select-range","set-option"],setup(e,{emit:t}){const n=e,{isRange:r,format:a,saveOnBlur:i}=Ge(cl).props,o=t,s=Ee("time"),{getHoursList:l,getMinutesList:u,getSecondsList:c}=ZG(n.disabledHours,n.disabledMinutes,n.disabledSeconds);let d=!1;const f={hours:!1,minutes:!1,seconds:!1},h=H(),v={hours:H(),minutes:H(),seconds:H()},p=M(()=>n.showSeconds?tN:tN.slice(0,2)),g=M(()=>{const{spinnerDate:z}=n;return{hours:z.hour(),minutes:z.minute(),seconds:z.second()}}),m=M(()=>{const{hours:z,minutes:Y}=y(g),{role:q,spinnerDate:re}=n,ee=r?void 0:re;return{hours:l(q,ee),minutes:u(z,q,ee),seconds:c(z,Y,q,ee)}}),b=M(()=>{const{hours:z,minutes:Y,seconds:q}=y(g);return{hours:Ix(z,23),minutes:Ix(Y,59),seconds:Ix(q,59)}}),_=Xs(z=>{d=!1,x(z)},200),w=z=>{if(!n.amPmMode)return"";const Y=n.amPmMode==="A";let q=z<12?" am":" pm";return Y&&(q=q.toUpperCase()),q},S=z=>{let Y=[0,0];const q=a||"HH:mm:ss",re=q.indexOf("HH"),ee=q.indexOf("mm"),se=q.indexOf("ss");switch(z){case"hours":re!==-1&&(Y=[re,re+2]);break;case"minutes":ee!==-1&&(Y=[ee,ee+2]);break;case"seconds":se!==-1&&(Y=[se,se+2]);break}const[ne,de]=Y;o("select-range",ne,de),h.value=z},x=z=>{E(z,y(g)[z])},C=()=>{x("hours"),x("minutes"),x("seconds")},T=z=>z.querySelector(`.${s.namespace.value}-scrollbar__wrap`),E=(z,Y)=>{if(n.arrowControl)return;const q=y(v[z]);q&&q.$el&&(i||(f[z]=!0,Pi(()=>{f[z]=!1})),T(q.$el).scrollTop=Math.max(0,Y*k(z)))},k=z=>{var q;const Y=(q=y(v[z]))==null?void 0:q.$el.querySelector("li");return Y&&Number.parseFloat(Il(Y,"height"))||0},A=()=>{P(1)},I=()=>{P(-1)},P=z=>{h.value||S("hours");const Y=h.value,q=y(g)[Y],re=R(Y,q,z,h.value==="hours"?24:60);O(Y,re),E(Y,re),Ue(()=>S(Y))},R=(z,Y,q,re)=>{let ee=(Y+q+re)%re;const se=y(m)[z];for(;se[ee]&&ee!==Y;)ee=(ee+q+re)%re;return ee},O=(z,Y)=>{if(y(m)[z][Y])return;const{hours:q,minutes:re,seconds:ee}=y(g);let se;switch(z){case"hours":se=n.spinnerDate.hour(Y).minute(re).second(ee);break;case"minutes":se=n.spinnerDate.hour(q).minute(Y).second(ee);break;case"seconds":se=n.spinnerDate.hour(q).minute(re).second(Y);break}o(Vt,se)},$=(z,{value:Y,disabled:q})=>{q||(O(z,Y),S(z),E(z,Y))},N=z=>{if(!i&&f[z])return;const Y=y(v[z]);Y&&(d=!0,_(z),O(z,Math.min(Math.round((T(Y.$el).scrollTop-(D(z)*.5-10)/k(z)+3)/k(z)),z==="hours"?23:59)))},D=z=>y(v[z]).$el.offsetHeight,F=()=>{const z=Y=>{const q=y(v[Y]);q&&q.$el&&(T(q.$el).onscroll=()=>{N(Y)})};z("hours"),z("minutes"),z("seconds")};St(()=>{Ue(()=>{!n.arrowControl&&F(),C(),n.role==="start"&&S("hours")})});const W=(z,Y)=>{v[Y].value=z??void 0};return o("set-option",[`${n.role}_scrollDown`,P]),o("set-option",[`${n.role}_emitSelectRange`,S]),_e(()=>n.spinnerDate,()=>{d||C()}),(z,Y)=>(L(),K("div",{class:B([y(s).b("spinner"),{"has-seconds":z.showSeconds}])},[z.arrowControl?fe("v-if",!0):(L(!0),K(ze,{key:0},Lt(p.value,q=>(L(),ve(y(ts),{key:q,ref_for:!0,ref:re=>W(re,q),class:B(y(s).be("spinner","wrapper")),"wrap-style":"max-height: inherit;","view-class":y(s).be("spinner","list"),noresize:"",tag:"ul",onMouseenter:re=>S(q),onMousemove:re=>x(q)},{default:G(()=>[(L(!0),K(ze,null,Lt(m.value[q],(re,ee)=>(L(),K("li",{key:ee,class:B([y(s).be("spinner","item"),y(s).is("active",ee===g.value[q]),y(s).is("disabled",re)]),onClick:se=>$(q,{value:ee,disabled:re})},[q==="hours"?(L(),K(ze,{key:0},[Le(ce(("0"+(z.amPmMode?ee%12||12:ee)).slice(-2))+ce(w(ee)),1)],64)):(L(),K(ze,{key:1},[Le(ce(("0"+ee).slice(-2)),1)],64))],10,Qpe))),128))]),_:2},1032,["class","view-class","onMouseenter","onMousemove"]))),128)),z.arrowControl?(L(!0),K(ze,{key:1},Lt(p.value,q=>(L(),K("div",{key:q,class:B([y(s).be("spinner","wrapper"),y(s).is("arrow")]),onMouseenter:re=>S(q)},[gt((L(),ve(y(Ze),{class:B(["arrow-up",y(s).be("spinner","arrow")])},{default:G(()=>[V(y(Kw))]),_:1},8,["class"])),[[y(U1),I]]),gt((L(),ve(y(Ze),{class:B(["arrow-down",y(s).be("spinner","arrow")])},{default:G(()=>[V(y(ll))]),_:1},8,["class"])),[[y(U1),A]]),j("ul",{class:B(y(s).be("spinner","list"))},[(L(!0),K(ze,null,Lt(b.value[q],(re,ee)=>(L(),K("li",{key:ee,class:B([y(s).be("spinner","item"),y(s).is("active",re===g.value[q]),y(s).is("disabled",m.value[q][re])])},[y(Je)(re)?(L(),K(ze,{key:0},[q==="hours"?(L(),K(ze,{key:0},[Le(ce(("0"+(z.amPmMode?re%12||12:re)).slice(-2))+ce(w(re)),1)],64)):(L(),K(ze,{key:1},[Le(ce(("0"+re).slice(-2)),1)],64))],64)):fe("v-if",!0)],2))),128))],2)],42,ege))),128)):fe("v-if",!0)],2))}}),_E=tge,nge=ye({__name:"panel-time-pick",props:Zpe,emits:["pick","select-range","set-picker-option"],setup(e,{emit:t}){const n=e,r=t,a=Ge(cl),{arrowControl:i,disabledHours:o,disabledMinutes:s,disabledSeconds:l,defaultValue:u}=a.props,{getAvailableHours:c,getAvailableMinutes:d,getAvailableSeconds:f}=JG(o,s,l),h=Ee("time"),{t:v,lang:p}=Yt(),g=H([0,2]),m=QG(n,{modelValue:M(()=>a.props.modelValue),valueOnClear:M(()=>a!=null&&a.emptyValues?a.emptyValues.valueOnClear.value:null)}),b=M(()=>qt(n.actualVisible)?`${h.namespace.value}-zoom-in-top`:""),_=M(()=>n.format.includes("ss")),w=M(()=>n.format.includes("A")?"A":n.format.includes("a")?"a":""),S=D=>{const F=_t(D).locale(p.value),W=O(F);return F.isSame(W)},x=()=>{const D=m.value;r("pick",D,!1),Ue(()=>{m.value=D})},C=(D=!1,F=!1)=>{F||r("pick",n.parsedValue,D)},T=D=>{n.visible&&r("pick",O(D).millisecond(0),!0)},E=(D,F)=>{r("select-range",D,F),g.value=[D,F]},k=D=>{const F=n.format,W=F.indexOf("HH"),z=F.indexOf("mm"),Y=F.indexOf("ss"),q=[],re=[];W!==-1&&(q.push(W),re.push("hours")),z!==-1&&(q.push(z),re.push("minutes")),Y!==-1&&_.value&&(q.push(Y),re.push("seconds"));const ee=(q.indexOf(g.value[0])+D+q.length)%q.length;I.start_emitSelectRange(re[ee])},A=D=>{const F=Mn(D),{left:W,right:z,up:Y,down:q}=De;if([W,z].includes(F)){k(F===W?-1:1),D.preventDefault();return}if([Y,q].includes(F)){const re=F===Y?-1:1;I.start_scrollDown(re),D.preventDefault();return}},{timePickerOptions:I,onSetOption:P,getAvailableTime:R}=XG({getAvailableHours:c,getAvailableMinutes:d,getAvailableSeconds:f}),O=D=>R(D,n.datetimeRole||"",!0),$=D=>D?_t(D,n.format).locale(p.value):null,N=()=>_t(u).locale(p.value);return r("set-picker-option",["isValidValue",S]),r("set-picker-option",["parseUserInput",$]),r("set-picker-option",["handleKeydownInput",A]),r("set-picker-option",["getRangeAvailableTime",O]),r("set-picker-option",["getDefaultValue",N]),r("set-picker-option",["handleCancel",x]),(D,F)=>(L(),ve(ya,{name:b.value},{default:G(()=>[D.actualVisible||D.visible?(L(),K("div",{key:0,class:B(y(h).b("panel"))},[j("div",{class:B([y(h).be("panel","content"),{"has-seconds":_.value}])},[V(_E,{ref:"spinner",role:D.datetimeRole||"start","arrow-control":y(i),"show-seconds":_.value,"am-pm-mode":w.value,"spinner-date":D.parsedValue,"disabled-hours":y(o),"disabled-minutes":y(s),"disabled-seconds":y(l),onChange:T,onSetOption:y(P),onSelectRange:E},null,8,["role","arrow-control","show-seconds","am-pm-mode","spinner-date","disabled-hours","disabled-minutes","disabled-seconds","onSetOption"])],2),j("div",{class:B(y(h).be("panel","footer"))},[j("button",{type:"button",class:B([y(h).be("panel","btn"),"cancel"]),onClick:x},ce(y(v)("el.datepicker.cancel")),3),j("button",{type:"button",class:B([y(h).be("panel","btn"),"confirm"]),onClick:F[0]||(F[0]=W=>C())},ce(y(v)("el.datepicker.confirm")),3)],2)],2)):fe("v-if",!0)]),_:1},8,["name"]))}}),K1=nge;const rge=Oe({...BG,parsedValue:{type:oe(Array)}}),age=["disabled"];var ige=ye({__name:"panel-time-range",props:rge,emits:["pick","select-range","set-picker-option"],setup(e,{emit:t}){const n=e,r=t,a=(Z,U)=>{const te=[];for(let Q=Z;Q<=U;Q++)te.push(Q);return te},{t:i,lang:o}=Yt(),s=Ee("time"),l=Ee("picker"),u=Ge(cl),{arrowControl:c,disabledHours:d,disabledMinutes:f,disabledSeconds:h,defaultValue:v}=u.props,p=M(()=>[s.be("range-picker","body"),s.be("panel","content"),s.is("arrow",c),S.value?"has-seconds":""]),g=M(()=>[s.be("range-picker","body"),s.be("panel","content"),s.is("arrow",c),S.value?"has-seconds":""]),m=M(()=>n.parsedValue[0]),b=M(()=>n.parsedValue[1]),_=QG(n,{modelValue:M(()=>u.props.modelValue),valueOnClear:M(()=>u!=null&&u.emptyValues?u.emptyValues.valueOnClear.value:null)}),w=()=>{const Z=_.value;r("pick",Z,!1),Ue(()=>{_.value=Z})},S=M(()=>n.format.includes("ss")),x=M(()=>n.format.includes("A")?"A":n.format.includes("a")?"a":""),C=(Z=!1)=>{r("pick",[m.value,b.value],Z)},T=Z=>{A(Z.millisecond(0),b.value)},E=Z=>{A(m.value,Z.millisecond(0))},k=Z=>{const U=Z.map(Q=>_t(Q).locale(o.value)),te=Y(U);return U[0].isSame(te[0])&&U[1].isSame(te[1])},A=(Z,U)=>{n.visible&&r("pick",[Z,U],!0)},I=M(()=>m.value>b.value),P=H([0,2]),R=(Z,U)=>{r("select-range",Z,U,"min"),P.value=[Z,U]},O=M(()=>S.value?11:8),$=(Z,U)=>{r("select-range",Z,U,"max");const te=y(O);P.value=[Z+te,U+te]},N=Z=>{const U=S.value?[0,3,6,11,14,17]:[0,3,8,11],te=["hours","minutes"].concat(S.value?["seconds"]:[]),Q=(U.indexOf(P.value[0])+Z+U.length)%U.length,ue=U.length/2;Q{const U=Mn(Z),{left:te,right:Q,up:ue,down:pe}=De;if([te,Q].includes(U)){N(U===te?-1:1),Z.preventDefault();return}if([ue,pe].includes(U)){const me=U===ue?-1:1;se[`${P.value[0]{const te=d?d(Z):[],Q=Z==="start",ue=(U||(Q?b.value:m.value)).hour();return gx(te,Q?a(ue+1,23):a(0,ue-1))},W=(Z,U,te)=>{const Q=f?f(Z,U):[],ue=U==="start",pe=te||(ue?b.value:m.value);if(Z!==pe.hour())return Q;const me=pe.minute();return gx(Q,ue?a(me+1,59):a(0,me-1))},z=(Z,U,te,Q)=>{const ue=h?h(Z,U,te):[],pe=te==="start",me=Q||(pe?b.value:m.value),Pe=me.hour(),Ne=me.minute();if(Z!==Pe||U!==Ne)return ue;const ie=me.second();return gx(ue,pe?a(ie+1,59):a(0,ie-1))},Y=([Z,U])=>[ne(Z,"start",!0,U),ne(U,"end",!1,Z)],{getAvailableHours:q,getAvailableMinutes:re,getAvailableSeconds:ee}=JG(F,W,z),{timePickerOptions:se,getAvailableTime:ne,onSetOption:de}=XG({getAvailableHours:q,getAvailableMinutes:re,getAvailableSeconds:ee}),le=Z=>Z?Me(Z)?Z.map(U=>_t(U,n.format).locale(o.value)):_t(Z,n.format).locale(o.value):null,J=()=>{if(Me(v))return v.map(U=>_t(U).locale(o.value));const Z=_t(v).locale(o.value);return[Z,Z.add(60,"m")]};return r("set-picker-option",["parseUserInput",le]),r("set-picker-option",["isValidValue",k]),r("set-picker-option",["handleKeydownInput",D]),r("set-picker-option",["getDefaultValue",J]),r("set-picker-option",["getRangeAvailableTime",Y]),r("set-picker-option",["handleCancel",w]),(Z,U)=>Z.actualVisible?(L(),K("div",{key:0,class:B([y(s).b("range-picker"),y(l).b("panel")])},[j("div",{class:B(y(s).be("range-picker","content"))},[j("div",{class:B(y(s).be("range-picker","cell"))},[j("div",{class:B(y(s).be("range-picker","header"))},ce(y(i)("el.datepicker.startTime")),3),j("div",{class:B(p.value)},[V(_E,{ref:"minSpinner",role:"start","show-seconds":S.value,"am-pm-mode":x.value,"arrow-control":y(c),"spinner-date":m.value,"disabled-hours":F,"disabled-minutes":W,"disabled-seconds":z,onChange:T,onSetOption:y(de),onSelectRange:R},null,8,["show-seconds","am-pm-mode","arrow-control","spinner-date","onSetOption"])],2)],2),j("div",{class:B(y(s).be("range-picker","cell"))},[j("div",{class:B(y(s).be("range-picker","header"))},ce(y(i)("el.datepicker.endTime")),3),j("div",{class:B(g.value)},[V(_E,{ref:"maxSpinner",role:"end","show-seconds":S.value,"am-pm-mode":x.value,"arrow-control":y(c),"spinner-date":b.value,"disabled-hours":F,"disabled-minutes":W,"disabled-seconds":z,onChange:E,onSetOption:y(de),onSelectRange:$},null,8,["show-seconds","am-pm-mode","arrow-control","spinner-date","onSetOption"])],2)],2)],2),j("div",{class:B(y(s).be("panel","footer"))},[j("button",{type:"button",class:B([y(s).be("panel","btn"),"cancel"]),onClick:U[0]||(U[0]=te=>w())},ce(y(i)("el.datepicker.cancel")),3),j("button",{type:"button",class:B([y(s).be("panel","btn"),"confirm"]),disabled:I.value,onClick:U[1]||(U[1]=te=>C())},ce(y(i)("el.datepicker.confirm")),11,age)],2)],2)):fe("v-if",!0)}}),oge=ige,e9={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(du,function(){var n={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},r=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,a=/\d/,i=/\d\d/,o=/\d\d?/,s=/\d*[^-_:/,()\s\d]+/,l={},u=function(g){return(g=+g)+(g>68?1900:2e3)},c=function(g){return function(m){this[g]=+m}},d=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=function(m){if(!m||m==="Z")return 0;var b=m.match(/([+-]|\d\d)/g),_=60*b[1]+(+b[2]||0);return _===0?0:b[0]==="+"?-_:_}(g)}],f=function(g){var m=l[g];return m&&(m.indexOf?m:m.s.concat(m.f))},h=function(g,m){var b,_=l.meridiem;if(_){for(var w=1;w<=24;w+=1)if(g.indexOf(_(w,0,m))>-1){b=w>12;break}}else b=g===(m?"pm":"PM");return b},v={A:[s,function(g){this.afternoon=h(g,!1)}],a:[s,function(g){this.afternoon=h(g,!0)}],Q:[a,function(g){this.month=3*(g-1)+1}],S:[a,function(g){this.milliseconds=100*+g}],SS:[i,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[o,c("seconds")],ss:[o,c("seconds")],m:[o,c("minutes")],mm:[o,c("minutes")],H:[o,c("hours")],h:[o,c("hours")],HH:[o,c("hours")],hh:[o,c("hours")],D:[o,c("day")],DD:[i,c("day")],Do:[s,function(g){var m=l.ordinal,b=g.match(/\d+/);if(this.day=b[0],m)for(var _=1;_<=31;_+=1)m(_).replace(/\[|\]/g,"")===g&&(this.day=_)}],w:[o,c("week")],ww:[i,c("week")],M:[o,c("month")],MM:[i,c("month")],MMM:[s,function(g){var m=f("months"),b=(f("monthsShort")||m.map(function(_){return _.slice(0,3)})).indexOf(g)+1;if(b<1)throw new Error;this.month=b%12||b}],MMMM:[s,function(g){var m=f("months").indexOf(g)+1;if(m<1)throw new Error;this.month=m%12||m}],Y:[/[+-]?\d+/,c("year")],YY:[i,function(g){this.year=u(g)}],YYYY:[/\d{4}/,c("year")],Z:d,ZZ:d};function p(g){var m,b;m=g,b=l&&l.formats;for(var _=(g=m.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(k,A,I){var P=I&&I.toUpperCase();return A||b[I]||n[I]||b[P].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(R,O,$){return O||$.slice(1)})})).match(r),w=_.length,S=0;S-1)return new Date((D==="X"?1e3:1)*N);var z=p(D)(N),Y=z.year,q=z.month,re=z.day,ee=z.hours,se=z.minutes,ne=z.seconds,de=z.milliseconds,le=z.zone,J=z.week,Z=new Date,U=re||(Y||q?1:Z.getDate()),te=Y||Z.getFullYear(),Q=0;Y&&!q||(Q=q>0?q-1:Z.getMonth());var ue,pe=ee||0,me=se||0,Pe=ne||0,Ne=de||0;return le?new Date(Date.UTC(te,Q,U,pe,me,Pe,Ne+60*le.offset*1e3)):F?new Date(Date.UTC(te,Q,U,pe,me,Pe,Ne)):(ue=new Date(te,Q,U,pe,me,Pe,Ne),J&&(ue=W(ue).week(J).toDate()),ue)}catch{return new Date("")}}(x,E,C,b),this.init(),P&&P!==!0&&(this.$L=this.locale(P).$L),I&&x!=this.format(E)&&(this.$d=new Date("")),l={}}else if(E instanceof Array)for(var R=E.length,O=1;O<=R;O+=1){T[1]=E[O-1];var $=b.apply(this,T);if($.isValid()){this.$d=$.$d,this.$L=$.$L,this.init();break}O===R&&(this.$d=new Date(""))}else w.call(this,S)}}})})(e9);var sge=e9.exports;const gM=fu(sge);_t.extend(gM);var lge=ye({name:"ElTimePicker",install:null,props:{...pM,isRange:Boolean},emits:[mt],setup(e,t){const n=H(),[r,a]=e.isRange?["timerange",oge]:["time",K1],i=o=>t.emit(mt,o);return Ft(hM,e.popperOptions),t.expose({focus:()=>{var o;(o=n.value)==null||o.focus()},blur:()=>{var o;(o=n.value)==null||o.blur()},handleOpen:()=>{var o;(o=n.value)==null||o.handleOpen()},handleClose:()=>{var o;(o=n.value)==null||o.handleClose()}}),()=>V(zG,Mt(e,{ref:n,type:r,format:e.format??"HH:mm:ss","onUpdate:modelValue":i}),{default:o=>V(a,o,null)})}});const uge=xt(lge),jl=Oe({type:{type:String,values:["primary","success","info","warning","danger"],default:"primary"},closable:Boolean,disableTransitions:Boolean,hit:Boolean,color:String,size:{type:String,values:ss},effect:{type:String,values:["dark","light","plain"],default:"light"},round:Boolean}),cge={close:e=>e instanceof MouseEvent,click:e=>e instanceof MouseEvent},dge=["aria-label"],fge=["aria-label"];var hge=ye({name:"ElTag",__name:"tag",props:jl,emits:cge,setup(e,{emit:t}){const n=e,r=t,a=Rr(),{t:i}=Yt(),o=Ee("tag"),s=M(()=>{const{type:d,hit:f,effect:h,closable:v,round:p}=n;return[o.b(),o.is("closable",v),o.m(d||"primary"),o.m(a.value),o.m(h),o.is("hit",f),o.is("round",p)]}),l=d=>{r("close",d)},u=d=>{r("click",d)},c=d=>{var f,h,v;(v=(h=(f=d==null?void 0:d.component)==null?void 0:f.subTree)==null?void 0:h.component)!=null&&v.bum&&(d.component.subTree.component.bum=null)};return(d,f)=>e.disableTransitions?(L(),K("span",{key:0,class:B(s.value),style:tt({backgroundColor:e.color}),onClick:u},[j("span",{class:B(y(o).e("content"))},[he(d.$slots,"default")],2),e.closable?(L(),K("button",{key:0,"aria-label":y(i)("el.tag.close"),class:B(y(o).e("close")),type:"button",onClick:ut(l,["stop"])},[V(y(Ze),null,{default:G(()=>[V(y(To))]),_:1})],10,dge)):fe("v-if",!0)],6)):(L(),ve(ya,{key:1,name:`${y(o).namespace.value}-zoom-in-center`,appear:"",onVnodeMounted:c},{default:G(()=>[j("span",{class:B(s.value),style:tt({backgroundColor:e.color}),onClick:u},[j("span",{class:B(y(o).e("content"))},[he(d.$slots,"default")],2),e.closable?(L(),K("button",{key:0,"aria-label":y(i)("el.tag.close"),class:B(y(o).e("close")),type:"button",onClick:ut(l,["stop"])},[V(y(Ze),null,{default:G(()=>[V(y(To))]),_:1})],10,fge)):fe("v-if",!0)],6)]),_:3},8,["name"]))}}),vge=hge;const Nl=xt(vge),t9=Symbol("ElSelectGroup"),Py=Symbol("ElSelect"),Y1={label:"label",value:"value",disabled:"disabled",options:"options"};function Ly(e){const t=H({...Y1,...e.props});let n={...e.props};return _e(()=>e.props,s=>{or(s,n)||(t.value={...Y1,...s},n={...s})},{deep:!0}),{aliasProps:t,getLabel:s=>_r(s,t.value.label),getValue:s=>_r(s,t.value.value),getDisabled:s=>_r(s,t.value.disabled),getOptions:s=>_r(s,t.value.options)}}const n9=Oe({name:String,id:String,modelValue:{type:oe([Array,String,Number,Boolean,Object]),default:void 0},autocomplete:{type:String,default:"off"},automaticDropdown:Boolean,size:$r,effect:{type:oe(String),default:"light"},disabled:{type:Boolean,default:void 0},clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:{type:String,default:""},popperStyle:{type:oe([String,Object])},popperOptions:{type:oe(Object),default:()=>({})},remote:Boolean,debounce:{type:Number,default:300},loadingText:String,noMatchText:String,noDataText:String,remoteMethod:{type:oe(Function)},filterMethod:{type:oe(Function)},multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String},defaultFirstOption:Boolean,reserveKeyword:{type:Boolean,default:!0},valueKey:{type:String,default:"value"},collapseTags:Boolean,collapseTagsTooltip:Boolean,tagTooltip:{type:oe(Object),default:()=>({})},maxCollapseTags:{type:Number,default:1},teleported:Tn.teleported,persistent:{type:Boolean,default:!0},clearIcon:{type:An,default:ul},fitInputWidth:Boolean,suffixIcon:{type:An,default:ll},tagType:{...jl.type,default:"info"},tagEffect:{...jl.effect,default:"light"},validateEvent:{type:Boolean,default:!0},remoteShowSuffix:Boolean,showArrow:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:oe(String),values:ol,default:"bottom-start"},fallbackPlacements:{type:oe(Array),default:["bottom-start","top-start","right","left"]},tabindex:{type:[String,Number],default:0},appendTo:Tn.appendTo,options:{type:oe(Array)},props:{type:oe(Object),default:()=>Y1},...Rf,...ja(["ariaLabel"])}),pge={[mt]:e=>!0,[Vt]:e=>!0,"popup-scroll":mm.scroll,"end-reached":mm["end-reached"],"remove-tag":e=>!0,"visible-change":e=>!0,focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0},wE="ElOption",gge=Oe({value:{type:[String,Number,Boolean,Object],required:!0},label:{type:[String,Number]},created:Boolean,disabled:Boolean});function mge(e,t){const n=Ge(Py);n||nr(wE,"usage: ");const r=Ge(t9,{disabled:!1}),a=M(()=>c(jr(n.props.modelValue),e.value)),i=M(()=>{if(n.props.multiple){const h=jr(n.props.modelValue??[]);return!a.value&&h.length>=n.props.multipleLimit&&n.props.multipleLimit>0}else return!1}),o=M(()=>e.label??(yt(e.value)?"":e.value)),s=M(()=>e.value||e.label||""),l=M(()=>e.disabled||t.groupDisabled||i.value),u=Tt(),c=(h=[],v)=>{if(yt(e.value)){const p=n.props.valueKey;return h&&h.some(g=>$n(_r(g,p))===_r(v,p))}else return h&&h.includes(v)},d=()=>{l.value||(n.states.hoveringIndex=n.optionsArray.indexOf(u.proxy))},f=h=>{t.visible=new RegExp($I(h),"i").test(String(o.value))||e.created};return _e(()=>o.value,()=>{!e.created&&!n.props.remote&&n.setSelected()}),_e(()=>e.value,(h,v)=>{const{remote:p,valueKey:g}=n.props;if((p?h!==v:!or(h,v))&&(n.onOptionDestroy(v,u.proxy),n.onOptionCreate(u.proxy)),!e.created&&!p){if(g&&yt(h)&&yt(v)&&h[g]===v[g])return;n.setSelected()}}),_e(()=>r.disabled,()=>{t.groupDisabled=r.disabled},{immediate:!0}),{select:n,currentLabel:o,currentValue:s,itemSelected:a,isDisabled:l,hoverItem:d,updateOption:f}}var yge=ye({name:wE,componentName:wE,props:gge,setup(e){const t=Ee("select"),n=ba(),r=M(()=>[t.be("dropdown","item"),t.is("disabled",y(l)),t.is("selected",y(s)),t.is("hovering",y(h))]),a=Qt({index:-1,groupDisabled:!1,visible:!0,hover:!1}),i=uv?null:"mousemove",{currentLabel:o,itemSelected:s,isDisabled:l,select:u,hoverItem:c,updateOption:d}=mge(e,a),{visible:f,hover:h}=Jr(a),v=Tt().proxy;u.onOptionCreate(v),yn(()=>{const m=v.value;Ue(()=>{const{selected:b}=u.states,_=b.some(w=>w.value===v.value);u.states.cachedOptions.get(m)===v&&!_&&u.states.cachedOptions.delete(m)}),u.onOptionDestroy(m,v)});function p(){l.value||u.handleOptionSelect(v)}return{ns:t,id:n,containerKls:r,currentLabel:o,itemSelected:s,isDisabled:l,select:u,visible:f,hover:h,states:a,mouseMoveEventName:i,hoverItem:c,handleMousedown:m=>{let b=m.target;const _=m.currentTarget;for(;b&&b!==_;){if(vf(b))return;b=b.parentElement}m.preventDefault()},updateOption:d,selectOptionClick:p}}});const bge=["id","aria-disabled","aria-selected"];function _ge(e,t,n,r,a,i){return gt((L(),K("li",Mt({id:e.id,class:e.containerKls,role:"option","aria-disabled":e.isDisabled||void 0,"aria-selected":e.itemSelected},{[Ud(e.mouseMoveEventName)]:t[0]||(t[0]=(...o)=>e.hoverItem&&e.hoverItem(...o))},{onMousedown:t[1]||(t[1]=(...o)=>e.handleMousedown&&e.handleMousedown(...o)),onClick:t[2]||(t[2]=ut((...o)=>e.selectOptionClick&&e.selectOptionClick(...o),["stop"]))}),[he(e.$slots,"default",{},()=>[j("span",null,ce(e.currentLabel),1)])],16,bge)),[[ln,e.visible]])}var mM=Gr(yge,[["render",_ge]]),wge=ye({name:"ElOptionGroup",componentName:"ElOptionGroup",props:{label:String,disabled:Boolean},setup(e){const t=Ee("select"),n=H(),r=Tt(),a=H([]);Ft(t9,Qt({...Jr(e)}));const i=M(()=>a.value.some(u=>u.visible===!0)),o=u=>{var c;return u.type.name==="ElOption"&&!!((c=u.component)!=null&&c.proxy)},s=u=>{const c=jr(u),d=[];return c.forEach(f=>{var h;Vn(f)&&(o(f)?d.push(f.component.proxy):Me(f.children)&&f.children.length?d.push(...s(f.children)):(h=f.component)!=null&&h.subTree&&d.push(...s(f.component.subTree)))}),d},l=()=>{a.value=s(r.subTree)};return St(()=>{l()}),_y(n,l,{attributes:!0,subtree:!0,childList:!0}),{groupRef:n,visible:i,ns:t}}});function Sge(e,t,n,r,a,i){return gt((L(),K("ul",{ref:"groupRef",class:B(e.ns.be("group","wrap"))},[j("li",{class:B(e.ns.be("group","title"))},ce(e.label),3),j("li",null,[j("ul",{class:B(e.ns.b("group"))},[he(e.$slots,"default")],2)])],2)),[[ln,e.visible]])}var yM=Gr(wge,[["render",Sge]]),xge=ye({name:"ElSelectDropdown",componentName:"ElSelectDropdown",setup(){const e=Ge(Py),t=Ee("select"),n=M(()=>e.props.popperClass),r=M(()=>e.props.multiple),a=M(()=>e.props.fitInputWidth),i=H("");function o(){var l;const s=(l=e.selectRef)==null?void 0:l.offsetWidth;s?i.value=`${s-2}px`:i.value=""}return St(()=>{o(),Kn(e.selectRef,o)}),{ns:t,minWidth:i,popperClass:n,isMultiple:r,isFitInputWidth:a}}});function Cge(e,t,n,r,a,i){return L(),K("div",{class:B([e.ns.b("dropdown"),e.ns.is("multiple",e.isMultiple),e.popperClass]),style:tt({[e.isFitInputWidth?"width":"minWidth"]:e.minWidth})},[e.$slots.header?(L(),K("div",{key:0,class:B(e.ns.be("dropdown","header"))},[he(e.$slots,"header")],2)):fe("v-if",!0),he(e.$slots,"default"),e.$slots.footer?(L(),K("div",{key:1,class:B(e.ns.be("dropdown","footer"))},[he(e.$slots,"footer")],2)):fe("v-if",!0)],6)}var Tge=Gr(xge,[["render",Cge]]);const Ege=(e,t)=>{const{t:n}=Yt(),r=pr(),a=ba(),i=Ee("select"),o=Ee("input"),s=Qt({inputValue:"",options:new Map,cachedOptions:new Map,optionValues:[],selected:[],selectionWidth:0,collapseItemWidth:0,selectedLabel:"",hoveringIndex:-1,previousQuery:null,inputHovering:!1,menuVisibleOnFocus:!1,isBeforeHide:!1}),l=H(),u=H(),c=H(),d=H(),f=H(),h=H(),v=H(),p=H(),g=H(),m=H(),b=H(),_=H(!1),w=H(),S=H(!1),{form:x,formItem:C}=ea(),{inputId:T}=Di(e,{formItemContext:C}),{valueOnClear:E,isEmptyValue:k}=Iy(e),{isComposing:A,handleCompositionStart:I,handleCompositionUpdate:P,handleCompositionEnd:R}=Ay({afterComposition:Ve=>zt(Ve)}),O=ar(),{wrapperRef:$,isFocused:N,handleBlur:D}=uu(f,{disabled:O,afterFocus(){e.automaticDropdown&&!_.value&&(_.value=!0,s.menuVisibleOnFocus=!0)},beforeBlur(Ve){var dt,rn;return((dt=c.value)==null?void 0:dt.isFocusInsideContent(Ve))||((rn=d.value)==null?void 0:rn.isFocusInsideContent(Ve))},afterBlur(){var Ve;_.value=!1,s.menuVisibleOnFocus=!1,e.validateEvent&&((Ve=C==null?void 0:C.validate)==null||Ve.call(C,"blur").catch(It))}}),F=M(()=>Me(e.modelValue)?e.modelValue.length>0:!k(e.modelValue)),W=M(()=>(x==null?void 0:x.statusIcon)??!1),z=M(()=>e.clearable&&!O.value&&F.value&&(N.value||s.inputHovering)),Y=M(()=>e.remote&&e.filterable&&!e.remoteShowSuffix?"":e.suffixIcon),q=M(()=>i.is("reverse",!!(Y.value&&_.value))),re=M(()=>(C==null?void 0:C.validateState)||""),ee=M(()=>re.value&&jw[re.value]),se=M(()=>e.remote?e.debounce:0),ne=M(()=>e.remote&&!s.inputValue&&s.options.size===0),de=M(()=>e.loading?e.loadingText||n("el.select.loading"):e.filterable&&s.inputValue&&s.options.size>0&&le.value===0?e.noMatchText||n("el.select.noMatch"):s.options.size===0?e.noDataText||n("el.select.noData"):null),le=M(()=>J.value.filter(Ve=>Ve.visible).length),J=M(()=>{const Ve=Array.from(s.options.values()),dt=[];return s.optionValues.forEach(rn=>{const qn=Ve.findIndex(Ar=>Ar.value===rn);qn>-1&&dt.push(Ve[qn])}),dt.length>=Ve.length?dt:Ve}),Z=M(()=>Array.from(s.cachedOptions.values())),U=M(()=>{const Ve=J.value.filter(dt=>!dt.created).some(dt=>dt.currentLabel===s.inputValue);return e.filterable&&e.allowCreate&&s.inputValue!==""&&!Ve}),te=()=>{e.filterable&&et(e.filterMethod)||e.filterable&&e.remote&&et(e.remoteMethod)||J.value.forEach(Ve=>{var dt;(dt=Ve.updateOption)==null||dt.call(Ve,s.inputValue)})},Q=Rr(),ue=M(()=>["small"].includes(Q.value)?"small":"default"),pe=M({get(){return _.value&&(e.loading||!ne.value||e.remote&&!!r.empty)&&(!S.value||!oi(s.previousQuery)||s.options.size>0)},set(Ve){_.value=Ve}}),me=M(()=>{if(e.multiple&&!qt(e.modelValue))return jr(e.modelValue).length===0&&!s.inputValue;const Ve=Me(e.modelValue)?e.modelValue[0]:e.modelValue;return e.filterable||qt(Ve)?!s.inputValue:!0}),Pe=M(()=>{const Ve=e.placeholder??n("el.select.placeholder");return e.multiple||!F.value?Ve:s.selectedLabel}),Ne=uv?null:"mouseenter";_e(()=>e.modelValue,(Ve,dt)=>{e.multiple&&e.filterable&&!e.reserveKeyword&&(s.inputValue="",ie("")),ge(),!or(Ve,dt)&&e.validateEvent&&(C==null||C.validate("change").catch(It))},{flush:"post",deep:!0}),_e(()=>_.value,Ve=>{Ve?ie(s.inputValue):(s.inputValue="",s.previousQuery=null,s.isBeforeHide=!0,s.menuVisibleOnFocus=!1)}),_e(()=>s.options.entries(),()=>{cn&&(ge(),e.defaultFirstOption&&(e.filterable||e.remote)&&le.value&&ae())},{flush:"post"}),_e([()=>s.hoveringIndex,J],([Ve])=>{Je(Ve)&&Ve>-1?w.value=J.value[Ve]||{}:w.value={},J.value.forEach(dt=>{dt.hover=w.value===dt})}),Ua(()=>{s.isBeforeHide||te()});const ie=Ve=>{s.previousQuery===Ve||A.value||(s.previousQuery=Ve,e.filterable&&et(e.filterMethod)?e.filterMethod(Ve):e.filterable&&e.remote&&et(e.remoteMethod)&&e.remoteMethod(Ve),e.defaultFirstOption&&(e.filterable||e.remote)&&le.value?Ue(ae):Ue($e))},ae=()=>{const Ve=J.value.filter(qn=>qn.visible&&!qn.disabled&&!qn.states.groupDisabled),dt=Ve.find(qn=>qn.created),rn=Ve[0];s.hoveringIndex=Qe(J.value.map(qn=>qn.value),dt||rn)},ge=()=>{if(e.multiple)s.selectedLabel="";else{const dt=be(Me(e.modelValue)?e.modelValue[0]:e.modelValue);s.selectedLabel=dt.currentLabel,s.selected=[dt];return}const Ve=[];qt(e.modelValue)||jr(e.modelValue).forEach(dt=>{Ve.push(be(dt))}),s.selected=Ve},be=Ve=>{let dt;const rn=Qg(Ve);for(let Ar=s.cachedOptions.size-1;Ar>=0;Ar--){const Pr=Z.value[Ar];if(rn?_r(Pr.value,e.valueKey)===_r(Ve,e.valueKey):Pr.value===Ve){dt={index:J.value.filter(Po=>!Po.created).indexOf(Pr),value:Ve,currentLabel:Pr.currentLabel,get isDisabled(){return Pr.isDisabled}};break}}if(dt)return dt;const qn=s.selected.find(Ar=>rn?_r(Ar.value,e.valueKey)===_r(Ve,e.valueKey):Ar.value===Ve);return{index:-1,value:Ve,currentLabel:rn?Ve.label:qn?qn.currentLabel:Ve??""}},$e=()=>{const Ve=s.selected.length;if(Ve>0){const dt=s.selected[Ve-1];s.hoveringIndex=J.value.findIndex(rn=>we(dt)===we(rn))}else s.hoveringIndex=-1},Re=()=>{s.selectionWidth=Number.parseFloat(window.getComputedStyle(u.value).width)},Se=()=>{s.collapseItemWidth=m.value.getBoundingClientRect().width},Ae=()=>{var Ve,dt;(dt=(Ve=c.value)==null?void 0:Ve.updatePopper)==null||dt.call(Ve)},nt=()=>{var Ve,dt;(dt=(Ve=d.value)==null?void 0:Ve.updatePopper)==null||dt.call(Ve)},at=()=>{s.inputValue.length>0&&!_.value&&(_.value=!0),ie(s.inputValue)},zt=Ve=>{if(s.inputValue=Ve.target.value,e.remote)S.value=!0,on();else return at()},on=by(()=>{at(),S.value=!1},se),Bt=Ve=>{or(e.modelValue,Ve)||t(Vt,Ve)},it=Ve=>tW(Ve,dt=>{const rn=s.cachedOptions.get(dt);return!(rn!=null&&rn.disabled)&&!(rn!=null&&rn.states.groupDisabled)}),At=Ve=>{const dt=Mn(Ve);if(e.multiple&&dt!==De.delete&&Ve.target.value.length<=0){const rn=jr(e.modelValue).slice(),qn=it(rn);if(qn<0)return;const Ar=rn[qn];rn.splice(qn,1),t(mt,rn),Bt(rn),t("remove-tag",Ar)}},xe=(Ve,dt)=>{const rn=s.selected.indexOf(dt);if(rn>-1&&!O.value){const qn=jr(e.modelValue).slice();qn.splice(rn,1),t(mt,qn),Bt(qn),t("remove-tag",dt.value)}Ve.stopPropagation(),Gt()},rt=Ve=>{Ve.stopPropagation();const dt=e.multiple?[]:E.value;if(e.multiple)for(const rn of s.selected)rn.isDisabled&&dt.push(rn.value);t(mt,dt),Bt(dt),s.hoveringIndex=-1,_.value=!1,t("clear"),Gt()},Te=Ve=>{if(e.multiple){const dt=jr(e.modelValue??[]).slice(),rn=Qe(dt,Ve);rn>-1?dt.splice(rn,1):(e.multipleLimit<=0||dt.length{jt(Ve)})},Qe=(Ve,dt)=>qt(dt)?-1:yt(dt.value)?Ve.findIndex(rn=>or(_r(rn,e.valueKey),we(dt))):Ve.indexOf(dt.value),jt=Ve=>{var qn,Ar,Pr,Po,hp;const dt=Me(Ve)?Ve[Ve.length-1]:Ve;let rn=null;if(!wr(dt==null?void 0:dt.value)){const Nc=J.value.filter(Kf=>Kf.value===dt.value);Nc.length>0&&(rn=Nc[0].$el)}if(c.value&&rn){const Nc=(Po=(Pr=(Ar=(qn=c.value)==null?void 0:qn.popperRef)==null?void 0:Ar.contentRef)==null?void 0:Pr.querySelector)==null?void 0:Po.call(Pr,`.${i.be("dropdown","wrap")}`);Nc&&zI(Nc,rn)}(hp=b.value)==null||hp.handleScroll()},Xe=Ve=>{s.options.set(Ve.value,Ve),s.cachedOptions.set(Ve.value,Ve)},ft=(Ve,dt)=>{s.options.get(Ve)===dt&&s.options.delete(Ve)},vt=M(()=>{var Ve,dt;return(dt=(Ve=c.value)==null?void 0:Ve.popperRef)==null?void 0:dt.contentRef}),kt=()=>{s.isBeforeHide=!1,Ue(()=>{var Ve;(Ve=b.value)==null||Ve.update(),jt(s.selected)})},Gt=()=>{var Ve;(Ve=f.value)==null||Ve.focus()},fn=()=>{var Ve;if(_.value){_.value=!1,Ue(()=>{var dt;return(dt=f.value)==null?void 0:dt.blur()});return}(Ve=f.value)==null||Ve.blur()},bt=Ve=>{rt(Ve)},Cn=Ve=>{if(_.value=!1,N.value){const dt=new FocusEvent("blur",Ve);Ue(()=>D(dt))}},jn=()=>{s.inputValue.length>0?s.inputValue="":_.value=!1},We=Ve=>{var dt;O.value||e.filterable&&_.value&&Ve&&!((dt=v.value)!=null&&dt.contains(Ve.target))||(uv&&(s.inputHovering=!0),s.menuVisibleOnFocus?s.menuVisibleOnFocus=!1:_.value=!_.value)},st=()=>{if(!_.value)We();else{const Ve=J.value[s.hoveringIndex];Ve&&!Ve.isDisabled&&Te(Ve)}},we=Ve=>yt(Ve.value)?_r(Ve.value,e.valueKey):Ve.value,He=M(()=>J.value.filter(Ve=>Ve.visible).every(Ve=>Ve.isDisabled)),je=M(()=>e.multiple?e.collapseTags?s.selected.slice(0,e.maxCollapseTags):s.selected:[]),Xt=M(()=>e.multiple?e.collapseTags?s.selected.slice(e.maxCollapseTags):[]:[]),kn=Ve=>{if(!_.value){_.value=!0;return}if(!(s.options.size===0||le.value===0||A.value)&&!He.value){Ve==="next"?(s.hoveringIndex++,s.hoveringIndex===s.options.size&&(s.hoveringIndex=0)):Ve==="prev"&&(s.hoveringIndex--,s.hoveringIndex<0&&(s.hoveringIndex=s.options.size-1));const dt=J.value[s.hoveringIndex];(dt.isDisabled||!dt.visible)&&kn(Ve),Ue(()=>jt(w.value))}},Un=(Ve,dt,rn,qn)=>{for(let Ar=dt;Ar>=0&&Ar{const rn=s.options.size;if(rn===0)return;const qn=Ei(Ve,0,rn-1),Ar=J.value,Pr=dt==="up"?-1:1,Po=Un(Ar,qn,Pr,rn)??Un(Ar,qn-Pr,-Pr,rn);Po!=null&&(s.hoveringIndex=Po,Ue(()=>jt(w.value)))},Ia=Ve=>{const dt=Mn(Ve);let rn=!0;switch(dt){case De.up:kn("prev");break;case De.down:kn("next");break;case De.enter:case De.numpadEnter:A.value||st();break;case De.esc:jn();break;case De.backspace:rn=!1,At(Ve);return;case De.home:if(!_.value)return;Qn(0,"down");break;case De.end:if(!_.value)return;Qn(s.options.size-1,"up");break;case De.pageUp:if(!_.value)return;Qn(s.hoveringIndex-10,"up");break;case De.pageDown:if(!_.value)return;Qn(s.hoveringIndex+10,"down");break;default:rn=!1;break}rn&&(Ve.preventDefault(),Ve.stopPropagation())},mu=()=>{if(!u.value)return 0;const Ve=window.getComputedStyle(u.value);return Number.parseFloat(Ve.gap||"6px")},yu=M(()=>{const Ve=mu(),dt=e.filterable?Ve+11:0;return{maxWidth:`${m.value&&e.maxCollapseTags===1?s.selectionWidth-s.collapseItemWidth-Ve-dt:s.selectionWidth-dt}px`}}),bu=M(()=>({maxWidth:`${s.selectionWidth}px`})),Uf=Ve=>{t("popup-scroll",Ve)},vl=Ve=>{t("end-reached",Ve)};Kn(u,Re),Kn($,Ae),Kn(g,nt),Kn(m,Se);let _u;return _e(()=>pe.value,Ve=>{Ve?_u=Kn(p,Ae).stop:(_u==null||_u(),_u=void 0),t("visible-change",Ve)}),St(()=>{ge()}),{inputId:T,contentId:a,nsSelect:i,nsInput:o,states:s,isFocused:N,expanded:_,optionsArray:J,hoverOption:w,selectSize:Q,filteredOptionsCount:le,updateTooltip:Ae,updateTagTooltip:nt,debouncedOnInputChange:on,onInput:zt,deletePrevTag:At,deleteTag:xe,deleteSelected:rt,handleOptionSelect:Te,scrollToOption:jt,hasModelValue:F,shouldShowPlaceholder:me,currentPlaceholder:Pe,mouseEnterEventName:Ne,needStatusIcon:W,showClearBtn:z,iconComponent:Y,iconReverse:q,validateState:re,validateIcon:ee,showNewOption:U,updateOptions:te,collapseTagSize:ue,setSelected:ge,selectDisabled:O,emptyText:de,handleCompositionStart:I,handleCompositionUpdate:P,handleCompositionEnd:R,handleKeydown:Ia,onOptionCreate:Xe,onOptionDestroy:ft,handleMenuEnter:kt,focus:Gt,blur:fn,handleClearClick:bt,handleClickOutside:Cn,handleEsc:jn,toggleMenu:We,selectOption:st,getValueKey:we,navigateOptions:kn,dropdownMenuVisible:pe,showTagList:je,collapseTagList:Xt,popupScroll:Uf,getOption:be,endReached:vl,tagStyle:yu,collapseTagStyle:bu,popperRef:vt,inputRef:f,tooltipRef:c,tagTooltipRef:d,prefixRef:h,suffixRef:v,selectRef:l,wrapperRef:$,selectionRef:u,scrollbarRef:b,menuRef:p,tagMenuRef:g,collapseItemRef:m}};var kge=ye({name:"ElOptions",setup(e,{slots:t}){const n=Ge(Py);let r=[];return()=>{var s,l;const a=(s=t.default)==null?void 0:s.call(t),i=[];function o(u){Me(u)&&u.forEach(c=>{var f,h,v,p;const d=(f=(c==null?void 0:c.type)||{})==null?void 0:f.name;d==="ElOptionGroup"?o(!qe(c.children)&&!Me(c.children)&&et((h=c.children)==null?void 0:h.default)?(v=c.children)==null?void 0:v.default():c.children):d==="ElOption"?i.push((p=c.props)==null?void 0:p.value):Me(c.children)&&o(c.children)})}return a.length&&o((l=a[0])==null?void 0:l.children),or(i,r)||(r=i,n&&(n.states.optionValues=i)),a}}});const vN="ElSelect",ym=new WeakMap,Age=e=>(...t)=>{var a,i;const n=t[0];if(!n||n.includes('Slot "default" invoked outside of the render function')&&((a=t[2])!=null&&a.includes("ElTreeSelect")))return;const r=(i=ym.get(e))==null?void 0:i.originalWarnHandler;if(r){r(...t);return}console.warn(...t)},Ige=e=>{let t=ym.get(e);return t||(t={originalWarnHandler:e.config.warnHandler,handler:Age(e),count:0},ym.set(e,t)),t};var Mge=ye({name:vN,componentName:vN,components:{ElSelectMenu:Tge,ElOption:mM,ElOptions:kge,ElOptionGroup:yM,ElTag:Nl,ElScrollbar:ts,ElTooltip:ua,ElIcon:Ze},directives:{ClickOutside:yc},props:n9,emits:pge,setup(e,{emit:t,slots:n}){const r=Tt(),a=Ige(r.appContext);a.count+=1,r.appContext.config.warnHandler=a.handler;const i=M(()=>{const{modelValue:b,multiple:_}=e,w=_?[]:void 0;return Me(b)?_?b:w:_?w:b}),o=Qt({...Jr(e),modelValue:i}),s=Ege(o,t),{calculatorRef:l,inputStyle:u}=VI(),{getLabel:c,getValue:d,getOptions:f,getDisabled:h}=Ly(e),v=b=>({label:c(b),value:d(b),disabled:h(b)}),p=b=>b.reduce((_,w)=>(_.push(w),w.children&&w.children.length>0&&_.push(...p(w.children)),_),[]),g=b=>{Fi(b||[]).forEach(_=>{var w;if(yt(_)&&(_.type.name==="ElOption"||_.type.name==="ElTree")){const S=_.type.name;if(S==="ElTree")p(((w=_.props)==null?void 0:w.data)||[]).forEach(x=>{x.currentLabel=x.label??(yt(x.value)?"":x.value),s.onOptionCreate(x)});else if(S==="ElOption"){const x={..._.props};x.currentLabel=x.label??(yt(x.value)?"":x.value),s.onOptionCreate(x)}}})};_e(()=>{var b;return[e.persistent||s.expanded.value||!n.default||(b=n.default)==null?void 0:b.call(n),i.value]},()=>{var b;e.persistent||s.expanded.value||n.default&&(s.states.options.clear(),g((b=n.default)==null?void 0:b.call(n)))},{immediate:!0}),Ft(Py,Qt({props:o,states:s.states,selectRef:s.selectRef,optionsArray:s.optionsArray,setSelected:s.setSelected,handleOptionSelect:s.handleOptionSelect,onOptionCreate:s.onOptionCreate,onOptionDestroy:s.onOptionDestroy}));const m=M(()=>e.multiple?s.states.selected.map(b=>b.currentLabel):s.states.selectedLabel);return yn(()=>{const b=ym.get(r.appContext);b&&(b.count-=1,b.count<=0&&(r.appContext.config.warnHandler=b.originalWarnHandler,ym.delete(r.appContext)))}),{...s,modelValue:i,selectedLabel:m,calculatorRef:l,inputStyle:u,getLabel:c,getValue:d,getOptions:f,getDisabled:h,getOptionProps:v}}});const Pge=["id","value","name","disabled","autocomplete","tabindex","readonly","aria-activedescendant","aria-controls","aria-expanded","aria-label"],Lge=["textContent"],Dge={key:1};function Rge(e,t,n,r,a,i){const o=Ie("el-tag"),s=Ie("el-tooltip"),l=Ie("el-icon"),u=Ie("el-option"),c=Ie("el-option-group"),d=Ie("el-options"),f=Ie("el-scrollbar"),h=Ie("el-select-menu"),v=os("click-outside");return gt((L(),K("div",Mt({ref:"selectRef",class:[e.nsSelect.b(),e.nsSelect.m(e.selectSize)]},{[Ud(e.mouseEnterEventName)]:t[11]||(t[11]=p=>e.states.inputHovering=!0)},{onMouseleave:t[12]||(t[12]=p=>e.states.inputHovering=!1)}),[V(s,{ref:"tooltipRef",visible:e.dropdownMenuVisible,placement:e.placement,teleported:e.teleported,"popper-class":[e.nsSelect.e("popper"),e.popperClass],"popper-style":e.popperStyle,"popper-options":e.popperOptions,"fallback-placements":e.fallbackPlacements,effect:e.effect,pure:"",trigger:"click",transition:`${e.nsSelect.namespace.value}-zoom-in-top`,"stop-popper-mouse-event":!1,"gpu-acceleration":!1,persistent:e.persistent,"append-to":e.appendTo,"show-arrow":e.showArrow,offset:e.offset,onBeforeShow:e.handleMenuEnter,onHide:t[10]||(t[10]=p=>e.states.isBeforeHide=!1)},{default:G(()=>{var p;return[j("div",{ref:"wrapperRef",class:B([e.nsSelect.e("wrapper"),e.nsSelect.is("focused",e.isFocused),e.nsSelect.is("hovering",e.states.inputHovering),e.nsSelect.is("filterable",e.filterable),e.nsSelect.is("disabled",e.selectDisabled)]),onClick:t[7]||(t[7]=ut((...g)=>e.toggleMenu&&e.toggleMenu(...g),["prevent"]))},[e.$slots.prefix?(L(),K("div",{key:0,ref:"prefixRef",class:B(e.nsSelect.e("prefix"))},[he(e.$slots,"prefix")],2)):fe("v-if",!0),j("div",{ref:"selectionRef",class:B([e.nsSelect.e("selection"),e.nsSelect.is("near",e.multiple&&!e.$slots.prefix&&!!e.states.selected.length)])},[e.multiple?he(e.$slots,"tag",{key:0,data:e.states.selected,deleteTag:e.deleteTag,selectDisabled:e.selectDisabled},()=>{var g,m,b,_,w,S,x,C,T,E,k,A,I;return[(L(!0),K(ze,null,Lt(e.showTagList,P=>(L(),K("div",{key:e.getValueKey(P),class:B(e.nsSelect.e("selected-item"))},[V(o,{closable:!e.selectDisabled&&!P.isDisabled,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",style:tt(e.tagStyle),onClose:R=>e.deleteTag(R,P)},{default:G(()=>[j("span",{class:B(e.nsSelect.e("tags-text"))},[he(e.$slots,"label",{index:P.index,label:P.currentLabel,value:P.value},()=>[Le(ce(P.currentLabel),1)])],2)]),_:2},1032,["closable","size","type","effect","style","onClose"])],2))),128)),e.collapseTags&&e.states.selected.length>e.maxCollapseTags?(L(),ve(s,{key:0,ref:"tagTooltipRef",disabled:e.dropdownMenuVisible||!e.collapseTagsTooltip,"fallback-placements":((g=e.tagTooltip)==null?void 0:g.fallbackPlacements)??["bottom","top","right","left"],effect:((m=e.tagTooltip)==null?void 0:m.effect)??e.effect,placement:((b=e.tagTooltip)==null?void 0:b.placement)??"bottom","popper-class":((_=e.tagTooltip)==null?void 0:_.popperClass)??e.popperClass,"popper-style":((w=e.tagTooltip)==null?void 0:w.popperStyle)??e.popperStyle,teleported:((S=e.tagTooltip)==null?void 0:S.teleported)??e.teleported,"append-to":((x=e.tagTooltip)==null?void 0:x.appendTo)??e.appendTo,"popper-options":((C=e.tagTooltip)==null?void 0:C.popperOptions)??e.popperOptions,transition:(T=e.tagTooltip)==null?void 0:T.transition,"show-after":(E=e.tagTooltip)==null?void 0:E.showAfter,"hide-after":(k=e.tagTooltip)==null?void 0:k.hideAfter,"auto-close":(A=e.tagTooltip)==null?void 0:A.autoClose,offset:(I=e.tagTooltip)==null?void 0:I.offset},{default:G(()=>[j("div",{ref:"collapseItemRef",class:B(e.nsSelect.e("selected-item"))},[V(o,{closable:!1,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",style:tt(e.collapseTagStyle)},{default:G(()=>[j("span",{class:B(e.nsSelect.e("tags-text"))}," + "+ce(e.states.selected.length-e.maxCollapseTags),3)]),_:1},8,["size","type","effect","style"])],2)]),content:G(()=>[j("div",{ref:"tagMenuRef",class:B(e.nsSelect.e("selection"))},[(L(!0),K(ze,null,Lt(e.collapseTagList,P=>(L(),K("div",{key:e.getValueKey(P),class:B(e.nsSelect.e("selected-item"))},[V(o,{class:"in-tooltip",closable:!e.selectDisabled&&!P.isDisabled,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",onClose:R=>e.deleteTag(R,P)},{default:G(()=>[j("span",{class:B(e.nsSelect.e("tags-text"))},[he(e.$slots,"label",{index:P.index,label:P.currentLabel,value:P.value},()=>[Le(ce(P.currentLabel),1)])],2)]),_:2},1032,["closable","size","type","effect","onClose"])],2))),128))],2)]),_:3},8,["disabled","fallback-placements","effect","placement","popper-class","popper-style","teleported","append-to","popper-options","transition","show-after","hide-after","auto-close","offset"])):fe("v-if",!0)]}):fe("v-if",!0),j("div",{class:B([e.nsSelect.e("selected-item"),e.nsSelect.e("input-wrapper"),e.nsSelect.is("hidden",!e.filterable||e.selectDisabled||e.multiple&&!e.states.inputValue&&!e.isFocused)])},[j("input",{id:e.inputId,ref:"inputRef",value:e.states.inputValue,type:"text",name:e.name,class:B([e.nsSelect.e("input"),e.nsSelect.is(e.selectSize)]),disabled:e.selectDisabled,autocomplete:e.autocomplete,style:tt(e.inputStyle),tabindex:e.tabindex,role:"combobox",readonly:!e.filterable,spellcheck:"false","aria-activedescendant":((p=e.hoverOption)==null?void 0:p.id)||"","aria-controls":e.contentId,"aria-expanded":e.dropdownMenuVisible,"aria-label":e.ariaLabel,"aria-autocomplete":"none","aria-haspopup":"listbox",onKeydown:t[0]||(t[0]=(...g)=>e.handleKeydown&&e.handleKeydown(...g)),onCompositionstart:t[1]||(t[1]=(...g)=>e.handleCompositionStart&&e.handleCompositionStart(...g)),onCompositionupdate:t[2]||(t[2]=(...g)=>e.handleCompositionUpdate&&e.handleCompositionUpdate(...g)),onCompositionend:t[3]||(t[3]=(...g)=>e.handleCompositionEnd&&e.handleCompositionEnd(...g)),onInput:t[4]||(t[4]=(...g)=>e.onInput&&e.onInput(...g)),onChange:t[5]||(t[5]=ut(()=>{},["stop"])),onClick:t[6]||(t[6]=ut((...g)=>e.toggleMenu&&e.toggleMenu(...g),["stop"]))},null,46,Pge),e.filterable?(L(),K("span",{key:0,ref:"calculatorRef","aria-hidden":"true",class:B(e.nsSelect.e("input-calculator")),textContent:ce(e.states.inputValue)},null,10,Lge)):fe("v-if",!0)],2),e.shouldShowPlaceholder?(L(),K("div",{key:1,class:B([e.nsSelect.e("selected-item"),e.nsSelect.e("placeholder"),e.nsSelect.is("transparent",!e.hasModelValue||e.expanded&&!e.states.inputValue)])},[e.hasModelValue?he(e.$slots,"label",{key:0,index:e.getOption(e.modelValue).index,label:e.currentPlaceholder,value:e.modelValue},()=>[j("span",null,ce(e.currentPlaceholder),1)]):(L(),K("span",Dge,ce(e.currentPlaceholder),1))],2)):fe("v-if",!0)],2),j("div",{ref:"suffixRef",class:B(e.nsSelect.e("suffix"))},[e.iconComponent&&!e.showClearBtn?(L(),ve(l,{key:0,class:B([e.nsSelect.e("caret"),e.nsSelect.e("icon"),e.iconReverse])},{default:G(()=>[(L(),ve(Et(e.iconComponent)))]),_:1},8,["class"])):fe("v-if",!0),e.showClearBtn&&e.clearIcon?(L(),ve(l,{key:1,class:B([e.nsSelect.e("caret"),e.nsSelect.e("icon"),e.nsSelect.e("clear")]),onClick:e.handleClearClick},{default:G(()=>[(L(),ve(Et(e.clearIcon)))]),_:1},8,["class","onClick"])):fe("v-if",!0),e.validateState&&e.validateIcon&&e.needStatusIcon?(L(),ve(l,{key:2,class:B([e.nsInput.e("icon"),e.nsInput.e("validateIcon"),e.nsInput.is("loading",e.validateState==="validating")])},{default:G(()=>[(L(),ve(Et(e.validateIcon)))]),_:1},8,["class"])):fe("v-if",!0)],2)],2)]}),content:G(()=>[V(h,{ref:"menuRef"},{default:G(()=>[e.$slots.header?(L(),K("div",{key:0,class:B(e.nsSelect.be("dropdown","header")),onClick:t[8]||(t[8]=ut(()=>{},["stop"]))},[he(e.$slots,"header")],2)):fe("v-if",!0),gt(V(f,{id:e.contentId,ref:"scrollbarRef",tag:"ul","wrap-class":e.nsSelect.be("dropdown","wrap"),"view-class":e.nsSelect.be("dropdown","list"),class:B([e.nsSelect.is("empty",e.filteredOptionsCount===0)]),role:"listbox","aria-label":e.ariaLabel,"aria-orientation":"vertical",onScroll:e.popupScroll,onEndReached:e.endReached},{default:G(()=>[e.showNewOption?(L(),ve(u,{key:0,value:e.states.inputValue,created:!0},null,8,["value"])):fe("v-if",!0),V(d,null,{default:G(()=>[he(e.$slots,"default",{},()=>[(L(!0),K(ze,null,Lt(e.options,(p,g)=>{var m;return L(),K(ze,{key:g},[(m=e.getOptions(p))!=null&&m.length?(L(),ve(c,{key:0,label:e.getLabel(p),disabled:e.getDisabled(p)},{default:G(()=>[(L(!0),K(ze,null,Lt(e.getOptions(p),b=>(L(),ve(u,Mt({key:e.getValue(b)},{ref_for:!0},e.getOptionProps(b)),null,16))),128))]),_:2},1032,["label","disabled"])):(L(),ve(u,Mt({key:1,ref_for:!0},e.getOptionProps(p)),null,16))],64)}),128))])]),_:3})]),_:3},8,["id","wrap-class","view-class","class","aria-label","onScroll","onEndReached"]),[[ln,e.states.options.size>0&&!e.loading]]),e.$slots.loading&&e.loading?(L(),K("div",{key:1,class:B(e.nsSelect.be("dropdown","loading"))},[he(e.$slots,"loading")],2)):e.loading||e.filteredOptionsCount===0?(L(),K("div",{key:2,class:B(e.nsSelect.be("dropdown","empty"))},[he(e.$slots,"empty",{},()=>[j("span",null,ce(e.emptyText),1)])],2)):fe("v-if",!0),e.$slots.footer?(L(),K("div",{key:3,class:B(e.nsSelect.be("dropdown","footer")),onClick:t[9]||(t[9]=ut(()=>{},["stop"]))},[he(e.$slots,"footer")],2)):fe("v-if",!0)]),_:3},512)]),_:3},8,["visible","placement","teleported","popper-class","popper-style","popper-options","fallback-placements","effect","transition","persistent","append-to","show-arrow","offset","onBeforeShow"])],16)),[[v,e.handleClickOutside,e.popperRef]])}var Oge=Gr(Mge,[["render",Rge]]);const bc=xt(Oge,{Option:mM,OptionGroup:yM}),j1=rr(mM),Nge=rr(yM),Vge=(e,t)=>{const n=e.subtract(1,"month").endOf("month").date();return oc(t).map((r,a)=>n-(t-a-1))},$ge=e=>oc(e.daysInMonth()).map((t,n)=>n+1),Bge=e=>oc(e.length/7).map(t=>{const n=t*7;return e.slice(n,n+7)}),Fge=Oe({selectedDay:{type:oe(Object)},range:{type:oe(Array)},date:{type:oe(Object),required:!0},hideHeader:{type:Boolean}}),zge={pick:e=>yt(e)};var r9={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(du,function(){return function(n,r,a){var i=r.prototype,o=function(d){return d&&(d.indexOf?d:d.s)},s=function(d,f,h,v,p){var g=d.name?d:d.$locale(),m=o(g[f]),b=o(g[h]),_=m||b.map(function(S){return S.slice(0,v)});if(!p)return _;var w=g.weekStart;return _.map(function(S,x){return _[(x+(w||0))%7]})},l=function(){return a.Ls[a.locale()]},u=function(d,f){return d.formats[f]||function(h){return h.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(v,p,g){return p||g.slice(1)})}(d.formats[f.toUpperCase()])},c=function(){var d=this;return{months:function(f){return f?f.format("MMMM"):s(d,"months")},monthsShort:function(f){return f?f.format("MMM"):s(d,"monthsShort","months",3)},firstDayOfWeek:function(){return d.$locale().weekStart||0},weekdays:function(f){return f?f.format("dddd"):s(d,"weekdays")},weekdaysMin:function(f){return f?f.format("dd"):s(d,"weekdaysMin","weekdays",2)},weekdaysShort:function(f){return f?f.format("ddd"):s(d,"weekdaysShort","weekdays",3)},longDateFormat:function(f){return u(d.$locale(),f)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};i.localeData=function(){return c.bind(this)()},a.localeData=function(){var d=l();return{firstDayOfWeek:function(){return d.weekStart||0},weekdays:function(){return a.weekdays()},weekdaysShort:function(){return a.weekdaysShort()},weekdaysMin:function(){return a.weekdaysMin()},months:function(){return a.months()},monthsShort:function(){return a.monthsShort()},longDateFormat:function(f){return u(d,f)},meridiem:d.meridiem,ordinal:d.ordinal}},a.months=function(){return s(l(),"months")},a.monthsShort=function(){return s(l(),"monthsShort","months",3)},a.weekdays=function(d){return s(l(),"weekdays",null,null,d)},a.weekdaysShort=function(d){return s(l(),"weekdaysShort","weekdays",3,d)},a.weekdaysMin=function(d){return s(l(),"weekdaysMin","weekdays",2,d)}}})})(r9);var Hge=r9.exports;const a9=fu(Hge),Wge=(e,t)=>{_t.extend(a9);const n=_t.localeData().firstDayOfWeek(),{t:r,lang:a}=Yt(),i=_t().locale(a.value),o=M(()=>!!e.range&&!!e.range.length),s=M(()=>{let f=[];if(o.value){const[h,v]=e.range,p=oc(v.date()-h.date()+1).map(b=>({text:h.date()+b,type:"current"}));let g=p.length%7;g=g===0?0:7-g;const m=oc(g).map((b,_)=>({text:_+1,type:"next"}));f=p.concat(m)}else{const h=e.date.startOf("month").day(),v=Vge(e.date,(h-n+7)%7).map(m=>({text:m,type:"prev"})),p=$ge(e.date).map(m=>({text:m,type:"current"}));f=[...v,...p];const g=oc(7-(f.length%7||7)).map((m,b)=>({text:b+1,type:"next"}));f=f.concat(g)}return Bge(f)}),l=M(()=>{const f=n;return f===0?dx.map(h=>r(`el.datepicker.weeks.${h}`)):dx.slice(f).concat(dx.slice(0,f)).map(h=>r(`el.datepicker.weeks.${h}`))}),u=(f,h)=>{switch(h){case"prev":return e.date.startOf("month").subtract(1,"month").date(f);case"next":return e.date.startOf("month").add(1,"month").date(f);case"current":return e.date.date(f)}};return{now:i,isInRange:o,rows:s,weekDays:l,getFormattedDate:u,handlePickDay:({text:f,type:h})=>{t("pick",u(f,h))},getSlotData:({text:f,type:h})=>{const v=u(f,h);return{isSelected:v.isSame(e.selectedDay),type:`${h}-month`,day:v.format(Th),date:v.toDate()}}}},Gge={key:0},Uge=["onClick"];var Kge=ye({name:"DateTable",__name:"date-table",props:Fge,emits:zge,setup(e,{expose:t,emit:n}){const r=e,{isInRange:a,now:i,rows:o,weekDays:s,getFormattedDate:l,handlePickDay:u,getSlotData:c}=Wge(r,n),d=Ee("calendar-table"),f=Ee("calendar-day"),h=({text:v,type:p})=>{const g=[p];if(p==="current"){const m=l(v,p);m.isSame(r.selectedDay,"day")&&g.push(f.is("selected")),m.isSame(i,"day")&&g.push(f.is("today"))}return g};return t({getFormattedDate:l}),(v,p)=>(L(),K("table",{class:B([y(d).b(),y(d).is("range",y(a))]),cellspacing:"0",cellpadding:"0"},[e.hideHeader?fe("v-if",!0):(L(),K("thead",Gge,[j("tr",null,[(L(!0),K(ze,null,Lt(y(s),g=>(L(),K("th",{key:g,scope:"col"},ce(g),1))),128))])])),j("tbody",null,[(L(!0),K(ze,null,Lt(y(o),(g,m)=>(L(),K("tr",{key:m,class:B({[y(d).e("row")]:!0,[y(d).em("row","hide-border")]:m===0&&e.hideHeader})},[(L(!0),K(ze,null,Lt(g,(b,_)=>(L(),K("td",{key:_,class:B(h(b)),onClick:w=>y(u)(b)},[j("div",{class:B(y(f).b())},[he(v.$slots,"date-cell",{data:y(c)(b)},()=>[j("span",null,ce(b.text),1)])],2)],10,Uge))),128))],2))),128))])],2))}}),pN=Kge;const Yge=(e,t)=>{const n=e.endOf("month"),r=t.startOf("month"),a=n.isSame(r,"week")?r.add(1,"week"):r;return[[e,n],[a.startOf("week"),t]]},jge=(e,t)=>{const n=e.endOf("month"),r=e.add(1,"month").startOf("month"),a=n.isSame(r,"week")?r.add(1,"week"):r,i=a.endOf("month"),o=t.startOf("month"),s=i.isSame(o,"week")?o.add(1,"week"):o;return[[e,n],[a.startOf("week"),i],[s.startOf("week"),t]]},qge=(e,t,n)=>{const{lang:r}=Yt(),a=H(),i=_t().locale(r.value),o=M({get(){return e.modelValue?l.value:a.value},set(m){if(!m)return;a.value=m;const b=m.toDate();t(Mr,b),t(mt,b)}}),s=M(()=>{if(!e.range||!Me(e.range)||e.range.length!==2||e.range.some(_=>!dc(_)))return[];const[m,b]=e.range.map(_=>_t(_).locale(r.value));return m.isAfter(b)?(wn(n,"end time should be greater than start time"),[]):m.isSame(b,"month")||m.add(1,"month").isSame(b,"month")?h(m,b):(wn(n,"start time and end time interval must not exceed two months"),[])}),l=M(()=>e.modelValue?_t(e.modelValue).locale(r.value):o.value||(s.value.length?s.value[0][0]:i)),u=M(()=>l.value.subtract(1,"month").date(1)),c=M(()=>l.value.add(1,"month").date(1)),d=M(()=>l.value.subtract(1,"year").date(1)),f=M(()=>l.value.add(1,"year").date(1)),h=(m,b)=>{const _=m.startOf("week"),w=b.endOf("week"),S=_.get("month"),x=w.get("month");return S===x?[[_,w]]:(S+1)%12===x?Yge(_,w):S+2===x||(S+1)%11===x?jge(_,w):(wn(n,"start time and end time interval must not exceed two months"),[])},v=m=>{o.value=m},p=m=>{const b={"prev-month":u.value,"next-month":c.value,"prev-year":d.value,"next-year":f.value,today:i}[m];b.isSame(l.value,"day")||v(b)};return{calculateValidatedDateRange:h,date:l,realSelectedDay:o,pickDay:v,selectDate:p,validatedRange:s,handleDateChange:m=>{m==="today"?p("today"):v(m)}}},Xge=Oe({date:{type:oe(Object),required:!0},formatter:{type:oe(Function)}}),Zge={"date-change":e=>yt(e)||qe(e)};var Jge=ye({name:"SelectController",__name:"select-controller",props:Xge,emits:Zge,setup(e,{emit:t}){const n=e,r=t,a=Ee("calendar-select"),{t:i,lang:o}=Yt(),s=Array.from({length:12},(v,p)=>{const g=p+1;return{value:g,label:et(n.formatter)?n.formatter(g,"month"):g}}),l=M(()=>n.date.year()),u=M(()=>n.date.month()+1),c=M(()=>{const v=[];for(let p=-10;p<10;p++){const g=l.value+p;if(g>0){const m=et(n.formatter)?n.formatter(g,"year"):g;v.push({value:g,label:m})}}return v}),d=v=>{r("date-change",_t(new Date(v,u.value-1,1)).locale(o.value))},f=v=>{r("date-change",_t(new Date(l.value,v-1,1)).locale(o.value))},h=()=>{r("date-change","today")};return(v,p)=>(L(),K(ze,null,[V(y(bc),{"model-value":l.value,size:"small",class:B(y(a).e("year")),"validate-event":!1,options:c.value,onChange:d},null,8,["model-value","class","options"]),V(y(bc),{"model-value":u.value,size:"small",class:B(y(a).e("month")),"validate-event":!1,options:y(s),onChange:f},null,8,["model-value","class","options"]),V(y(Xr),{size:"small",onClick:h},{default:G(()=>[Le(ce(y(i)("el.datepicker.today")),1)]),_:1})],64))}}),Qge=Jge;const gN="ElCalendar";var eme=ye({name:gN,__name:"calendar",props:Rpe,emits:Ope,setup(e,{expose:t,emit:n}){const r=Ee("calendar"),{calculateValidatedDateRange:a,date:i,pickDay:o,realSelectedDay:s,selectDate:l,validatedRange:u,handleDateChange:c}=qge(e,n,gN),{t:d}=Yt(),f=M(()=>{const h=`el.datepicker.month${i.value.format("M")}`;return`${i.value.year()} ${d("el.datepicker.year")} ${d(h)}`});return t({selectedDay:s,pickDay:o,selectDate:l,calculateValidatedDateRange:a}),(h,v)=>(L(),K("div",{class:B(y(r).b())},[j("div",{class:B(y(r).e("header"))},[he(h.$slots,"header",{date:f.value},()=>[j("div",{class:B(y(r).e("title"))},ce(f.value),3),y(u).length===0&&e.controllerType==="button"?(L(),K("div",{key:0,class:B(y(r).e("button-group"))},[V(y(DG),null,{default:G(()=>[V(y(Xr),{size:"small",onClick:v[0]||(v[0]=p=>y(l)("prev-month"))},{default:G(()=>[Le(ce(y(d)("el.datepicker.prevMonth")),1)]),_:1}),V(y(Xr),{size:"small",onClick:v[1]||(v[1]=p=>y(l)("today"))},{default:G(()=>[Le(ce(y(d)("el.datepicker.today")),1)]),_:1}),V(y(Xr),{size:"small",onClick:v[2]||(v[2]=p=>y(l)("next-month"))},{default:G(()=>[Le(ce(y(d)("el.datepicker.nextMonth")),1)]),_:1})]),_:1})],2)):y(u).length===0&&e.controllerType==="select"?(L(),K("div",{key:1,class:B(y(r).e("select-controller"))},[V(Qge,{date:y(i),formatter:e.formatter,onDateChange:y(c)},null,8,["date","formatter","onDateChange"])],2)):fe("v-if",!0)])],2),y(u).length===0?(L(),K("div",{key:0,class:B(y(r).e("body"))},[V(pN,{date:y(i),"selected-day":y(s),onPick:y(o)},ui({_:2},[h.$slots["date-cell"]?{name:"date-cell",fn:G(p=>[he(h.$slots,"date-cell",Dl(Rl(p)))]),key:"0"}:void 0]),1032,["date","selected-day","onPick"])],2)):(L(),K("div",{key:1,class:B(y(r).e("body"))},[(L(!0),K(ze,null,Lt(y(u),(p,g)=>(L(),ve(pN,{key:g,date:p[0],"selected-day":y(s),range:p,"hide-header":g!==0,onPick:y(o)},ui({_:2},[h.$slots["date-cell"]?{name:"date-cell",fn:G(m=>[he(h.$slots,"date-cell",Mt({ref_for:!0},m))]),key:"0"}:void 0]),1032,["date","selected-day","range","hide-header","onPick"]))),128))],2))],2))}}),tme=eme;const nme=xt(tme),rme=Oe({header:{type:String,default:""},footer:{type:String,default:""},bodyStyle:{type:oe([String,Object,Array,Boolean]),default:""},headerClass:String,bodyClass:String,footerClass:String,shadow:{type:String,values:["always","hover","never"],default:void 0}});var ame=ye({name:"ElCard",__name:"card",props:rme,setup(e){const t=cu("card"),n=Ee("card");return(r,a)=>{var i;return L(),K("div",{class:B([y(n).b(),y(n).is(`${e.shadow||((i=y(t))==null?void 0:i.shadow)||"always"}-shadow`)])},[r.$slots.header||e.header?(L(),K("div",{key:0,class:B([y(n).e("header"),e.headerClass])},[he(r.$slots,"header",{},()=>[Le(ce(e.header),1)])],2)):fe("v-if",!0),j("div",{class:B([y(n).e("body"),e.bodyClass]),style:tt(e.bodyStyle)},[he(r.$slots,"default")],6),r.$slots.footer||e.footer?(L(),K("div",{key:1,class:B([y(n).e("footer"),e.footerClass])},[he(r.$slots,"footer",{},()=>[Le(ce(e.footer),1)])],2)):fe("v-if",!0)],2)}}}),ime=ame;const ome=xt(ime),sme=Oe({initialIndex:{type:Number,default:0},height:{type:String,default:""},trigger:{type:String,values:["hover","click"],default:"hover"},autoplay:{type:Boolean,default:!0},interval:{type:Number,default:3e3},indicatorPosition:{type:String,values:["","none","outside"],default:""},arrow:{type:String,values:["always","hover","never"],default:"hover"},type:{type:String,values:["","card"],default:""},cardScale:{type:Number,default:.83},loop:{type:Boolean,default:!0},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},pauseOnHover:{type:Boolean,default:!0},motionBlur:Boolean}),lme={change:(e,t)=>[e,t].every(Je)},i9=Symbol("carouselContextKey"),q1="ElCarouselItem",ume=Oe({name:{type:String,default:""},label:{type:[String,Number],default:""}}),mN=300,cme=(e,t,n)=>{const{children:r,addChild:a,removeChild:i,ChildrenSorter:o}=Uw(Tt(),q1),s=pr(),l=H(-1),u=H(null),c=H(!1),d=H(),f=H(0),h=H(!0),v=M(()=>e.arrow!=="never"&&!y(m)),p=M(()=>r.value.some(ee=>ee.props.label.toString().length>0)),g=M(()=>e.type==="card"),m=M(()=>e.direction==="vertical"),b=M(()=>e.height!=="auto"?{height:e.height}:{height:`${f.value}px`,overflow:"hidden"}),_=Ku(ee=>{E(ee)},mN,{trailing:!0}),w=Ku(ee=>{N(ee)},mN),S=ee=>h.value?l.value<=1?ee<=1:ee>1:!0;function x(){u.value&&(clearInterval(u.value),u.value=null)}function C(){e.interval<=0||!e.autoplay||u.value||(u.value=setInterval(()=>T(),e.interval))}const T=()=>{l.valuele.props.name===ee);de.length>0&&(ee=r.value.indexOf(de[0]))}if(ee=Number(ee),Number.isNaN(ee)||ee!==Math.floor(ee)){wn(n,"index must be integer.");return}const se=r.value.length,ne=l.value;ee<0?l.value=e.loop?se-1:0:ee>=se?l.value=e.loop?0:se-1:l.value=ee,ne===l.value&&k(ne),W()}function k(ee){r.value.forEach((se,ne)=>{se.translateItem(ne,l.value,ee)})}function A(ee,se){var pe,me,Pe,Ne;const ne=y(r),de=ne.length;if(de===0||!ee.states.inStage)return!1;const le=se+1,J=se-1,Z=de-1,U=ne[Z].states.active,te=ne[0].states.active,Q=(me=(pe=ne[le])==null?void 0:pe.states)==null?void 0:me.active,ue=(Ne=(Pe=ne[J])==null?void 0:Pe.states)==null?void 0:Ne.active;return se===Z&&te||Q?"left":se===0&&U||ue?"right":!1}function I(){c.value=!0,e.pauseOnHover&&x()}function P(){c.value=!1,C()}function R(ee){y(m)||r.value.forEach((se,ne)=>{ee===A(se,ne)&&(se.states.hover=!0)})}function O(){y(m)||r.value.forEach(ee=>{ee.states.hover=!1})}function $(ee){l.value=ee}function N(ee){e.trigger==="hover"&&ee!==l.value&&(l.value=ee)}function D(){E(l.value-1)}function F(){E(l.value+1)}function W(){x(),(!e.pauseOnHover||!c.value)&&C()}function z(ee){e.height==="auto"&&(f.value=ee)}function Y(){var ne;const ee=(ne=s.default)==null?void 0:ne.call(s);if(!ee)return null;const se=Fi(ee).filter(de=>Vn(de)&&de.type.name==="ElCarouselItem");return(se==null?void 0:se.length)===2&&e.loop&&!g.value?(h.value=!0,se):(h.value=!1,null)}_e(()=>l.value,(ee,se)=>{k(se),h.value&&(ee=ee%2,se=se%2),se>-1&&t(Vt,ee,se)});const q=M({get:()=>h.value?l.value%2:l.value,set:ee=>l.value=ee});_e(()=>e.autoplay,ee=>{ee?C():x()}),_e(()=>e.loop,()=>{E(l.value)}),_e(()=>e.interval,()=>{W()});const re=Ut();return St(()=>{_e(()=>r.value,()=>{r.value.length>0&&E(e.initialIndex)},{immediate:!0}),re.value=Kn(d.value,()=>{k()}),C()}),yn(()=>{x(),d.value&&re.value&&re.value.stop()}),Ft(i9,{root:d,isCardType:g,isVertical:m,items:r,loop:e.loop,cardScale:e.cardScale,addItem:a,removeItem:i,setActiveItem:E,setContainerHeight:z}),{root:d,activeIndex:l,exposeActiveIndex:q,arrowDisplay:v,hasLabel:p,hover:c,isCardType:g,items:r,isVertical:m,containerStyle:b,isItemsTwoLength:h,handleButtonEnter:R,handleButtonLeave:O,handleIndicatorClick:$,handleMouseEnter:I,handleMouseLeave:P,setActiveItem:E,prev:D,next:F,PlaceholderItem:Y,isTwoLengthShow:S,ItemsSorter:o,throttledArrowClick:_,throttledIndicatorHover:w}},dme=["aria-label"],fme=["aria-label"],hme=["onMouseenter","onClick"],vme=["aria-label"],pme={key:0},gme={key:2,xmlns:"http://www.w3.org/2000/svg",version:"1.1",style:{display:"none"}},yN="ElCarousel";var mme=ye({name:yN,__name:"carousel",props:sme,emits:lme,setup(e,{expose:t,emit:n}){const r=e,{root:a,activeIndex:i,exposeActiveIndex:o,arrowDisplay:s,hasLabel:l,hover:u,isCardType:c,items:d,isVertical:f,containerStyle:h,handleButtonEnter:v,handleButtonLeave:p,handleIndicatorClick:g,handleMouseEnter:m,handleMouseLeave:b,setActiveItem:_,prev:w,next:S,PlaceholderItem:x,isTwoLengthShow:C,ItemsSorter:T,throttledArrowClick:E,throttledIndicatorHover:k}=cme(r,n,yN),A=Ee("carousel"),{t:I}=Yt(),P=M(()=>{const N=[A.b(),A.m(r.direction)];return y(c)&&N.push(A.m("card")),N.push(A.is("vertical-outside",y(f)&&r.indicatorPosition==="outside")),N}),R=M(()=>{const N=[A.e("indicators"),A.em("indicators",r.direction)];return y(l)&&N.push(A.em("indicators","labels")),r.indicatorPosition==="outside"&&N.push(A.em("indicators","outside")),y(f)&&N.push(A.em("indicators","right")),N});function O(N){if(!r.motionBlur)return;const D=y(f)?`${A.namespace.value}-transitioning-vertical`:`${A.namespace.value}-transitioning`;N.currentTarget.classList.add(D)}function $(N){if(!r.motionBlur)return;const D=y(f)?`${A.namespace.value}-transitioning-vertical`:`${A.namespace.value}-transitioning`;N.currentTarget.classList.remove(D)}return t({activeIndex:o,setActiveItem:_,prev:w,next:S}),(N,D)=>(L(),K("div",{ref_key:"root",ref:a,class:B(P.value),onMouseenter:D[6]||(D[6]=ut((...F)=>y(m)&&y(m)(...F),["stop"])),onMouseleave:D[7]||(D[7]=ut((...F)=>y(b)&&y(b)(...F),["stop"]))},[y(s)?(L(),ve(ya,{key:0,name:"carousel-arrow-left",persisted:""},{default:G(()=>[gt(j("button",{type:"button",class:B([y(A).e("arrow"),y(A).em("arrow","left")]),"aria-label":y(I)("el.carousel.leftArrow"),onMouseenter:D[0]||(D[0]=F=>y(v)("left")),onMouseleave:D[1]||(D[1]=(...F)=>y(p)&&y(p)(...F)),onClick:D[2]||(D[2]=ut(F=>y(E)(y(i)-1),["stop"]))},[V(y(Ze),null,{default:G(()=>[V(y(Yl))]),_:1})],42,dme),[[ln,(e.arrow==="always"||y(u))&&(e.loop||y(i)>0)]])]),_:1})):fe("v-if",!0),y(s)?(L(),ve(ya,{key:1,name:"carousel-arrow-right",persisted:""},{default:G(()=>[gt(j("button",{type:"button",class:B([y(A).e("arrow"),y(A).em("arrow","right")]),"aria-label":y(I)("el.carousel.rightArrow"),onMouseenter:D[3]||(D[3]=F=>y(v)("right")),onMouseleave:D[4]||(D[4]=(...F)=>y(p)&&y(p)(...F)),onClick:D[5]||(D[5]=ut(F=>y(E)(y(i)+1),["stop"]))},[V(y(Ze),null,{default:G(()=>[V(y(Wa))]),_:1})],42,fme),[[ln,(e.arrow==="always"||y(u))&&(e.loop||y(i)[e.indicatorPosition!=="none"?(L(),K("ul",{key:0,class:B(R.value)},[(L(!0),K(ze,null,Lt(y(d),(F,W)=>gt((L(),K("li",{key:W,class:B([y(A).e("indicator"),y(A).em("indicator",e.direction),y(A).is("active",W===y(i))]),onMouseenter:z=>y(k)(W),onClick:ut(z=>y(g)(W),["stop"])},[j("button",{class:B(y(A).e("button")),"aria-label":y(I)("el.carousel.indicator",{index:W+1})},[y(l)?(L(),K("span",pme,ce(F.props.label),1)):fe("v-if",!0)],10,vme)],42,hme)),[[ln,y(C)(W)]])),128))],2)):fe("v-if",!0)]),_:1}),e.motionBlur?(L(),K("svg",gme,[...D[8]||(D[8]=[j("defs",null,[j("filter",{id:"elCarouselHorizontal"},[j("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"12,0"})]),j("filter",{id:"elCarouselVertical"},[j("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"0,10"})])],-1)])])):fe("v-if",!0)],34))}}),yme=mme;const bme=e=>{const t=Ge(i9),n=Tt();t||wn(q1,"usage: "),n||wn(q1,"compositional hook can only be invoked inside setups");const r=H(),a=H(!1),i=H(0),o=H(1),s=H(!1),l=H(!1),u=H(!1),c=H(!1),{isCardType:d,isVertical:f,cardScale:h}=t;function v(w,S,x){const C=x-1,T=S-1,E=S+1,k=x/2;return S===0&&w===C?-1:S===C&&w===0?x:w=k?x+1:w>E&&w-S>=k?-2:w}function p(w,S){var C,T;const x=y(f)?((C=t.root.value)==null?void 0:C.offsetHeight)||0:((T=t.root.value)==null?void 0:T.offsetWidth)||0;return u.value?x*((2-h)*(w-S)+1)/4:w{const C=y(d),T=t.items.value.length??NaN,E=w===S;!C&&!qt(x)&&(c.value=E||w===x),!E&&T>2&&t.loop&&(w=v(w,S,T));const k=y(f);s.value=E,C?(u.value=Math.round(Math.abs(w-S))<=1,i.value=p(w,S),o.value=y(s)?1:h):i.value=g(w,S,k),l.value=!0,E&&r.value&&t.setContainerHeight(r.value.offsetHeight)};function b(){if(t&&y(d)){const w=t.items.value.findIndex(({uid:S})=>S===n.uid);t.setActiveItem(w)}}const _={props:e,states:Qt({hover:a,translate:i,scale:o,active:s,ready:l,inStage:u,animating:c}),uid:n.uid,getVnode:()=>n.vnode,translateItem:m};return t.addItem(_),yn(()=>{t.removeItem(_)}),{carouselItemRef:r,active:s,animating:c,hover:a,inStage:u,isVertical:f,translate:i,isCardType:d,scale:o,ready:l,handleItemClick:b}};var _me=ye({name:q1,__name:"carousel-item",props:ume,setup(e){const t=e,n=Ee("carousel"),{carouselItemRef:r,active:a,animating:i,hover:o,inStage:s,isVertical:l,translate:u,isCardType:c,scale:d,ready:f,handleItemClick:h}=bme(t),v=M(()=>[n.e("item"),n.is("active",a.value),n.is("in-stage",s.value),n.is("hover",o.value),n.is("animating",i.value),{[n.em("item","card")]:c.value,[n.em("item","card-vertical")]:c.value&&l.value}]),p=M(()=>({transform:[`${`translate${y(l)?"Y":"X"}`}(${y(u)}px)`,`scale(${y(d)})`].join(" ")}));return(g,m)=>gt((L(),K("div",{ref_key:"carouselItemRef",ref:r,class:B(v.value),style:tt(p.value),onClick:m[0]||(m[0]=(...b)=>y(h)&&y(h)(...b))},[y(c)?gt((L(),K("div",{key:0,class:B(y(n).e("mask"))},null,2)),[[ln,!y(a)]]):fe("v-if",!0),he(g.$slots,"default")],6)),[[ln,y(f)]])}}),o9=_me;const wme=xt(yme,{CarouselItem:o9}),Sme=rr(o9),s9=Oe({modelValue:{type:oe([Number,String,Array,Object])},options:{type:oe(Array),default:()=>[]},props:{type:oe(Object),default:()=>({})},virtualScroll:Boolean,itemSize:{type:Number,default:34},height:{type:Number,default:204}}),xme={expandTrigger:"click",multiple:!1,checkStrictly:!1,emitPath:!0,lazy:!1,lazyLoad:It,value:"value",label:"label",children:"children",leaf:"leaf",disabled:"disabled",hoverThreshold:500,checkOnClickNode:!1,checkOnClickLeaf:!0,showPrefix:!0},Cme=Oe({...s9,border:{type:Boolean,default:!0},renderLabel:{type:Function}}),bN=e=>!0,Tme={[mt]:bN,[Vt]:bN,close:()=>!0,"expand-change":e=>e},Eme=e=>M(()=>({...xme,...e.props})),X1="itemRendered",Z1="scroll",Lx="end-reached",J1="forward",kme="backward",mo="auto",bm="start",Ls="center",Ame="horizontal",l9="vertical",_m="negative",bM="positive-ascending",_M="positive-descending",Ime={[Ame]:"left",[l9]:"top"},SE=us({type:oe([Number,Function]),required:!0}),xE=us({type:Number}),CE=us({type:Number,default:2}),Mme=us({type:String,values:["ltr","rtl"],default:"ltr"}),TE=us({type:Number,default:0}),Q1=us({type:Number,required:!0}),u9=us({type:String,values:["horizontal","vertical"],default:l9}),c9=Oe({className:{type:String,default:""},containerElement:{type:oe([String,Object]),default:"div"},data:{type:oe(Array),default:()=>sr([])},direction:Mme,height:{type:[String,Number],required:!0},innerElement:{type:[String,Object],default:"div"},innerProps:{type:oe(Object),default:()=>({})},style:{type:oe([Object,String,Array,Boolean]),default:void 0},useIsScrolling:Boolean,width:{type:[Number,String],required:!1},innerWidth:{type:[Number,String],required:!1},perfMode:{type:Boolean,default:!0},scrollbarAlwaysOn:Boolean}),d9=Oe({cache:CE,estimatedItemSize:xE,layout:u9,initScrollOffset:TE,total:Q1,itemSize:SE,...c9}),EE={type:Number,default:6},f9={type:Number,default:0},h9={type:Number,default:2},Zd=Oe({columnCache:CE,columnWidth:SE,estimatedColumnWidth:xE,estimatedRowHeight:xE,initScrollLeft:TE,initScrollTop:TE,itemKey:{type:oe(Function),default:({columnIndex:e,rowIndex:t})=>`${t}:${e}`},rowCache:CE,rowHeight:SE,totalColumn:Q1,totalRow:Q1,hScrollbarSize:EE,vScrollbarSize:EE,scrollbarStartGap:f9,scrollbarEndGap:h9,role:String,...c9}),v9=Oe({alwaysOn:Boolean,class:String,layout:u9,total:Q1,ratio:{type:Number,required:!0},clientSize:{type:Number,required:!0},scrollFrom:{type:Number,required:!0},scrollbarSize:EE,startGap:f9,endGap:h9,visible:Boolean}),lg=(e,t)=>ee==="ltr"||e==="rtl"||e==="horizontal",_N=e=>e==="rtl";let Zf=null;function e_(e=!1){if(Zf===null||e){const t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";const r=document.createElement("div"),a=r.style;return a.width="100px",a.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?Zf=_M:(t.scrollLeft=1,t.scrollLeft===0?Zf=_m:Zf=bM),document.body.removeChild(t),Zf}return Zf}function Pme({move:e,size:t,bar:n},r){const a={},i=`translate${n.axis}(${e}px)`;return a[n.size]=t,a.transform=i,r==="horizontal"?a.height="100%":a.width="100%",a}var wN=Number.isNaN||function(t){return typeof t=="number"&&t!==t};function Lme(e,t){return!!(e===t||wN(e)&&wN(t))}function Dme(e,t){if(e.length!==t.length)return!1;for(var n=0;n{const e=Tt().proxy.$props;return M(()=>{const t=(n,r,a)=>({});return e.perfMode?Pw(t):Rme(t)})},g9=({atEndEdge:e,atStartEdge:t,layout:n},r)=>{let a,i=0;const o=l=>l<0&&t.value||l>0&&e.value;return{hasReachedEdge:o,onWheel:l=>{Zo(a);let{deltaX:u,deltaY:c}=l;l.shiftKey&&c!==0&&(u=c,c=0);const d=n.value==="horizontal"?u:c;o(d)||(i+=d,!$w()&&d!==0&&l.preventDefault(),a=Pi(()=>{r(i),i=0}))}}},kE=ye({name:"ElVirtualScrollBar",props:v9,emits:["scroll","start-move","stop-move"],setup(e,{emit:t}){const n=M(()=>e.startGap+e.endGap),r=Ee("virtual-scrollbar"),a=Ee("scrollbar"),i=H(),o=H();let s=null,l=null;const u=Qt({isDragging:!1,traveled:0}),c=M(()=>SG[e.layout]),d=M(()=>e.clientSize-y(n)),f=M(()=>({position:"absolute",width:`${e.layout==="horizontal"?d.value:e.scrollbarSize}px`,height:`${e.layout==="horizontal"?e.scrollbarSize:d.value}px`,[Ime[e.layout]]:"2px",right:"2px",bottom:"2px",borderRadius:"4px"})),h=M(()=>{const x=e.ratio;if(x>=100)return Number.POSITIVE_INFINITY;if(x>=50)return x*d.value/100;const C=d.value/3;return Math.floor(Math.min(Math.max(x*d.value/100,20),C))}),v=M(()=>{if(!Number.isFinite(h.value))return{display:"none"};const x=`${h.value}px`;return Pme({bar:c.value,size:x,move:u.traveled},e.layout)}),p=M(()=>Math.ceil(e.clientSize-h.value-y(n))),g=()=>{window.addEventListener("mousemove",w),window.addEventListener("mouseup",_);const x=y(o);x&&(l=document.onselectstart,document.onselectstart=()=>!1,x.addEventListener("touchmove",w,{passive:!0}),x.addEventListener("touchend",_))},m=()=>{window.removeEventListener("mousemove",w),window.removeEventListener("mouseup",_),document.onselectstart=l,l=null;const x=y(o);x&&(x.removeEventListener("touchmove",w),x.removeEventListener("touchend",_))},b=x=>{x.stopImmediatePropagation(),!(x.ctrlKey||[1,2].includes(x.button))&&(u.isDragging=!0,u[c.value.axis]=x.currentTarget[c.value.offset]-(x[c.value.client]-x.currentTarget.getBoundingClientRect()[c.value.direction]),t("start-move"),g())},_=()=>{u.isDragging=!1,u[c.value.axis]=0,t("stop-move"),m()},w=x=>{const{isDragging:C}=u;if(!C||!o.value||!i.value)return;const T=u[c.value.axis];if(!T)return;Zo(s);const E=(i.value.getBoundingClientRect()[c.value.direction]-x[c.value.client])*-1-(o.value[c.value.offset]-T);s=Pi(()=>{u.traveled=Math.max(0,Math.min(E,p.value)),t("scroll",E,p.value)})},S=x=>{const C=Math.abs(x.target.getBoundingClientRect()[c.value.direction]-x[c.value.client])-o.value[c.value.offset]/2;u.traveled=Math.max(0,Math.min(C,p.value)),t("scroll",C,p.value)};return _e(()=>e.scrollFrom,x=>{u.isDragging||(u.traveled=Math.ceil(x*p.value))}),yn(()=>{m()}),()=>ot("div",{role:"presentation",ref:i,class:[r.b(),e.class,(e.alwaysOn||u.isDragging)&&"always-on"],style:f.value,onMousedown:ut(S,["stop","prevent"]),onTouchstartPrevent:b},ot("div",{ref:o,class:a.e("thumb"),style:v.value,onMousedown:b},[]))}}),m9=({name:e,getOffset:t,getItemSize:n,getItemOffset:r,getEstimatedTotalSize:a,getStartIndexForOffset:i,getStopIndexForStartIndex:o,initCache:s,clearCache:l,validateProps:u})=>ye({name:e??"ElVirtualList",props:d9,emits:[X1,Z1,Lx],setup(c,{emit:d,expose:f}){u(c);const h=Tt(),v=Ee("vl"),p=H(s(c,h)),g=p9(),m=H(),b=H(),_=H(),w=H({isScrolling:!1,scrollDir:J1,scrollOffset:Je(c.initScrollOffset)?c.initScrollOffset:0,updateRequested:!1,isScrollbarDragging:!1}),S=M(()=>{const{total:U,cache:te}=c,{isScrolling:Q,scrollDir:ue,scrollOffset:pe}=y(w);if(U===0)return[0,0,0,0];const me=i(c,pe,y(p)),Pe=o(c,me,pe,y(p)),Ne=!Q||ue==="backward"?Math.max(1,te):1,ie=!Q||ue==="forward"?Math.max(1,te):1;return[Math.max(0,me-Ne),Math.max(0,Math.min(U-1,Pe+ie)),me,Pe]}),x=M(()=>a(c,y(p))),C=M(()=>wm(c.layout)),T=M(()=>[{position:"relative",[`overflow-${C.value?"x":"y"}`]:"scroll",WebkitOverflowScrolling:"touch",willChange:"transform"},{direction:c.direction,height:Je(c.height)?`${c.height}px`:c.height,width:Je(c.width)?`${c.width}px`:c.width},c.style]),E=M(()=>{const U=y(x),te=y(C),Q=c.innerWidth;return{height:te?"100%":`${U}px`,pointerEvents:y(w).isScrolling?"none":void 0,width:te?`${U}px`:Q!==void 0?Je(Q)?`${Q}px`:Q:"100%",margin:0,boxSizing:"border-box"}}),k=M(()=>C.value?c.width:c.height),A=M(()=>Math.max(0,x.value-k.value)),I=U=>Nw(U,0,A.value),P=1,R=U=>({start:!Gs(U,0,P),end:!Gs(A.value,U,P)}),O=M(()=>I(w.value.scrollOffset)),$=M(()=>R(O.value));let N=$.value;const{onWheel:D}=g9({atStartEdge:M(()=>$.value.start),atEndEdge:M(()=>$.value.end),layout:M(()=>c.layout)},U=>{var te,Q;(Q=(te=_.value).onMouseUp)==null||Q.call(te),se(Math.min(w.value.scrollOffset+U,A.value))});gn(m,"wheel",D,{passive:!1});const F=()=>{const{total:U}=c;if(U>0){const[pe,me,Pe,Ne]=y(S);d(X1,pe,me,Pe,Ne)}const{scrollDir:te,scrollOffset:Q,updateRequested:ue}=y(w);d(Z1,te,Q,ue)},W=(U,te)=>{const Q=R(te),ue=c.direction==="rtl"?"left":"right",pe=c.direction==="rtl"?"right":"left";U==="forward"&&Q.end&&!N.end&&d(Lx,C.value?ue:"bottom"),U==="backward"&&Q.start&&!N.start&&d(Lx,C.value?pe:"top"),N=Q},z=(U,{isScrolling:te,updateRequested:Q})=>{const ue=y(w),pe=Math.max(U,0);if(pe===ue.scrollOffset)return;const me=lg(ue.scrollOffset,pe);w.value={...ue,isScrolling:te,scrollDir:me,scrollOffset:pe,updateRequested:Q},W(me,I(pe)),Ue(le)},Y=U=>{const{clientHeight:te,scrollHeight:Q,scrollTop:ue}=U.currentTarget;y(w).scrollOffset!==ue&&z(Math.min(ue,Q-te),{isScrolling:!0,updateRequested:!1})},q=U=>{const{clientWidth:te,scrollLeft:Q,scrollWidth:ue}=U.currentTarget;if(y(w).scrollOffset===Q)return;const{direction:pe}=c;let me=Q;if(pe==="rtl")switch(e_()){case _m:me=-Q;break;case _M:me=ue-te-Q;break}z(Math.min(me,ue-te),{isScrolling:!0,updateRequested:!1})},re=U=>{y(C)?q(U):Y(U),F()},ee=(U,te)=>{const Q=A.value/te*U;se(Math.min(A.value,Q))},se=U=>{z(U,{isScrolling:y(w).isScrolling,updateRequested:!0})},ne=(U,te=mo)=>{const{scrollOffset:Q}=y(w);U=Math.max(0,Math.min(U,c.total-1)),se(t(c,U,te,Q,y(p)))},de=U=>{const{direction:te,itemSize:Q,layout:ue}=c,pe=g.value(l&&Q,l&&ue,l&&te);let me;if(un(pe,String(U)))me=pe[U];else{const Pe=r(c,U,y(p)),Ne=n(c,U,y(p)),ie=y(C),ae=te==="rtl",ge=ie?Pe:0;pe[U]=me={position:"absolute",left:ae?void 0:`${ge}px`,right:ae?`${ge}px`:void 0,top:ie?0:`${Pe}px`,height:ie?"100%":`${Ne}px`,width:ie?`${Ne}px`:"100%"}}return me},le=()=>{w.value.isScrolling=!1,Ue(()=>{g.value(-1,null,null)})},J=()=>{const U=m.value;U&&(U.scrollTop=0)};St(()=>{if(!cn)return;const{initScrollOffset:U}=c,te=y(m);Je(U)&&te&&(y(C)?te.scrollLeft=U:te.scrollTop=U),F()}),is(()=>{const{direction:U,layout:te}=c,{scrollOffset:Q,updateRequested:ue}=y(w),pe=y(m);if(ue&&pe)if(te==="horizontal")if(U==="rtl")switch(e_()){case _m:pe.scrollLeft=-Q;break;case bM:pe.scrollLeft=Q;break;default:{const{clientWidth:me,scrollWidth:Pe}=pe;pe.scrollLeft=Pe-me-Q;break}}else pe.scrollLeft=Q;else pe.scrollTop=Q}),cy(()=>{y(m).scrollTop=y(w).scrollOffset}),_e(A,()=>{N=$.value});const Z={ns:v,clientSize:k,estimatedTotalSize:x,windowStyle:T,windowRef:m,innerRef:b,innerStyle:E,itemsToRender:S,scrollbarRef:_,states:w,getItemStyle:de,onScroll:re,onScrollbarScroll:ee,onWheel:D,scrollTo:se,scrollToItem:ne,resetScrollTop:J};return f({windowRef:m,innerRef:b,getItemStyleCache:g,scrollTo:se,scrollToItem:ne,resetScrollTop:J,states:w}),Z},render(c){var z;const{$slots:d,className:f,clientSize:h,containerElement:v,data:p,getItemStyle:g,innerElement:m,itemsToRender:b,innerStyle:_,layout:w,scrollbarAlwaysOn:S,total:x,onScroll:C,onScrollbarScroll:T,states:E,useIsScrolling:k,windowStyle:A,ns:I}=c,[P,R]=b,O=Et(v),$=Et(m),N=[];if(x>0)for(let Y=P;Y<=R;Y++)N.push(ot(ze,{key:Y},(z=d.default)==null?void 0:z.call(d,{data:p,index:Y,isScrolling:k?E.isScrolling:void 0,style:g(Y)})));const D=[ot($,Mt(c.innerProps,{style:_,ref:"innerRef"}),qe($)?N:{default:()=>N})],F=ot(kE,{ref:"scrollbarRef",clientSize:h,layout:w,onScroll:T,ratio:h*100/this.estimatedTotalSize,scrollFrom:E.scrollOffset/(this.estimatedTotalSize-h),total:x,alwaysOn:S}),W=ot(O,{class:[I.e("window"),f],style:A,onScroll:C,ref:"windowRef",key:0},qe(O)?[D]:{default:()=>[D]});return ot("div",{key:0,class:[I.e("wrapper"),S?"always-on":""]},[W,F])}}),Zw=m9({name:"ElFixedSizeList",getItemOffset:({itemSize:e},t)=>t*e,getItemSize:({itemSize:e})=>e,getEstimatedTotalSize:({total:e,itemSize:t})=>t*e,getOffset:({height:e,total:t,itemSize:n,layout:r,width:a},i,o,s)=>{const l=wm(r)?a:e;qe(l)&&nr("[ElVirtualList]",` + You should set + width/height + to number when your layout is + horizontal/vertical + `);const u=Math.max(0,t*n-l),c=Math.min(u,i*n),d=Math.max(0,(i+1)*n-l);switch(o==="smart"&&(s>=d-l&&s<=c+l?o=mo:o=Ls),o){case bm:return c;case"end":return d;case Ls:{const f=Math.round(d+(c-d)/2);return fu+Math.floor(l/2)?u:f}case mo:default:return s>=d&&s<=c?s:sMath.max(0,Math.min(e-1,Math.floor(n/t))),getStopIndexForStartIndex:({height:e,total:t,itemSize:n,layout:r,width:a},i,o)=>{const s=i*n,l=wm(r)?a:e,u=Math.ceil((l+o-s)/n);return Math.max(0,Math.min(t-1,i+u-1))},initCache(){},clearCache:!0,validateProps(){}}),Ome="ElDynamicSizeList",Rh=(e,t,n)=>{const{itemSize:r}=e,{items:a,lastVisitedIndex:i}=n;if(t>i){let o=0;if(i>=0){const s=a[i];o=s.offset+s.size}for(let s=i+1;s<=t;s++){const l=r(s);a[s]={offset:o,size:l},o+=l}n.lastVisitedIndex=t}return a[t]},Nme=(e,t,n)=>{const{items:r,lastVisitedIndex:a}=t;return(a>0?r[a].offset:0)>=n?y9(e,t,0,a,n):Vme(e,t,Math.max(0,a),n)},y9=(e,t,n,r,a)=>{for(;n<=r;){const i=n+Math.floor((r-n)/2),o=Rh(e,i,t).offset;if(o===a)return i;oa&&(r=i-1)}return Math.max(0,n-1)},Vme=(e,t,n,r)=>{const{total:a}=e;let i=1;for(;n{let a=0;if(r>=e&&(r=e-1),r>=0){const o=t[r];a=o.offset+o.size}const i=(e-r-1)*n;return a+i},$me=m9({name:"ElDynamicSizeList",getItemOffset:(e,t,n)=>Rh(e,t,n).offset,getItemSize:(e,t,{items:n})=>n[t].size,getEstimatedTotalSize:SN,getOffset:(e,t,n,r,a)=>{const{height:i,layout:o,width:s}=e,l=wm(o)?s:i,u=Rh(e,t,a),c=SN(e,a),d=Math.max(0,Math.min(c-l,u.offset)),f=Math.max(0,u.offset-l+u.size);switch(n==="smart"&&(r>=f-l&&r<=d+l?n=mo:n=Ls),n){case bm:return d;case"end":return f;case Ls:return Math.round(f+(d-f)/2);case mo:default:return r>=f&&r<=d?r:rNme(e,n,t),getStopIndexForStartIndex:(e,t,n,r)=>{const{height:a,total:i,layout:o,width:s}=e,l=wm(o)?s:a,u=Rh(e,t,r),c=n+l;let d=u.offset+u.size,f=t;for(;f{var i,o;n.lastVisitedIndex=Math.min(n.lastVisitedIndex,r-1),(i=t.exposed)==null||i.getItemStyleCache(-1),a&&((o=t.proxy)==null||o.$forceUpdate())},n},clearCache:!1,validateProps:({itemSize:e})=>{typeof e!="function"&&nr(Ome,` + itemSize is required as function, but the given value was ${typeof e} + `)}}),Bme=({atXEndEdge:e,atXStartEdge:t,atYEndEdge:n,atYStartEdge:r},a)=>{let i=null,o=0,s=0;const l=(c,d)=>{const f=c<0&&t.value||c>0&&e.value,h=d<0&&r.value||d>0&&n.value;return f||h};return{hasReachedEdge:l,onWheel:c=>{Zo(i);let d=c.deltaX,f=c.deltaY;if(Math.abs(d)>Math.abs(f)?f=0:d=0,c.shiftKey&&f!==0&&(d=f,f=0),l(d,f)){c.deltaX!==0&&d===0&&c.preventDefault();return}o+=d,s+=f,c.preventDefault(),i=Pi(()=>{a(o,s),o=0,s=0})}}},Fme=(e,t,n,r,a,i,o)=>{const s=H(0),l=H(0);let u,c=0,d=0;const f=v=>{Zo(u),s.value=v.touches[0].clientX,l.value=v.touches[0].clientY,c=0,d=0},h=v=>{v.preventDefault(),Zo(u),c+=s.value-v.touches[0].clientX,d+=l.value-v.touches[0].clientY,s.value=v.touches[0].clientX,l.value=v.touches[0].clientY,u=Pi(()=>{const p=r.value-y(i),g=a.value-y(o);n({scrollLeft:Math.min(t.value.scrollLeft+c,p),scrollTop:Math.min(t.value.scrollTop+d,g)}),c=0,d=0})};return gn(e,"touchstart",f,{passive:!0}),gn(e,"touchmove",h,{passive:!1}),{touchStartX:s,touchStartY:l,handleTouchStart:f,handleTouchMove:h}},b9=({name:e,clearCache:t,getColumnPosition:n,getColumnStartIndexForOffset:r,getColumnStopIndexForStartIndex:a,getEstimatedTotalHeight:i,getEstimatedTotalWidth:o,getColumnOffset:s,getRowOffset:l,getRowPosition:u,getRowStartIndexForOffset:c,getRowStopIndexForStartIndex:d,initCache:f,injectToInstance:h,validateProps:v})=>ye({name:e??"ElVirtualList",props:Zd,emits:[X1,Z1],setup(p,{emit:g,expose:m,slots:b}){const _=Ee("vl");v(p);const w=Tt(),S=H(f(p,w));h==null||h(w,S);const x=H(),C=H(),T=H(),E=H(),k=H({isScrolling:!1,scrollLeft:Je(p.initScrollLeft)?p.initScrollLeft:0,scrollTop:Je(p.initScrollTop)?p.initScrollTop:0,updateRequested:!1,xAxisScrollDir:J1,yAxisScrollDir:J1}),A=p9(),I=M(()=>Number.parseInt(`${p.height}`,10)),P=M(()=>Number.parseInt(`${p.width}`,10)),R=M(()=>{const{totalColumn:ae,totalRow:ge,columnCache:be}=p,{isScrolling:$e,xAxisScrollDir:Re,scrollLeft:Se}=y(k);if(ae===0||ge===0)return[0,0,0,0];const Ae=r(p,Se,y(S)),nt=a(p,Ae,Se,y(S)),at=!$e||Re==="backward"?Math.max(1,be):1,zt=!$e||Re==="forward"?Math.max(1,be):1;return[Math.max(0,Ae-at),Math.max(0,Math.min(ae-1,nt+zt)),Ae,nt]}),O=M(()=>{const{totalColumn:ae,totalRow:ge,rowCache:be}=p,{isScrolling:$e,yAxisScrollDir:Re,scrollTop:Se}=y(k);if(ae===0||ge===0)return[0,0,0,0];const Ae=c(p,Se,y(S)),nt=d(p,Ae,Se,y(S)),at=!$e||Re==="backward"?Math.max(1,be):1,zt=!$e||Re==="forward"?Math.max(1,be):1;return[Math.max(0,Ae-at),Math.max(0,Math.min(ge-1,nt+zt)),Ae,nt]}),$=M(()=>i(p,y(S))),N=M(()=>o(p,y(S))),D=M(()=>[{position:"relative",overflow:"hidden",WebkitOverflowScrolling:"touch",willChange:"transform"},{direction:p.direction,height:Je(p.height)?`${p.height}px`:p.height,width:Je(p.width)?`${p.width}px`:p.width},p.style??{}]),F=M(()=>{const ae=`${y(N)}px`;return{height:`${y($)}px`,pointerEvents:y(k).isScrolling?"none":void 0,width:ae,margin:0,boxSizing:"border-box"}}),W=()=>{const{totalColumn:ae,totalRow:ge}=p;if(ae>0&&ge>0){const[nt,at,zt,on]=y(R),[Bt,it,At,xe]=y(O);g(X1,{columnCacheStart:nt,columnCacheEnd:at,rowCacheStart:Bt,rowCacheEnd:it,columnVisibleStart:zt,columnVisibleEnd:on,rowVisibleStart:At,rowVisibleEnd:xe})}const{scrollLeft:be,scrollTop:$e,updateRequested:Re,xAxisScrollDir:Se,yAxisScrollDir:Ae}=y(k);g(Z1,{xAxisScrollDir:Se,scrollLeft:be,yAxisScrollDir:Ae,scrollTop:$e,updateRequested:Re})},z=ae=>{const{clientHeight:ge,clientWidth:be,scrollHeight:$e,scrollLeft:Re,scrollTop:Se,scrollWidth:Ae}=ae.currentTarget,nt=y(k);if(nt.scrollTop===Se&&nt.scrollLeft===Re)return;let at=Re;if(_N(p.direction))switch(e_()){case _m:at=-Re;break;case _M:at=Ae-be-Re;break}k.value={...nt,isScrolling:!0,scrollLeft:at,scrollTop:Math.max(0,Math.min(Se,$e-ge)),updateRequested:!0,xAxisScrollDir:lg(nt.scrollLeft,at),yAxisScrollDir:lg(nt.scrollTop,Se)},Ue(()=>U()),te(),W()},Y=(ae,ge)=>{const be=y(I),$e=($.value-be)/ge*ae;ee({scrollTop:Math.min($.value-be,$e)})},q=(ae,ge)=>{const be=y(P),$e=(N.value-be)/ge*ae;ee({scrollLeft:Math.min(N.value-be,$e)})},{onWheel:re}=Bme({atXStartEdge:M(()=>k.value.scrollLeft<=0),atXEndEdge:M(()=>k.value.scrollLeft>=N.value-y(P)),atYStartEdge:M(()=>k.value.scrollTop<=0),atYEndEdge:M(()=>k.value.scrollTop>=$.value-y(I))},(ae,ge)=>{var Re,Se,Ae,nt;(Se=(Re=C.value)==null?void 0:Re.onMouseUp)==null||Se.call(Re),(nt=(Ae=T.value)==null?void 0:Ae.onMouseUp)==null||nt.call(Ae);const be=y(P),$e=y(I);ee({scrollLeft:Math.min(k.value.scrollLeft+ae,N.value-be),scrollTop:Math.min(k.value.scrollTop+ge,$.value-$e)})});gn(x,"wheel",re,{passive:!1});const ee=({scrollLeft:ae=k.value.scrollLeft,scrollTop:ge=k.value.scrollTop})=>{ae=Math.max(ae,0),ge=Math.max(ge,0);const be=y(k);ge===be.scrollTop&&ae===be.scrollLeft||(k.value={...be,xAxisScrollDir:lg(be.scrollLeft,ae),yAxisScrollDir:lg(be.scrollTop,ge),scrollLeft:ae,scrollTop:ge,updateRequested:!0},Ue(()=>U()),te(),W())},{touchStartX:se,touchStartY:ne,handleTouchStart:de,handleTouchMove:le}=Fme(x,k,ee,N,$,P,I),J=(ae=0,ge=0,be=mo)=>{const $e=y(k);ge=Math.max(0,Math.min(ge,p.totalColumn-1)),ae=Math.max(0,Math.min(ae,p.totalRow-1));const Re=wW(_.namespace.value),Se=y(S),Ae=i(p,Se),nt=o(p,Se);ee({scrollLeft:s(p,ge,be,$e.scrollLeft,Se,nt>p.width?Re:0),scrollTop:l(p,ae,be,$e.scrollTop,Se,Ae>p.height?Re:0)})},Z=(ae,ge)=>{const{columnWidth:be,direction:$e,rowHeight:Re}=p,Se=A.value(t&&be,t&&Re,t&&$e),Ae=`${ae},${ge}`;if(un(Se,Ae))return Se[Ae];{const[,nt]=n(p,ge,y(S)),at=y(S),zt=_N($e),[on,Bt]=u(p,ae,at),[it]=n(p,ge,at);return Se[Ae]={position:"absolute",left:zt?void 0:`${nt}px`,right:zt?`${nt}px`:void 0,top:`${Bt}px`,height:`${on}px`,width:`${it}px`},Se[Ae]}},U=()=>{k.value.isScrolling=!1,Ue(()=>{A.value(-1,null,null)})};St(()=>{if(!cn)return;const{initScrollLeft:ae,initScrollTop:ge}=p,be=y(x);be&&(Je(ae)&&(be.scrollLeft=ae),Je(ge)&&(be.scrollTop=ge)),W()});const te=()=>{const{direction:ae}=p,{scrollLeft:ge,scrollTop:be,updateRequested:$e}=y(k),Re=y(x);if($e&&Re){if(ae==="rtl")switch(e_()){case _m:Re.scrollLeft=-ge;break;case bM:Re.scrollLeft=ge;break;default:{const{clientWidth:Se,scrollWidth:Ae}=Re;Re.scrollLeft=Ae-Se-ge;break}}else Re.scrollLeft=Math.max(0,ge);Re.scrollTop=Math.max(0,be)}},{resetAfterColumnIndex:Q,resetAfterRowIndex:ue,resetAfter:pe}=w.proxy;m({windowRef:x,innerRef:E,getItemStyleCache:A,touchStartX:se,touchStartY:ne,handleTouchStart:de,handleTouchMove:le,scrollTo:ee,scrollToItem:J,states:k,resetAfterColumnIndex:Q,resetAfterRowIndex:ue,resetAfter:pe});const me=()=>{const{scrollbarAlwaysOn:ae,scrollbarStartGap:ge,scrollbarEndGap:be,totalColumn:$e,totalRow:Re}=p,Se=y(P),Ae=y(I),nt=y(N),at=y($),{scrollLeft:zt,scrollTop:on}=y(k);return{horizontalScrollbar:ot(kE,{ref:C,alwaysOn:ae,startGap:ge,endGap:be,class:_.e("horizontal"),clientSize:Se,layout:"horizontal",onScroll:q,ratio:Se*100/nt,scrollFrom:zt/(nt-Se),total:Re,visible:!0}),verticalScrollbar:ot(kE,{ref:T,alwaysOn:ae,startGap:ge,endGap:be,class:_.e("vertical"),clientSize:Ae,layout:"vertical",onScroll:Y,ratio:Ae*100/at,scrollFrom:on/(at-Ae),total:$e,visible:!0})}},Pe=()=>{var on;const[ae,ge]=y(R),[be,$e]=y(O),{data:Re,totalColumn:Se,totalRow:Ae,useIsScrolling:nt,itemKey:at}=p,zt=[];if(Ae>0&&Se>0)for(let Bt=be;Bt<=$e;Bt++)for(let it=ae;it<=ge;it++){const At=at({columnIndex:it,data:Re,rowIndex:Bt});zt.push(ot(ze,{key:At},(on=b.default)==null?void 0:on.call(b,{columnIndex:it,data:Re,isScrolling:nt?y(k).isScrolling:void 0,style:Z(Bt,it),rowIndex:Bt})))}return zt},Ne=()=>{const ae=Et(p.innerElement),ge=Pe();return[ot(ae,Mt(p.innerProps,{style:y(F),ref:E}),qe(ae)?ge:{default:()=>ge})]};return()=>{const ae=Et(p.containerElement),{horizontalScrollbar:ge,verticalScrollbar:be}=me(),$e=Ne();return ot("div",{key:0,class:_.e("wrapper"),role:p.role},[ot(ae,{class:p.className,style:y(D),onScroll:z,ref:x},qe(ae)?$e:{default:()=>$e}),ge,be])}}}),xN="ElFixedSizeGrid",zme=b9({name:"ElFixedSizeGrid",getColumnPosition:({columnWidth:e},t)=>[e,t*e],getRowPosition:({rowHeight:e},t)=>[e,t*e],getEstimatedTotalHeight:({totalRow:e,rowHeight:t})=>t*e,getEstimatedTotalWidth:({totalColumn:e,columnWidth:t})=>t*e,getColumnOffset:({totalColumn:e,columnWidth:t,width:n},r,a,i,o,s)=>{n=Number(n);const l=Math.max(0,e*t-n),u=Math.min(l,r*t),c=Math.max(0,r*t-n+s+t);switch(a==="smart"&&(i>=c-n&&i<=u+n?a=mo:a=Ls),a){case bm:return u;case"end":return c;case Ls:{const d=Math.round(c+(u-c)/2);return dl+Math.floor(n/2)?l:d}case mo:default:return i>=c&&i<=u?i:c>u||i{t=Number(t);const l=Math.max(0,n*e-t),u=Math.min(l,r*e),c=Math.max(0,r*e-t+s+e);switch(a==="smart"&&(i>=c-t&&i<=u+t?a=mo:a=Ls),a){case bm:return u;case"end":return c;case Ls:{const d=Math.round(c+(u-c)/2);return dl+Math.floor(t/2)?l:d}case mo:default:return i>=c&&i<=u?i:c>u||iMath.max(0,Math.min(t-1,Math.floor(n/e))),getColumnStopIndexForStartIndex:({columnWidth:e,totalColumn:t,width:n},r,a)=>{const i=r*e,o=Math.ceil((n+a-i)/e);return Math.max(0,Math.min(t-1,r+o-1))},getRowStartIndexForOffset:({rowHeight:e,totalRow:t},n)=>Math.max(0,Math.min(t-1,Math.floor(n/e))),getRowStopIndexForStartIndex:({rowHeight:e,totalRow:t,height:n},r,a)=>{const i=r*e,o=Math.ceil((n+a-i)/e);return Math.max(0,Math.min(t-1,r+o-1))},initCache:()=>{},clearCache:!0,validateProps:({columnWidth:e,rowHeight:t})=>{Je(e)||nr(xN,` + "columnWidth" must be passed as number, + instead ${typeof e} was given. + `),Je(t)||nr(xN,` + "columnWidth" must be passed as number, + instead ${typeof t} was given. + `)}}),{max:t_,min:_9,floor:w9}=Math,CN="ElDynamicSizeGrid",Hme={column:"columnWidth",row:"rowHeight"},AE={column:"lastVisitedColumnIndex",row:"lastVisitedRowIndex"},El=(e,t,n,r)=>{const[a,i,o]=[n[r],e[Hme[r]],n[AE[r]]];if(t>o){let s=0;if(o>=0){const l=a[o];s=l.offset+l.size}for(let l=o+1;l<=t;l++){const u=i(l);a[l]={offset:s,size:u},s+=u}n[AE[r]]=t}return a[t]},S9=(e,t,n,r,a,i)=>{for(;n<=r;){const o=n+w9((r-n)/2),s=El(e,o,t,i).offset;if(s===a)return o;s{const i=a==="column"?e.totalColumn:e.totalRow;let o=1;for(;n{const[a,i]=[t[r],t[AE[r]]];return(i>0?a[i].offset:0)>=n?S9(e,t,0,i,n,r):Wme(e,t,t_(0,i),n,r)},x9=({totalRow:e},{estimatedRowHeight:t,lastVisitedRowIndex:n,row:r})=>{let a=0;if(n>=e&&(n=e-1),n>=0){const o=r[n];a=o.offset+o.size}const i=(e-n-1)*t;return a+i},C9=({totalColumn:e},{column:t,estimatedColumnWidth:n,lastVisitedColumnIndex:r})=>{let a=0;if(r>e&&(r=e-1),r>=0){const o=t[r];a=o.offset+o.size}const i=(e-r-1)*n;return a+i},Gme={column:C9,row:x9},EN=(e,t,n,r,a,i,o)=>{const[s,l]=[i==="row"?e.height:e.width,Gme[i]],u=El(e,t,a,i),c=t_(0,_9(l(e,a)-s,u.offset)),d=t_(0,u.offset-s+o+u.size);switch(n==="smart"&&(r>=d-s&&r<=c+s?n=mo:n=Ls),n){case bm:return c;case"end":return d;case Ls:return Math.round(d+(c-d)/2);case mo:default:return r>=d&&r<=c?r:d>c||r{const r=El(e,t,n,"column");return[r.size,r.offset]},getRowPosition:(e,t,n)=>{const r=El(e,t,n,"row");return[r.size,r.offset]},getColumnOffset:(e,t,n,r,a,i)=>EN(e,t,n,r,a,"column",i),getRowOffset:(e,t,n,r,a,i)=>EN(e,t,n,r,a,"row",i),getColumnStartIndexForOffset:(e,t,n)=>TN(e,n,t,"column"),getColumnStopIndexForStartIndex:(e,t,n,r)=>{const a=El(e,t,r,"column"),i=n+e.width;let o=a.offset+a.size,s=t;for(;sTN(e,n,t,"row"),getRowStopIndexForStartIndex:(e,t,n,r)=>{const{totalRow:a,height:i}=e,o=El(e,t,r,"row"),s=n+i;let l=o.size+o.offset,u=t;for(;u{const n=({columnIndex:i,rowIndex:o},s)=>{var l,u;s=qt(s)?!0:s,Je(i)&&(t.value.lastVisitedColumnIndex=Math.min(t.value.lastVisitedColumnIndex,i-1)),Je(o)&&(t.value.lastVisitedRowIndex=Math.min(t.value.lastVisitedRowIndex,o-1)),(l=e.exposed)==null||l.getItemStyleCache.value(-1,null,null),s&&((u=e.proxy)==null||u.$forceUpdate())},r=(i,o)=>{n({columnIndex:i},o)},a=(i,o)=>{n({rowIndex:i},o)};Object.assign(e.proxy,{resetAfterColumnIndex:r,resetAfterRowIndex:a,resetAfter:n})},initCache:({estimatedColumnWidth:e=50,estimatedRowHeight:t=50})=>({column:{},estimatedColumnWidth:e,estimatedRowHeight:t,lastVisitedColumnIndex:-1,lastVisitedRowIndex:-1,row:{}}),clearCache:!1,validateProps:({columnWidth:e,rowHeight:t})=>{et(e)||nr(CN,` + "columnWidth" must be passed as function, + instead ${typeof e} was given. + `),et(t)||nr(CN,` + "rowHeight" must be passed as function, + instead ${typeof t} was given. + `)}}),T9={modelValue:{type:[Number,String,Boolean],default:void 0},label:{type:[String,Boolean,Number,Object],default:void 0},value:{type:[String,Boolean,Number,Object],default:void 0},indeterminate:Boolean,disabled:{type:Boolean,default:void 0},checked:Boolean,name:{type:String,default:void 0},trueValue:{type:[String,Number],default:void 0},falseValue:{type:[String,Number],default:void 0},trueLabel:{type:[String,Number],default:void 0},falseLabel:{type:[String,Number],default:void 0},id:{type:String,default:void 0},border:Boolean,size:$r,tabindex:[String,Number],validateEvent:{type:Boolean,default:!0},ariaLabel:String,...ja(["ariaControls"])},E9={[mt]:e=>qe(e)||Je(e)||En(e),change:e=>qe(e)||Je(e)||En(e)},Kv=Symbol("checkboxGroupContextKey"),Kme=Oe({modelValue:{type:oe(Array),default:()=>[]},disabled:{type:Boolean,default:void 0},min:Number,max:Number,size:$r,fill:String,textColor:String,tag:{type:String,default:"div"},validateEvent:{type:Boolean,default:!0},options:{type:oe(Array)},props:{type:oe(Object),default:()=>k9},type:{type:String,values:["checkbox","button"],default:"checkbox"},...ja(["ariaLabel"])}),Yme={[mt]:e=>Me(e),change:e=>Me(e)},k9={label:"label",value:"value",disabled:"disabled"},jme=({model:e,isChecked:t})=>{const n=Ge(Kv,void 0),r=Ge(Of,void 0),a=M(()=>{var s,l;const i=(s=n==null?void 0:n.max)==null?void 0:s.value,o=(l=n==null?void 0:n.min)==null?void 0:l.value;return!qt(i)&&e.value.length>=i&&!t.value||!qt(o)&&e.value.length<=o&&t.value});return{isDisabled:ar(M(()=>{var i;return n===void 0?(r==null?void 0:r.disabled)??a.value:((i=n.disabled)==null?void 0:i.value)||a.value})),isLimitDisabled:a}},qme=(e,{model:t,isLimitExceeded:n,hasOwnLabel:r,isDisabled:a,isLabeledByFormItem:i})=>{const o=Ge(Kv,void 0),{formItem:s}=ea(),{emit:l}=Tt();function u(v){return[!0,e.trueValue,e.trueLabel].includes(v)?e.trueValue??e.trueLabel??!0:e.falseValue??e.falseLabel??!1}function c(v,p){l(Vt,u(v),p)}function d(v){if(n.value)return;const p=v.target;l(Vt,u(p.checked),v)}async function f(v){n.value||!r.value&&!a.value&&i.value&&(v.composedPath().some(p=>p.tagName==="LABEL")||(t.value=u([!1,e.falseValue,e.falseLabel].includes(t.value)),await Ue(),c(t.value,v)))}const h=M(()=>(o==null?void 0:o.validateEvent)||e.validateEvent);return _e(()=>e.modelValue,()=>{h.value&&(s==null||s.validate("change").catch(It))}),{handleChange:d,onClickRoot:f}},Xme=e=>{const t=H(!1),{emit:n,vnode:r}=Tt(),a=Ge(Kv,void 0),i=M(()=>qt(a)===!1),o=H(!1),s=M(()=>{const u=r.props??{};return"modelValue"in u||"model-value"in u}),l=M({get(){var u;return i.value?(u=a==null?void 0:a.modelValue)==null?void 0:u.value:s.value?e.modelValue:t.value},set(u){var c,d;i.value&&Me(u)?(o.value=((c=a==null?void 0:a.max)==null?void 0:c.value)!==void 0&&u.length>(a==null?void 0:a.max.value)&&u.length>l.value.length,o.value===!1&&((d=a==null?void 0:a.changeEvent)==null||d.call(a,u))):(n(mt,u),t.value=u)}});return{model:l,isGroup:i,isLimitExceeded:o}},Zme=(e,t,{model:n})=>{const r=Ge(Kv,void 0),a=H(!1),i=M(()=>Bi(e.value)?e.label:e.value),o=M(()=>{const s=n.value;return En(s)?s:Me(s)?yt(i.value)?s.map($n).some(l=>or(l,i.value)):s.map($n).includes(i.value):s!=null?s===e.trueValue||s===e.trueLabel:!!s});return{checkboxButtonSize:Rr(M(()=>{var s;return(s=r==null?void 0:r.size)==null?void 0:s.value}),{prop:!0}),isChecked:o,isFocused:a,checkboxSize:Rr(M(()=>{var s;return(s=r==null?void 0:r.size)==null?void 0:s.value})),hasOwnLabel:M(()=>!!t.default||!Bi(i.value)),actualValue:i}},A9=(e,t)=>{const{formItem:n}=ea(),{model:r,isGroup:a,isLimitExceeded:i}=Xme(e),{isFocused:o,isChecked:s,checkboxButtonSize:l,checkboxSize:u,hasOwnLabel:c,actualValue:d}=Zme(e,t,{model:r}),{isDisabled:f}=jme({model:r,isChecked:s}),{inputId:h,isLabeledByFormItem:v}=Di(e,{formItemContext:n,disableIdGeneration:c,disableIdManagement:a}),{handleChange:p,onClickRoot:g}=qme(e,{model:r,isLimitExceeded:i,hasOwnLabel:c,isDisabled:f,isLabeledByFormItem:v});return(()=>{function b(){Me(r.value)&&!r.value.includes(d.value)?r.value.push(d.value):r.value=e.trueValue??e.trueLabel??!0}e.checked&&b()})(),Bs({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},M(()=>a.value&&Bi(e.value))),Bs({from:"true-label",replacement:"true-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},M(()=>!!e.trueLabel)),Bs({from:"false-label",replacement:"false-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},M(()=>!!e.falseLabel)),{inputId:h,isLabeledByFormItem:v,isChecked:s,isDisabled:f,isFocused:o,checkboxButtonSize:l,checkboxSize:u,hasOwnLabel:c,model:r,actualValue:d,handleChange:p,onClickRoot:g}},Jme=["id","indeterminate","name","tabindex","disabled"];var Qme=ye({name:"ElCheckbox",__name:"checkbox",props:T9,emits:E9,setup(e){const t=e,{inputId:n,isLabeledByFormItem:r,isChecked:a,isDisabled:i,isFocused:o,checkboxSize:s,hasOwnLabel:l,model:u,actualValue:c,handleChange:d,onClickRoot:f}=A9(t,pr()),h=M(()=>t.trueValue||t.falseValue||t.trueLabel||t.falseLabel?{"true-value":t.trueValue??t.trueLabel??!0,"false-value":t.falseValue??t.falseLabel??!1}:{value:c.value}),v=Ee("checkbox"),p=M(()=>[v.b(),v.m(s.value),v.is("disabled",i.value),v.is("bordered",t.border),v.is("checked",a.value)]),g=M(()=>[v.e("input"),v.is("disabled",i.value),v.is("checked",a.value),v.is("indeterminate",t.indeterminate),v.is("focus",o.value)]);return(m,b)=>(L(),ve(Et(!y(l)&&y(r)?"span":"label"),{for:!y(l)&&y(r)?null:y(n),class:B(p.value),"aria-controls":e.indeterminate?e.ariaControls:null,"aria-checked":e.indeterminate?"mixed":void 0,"aria-label":e.ariaLabel,onClick:y(f)},{default:G(()=>[j("span",{class:B(g.value)},[gt(j("input",Mt({id:y(n),"onUpdate:modelValue":b[0]||(b[0]=_=>Hn(u)?u.value=_:null),class:y(v).e("original"),type:"checkbox",indeterminate:e.indeterminate,name:e.name,tabindex:e.tabindex,disabled:y(i)},h.value,{onChange:b[1]||(b[1]=(..._)=>y(d)&&y(d)(..._)),onFocus:b[2]||(b[2]=_=>o.value=!0),onBlur:b[3]||(b[3]=_=>o.value=!1),onClick:b[4]||(b[4]=ut(()=>{},["stop"]))}),null,16,Jme),[[vH,y(u)]]),j("span",{class:B(y(v).e("inner"))},null,2)],2),y(l)?(L(),K("span",{key:0,class:B(y(v).e("label"))},[he(m.$slots,"default"),m.$slots.default?fe("v-if",!0):(L(),K(ze,{key:0},[Le(ce(e.label),1)],64))],2)):fe("v-if",!0)]),_:3},8,["for","class","aria-controls","aria-checked","aria-label","onClick"]))}}),I9=Qme;const eye=["name","tabindex","disabled"];var tye=ye({name:"ElCheckboxButton",__name:"checkbox-button",props:T9,emits:E9,setup(e){const t=e,{isFocused:n,isChecked:r,isDisabled:a,checkboxButtonSize:i,model:o,actualValue:s,handleChange:l}=A9(t,pr()),u=M(()=>t.trueValue||t.falseValue||t.trueLabel||t.falseLabel?{"true-value":t.trueValue??t.trueLabel??!0,"false-value":t.falseValue??t.falseLabel??!1}:{value:s.value}),c=Ge(Kv,void 0),d=Ee("checkbox"),f=M(()=>{var p,g;const v=((p=c==null?void 0:c.fill)==null?void 0:p.value)??"";return{backgroundColor:v,borderColor:v,color:((g=c==null?void 0:c.textColor)==null?void 0:g.value)??"",boxShadow:v?`-1px 0 0 0 ${v}`:void 0}}),h=M(()=>[d.b("button"),d.bm("button",i.value),d.is("disabled",a.value),d.is("checked",r.value),d.is("focus",n.value)]);return(v,p)=>(L(),K("label",{class:B(h.value)},[gt(j("input",Mt({"onUpdate:modelValue":p[0]||(p[0]=g=>Hn(o)?o.value=g:null),class:y(d).be("button","original"),type:"checkbox",name:e.name,tabindex:e.tabindex,disabled:y(a)},u.value,{onChange:p[1]||(p[1]=(...g)=>y(l)&&y(l)(...g)),onFocus:p[2]||(p[2]=g=>n.value=!0),onBlur:p[3]||(p[3]=g=>n.value=!1),onClick:p[4]||(p[4]=ut(()=>{},["stop"]))}),null,16,eye),[[vH,y(o)]]),v.$slots.default||e.label?(L(),K("span",{key:0,class:B(y(d).be("button","inner")),style:tt(y(r)?f.value:void 0)},[he(v.$slots,"default",{},()=>[Le(ce(e.label),1)])],6)):fe("v-if",!0)],2))}}),wM=tye,nye=ye({name:"ElCheckboxGroup",__name:"checkbox-group",props:Kme,emits:Yme,setup(e,{emit:t}){const n=e,r=t,a=Ee("checkbox"),i=ar(),{formItem:o}=ea(),{inputId:s,isLabeledByFormItem:l}=Di(n,{formItemContext:o}),u=async v=>{r(mt,v),await Ue(),r(Vt,v)},c=M({get(){return n.modelValue},set(v){u(v)}}),d=M(()=>({...k9,...n.props})),f=v=>{const{label:p,value:g,disabled:m}=d.value,b={label:v[p],value:v[g],disabled:v[m]};return{...my(v,[p,g,m]),...b}},h=M(()=>n.type==="button"?wM:I9);return Ft(Kv,{...Ul(Jr(n),["size","min","max","validateEvent","fill","textColor"]),disabled:i,modelValue:c,changeEvent:u}),_e(()=>n.modelValue,(v,p)=>{n.validateEvent&&!or(v,p)&&(o==null||o.validate("change").catch(It))}),(v,p)=>{var g;return L(),ve(Et(e.tag),{id:y(s),class:B(y(a).b("group")),role:"group","aria-label":y(l)?void 0:e.ariaLabel||"checkbox-group","aria-labelledby":y(l)?(g=y(o))==null?void 0:g.labelId:void 0},{default:G(()=>[he(v.$slots,"default",{},()=>[(L(!0),K(ze,null,Lt(e.options,(m,b)=>(L(),ve(Et(h.value),Mt({key:b},{ref_for:!0},f(m)),null,16))),128))])]),_:3},8,["id","class","aria-label","aria-labelledby"])}}}),M9=nye;const Qs=xt(I9,{CheckboxButton:wM,CheckboxGroup:M9}),rye=rr(wM),SM=rr(M9),P9=Oe({modelValue:{type:[String,Number,Boolean],default:void 0},size:$r,disabled:{type:Boolean,default:void 0},label:{type:[String,Number,Boolean],default:void 0},value:{type:[String,Number,Boolean],default:void 0},name:{type:String,default:void 0}}),aye=Oe({...P9,border:Boolean}),L9={[mt]:e=>qe(e)||Je(e)||En(e),[Vt]:e=>qe(e)||Je(e)||En(e)},D9=Symbol("radioGroupKey"),iye=Oe({...P9}),R9={label:"label",value:"value",disabled:"disabled"},oye=Oe({id:{type:String,default:void 0},size:$r,disabled:{type:Boolean,default:void 0},modelValue:{type:[String,Number,Boolean],default:void 0},fill:{type:String,default:""},textColor:{type:String,default:""},name:{type:String,default:void 0},validateEvent:{type:Boolean,default:!0},options:{type:oe(Array)},props:{type:oe(Object),default:()=>R9},type:{type:String,values:["radio","button"],default:"radio"},...ja(["ariaLabel"])}),sye=L9,O9=(e,t)=>{const n=H(),r=Ge(D9,void 0),a=M(()=>!!r),i=M(()=>Bi(e.value)?e.label:e.value),o=M({get(){return a.value?r.modelValue:e.modelValue},set(d){a.value?r.changeEvent(d):t&&t("update:modelValue",d),n.value.checked=e.modelValue===i.value}}),s=Rr(M(()=>r==null?void 0:r.size)),l=ar(M(()=>r==null?void 0:r.disabled)),u=H(!1),c=M(()=>l.value||a.value&&o.value!==i.value?-1:0);return Bs({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-radio",ref:"https://element-plus.org/en-US/component/radio.html"},M(()=>a.value&&Bi(e.value))),{radioRef:n,isGroup:a,radioGroup:r,focus:u,size:s,disabled:l,tabIndex:c,modelValue:o,actualValue:i}},lye=["value","name","disabled","checked"];var uye=ye({name:"ElRadio",__name:"radio",props:aye,emits:L9,setup(e,{emit:t}){const n=e,r=t,a=Ee("radio"),{radioRef:i,radioGroup:o,focus:s,size:l,disabled:u,modelValue:c,actualValue:d}=O9(n,r);function f(){Ue(()=>r(Vt,c.value))}return(h,v)=>{var p;return L(),K("label",{class:B([y(a).b(),y(a).is("disabled",y(u)),y(a).is("focus",y(s)),y(a).is("bordered",e.border),y(a).is("checked",y(c)===y(d)),y(a).m(y(l))])},[j("span",{class:B([y(a).e("input"),y(a).is("disabled",y(u)),y(a).is("checked",y(c)===y(d))])},[gt(j("input",{ref_key:"radioRef",ref:i,"onUpdate:modelValue":v[0]||(v[0]=g=>Hn(c)?c.value=g:null),class:B(y(a).e("original")),value:y(d),name:e.name||((p=y(o))==null?void 0:p.name),disabled:y(u),checked:y(c)===y(d),type:"radio",onFocus:v[1]||(v[1]=g=>s.value=!0),onBlur:v[2]||(v[2]=g=>s.value=!1),onChange:f,onClick:v[3]||(v[3]=ut(()=>{},["stop"]))},null,42,lye),[[pH,y(c)]]),j("span",{class:B(y(a).e("inner"))},null,2)],2),j("span",{class:B(y(a).e("label")),onKeydown:v[4]||(v[4]=ut(()=>{},["stop"]))},[he(h.$slots,"default",{},()=>[Le(ce(e.label),1)])],34)],2)}}}),N9=uye;const cye=["value","name","disabled"];var dye=ye({name:"ElRadioButton",__name:"radio-button",props:iye,setup(e){const t=e,n=Ee("radio"),{radioRef:r,focus:a,size:i,disabled:o,modelValue:s,radioGroup:l,actualValue:u}=O9(t),c=M(()=>({backgroundColor:(l==null?void 0:l.fill)||"",borderColor:(l==null?void 0:l.fill)||"",boxShadow:l!=null&&l.fill?`-1px 0 0 0 ${l.fill}`:"",color:(l==null?void 0:l.textColor)||""}));return(d,f)=>{var h;return L(),K("label",{class:B([y(n).b("button"),y(n).is("active",y(s)===y(u)),y(n).is("disabled",y(o)),y(n).is("focus",y(a)),y(n).bm("button",y(i))])},[gt(j("input",{ref_key:"radioRef",ref:r,"onUpdate:modelValue":f[0]||(f[0]=v=>Hn(s)?s.value=v:null),class:B(y(n).be("button","original-radio")),value:y(u),type:"radio",name:e.name||((h=y(l))==null?void 0:h.name),disabled:y(o),onFocus:f[1]||(f[1]=v=>a.value=!0),onBlur:f[2]||(f[2]=v=>a.value=!1),onClick:f[3]||(f[3]=ut(()=>{},["stop"]))},null,42,cye),[[pH,y(s)]]),j("span",{class:B(y(n).be("button","inner")),style:tt(y(s)===y(u)?c.value:{}),onKeydown:f[4]||(f[4]=ut(()=>{},["stop"]))},[he(d.$slots,"default",{},()=>[Le(ce(e.label),1)])],38)],2)}}}),xM=dye;const fye=["id","aria-label","aria-labelledby"];var hye=ye({name:"ElRadioGroup",__name:"radio-group",props:oye,emits:sye,setup(e,{emit:t}){const n=e,r=t,a=Ee("radio"),i=ba(),o=H(),{formItem:s}=ea(),{inputId:l,isLabeledByFormItem:u}=Di(n,{formItemContext:s}),c=p=>{r(mt,p),Ue(()=>r(Vt,p))};St(()=>{const p=o.value.querySelectorAll("[type=radio]"),g=p[0];!Array.from(p).some(m=>m.checked)&&g&&(g.tabIndex=0)});const d=M(()=>n.name||i.value),f=M(()=>({...R9,...n.props})),h=p=>{const{label:g,value:m,disabled:b}=f.value,_={label:p[g],value:p[m],disabled:p[b]};return{...my(p,[g,m,b]),..._}},v=M(()=>n.type==="button"?xM:N9);return Ft(D9,Qt({...Jr(n),changeEvent:c,name:d})),_e(()=>n.modelValue,(p,g)=>{n.validateEvent&&!or(p,g)&&(s==null||s.validate("change").catch(It))}),(p,g)=>(L(),K("div",{id:y(l),ref_key:"radioGroupRef",ref:o,class:B(y(a).b("group")),role:"radiogroup","aria-label":y(u)?void 0:e.ariaLabel||"radio-group","aria-labelledby":y(u)?y(s).labelId:void 0},[he(p.$slots,"default",{},()=>[(L(!0),K(ze,null,Lt(e.options,(m,b)=>(L(),ve(Et(v.value),Mt({key:b},{ref_for:!0},h(m)),null,16))),128))])],10,fye))}}),V9=hye;const $9=xt(N9,{RadioButton:xM,RadioGroup:V9}),vye=rr(V9),pye=rr(xM),Jw=Symbol();function gye(e){return!!(Me(e)?e.every(({type:t})=>t===Tr):(e==null?void 0:e.type)===Tr)}var mye=ye({name:"NodeContent",props:{node:{type:Object,required:!0}},setup(e){const t=Ee("cascader-node"),{renderLabelFn:n}=Ge(Jw),{node:r}=e,{data:a,label:i}=r,o=()=>{const s=n==null?void 0:n({node:r,data:a});return gye(s)?i:s??i};return()=>V("span",{class:t.e("label")},[o()])}});const yye=["id","aria-haspopup","aria-owns","aria-expanded","tabindex"];var bye=ye({name:"ElCascaderNode",__name:"node",props:{node:{type:Object,required:!0},menuId:{type:String,required:!1}},emits:["expand"],setup(e,{emit:t}){const n=e,r=t,a=Ge(Jw),i=Ee("cascader-node"),o=M(()=>a.isHoverMenu),s=M(()=>a.config.multiple),l=M(()=>a.config.checkStrictly),u=M(()=>a.config.showPrefix),c=M(()=>{var E;return(E=a.checkedNodes[0])==null?void 0:E.uid}),d=M(()=>n.node.isDisabled),f=M(()=>n.node.isLeaf),h=M(()=>l.value&&!f.value||!d.value),v=M(()=>g(a.expandingNode)),p=M(()=>l.value&&a.checkedNodes.some(g)),g=E=>{var I;const{level:k,uid:A}=n.node;return((I=E==null?void 0:E.pathNodes[k-1])==null?void 0:I.uid)===A},m=()=>{v.value||a.expandNode(n.node)},b=E=>{const{node:k}=n;E!==k.checked&&a.handleCheckChange(k,E)},_=()=>{a.lazyLoad(n.node,()=>{f.value||m()})},w=E=>{o.value&&(S(),!f.value&&r("expand",E))},S=()=>{const{node:E}=n;!h.value||E.loading||(E.loaded?m():_())},x=()=>{f.value&&!d.value&&!l.value&&!s.value?T(!0):(a.config.checkOnClickNode&&(s.value||l.value)||f.value&&a.config.checkOnClickLeaf)&&!d.value?C(!n.node.checked):o.value||S()},C=E=>{l.value?(b(E),n.node.loaded&&m()):T(E)},T=E=>{n.node.loaded?(b(E),!l.value&&m()):_()};return(E,k)=>(L(),K("li",{id:`${e.menuId}-${e.node.uid}`,role:"menuitem","aria-haspopup":!f.value,"aria-owns":f.value?void 0:e.menuId,"aria-expanded":v.value,tabindex:h.value?-1:void 0,class:B([y(i).b(),y(i).is("selectable",l.value),y(i).is("active",e.node.checked),y(i).is("disabled",!h.value),v.value&&"in-active-path",p.value&&"in-checked-path"]),onMouseenter:w,onFocus:w,onClick:x},[fe(" prefix "),s.value&&u.value?(L(),ve(y(Qs),{key:0,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:d.value,onClick:k[0]||(k[0]=ut(()=>{},["stop"])),"onUpdate:modelValue":C},null,8,["model-value","indeterminate","disabled"])):l.value&&u.value?(L(),ve(y($9),{key:1,"model-value":c.value,label:e.node.uid,disabled:d.value,"onUpdate:modelValue":C,onClick:k[1]||(k[1]=ut(()=>{},["stop"]))},{default:G(()=>[fe(` + Add an empty element to avoid render label, + do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485 + `),k[2]||(k[2]=j("span",null,null,-1))]),_:1},8,["model-value","label","disabled"])):f.value&&e.node.checked?(L(),ve(y(Ze),{key:2,class:B(y(i).e("prefix"))},{default:G(()=>[V(y(mv))]),_:1},8,["class"])):fe("v-if",!0),fe(" content "),V(y(mye),{node:e.node},null,8,["node"]),fe(" postfix "),f.value?fe("v-if",!0):(L(),K(ze,{key:3},[e.node.loading?(L(),ve(y(Ze),{key:0,class:B([y(i).is("loading"),y(i).e("postfix")])},{default:G(()=>[V(y(es))]),_:1},8,["class"])):(L(),ve(y(Ze),{key:1,class:B(["arrow-right",y(i).e("postfix")])},{default:G(()=>[V(y(Wa))]),_:1},8,["class"]))],64))],42,yye))}}),kN=bye,_ye=ye({name:"ElCascaderMenu",__name:"menu",props:{nodes:{type:Array,required:!0},index:{type:Number,required:!0},virtualScroll:{type:Boolean,required:!1,default:!1},itemSize:{type:Number,required:!1,default:34},height:{type:Number,required:!1,default:204}},setup(e,{expose:t}){const n=e,r=Tt(),a=Ee("cascader-menu"),{t:i}=Yt(),o=ba();let s,l;const u=Ge(Jw),c=H(),d=H(),f=M(()=>!n.nodes.length),h=M(()=>!u.initialLoaded),v=M(()=>`${o.value}-${n.index}`),p=()=>{var T,E,k,A;let C;if(u.expandingNode){const{level:I,pathNodes:P}=u.expandingNode;n.index0&&(C=(k=(E=u.checkedNodes[0])==null?void 0:E.pathNodes[n.index])==null?void 0:k.uid)}else u.checkedNodes.length>0&&n.indexI.uid===C):-1},g=C=>C?n.nodes.findIndex(T=>`${v.value}-${T.uid}`===C):-1,m=C=>{var E;const T=Ei(C,0,n.nodes.length-1);(E=d.value)==null||E.scrollToItem(T)},b=C=>{if(!n.nodes.length)return;const T=Ei(C,0,n.nodes.length-1);m(T),Ue(()=>{var k;const E=(k=r.vnode.el)==null?void 0:k.querySelector(`#${v.value}-${n.nodes[T].uid}`);E&&Yh(E)})},_=C=>{s=C.target},w=C=>{var T,E,k;if(!(!u.isHoverMenu||!s||!c.value))if(s.contains(C.target)){S();const A=r.vnode.el,{left:I}=A.getBoundingClientRect(),{offsetWidth:P,offsetHeight:R}=A,O=C.clientX-I,$=s.offsetTop,N=$+s.offsetHeight,D=n.virtualScroll?((E=(T=d.value)==null?void 0:T.states)==null?void 0:E.scrollOffset)||0:((k=A.querySelector(`.${a.e("wrap")}`))==null?void 0:k.scrollTop)||0;c.value.innerHTML=` + + + `}else l||(l=window.setTimeout(x,u.config.hoverThreshold))},S=()=>{l&&(clearTimeout(l),l=void 0)},x=()=>{c.value&&(c.value.innerHTML="",S())};return t({getActiveNodeIndex:p,getNodeIndexById:g,scrollToItem:m,focusNodeAt:b,virtualListRef:d,get $el(){return r.vnode.el}}),(C,T)=>{var E;return e.virtualScroll?(L(),K("div",{key:v.value,class:B(y(a).b()),onMousemove:w,onMouseleave:x},[V(y(Zw),{ref_key:"virtualListRef",ref:d,height:e.height,"item-size":e.itemSize,data:e.nodes,total:e.nodes.length,"class-name":y(a).e("list"),"inner-element":"ul","inner-props":{role:"menu",class:y(a).is("empty",f.value)}},{default:G(({data:k,index:A,style:I})=>[(L(),ve(kN,{key:k[A].uid,node:k[A],"menu-id":v.value,style:tt(I),onExpand:_},null,8,["node","menu-id","style"]))]),_:1},8,["height","item-size","data","total","class-name","inner-props"]),h.value?(L(),K("div",{key:0,class:B(y(a).e("empty-text"))},[V(y(Ze),{size:14,class:B(y(a).is("loading"))},{default:G(()=>[V(y(es))]),_:1},8,["class"]),Le(" "+ce(y(i)("el.cascader.loading")),1)],2)):f.value?(L(),K("div",{key:1,class:B(y(a).e("empty-text"))},[he(C.$slots,"empty",{},()=>[Le(ce(y(i)("el.cascader.noData")),1)])],2)):(E=y(u))!=null&&E.isHoverMenu?(L(),K(ze,{key:2},[fe(" eslint-disable vue/html-self-closing "),(L(),K("svg",{ref_key:"hoverZone",ref:c,class:B(y(a).e("hover-zone"))},null,2))],2112)):fe("v-if",!0),fe(" eslint-enable vue/html-self-closing ")],34)):(L(),ve(y(ts),{key:v.value,tag:"ul",role:"menu",class:B(y(a).b()),"wrap-class":y(a).e("wrap"),"view-class":[y(a).e("list"),y(a).is("empty",f.value)],onMousemove:w,onMouseleave:x},{default:G(()=>{var k;return[(L(!0),K(ze,null,Lt(e.nodes,A=>(L(),ve(kN,{key:A.uid,node:A,"menu-id":v.value,onExpand:_},null,8,["node","menu-id"]))),128)),h.value?(L(),K("div",{key:0,class:B(y(a).e("empty-text"))},[V(y(Ze),{size:14,class:B(y(a).is("loading"))},{default:G(()=>[V(y(es))]),_:1},8,["class"]),Le(" "+ce(y(i)("el.cascader.loading")),1)],2)):f.value?(L(),K("div",{key:1,class:B(y(a).e("empty-text"))},[he(C.$slots,"empty",{},()=>[Le(ce(y(i)("el.cascader.noData")),1)])],2)):(k=y(u))!=null&&k.isHoverMenu?(L(),K(ze,{key:2},[fe(" eslint-disable vue/html-self-closing "),(L(),K("svg",{ref_key:"hoverZone",ref:c,class:B(y(a).e("hover-zone"))},null,2))],2112)):fe("v-if",!0),fe(" eslint-enable vue/html-self-closing ")]}),_:3},8,["class","wrap-class","view-class"]))}}}),wye=_ye;let Sye=0;const xye=e=>{const t=[e];let{parent:n}=e;for(;n;)t.unshift(n),n=n.parent;return t};var IE=class ME{constructor(t,n,r,a=!1){this.data=t,this.config=n,this.parent=r,this.root=a,this.uid=Sye++,this.checked=!1,this.indeterminate=!1,this.loading=!1;const{value:i,label:o,children:s}=n,l=t[s],u=xye(this);this.level=a?0:r?r.level+1:1,this.value=t[i],this.label=t[o],this.pathNodes=u,this.pathValues=u.map(c=>c.value),this.pathLabels=u.map(c=>c.label),this.childrenData=l,this.children=(l||[]).map(c=>new ME(c,n,this)),this.loaded=!n.lazy||this.isLeaf||!oi(l),this.text=""}get isDisabled(){const{data:t,parent:n,config:r}=this,{disabled:a,checkStrictly:i}=r;return(et(a)?a(t,this):!!t[a])||!i&&!!(n!=null&&n.isDisabled)}get isLeaf(){const{data:t,config:n,childrenData:r,loaded:a}=this,{lazy:i,leaf:o}=n,s=et(o)?o(t,this):t[o];return qt(s)?i&&!a?!1:!(Me(r)&&r.length):!!s}get valueByOption(){return this.config.emitPath?this.pathValues:this.value}appendChild(t){const{childrenData:n,children:r}=this,a=new ME(t,this.config,this);return Me(n)?n.push(t):this.childrenData=[t],r.push(a),a}calcText(t,n){const r=t?this.pathLabels.join(n):this.label;return this.text=r,r}broadcast(t){this.children.forEach(n=>{var r;n&&(n.broadcast(t),(r=n.onParentCheck)==null||r.call(n,t))})}emit(){var n;const{parent:t}=this;t&&((n=t.onChildCheck)==null||n.call(t),t.emit())}onParentCheck(t){this.isDisabled||this.setCheckState(t)}onChildCheck(){const{children:t}=this,n=t.filter(a=>!a.isDisabled),r=n.length?n.every(a=>a.checked):!1;this.setCheckState(r)}setCheckState(t){const n=this.children.length,r=this.children.reduce((a,i)=>a+(i.checked?1:i.indeterminate?.5:0),0);this.checked=this.loaded&&this.children.filter(a=>!a.isDisabled).every(a=>a.loaded&&a.checked)&&t,this.indeterminate=this.loaded&&r!==n&&r>0}doCheck(t){if(this.checked===t)return;const{checkStrictly:n,multiple:r}=this.config;n||!r?this.checked=t:(this.broadcast(t),this.setCheckState(t),this.emit())}};const PE=(e,t)=>e.reduce((n,r)=>(r.isLeaf?n.push(r):(!t&&n.push(r),n=n.concat(PE(r.children,t))),n),[]);var AN=class{constructor(e,t){this.config=t;const n=(e||[]).map(r=>new IE(r,this.config));this.nodes=n,this.allNodes=PE(n,!1),this.leafNodes=PE(n,!0)}getNodes(){return this.nodes}getFlattedNodes(e){return e?this.leafNodes:this.allNodes}appendNode(e,t){const n=t?t.appendChild(e):new IE(e,this.config);t||this.nodes.push(n),this.appendAllNodesAndLeafNodes(n)}appendNodes(e,t){e.length>0?e.forEach(n=>this.appendNode(n,t)):t&&t.isLeaf&&this.leafNodes.push(t)}appendAllNodesAndLeafNodes(e){this.allNodes.push(e),e.isLeaf&&this.leafNodes.push(e),e.children&&e.children.forEach(t=>{this.appendAllNodesAndLeafNodes(t)})}getNodeByValue(e,t=!1){return Bi(e)?null:this.getFlattedNodes(t).find(n=>or(n.value,e)||or(n.pathValues,e))||null}getSameNode(e){return e&&this.getFlattedNodes(!1).find(({value:t,level:n})=>or(e.value,t)&&e.level===n)||null}};const Dx=e=>{if(!e)return 0;const t=e.id.split("-");return Number(t[t.length-2])},Cye=e=>{if(!e)return;const t=e.querySelector("input");t?t.click():hW(e)&&e.click()},Tye=(e,t)=>{const n=t.slice(0),r=n.map(i=>i.uid),a=e.reduce((i,o)=>{const s=r.indexOf(o.uid);return s>-1&&(i.push(o),n.splice(s,1),r.splice(s,1)),i},[]);return a.push(...n),a};var Eye=ye({name:"ElCascaderPanel",__name:"index",props:Cme,emits:Tme,setup(e,{expose:t,emit:n}){const r=e,a=n;let i=!1;const o=Ee("cascader"),s=Eme(r),l=pr();let u;const c=H(!0),d=H(!1),f=H([]),h=H(),v=H([]),p=H(),g=H([]),m=M(()=>s.value.expandTrigger==="hover"),b=M(()=>r.renderLabel||l.default),_=M(()=>r.virtualScroll),w=M(()=>r.itemSize),S=M(()=>r.height),x=()=>{const{options:W}=r,z=s.value;i=!1,u=new AN(W,z),v.value=[u.getNodes()],z.lazy&&oi(r.options)?(c.value=!1,C(void 0,Y=>{Y&&(u=new AN(Y,z),v.value=[u.getNodes()]),c.value=!0,O(!1,!0)})):O(!1,!0)},C=(W,z)=>{const Y=s.value;W=W||new IE({},Y,void 0,!0),W.loading=!0;const q=ee=>{const se=W,ne=se.root?null:se;se.loading=!1,se.loaded=!0,se.childrenData=se.childrenData||[],ee&&(u==null||u.appendNodes(ee,ne)),ee&&(z==null||z(ee)),W.level===0&&(d.value=!0)},re=()=>{W.loading=!1,W.loaded=!1,W.level===0&&(c.value=!0)};Y.lazyLoad(W,q,re)},T=(W,z)=>{var ee;const{level:Y}=W,q=v.value.slice(0,Y);let re;W.isLeaf?re=W.pathNodes[Y-2]:(re=W,q.push(W.children)),((ee=p.value)==null?void 0:ee.uid)!==(re==null?void 0:re.uid)&&(p.value=W,v.value=q,!z&&a("expand-change",(W==null?void 0:W.pathValues)||[]))},E=(W,z,Y=!0)=>{const{checkStrictly:q,multiple:re}=s.value,ee=g.value[0];i=!0,!re&&(ee==null||ee.doCheck(!1)),W.doCheck(z),R(),Y&&!re&&!q&&a("close"),!Y&&!re&&k(W)},k=W=>{W&&(W=W.parent,k(W),W&&T(W))},A=W=>u==null?void 0:u.getFlattedNodes(W),I=W=>{var z;return(z=A(W))==null?void 0:z.filter(({checked:Y})=>Y!==!1)},P=()=>{g.value.forEach(W=>W.doCheck(!1)),R(),v.value=v.value.slice(0,1),p.value=void 0,a("expand-change",[])},R=()=>{const{checkStrictly:W,multiple:z}=s.value,Y=g.value,q=Tye(Y,I(!W)),re=q.map(ee=>ee.valueByOption);g.value=q,h.value=z?re:re[0]??null},O=(W=!1,z=!1)=>{const{modelValue:Y}=r,{lazy:q,multiple:re,checkStrictly:ee}=s.value,se=!ee;if(!(!c.value||i||!z&&or(Y,h.value)))if(q&&!W){const ne=MO(Ise(za(Y))).map(de=>u==null?void 0:u.getNodeByValue(de)).filter(de=>!!de&&!de.loaded&&!de.loading);ne.length?ne.forEach(de=>{C(de,()=>O(!1,z))}):O(!0,z)}else $(MO((re?za(Y):[Y]).map(ne=>u==null?void 0:u.getNodeByValue(ne,se))),z),h.value=Ps(Y??void 0)},$=(W,z=!0)=>{const{checkStrictly:Y}=s.value,q=g.value,re=W.filter(ne=>!!ne&&(Y||ne.isLeaf)),ee=u==null?void 0:u.getSameNode(p.value),se=z&&ee||re[0];se?se.pathNodes.forEach(ne=>T(ne,!0)):p.value=void 0,q.forEach(ne=>ne.doCheck(!1)),Qt(re).forEach(ne=>ne.doCheck(!0)),g.value=re,Ue(N)},N=()=>{cn&&f.value.forEach(W=>{var Y,q;const z=W==null?void 0:W.$el;if(z)if(_.value){const re=(Y=W==null?void 0:W.getActiveNodeIndex)==null?void 0:Y.call(W);re!==void 0&&re>=0&&((q=W==null?void 0:W.scrollToItem)==null||q.call(W,re))}else{const re=z.querySelector(`.${o.namespace.value}-scrollbar__wrap`);let ee=z.querySelector(`.${o.b("node")}.in-active-path`);if(!ee){const se=z.querySelectorAll(`.${o.b("node")}.${o.is("active")}`);ee=se[se.length-1]}zI(re,ee)}})},D=W=>{var q,re;const z=W.target,Y=Mn(W);switch(Y){case De.up:case De.down:{W.preventDefault();const ee=Y===De.up?-1:1;if(_.value){const se=Dx(z),ne=f.value[se];if(ne){const de=ne.getNodeIndexById(z.id);if(de>=0){const le=v.value[se]??[],J=le.length;let Z=de+ee;for(;Z>=0&&Z{or(W,z)||x()},{immediate:!0}),_e(()=>r.options,x,{deep:!0}),_e(()=>r.modelValue,()=>{i=!1,O()},{deep:!0}),_e(()=>h.value,W=>{or(W,r.modelValue)||(a(mt,W),a(Vt,W))});const F=()=>{d.value||!c.value||x()};return dI(()=>f.value=[]),St(()=>!oi(r.modelValue)&&O()),t({menuList:f,menus:v,checkedNodes:g,handleKeyDown:D,handleCheckChange:E,getFlattedNodes:A,getCheckedNodes:I,clearCheckedNodes:P,calculateCheckedValue:R,scrollToExpandingNode:N,loadLazyRootNodes:F}),(W,z)=>(L(),K("div",{class:B([y(o).b("panel"),y(o).is("bordered",e.border)]),onKeydown:D},[(L(!0),K(ze,null,Lt(v.value,(Y,q)=>(L(),ve(wye,{key:q,ref_for:!0,ref:re=>f.value[q]=re,index:q,nodes:[...Y],"virtual-scroll":_.value,"item-size":w.value,height:S.value},{empty:G(()=>[he(W.$slots,"empty")]),_:3},8,["index","nodes","virtual-scroll","item-size","height"]))),128))],34))}}),kye=Eye;const B9=xt(kye),Aye=Oe({...s9,size:$r,placeholder:String,disabled:{type:Boolean,default:void 0},clearable:Boolean,clearIcon:{type:An,default:ul},filterable:Boolean,filterMethod:{type:oe(Function),default:(e,t)=>e.text.includes(t)},separator:{type:String,default:" / "},showAllLevels:{type:Boolean,default:!0},collapseTags:Boolean,maxCollapseTags:{type:Number,default:1},collapseTagsTooltip:Boolean,maxCollapseTagsTooltipHeight:{type:[String,Number]},debounce:{type:Number,default:300},beforeFilter:{type:oe(Function),default:()=>!0},placement:{type:oe(String),values:ol,default:"bottom-start"},fallbackPlacements:{type:oe(Array),default:["bottom-start","bottom","top-start","top","right","left"]},popperClass:Tn.popperClass,popperStyle:Tn.popperStyle,teleported:Tn.teleported,effect:{type:oe(String),default:"light"},tagType:{...jl.type,default:"info"},tagEffect:{...jl.effect,default:"light"},validateEvent:{type:Boolean,default:!0},persistent:{type:Boolean,default:!0},showCheckedStrategy:{type:String,values:["parent","child"],default:"child"},checkOnClickNode:Boolean,showPrefix:{type:Boolean,default:!0},fitInputWidth:{type:[Boolean,Number],default:!1},...Rf}),IN=e=>!0,Iye={[mt]:IN,[Vt]:IN,focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,visibleChange:e=>En(e),expandChange:e=>!!e,removeTag:e=>!!e},Mye=["placeholder"],Pye=["onClick"],Lye=["id","data-suggestion-index","onClick"],Dye=34;var Rye=ye({name:"ElCascader",__name:"cascader",props:Aye,emits:Iye,setup(e,{expose:t,emit:n}){const r={modifiers:[{name:"arrowPosition",enabled:!0,phase:"main",fn:({state:we})=>{const{modifiersData:He,placement:je}=we;["right","left","bottom","top"].includes(je)||He.arrow&&(He.arrow.x=35)},requires:["arrow"]}]},a=e,i=n,o=iu(),s=pr();let l=0,u=0;const c=Ee("cascader"),d=Ee("input"),f={small:7,default:11,large:15},{t:h}=Yt(),{formItem:v}=ea(),p=ar(),{valueOnClear:g}=Iy(a),{isComposing:m,handleComposition:b}=Ay({afterComposition(we){var je;const He=(je=we.target)==null?void 0:je.value;Cn(He)}}),_=H(),w=H(),S=H(),x=H(),C=H(),T=H(),E=H(),k=H(!1),A=H(!1),I=H(!1),P=H(""),R=H(""),O=H([]),$=H([]),N=H("100%"),D=M(()=>!!s["suggestion-item"]),F=M(()=>Ei($.value.length*a.itemSize,a.itemSize,a.height)),W=M(()=>a.props.multiple?a.collapseTags?O.value.slice(0,a.maxCollapseTags):O.value:[]),z=M(()=>a.props.multiple?a.collapseTags?O.value.slice(a.maxCollapseTags):[]:[]),Y=M(()=>o.style),q=M(()=>a.placeholder??h("el.cascader.placeholder")),re=M(()=>R.value||O.value.length>0||m.value?"":q.value),ee=Rr(),se=M(()=>ee.value==="small"?"small":"default"),ne=M(()=>!!a.props.multiple),de=M(()=>!a.filterable||ne.value),le=M(()=>ne.value?R.value:P.value),J=M(()=>{var we;return((we=C.value)==null?void 0:we.checkedNodes)||[]}),{wrapperRef:Z,isFocused:U,handleBlur:te}=uu(S,{disabled:p,beforeBlur(we){var He,je;return((He=_.value)==null?void 0:He.isFocusInsideContent(we))||((je=w.value)==null?void 0:je.isFocusInsideContent(we))},afterBlur(){var we;a.validateEvent&&((we=v==null?void 0:v.validate)==null||we.call(v,"blur").catch(It))}}),Q=M(()=>!a.clearable||p.value||I.value||!A.value&&!U.value?!1:!!J.value.length),ue=M(()=>{const{showAllLevels:we,separator:He}=a,je=J.value;return je.length?ne.value?"":je[0].calcText(we,He):""}),pe=M(()=>(v==null?void 0:v.validateState)||""),me=M({get(){return Ps(a.modelValue)},set(we){const He=we??g.value;i(mt,He),i(Vt,He),a.validateEvent&&(v==null||v.validate("change").catch(It))}}),Pe=M(()=>[c.b(),c.m(ee.value),c.is("disabled",p.value),o.class]),Ne=M(()=>[d.e("icon"),"icon-arrow-down",c.is("reverse",k.value)]),ie=M(()=>c.is("focus",U.value)),ae=M(()=>{var we,He;return(He=(we=_.value)==null?void 0:we.popperRef)==null?void 0:He.contentRef}),ge=we=>{U.value&&te(new FocusEvent("blur",we)),be(!1)},be=we=>{var He,je;p.value||(we=we??!k.value,we!==k.value&&(k.value=we,(je=(He=S.value)==null?void 0:He.input)==null||je.setAttribute("aria-expanded",`${we}`),we?($e(),C.value&&Ue(C.value.scrollToExpandingNode)):a.filterable&&ft(),i("visibleChange",we)))},$e=()=>{Ue(()=>{var we;(we=_.value)==null||we.updatePopper()})},Re=()=>{I.value=!1},Se=we=>{const{showAllLevels:He,separator:je}=a;return{node:we,key:we.uid,text:we.calcText(He,je),hitState:!1,closable:!p.value&&!we.isDisabled}},Ae=we=>{var je;const He=we.node;He.doCheck(!1),(je=C.value)==null||je.calculateCheckedValue(),i("removeTag",He.valueByOption)},nt=()=>{switch(a.showCheckedStrategy){case"child":return J.value;case"parent":{const we=Te(!1),He=we.map(je=>je.value);return we.filter(je=>!je.parent||!He.includes(je.parent.value))}default:return[]}},at=()=>{if(!ne.value)return;const we=nt(),He=[];we.forEach(je=>He.push(Se(je))),O.value=He},zt=()=>{var kn,Un;const{filterMethod:we,showAllLevels:He,separator:je}=a,Xt=(Un=(kn=C.value)==null?void 0:kn.getFlattedNodes(!a.props.checkStrictly))==null?void 0:Un.filter(Qn=>Qn.isDisabled?!1:(Qn.calcText(He,je),we(Qn,le.value)));ne.value&&O.value.forEach(Qn=>{Qn.hitState=!1}),I.value=!0,$.value=Xt,Ue(()=>{var Qn;a.virtualScroll&&$.value.length>0&&((Qn=E.value)==null||Qn.scrollToItem(0)),xe()}),$e()},on=we=>{const He=T.value;return we?(He==null?void 0:He.querySelector(we))??void 0:He},Bt=()=>{var He;let we;I.value&&T.value?we=on(`.${c.e("suggestion-item")}`):we=(He=C.value)==null?void 0:He.$el.querySelector(`.${c.b("node")}[tabindex="-1"]`),we&&(we.focus(),!I.value&&we.getAttribute("aria-haspopup")==="true"&&we.click())},it=we=>{const He=on();if(!He)return;const je=Je(a.fitInputWidth)?`${a.fitInputWidth}px`:`${we}px`,Xt=Un=>{a.fitInputWidth!==!1?(Un.style.width=je,Un.style.minWidth=""):(Un.style.width="",Un.style.minWidth=je)};if(Xt(He),a.virtualScroll){N.value=a.fitInputWidth!==!1?je:D.value?`${we}px`:`${Math.max(we,rt())}px`;return}const kn=on(`.${c.e("suggestion-list")}`);kn&&Xt(kn)},At=()=>{var je;if(!s.prefix)return 0;const we=(je=S.value)==null?void 0:je.$el.querySelector(`.${d.e("prefix")}`);if(!we)return 0;const He=we.getBoundingClientRect().width;return He<=0?0:He+f[ee.value||"default"]},xe=()=>{var Xt,kn;const we=(Xt=S.value)==null?void 0:Xt.input,He=(kn=S.value)==null?void 0:kn.$el;if(!cn||!we||!He)return;T.value&&it(He.getBoundingClientRect().width);const je=x.value;if(je){const Un=O.value.length>0?`${Math.max(je.offsetHeight,l)-2}px`:`${l}px`;we.style.height=Un,je.style.left=`${At()}px`,$e()}},rt=()=>{if(D.value||!$.value.length)return 0;const we=document.createElement("canvas").getContext("2d");if(!we)return 0;const He=on(`.${c.e("suggestion-item")}`);if(!He||!cn)return 0;const je=getComputedStyle(He),Xt=Number.parseFloat(je.paddingLeft)+Number.parseFloat(je.paddingRight);we.font=`bold ${je.fontSize} ${je.fontFamily}`;let kn=0,Un=!1;for(const Qn of $.value){const Ia=Qn.text||"",mu=we.measureText(Ia);kn=Math.max(kn,mu.width),Qn.checked&&!Un&&(Un=!0)}return kn+Xt+(Un?Dye:0)},Te=we=>{var He;return(He=C.value)==null?void 0:He.getCheckedNodes(we)},Qe=we=>{$e(),i("expandChange",we)},jt=we=>{if(!m.value)switch(Mn(we)){case De.enter:case De.numpadEnter:be();break;case De.down:be(!0),Ue(Bt),we.preventDefault();break;case De.esc:k.value===!0&&(we.preventDefault(),we.stopPropagation(),be(!1));break;case De.tab:be(!1);break}},Xe=()=>{var we;(we=C.value)==null||we.clearCheckedNodes(),!k.value&&a.filterable&&ft(),be(!1),i("clear")},ft=()=>{const{value:we}=ue;P.value=we,R.value=we},vt=we=>{var je,Xt;const{checked:He}=we;ne.value?(je=C.value)==null||je.handleCheckChange(we,!He,!1):(!He&&((Xt=C.value)==null||Xt.handleCheckChange(we,!0,!1)),be(!1))},kt=we=>{var Xt;const He=(Xt=we.closest("[data-suggestion-index]"))==null?void 0:Xt.dataset.suggestionIndex;if(!He)return-1;const je=Number.parseInt(He,10);return Number.isNaN(je)||je<0||je>=$.value.length?-1:je},Gt=we=>{const He=we.target,je=Mn(we);switch(je){case De.up:case De.down:{we.preventDefault();const Xt=je===De.up?-1:1;if(a.virtualScroll&&E.value){const kn=kt(He);if(kn>=0){const Un=$.value.length,Qn=(kn+Xt+Un)%Un;E.value.scrollToItem(Qn),Ue(()=>{const Ia=on(`#suggestion-${$.value[Qn].uid}`);Ia&&Yh(Ia)});return}}Yh(vW(He,Xt,`.${c.e("suggestion-item")}[tabindex="-1"]`));break}case De.enter:case De.numpadEnter:He.click();break}},fn=()=>{const we=O.value[O.value.length-1];u=R.value?0:u+1,!(!we||!u||a.collapseTags&&O.value.length>1)&&(we.hitState?Ae(we):we.hitState=!0)},bt=by(()=>{const{value:we}=le;if(!we)return;const He=a.beforeFilter(we);fc(He)?He.then(zt).catch(()=>{}):He!==!1?zt():Re()},M(()=>a.debounce)),Cn=(we,He)=>{if(!k.value&&be(!0),!(He!=null&&He.isComposing))if(we)bt();else{const je=a.beforeFilter("");fc(je)&&je.catch(()=>{}),Re()}},jn=we=>Number.parseFloat(ble(d.cssVarName("input-height"),we).value)-2,We=()=>{var we;(we=S.value)==null||we.focus()},st=()=>{var we;(we=S.value)==null||we.blur()};return _e(I,$e),_e([J,p,()=>a.collapseTags,()=>a.maxCollapseTags],at),_e(O,()=>{Ue(()=>xe())}),_e(ee,async()=>{await Ue();const we=S.value.input;l=jn(we)||l,xe()}),_e(ue,ft,{immediate:!0}),_e(()=>k.value,we=>{var He;we&&a.props.lazy&&a.props.lazyLoad&&((He=C.value)==null||He.loadLazyRootNodes())}),St(()=>{const we=S.value.input,He=S.value.$el,je=jn(we);l=we.offsetHeight||je,Kn(He,xe)}),t({getCheckedNodes:Te,cascaderPanelRef:C,togglePopperVisible:be,contentRef:ae,presentText:ue,focus:We,blur:st}),(we,He)=>(L(),ve(y(ua),{ref_key:"tooltipRef",ref:_,visible:k.value,teleported:e.teleported,"popper-class":[y(c).e("dropdown"),e.popperClass],"popper-style":e.popperStyle,"popper-options":r,"fallback-placements":e.fallbackPlacements,"stop-popper-mouse-event":!1,"gpu-acceleration":!1,placement:e.placement,transition:`${y(c).namespace.value}-zoom-in-top`,effect:e.effect,pure:"",persistent:e.persistent,onHide:Re},{default:G(()=>[gt((L(),K("div",{ref_key:"wrapperRef",ref:Z,class:B(Pe.value),style:tt(Y.value),onClick:He[8]||(He[8]=()=>be(de.value?void 0:!0)),onKeydown:jt,onMouseenter:He[9]||(He[9]=je=>A.value=!0),onMouseleave:He[10]||(He[10]=je=>A.value=!1)},[V(y(va),{ref_key:"inputRef",ref:S,modelValue:P.value,"onUpdate:modelValue":He[1]||(He[1]=je=>P.value=je),placeholder:re.value,readonly:de.value,disabled:y(p),"validate-event":!1,size:y(ee),class:B(ie.value),tabindex:ne.value&&e.filterable&&!y(p)?-1:void 0,onCompositionstart:y(b),onCompositionupdate:y(b),onCompositionend:y(b),onInput:Cn},ui({suffix:G(()=>[Q.value?(L(),ve(y(Ze),{key:"clear",class:B([y(d).e("icon"),"icon-circle-close"]),onClick:ut(Xe,["stop"])},{default:G(()=>[(L(),ve(Et(e.clearIcon)))]),_:1},8,["class"])):(L(),ve(y(Ze),{key:"arrow-down",class:B(Ne.value),onClick:He[0]||(He[0]=ut(je=>be(),["stop"]))},{default:G(()=>[V(y(ll))]),_:1},8,["class"]))]),_:2},[we.$slots.prefix?{name:"prefix",fn:G(()=>[he(we.$slots,"prefix")]),key:"0"}:void 0]),1032,["modelValue","placeholder","readonly","disabled","size","class","tabindex","onCompositionstart","onCompositionupdate","onCompositionend"]),ne.value?(L(),K("div",{key:0,ref_key:"tagWrapper",ref:x,class:B([y(c).e("tags"),y(c).is("validate",!!pe.value)])},[he(we.$slots,"tag",{data:O.value,deleteTag:Ae},()=>[(L(!0),K(ze,null,Lt(W.value,je=>(L(),ve(y(Nl),{key:je.key,type:e.tagType,size:se.value,effect:e.tagEffect,hit:je.hitState,closable:je.closable,"disable-transitions":"",onClose:Xt=>Ae(je)},{default:G(()=>[j("span",null,ce(je.text),1)]),_:2},1032,["type","size","effect","hit","closable","onClose"]))),128))]),e.collapseTags&&O.value.length>e.maxCollapseTags?(L(),ve(y(ua),{key:0,ref_key:"tagTooltipRef",ref:w,disabled:k.value||!e.collapseTagsTooltip,"fallback-placements":["bottom","top","right","left"],placement:"bottom","popper-class":e.popperClass,"popper-style":e.popperStyle,effect:e.effect,persistent:e.persistent},{default:G(()=>[V(y(Nl),{closable:!1,size:se.value,type:e.tagType,effect:e.tagEffect,"disable-transitions":""},{default:G(()=>[j("span",{class:B(y(c).e("tags-text"))}," + "+ce(O.value.length-e.maxCollapseTags),3)]),_:1},8,["size","type","effect"])]),content:G(()=>[V(y(ts),{"max-height":e.maxCollapseTagsTooltipHeight},{default:G(()=>[j("div",{class:B(y(c).e("collapse-tags"))},[(L(!0),K(ze,null,Lt(z.value,(je,Xt)=>(L(),K("div",{key:Xt,class:B(y(c).e("collapse-tag"))},[(L(),ve(y(Nl),{key:je.key,class:"in-tooltip",type:e.tagType,size:se.value,effect:e.tagEffect,hit:je.hitState,closable:je.closable,"disable-transitions":"",onClose:kn=>Ae(je)},{default:G(()=>[j("span",null,ce(je.text),1)]),_:2},1032,["type","size","effect","hit","closable","onClose"]))],2))),128))],2)]),_:1},8,["max-height"])]),_:1},8,["disabled","popper-class","popper-style","effect","persistent"])):fe("v-if",!0),e.filterable&&!y(p)?gt((L(),K("input",{key:1,"onUpdate:modelValue":He[2]||(He[2]=je=>R.value=je),type:"text",class:B(y(c).e("search-input")),placeholder:ue.value?"":q.value,onInput:He[3]||(He[3]=je=>Cn(R.value,je)),onClick:He[4]||(He[4]=ut(je=>be(!0),["stop"])),onKeydown:Yn(fn,["delete"]),onCompositionstart:He[5]||(He[5]=(...je)=>y(b)&&y(b)(...je)),onCompositionupdate:He[6]||(He[6]=(...je)=>y(b)&&y(b)(...je)),onCompositionend:He[7]||(He[7]=(...je)=>y(b)&&y(b)(...je))},null,42,Mye)),[[hH,R.value]]):fe("v-if",!0)],2)):fe("v-if",!0)],38)),[[y(yc),ge,ae.value]])]),content:G(()=>[we.$slots.header?(L(),K("div",{key:0,class:B(y(c).e("header")),onClick:He[11]||(He[11]=ut(()=>{},["stop"]))},[he(we.$slots,"header")],2)):fe("v-if",!0),gt(V(y(B9),{ref_key:"cascaderPanelRef",ref:C,modelValue:me.value,"onUpdate:modelValue":He[12]||(He[12]=je=>me.value=je),options:e.options,props:a.props,border:!1,"render-label":we.$slots.default,"virtual-scroll":e.virtualScroll,"item-size":e.itemSize,height:e.height,onExpandChange:Qe,onClose:He[13]||(He[13]=je=>we.$nextTick(()=>be(!1)))},{empty:G(()=>[he(we.$slots,"empty")]),_:3},8,["modelValue","options","props","render-label","virtual-scroll","item-size","height"]),[[ln,!I.value]]),e.filterable?(L(),K(ze,{key:1},[e.virtualScroll?gt((L(),K("div",{key:1,ref_key:"suggestionPanel",ref:T,class:B(y(c).e("suggestion-panel")),onKeydown:Gt},[gt(V(y(Zw),{ref_key:"suggestionVirtualListRef",ref:E,height:F.value,"item-size":e.itemSize,data:$.value,total:$.value.length,"class-name":y(c).e("suggestion-list"),"inner-element":"ul","inner-width":N.value},{default:G(({data:je,index:Xt,style:kn})=>[(L(),K("li",{id:`suggestion-${je[Xt].uid}`,key:je[Xt].uid,"data-suggestion-index":Xt,class:B([y(c).e("suggestion-item"),y(c).is("checked",je[Xt].checked)]),tabindex:-1,style:tt(kn),onClick:Un=>vt(je[Xt])},[he(we.$slots,"suggestion-item",{item:je[Xt]},()=>[j("span",null,ce(je[Xt].text),1),je[Xt].checked?(L(),ve(y(Ze),{key:0},{default:G(()=>[V(y(mv))]),_:1})):fe("v-if",!0)])],14,Lye))]),_:3},8,["height","item-size","data","total","class-name","inner-width"]),[[ln,$.value.length]]),$.value.length?fe("v-if",!0):he(we.$slots,"empty",{key:0},()=>[j("ul",{class:B(y(c).e("suggestion-list"))},[j("li",{class:B(y(c).e("empty-text"))},ce(y(h)("el.cascader.noMatch")),3)],2)])],34)),[[ln,I.value]]):gt((L(),ve(y(ts),{key:0,ref:je=>T.value=je==null?void 0:je.$el,tag:"ul",class:B(y(c).e("suggestion-panel")),"wrap-class":y(c).e("suggestion-wrap"),"view-class":y(c).e("suggestion-list"),onKeydown:Gt},{default:G(()=>[$.value.length?(L(!0),K(ze,{key:0},Lt($.value,je=>(L(),K("li",{key:je.uid,class:B([y(c).e("suggestion-item"),y(c).is("checked",je.checked)]),tabindex:-1,onClick:Xt=>vt(je)},[he(we.$slots,"suggestion-item",{item:je},()=>[j("span",null,ce(je.text),1),je.checked?(L(),ve(y(Ze),{key:0},{default:G(()=>[V(y(mv))]),_:1})):fe("v-if",!0)])],10,Pye))),128)):he(we.$slots,"empty",{key:1},()=>[j("li",{class:B(y(c).e("empty-text"))},ce(y(h)("el.cascader.noMatch")),3)])]),_:3},8,["class","wrap-class","view-class"])),[[ln,I.value]])],64)):fe("v-if",!0),we.$slots.footer?(L(),K("div",{key:2,class:B(y(c).e("footer")),onClick:He[14]||(He[14]=ut(()=>{},["stop"]))},[he(we.$slots,"footer")],2)):fe("v-if",!0)]),_:3},8,["visible","teleported","popper-class","popper-style","fallback-placements","placement","transition","effect","persistent"]))}}),Oye=Rye;const Nye=xt(Oye),Vye=Oe({checked:Boolean,disabled:Boolean,type:{type:String,values:["primary","success","info","warning","danger"],default:"primary"}}),$ye={"update:checked":e=>En(e),[Vt]:e=>En(e)};var Bye=ye({name:"ElCheckTag",__name:"check-tag",props:Vye,emits:$ye,setup(e,{emit:t}){const n=e,r=t,a=Ee("check-tag"),i=M(()=>[a.b(),a.is("checked",n.checked),a.is("disabled",n.disabled),a.m(n.type||"primary")]),o=()=>{if(n.disabled)return;const s=!n.checked;r(Vt,s),r("update:checked",s)};return(s,l)=>(L(),K("span",{class:B(i.value),onClick:o},[he(s.$slots,"default")],2))}}),Fye=Bye;const zye=xt(Fye),Hye=Oe({tag:{type:String,default:"div"},span:{type:Number,default:24},offset:{type:Number,default:0},pull:{type:Number,default:0},push:{type:Number,default:0},xs:{type:oe([Number,Object]),default:()=>sr({})},sm:{type:oe([Number,Object]),default:()=>sr({})},md:{type:oe([Number,Object]),default:()=>sr({})},lg:{type:oe([Number,Object]),default:()=>sr({})},xl:{type:oe([Number,Object]),default:()=>sr({})}}),Wye=["start","center","end","space-around","space-between","space-evenly"],Gye=["top","middle","bottom"],Uye=Oe({tag:{type:String,default:"div"},gutter:{type:Number,default:0},justify:{type:String,values:Wye,default:"start"},align:{type:String,values:Gye}}),F9=Symbol("rowContextKey");var Kye=ye({name:"ElRow",__name:"row",props:Uye,setup(e){const t=e,n=Ee("row");Ft(F9,{gutter:M(()=>t.gutter)});const r=M(()=>{const i={};return t.gutter&&(i.marginRight=i.marginLeft=`-${t.gutter/2}px`),i}),a=M(()=>[n.b(),n.is(`justify-${t.justify}`,t.justify!=="start"),n.is(`align-${t.align}`,!!t.align)]);return(i,o)=>(L(),ve(Et(e.tag),{class:B(a.value),style:tt(r.value)},{default:G(()=>[he(i.$slots,"default")]),_:3},8,["class","style"]))}}),Yye=Kye;const jye=xt(Yye);var qye=ye({name:"ElCol",__name:"col",props:Hye,setup(e){const t=e,{gutter:n}=Ge(F9,{gutter:M(()=>0)}),r=Ee("col"),a=M(()=>{const o={};return n.value&&(o.paddingLeft=o.paddingRight=`${n.value/2}px`),o}),i=M(()=>{const o=[];return["span","offset","pull","push"].forEach(s=>{const l=t[s];Je(l)&&(s==="span"?o.push(r.b(`${t[s]}`)):l>0&&o.push(r.b(`${s}-${t[s]}`)))}),["xs","sm","md","lg","xl"].forEach(s=>{Je(t[s])?o.push(r.b(`${s}-${t[s]}`)):yt(t[s])&&Object.entries(t[s]).forEach(([l,u])=>{o.push(l!=="span"?r.b(`${s}-${l}-${u}`):r.b(`${s}-${u}`))})}),n.value&&o.push(r.is("guttered")),[r.b(),o]});return(o,s)=>(L(),ve(Et(e.tag),{class:B(i.value),style:tt(a.value)},{default:G(()=>[he(o.$slots,"default")]),_:3},8,["class","style"]))}}),Xye=qye;const Zye=xt(Xye),MN=e=>Je(e)||qe(e)||Me(e),Jye=Oe({accordion:Boolean,modelValue:{type:oe([Array,String,Number]),default:()=>sr([])},expandIconPosition:{type:oe([String]),default:"right"},beforeCollapse:{type:oe(Function)}}),Qye={[mt]:MN,[Vt]:MN},z9=Symbol("collapseContextKey"),e0e=Oe({title:{type:String,default:""},name:{type:oe([String,Number]),default:void 0},icon:{type:An,default:Wa},disabled:Boolean});var t0e=ye({name:"ElCollapseTransition",__name:"collapse-transition",setup(e){const t=Ee("collapse-transition"),n=a=>{a.style.maxHeight="",a.style.overflow=a.dataset.oldOverflow,a.style.paddingTop=a.dataset.oldPaddingTop,a.style.paddingBottom=a.dataset.oldPaddingBottom},r={beforeEnter(a){a.dataset||(a.dataset={}),a.dataset.oldPaddingTop=a.style.paddingTop,a.dataset.oldPaddingBottom=a.style.paddingBottom,a.style.height&&(a.dataset.elExistsHeight=a.style.height),a.style.maxHeight=0,a.style.paddingTop=0,a.style.paddingBottom=0},enter(a){requestAnimationFrame(()=>{a.dataset.oldOverflow=a.style.overflow,a.dataset.elExistsHeight?a.style.maxHeight=a.dataset.elExistsHeight:a.scrollHeight!==0?a.style.maxHeight=`${a.scrollHeight}px`:a.style.maxHeight=0,a.style.paddingTop=a.dataset.oldPaddingTop,a.style.paddingBottom=a.dataset.oldPaddingBottom,a.style.overflow="hidden"})},afterEnter(a){a.style.maxHeight="",a.style.overflow=a.dataset.oldOverflow},enterCancelled(a){n(a)},beforeLeave(a){a.dataset||(a.dataset={}),a.dataset.oldPaddingTop=a.style.paddingTop,a.dataset.oldPaddingBottom=a.style.paddingBottom,a.dataset.oldOverflow=a.style.overflow,a.style.maxHeight=`${a.scrollHeight}px`,a.style.overflow="hidden"},leave(a){a.scrollHeight!==0&&(a.style.maxHeight=0,a.style.paddingTop=0,a.style.paddingBottom=0)},afterLeave(a){n(a)},leaveCancelled(a){n(a)}};return(a,i)=>(L(),ve(ya,Mt({name:y(t).b()},rte(r)),{default:G(()=>[he(a.$slots,"default")]),_:3},16,["name"]))}}),n0e=t0e;const Qw=xt(n0e),PN="ElCollapse",r0e=(e,t)=>{const n=H(jr(e.modelValue)),r=o=>{n.value=o;const s=e.accordion?n.value[0]:n.value;t(mt,s),t(Vt,s)},a=o=>{if(e.accordion)r([n.value[0]===o?"":o]);else{const s=[...n.value],l=s.indexOf(o);l>-1?s.splice(l,1):s.push(o),r(s)}},i=async o=>{const{beforeCollapse:s}=e;if(!s){a(o);return}const l=s(o);[fc(l),En(l)].includes(!0)||nr(PN,"beforeCollapse must return type `Promise` or `boolean`"),fc(l)?l.then(u=>{u!==!1&&a(o)}).catch(u=>{wn(PN,`some error occurred: ${u}`)}):l&&a(o)};return _e(()=>e.modelValue,()=>n.value=jr(e.modelValue),{deep:!0}),Ft(z9,{activeNames:n,handleItemClick:i}),{activeNames:n,setActiveNames:r}},a0e=e=>{const t=Ee("collapse");return{rootKls:M(()=>[t.b(),t.b(`icon-position-${e.expandIconPosition}`)])}};var i0e=ye({name:"ElCollapse",__name:"collapse",props:Jye,emits:Qye,setup(e,{expose:t,emit:n}){const r=e,{activeNames:a,setActiveNames:i}=r0e(r,n),{rootKls:o}=a0e(r);return t({activeNames:a,setActiveNames:i}),(s,l)=>(L(),K("div",{class:B(y(o))},[he(s.$slots,"default")],2))}}),o0e=i0e;const s0e=e=>{const t=Ge(z9),{namespace:n}=Ee("collapse"),r=H(!1),a=H(!1),i=ZI(),o=M(()=>i.current++),s=M(()=>e.name??`${n.value}-id-${i.prefix}-${y(o)}`),l=M(()=>t==null?void 0:t.activeNames.value.includes(y(s)));return{focusing:r,id:o,isActive:l,handleFocus:()=>{setTimeout(()=>{a.value?a.value=!1:r.value=!0},50)},handleHeaderClick:f=>{var h;e.disabled||(h=f.target)!=null&&h.closest("input, textarea, select")||(t==null||t.handleItemClick(y(s)),r.value=!1,a.value=!0)},handleEnterClick:f=>{var h;(h=f.target)!=null&&h.closest("input, textarea, select")||(f.preventDefault(),t==null||t.handleItemClick(y(s)))}}},l0e=(e,{focusing:t,isActive:n,id:r})=>{const a=Ee("collapse"),i=M(()=>[a.b("item"),a.is("active",y(n)),a.is("disabled",e.disabled)]),o=M(()=>[a.be("item","header"),a.is("active",y(n)),{focusing:y(t)&&!e.disabled}]),s=M(()=>[a.be("item","arrow"),a.is("active",y(n))]);return{itemTitleKls:M(()=>[a.be("item","title")]),arrowKls:s,headKls:o,rootKls:i,itemWrapperKls:M(()=>a.be("item","wrap")),itemContentKls:M(()=>a.be("item","content")),scopedContentId:M(()=>a.b(`content-${y(r)}`)),scopedHeadId:M(()=>a.b(`head-${y(r)}`))}},u0e=["id","aria-expanded","aria-controls","aria-describedby","tabindex","aria-disabled"],c0e=["id","aria-hidden","aria-labelledby"];var d0e=ye({name:"ElCollapseItem",__name:"collapse-item",props:e0e,setup(e,{expose:t}){const n=e,{focusing:r,id:a,isActive:i,handleFocus:o,handleHeaderClick:s,handleEnterClick:l}=s0e(n),{arrowKls:u,headKls:c,rootKls:d,itemTitleKls:f,itemWrapperKls:h,itemContentKls:v,scopedContentId:p,scopedHeadId:g}=l0e(n,{focusing:r,isActive:i,id:a});return t({isActive:i}),(m,b)=>(L(),K("div",{class:B(y(d))},[j("div",{id:y(g),class:B(y(c)),"aria-expanded":y(i),"aria-controls":y(p),"aria-describedby":y(p),tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,role:"button",onClick:b[0]||(b[0]=(..._)=>y(s)&&y(s)(..._)),onKeydown:b[1]||(b[1]=Yn(ut((..._)=>y(l)&&y(l)(..._),["stop"]),["space","enter"])),onFocus:b[2]||(b[2]=(..._)=>y(o)&&y(o)(..._)),onBlur:b[3]||(b[3]=_=>r.value=!1)},[j("span",{class:B(y(f))},[he(m.$slots,"title",{isActive:y(i)},()=>[Le(ce(e.title),1)])],2),he(m.$slots,"icon",{isActive:y(i)},()=>[V(y(Ze),{class:B(y(u))},{default:G(()=>[(L(),ve(Et(e.icon)))]),_:1},8,["class"])])],42,u0e),V(y(Qw),null,{default:G(()=>[gt(j("div",{id:y(p),role:"region",class:B(y(h)),"aria-hidden":!y(i),"aria-labelledby":y(g)},[j("div",{class:B(y(v))},[he(m.$slots,"default")],2)],10,c0e),[[ln,y(i)]])]),_:3})],2))}}),H9=d0e;const f0e=xt(o0e,{CollapseItem:H9}),h0e=rr(H9),W9=Oe({modelValue:{type:oe(String),default:void 0},border:{type:Boolean,default:!0},showAlpha:Boolean,colorFormat:{type:oe(String)},disabled:Boolean,predefine:{type:oe(Array)},validateEvent:{type:Boolean,default:!0},hueSliderClass:{type:oe([String,Array,Object])},hueSliderStyle:{type:oe([String,Array,Object,Boolean]),default:void 0}}),v0e={[mt]:e=>qe(e)||wr(e)},G9=Symbol("colorCommonPickerKey"),U9=Symbol("colorPickerPanelContextKey"),K9=Oe({color:{type:oe(Object),required:!0},vertical:Boolean,disabled:Boolean}),p0e=K9,LN=e=>{let t=0,n=e;for(;n;)t+=n.offsetTop,n=n.offsetParent;return t},LE=(e,t)=>Math.abs(LN(e)-LN(t)),n_=e=>{let t,n;return e.type==="touchend"?(n=e.changedTouches[0].clientY,t=e.changedTouches[0].clientX):e.type.startsWith("touch")?(n=e.touches[0].clientY,t=e.touches[0].clientX):(n=e.clientY,t=e.clientX),{clientX:t,clientY:n}};let Rx=!1;function DE(e,t){if(!cn)return;const n=function(i){var o;(o=t.drag)==null||o.call(t,i)},r=function(i){var o;document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",r),document.removeEventListener("touchmove",n),document.removeEventListener("touchend",r),document.onselectstart=null,document.ondragstart=null,Rx=!1,(o=t.end)==null||o.call(t,i)},a=function(i){var o;Rx||(document.onselectstart=()=>!1,document.ondragstart=()=>!1,document.addEventListener("mousemove",n),document.addEventListener("mouseup",r),document.addEventListener("touchmove",n),document.addEventListener("touchend",r),Rx=!0,(o=t.start)==null||o.call(t,i))};e.addEventListener("mousedown",a),e.addEventListener("touchstart",a,{passive:!1})}const Y9=(e,{key:t,minValue:n,maxValue:r})=>{const a=Tt(),i=Ut(),o=Ut(),s=M(()=>e.color.get(t));function l(f){var h;e.disabled||(f.target!==i.value&&u(f),(h=i.value)==null||h.focus())}function u(f){if(!o.value||!i.value||e.disabled)return;const h=a.vnode.el.getBoundingClientRect(),{clientX:v,clientY:p}=n_(f);let g;if(e.vertical){let m=p-h.top;m=Math.max(i.value.offsetHeight/2,m),m=Math.min(m,h.height-i.value.offsetHeight/2),g=Math.round((m-i.value.offsetHeight/2)/(h.height-i.value.offsetHeight)*r)}else{let m=v-h.left;m=Math.max(i.value.offsetWidth/2,m),m=Math.min(m,h.width-i.value.offsetWidth/2),g=Math.round((m-i.value.offsetWidth/2)/(h.width-i.value.offsetWidth)*r)}e.color.set(t,g)}function c(f){if(e.disabled)return;const{shiftKey:h}=f,v=Mn(f),p=h?10:1,g=t==="hue"?-1:1;let m=!0;switch(v){case De.left:case De.down:d(-p*g);break;case De.right:case De.up:d(p*g);break;case De.home:e.color.set(t,t==="hue"?r:n);break;case De.end:e.color.set(t,t==="hue"?n:r);break;case De.pageDown:d(-4*g);break;case De.pageUp:d(4*g);break;default:m=!1;break}m&&f.preventDefault()}function d(f){let h=s.value+f;h=hr?r:h,e.color.set(t,h)}return{thumb:i,bar:o,currentValue:s,handleDrag:u,handleClick:l,handleKeydown:c}},j9=(e,{namespace:t,maxValue:n,bar:r,thumb:a,currentValue:i,handleDrag:o,getBackground:s})=>{const l=Tt(),u=Ee(t),c=H(0),d=H(0),f=H();function h(){if(!a.value||e.vertical)return 0;const _=l.vnode.el,w=i.value;return _?Math.round(w*(_.offsetWidth-a.value.offsetWidth/2)/n):0}function v(){if(!a.value)return 0;const _=l.vnode.el;if(!e.vertical)return 0;const w=i.value;return _?Math.round(w*(_.offsetHeight-a.value.offsetHeight/2)/n):0}function p(){c.value=h(),d.value=v(),f.value=s==null?void 0:s()}St(()=>{if(!r.value||!a.value)return;const _={drag:w=>{o(w)},end:w=>{o(w)}};DE(r.value,_),DE(a.value,_),p()}),_e(i,()=>p()),_e(()=>e.color.value,()=>p());const g=M(()=>[u.b(),u.is("vertical",e.vertical),u.is("disabled",e.disabled)]),m=M(()=>u.e("bar")),b=M(()=>u.e("thumb"));return{rootKls:g,barKls:m,barStyle:M(()=>({background:f.value})),thumbKls:b,thumbStyle:M(()=>({left:ur(c.value),top:ur(d.value)})),thumbLeft:c,thumbTop:d,update:p}},g0e=["aria-label","aria-valuenow","aria-valuetext","aria-orientation","tabindex","aria-disabled"],DN=0,Ox=100;var m0e=ye({name:"ElColorAlphaSlider",__name:"alpha-slider",props:K9,setup(e,{expose:t}){const n=e,{currentValue:r,bar:a,thumb:i,handleDrag:o,handleClick:s,handleKeydown:l}=Y9(n,{key:"alpha",minValue:DN,maxValue:Ox}),{rootKls:u,barKls:c,barStyle:d,thumbKls:f,thumbStyle:h,update:v}=j9(n,{namespace:"color-alpha-slider",maxValue:Ox,currentValue:r,bar:a,thumb:i,handleDrag:o,getBackground:b}),{t:p}=Yt(),g=M(()=>p("el.colorpicker.alphaLabel")),m=M(()=>p("el.colorpicker.alphaDescription",{alpha:r.value,color:n.color.value}));function b(){if(n.color&&n.color.value){const{r:_,g:w,b:S}=n.color.toRgb();return`linear-gradient(to right, rgba(${_}, ${w}, ${S}, 0) 0%, rgba(${_}, ${w}, ${S}, 1) 100%)`}return""}return t({update:v,bar:a,thumb:i}),(_,w)=>(L(),K("div",{class:B(y(u))},[j("div",{ref_key:"bar",ref:a,class:B(y(c)),style:tt(y(d)),onClick:w[0]||(w[0]=(...S)=>y(s)&&y(s)(...S))},null,6),j("div",{ref_key:"thumb",ref:i,class:B(y(f)),style:tt(y(h)),"aria-label":g.value,"aria-valuenow":y(r),"aria-valuetext":m.value,"aria-orientation":e.vertical?"vertical":"horizontal","aria-valuemin":DN,"aria-valuemax":Ox,role:"slider",tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,onKeydown:w[1]||(w[1]=(...S)=>y(l)&&y(l)(...S))},null,46,g0e)],2))}}),y0e=m0e;const b0e=["aria-label","aria-valuenow","aria-valuetext","aria-orientation","tabindex","aria-disabled"],RN=0,Nx=360;var _0e=ye({name:"ElColorHueSlider",__name:"hue-slider",props:p0e,setup(e,{expose:t}){const n=e,{currentValue:r,bar:a,thumb:i,handleDrag:o,handleClick:s,handleKeydown:l}=Y9(n,{key:"hue",minValue:RN,maxValue:Nx}),{rootKls:u,barKls:c,thumbKls:d,thumbStyle:f,thumbTop:h,update:v}=j9(n,{namespace:"color-hue-slider",maxValue:Nx,currentValue:r,bar:a,thumb:i,handleDrag:o}),{t:p}=Yt(),g=M(()=>p("el.colorpicker.hueLabel")),m=M(()=>p("el.colorpicker.hueDescription",{hue:r.value,color:n.color.value}));return t({bar:a,thumb:i,thumbTop:h,update:v}),(b,_)=>(L(),K("div",{class:B(y(u))},[j("div",{ref_key:"bar",ref:a,class:B(y(c)),onClick:_[0]||(_[0]=(...w)=>y(s)&&y(s)(...w))},null,2),j("div",{ref_key:"thumb",ref:i,class:B(y(d)),style:tt(y(f)),"aria-label":g.value,"aria-valuenow":y(r),"aria-valuetext":m.value,"aria-orientation":e.vertical?"vertical":"horizontal","aria-valuemin":RN,"aria-valuemax":Nx,role:"slider",tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,onKeydown:_[1]||(_[1]=(...w)=>y(l)&&y(l)(...w))},null,46,b0e)],2))}}),w0e=_0e;const S0e=Oe({colors:{type:oe(Array),required:!0},color:{type:oe(Object),required:!0},enableAlpha:{type:Boolean,required:!0},disabled:Boolean});var r_=class{constructor(e={}){this._hue=0,this._saturation=100,this._value=100,this._alpha=100,this._tiny=new mr,this._isValid=!1,this.enableAlpha=!1,this.format="",this.value="";for(const t in e)un(e,t)&&(this[t]=e[t]);e.value?this.fromString(e.value):this.doOnChange()}set(e,t){if(arguments.length===1&&typeof e=="object"){for(const n in e)un(e,n)&&this.set(n,e[n]);return}this[`_${e}`]=t,this._isValid=!0,this.doOnChange()}get(e){return["hue","saturation","value","alpha"].includes(e)?Math.round(this[`_${e}`]):this[`_${e}`]}toRgb(){return this._isValid?this._tiny.toRgb():{r:255,g:255,b:255,a:0}}fromString(e){const t=new mr(e);if(this._isValid=t.isValid,t.isValid){const{h:n,s:r,v:a,a:i}=t.toHsv();this._hue=n,this._saturation=r*100,this._value=a*100,this._alpha=i*100}else this._hue=0,this._saturation=100,this._value=100,this._alpha=100;this.doOnChange()}clear(){this._isValid=!1,this.value="",this._hue=0,this._saturation=100,this._value=100,this._alpha=100}compare(e){const t=new mr({h:e._hue,s:e._saturation/100,v:e._value/100,a:e._alpha/100});return this._tiny.equals(t)}doOnChange(){const{_hue:e,_saturation:t,_value:n,_alpha:r,format:a,enableAlpha:i}=this;let o=a||(i?"rgb":"hex");a==="hex"&&i&&(o="hex8"),this._tiny=new mr({h:e,s:t/100,v:n/100,a:r/100}),this.value=this._isValid?this._tiny.toString(o):""}};const x0e=e=>{const{currentColor:t}=Ge(U9),n=H(a(e.colors,e.color));_e(()=>t.value,i=>{const o=new r_({value:i,enableAlpha:e.enableAlpha});n.value.forEach(s=>{s.selected=o.compare(s)})}),Ua(()=>{n.value=a(e.colors,e.color)});function r(i){e.color.fromString(e.colors[i])}function a(i,o){return i.map(s=>{const l=new r_({value:s,enableAlpha:e.enableAlpha});return l.selected=l.compare(o),l})}return{rgbaColors:n,handleSelect:r}},C0e=e=>{const t=Ee("color-predefine"),n=M(()=>[t.b(),t.is("disabled",e.disabled)]),r=M(()=>t.e("colors"));function a(i){return[t.e("color-selector"),t.is("alpha",i.get("alpha")<100),{selected:i.selected}]}return{rootKls:n,colorsKls:r,colorSelectorKls:a}},T0e=["disabled","aria-label","onClick"];var E0e=ye({name:"ElColorPredefine",__name:"predefine",props:S0e,setup(e){const t=e,{rgbaColors:n,handleSelect:r}=x0e(t),{rootKls:a,colorsKls:i,colorSelectorKls:o}=C0e(t),{t:s}=Yt(),l=u=>s("el.colorpicker.predefineDescription",{value:u});return(u,c)=>(L(),K("div",{class:B(y(a))},[j("div",{class:B(y(i))},[(L(!0),K(ze,null,Lt(y(n),(d,f)=>(L(),K("button",{key:e.colors[f],type:"button",disabled:e.disabled,"aria-label":l(d.value),class:B(y(o)(d)),onClick:h=>y(r)(f)},[j("div",{style:tt({backgroundColor:d.value})},null,4)],10,T0e))),128))],2)],2))}}),k0e=E0e;const A0e=Oe({color:{type:oe(Object),required:!0},disabled:Boolean}),I0e=e=>{const t=Tt(),n=H(),r=H(0),a=H(0),i=H("hsl(0, 100%, 50%)"),o=M(()=>e.color.get("saturation")),s=M(()=>e.color.get("value")),l=M(()=>e.color.get("hue"));function u(v){var p;e.disabled||(v.target!==n.value&&c(v),(p=n.value)==null||p.focus({preventScroll:!0}))}function c(v){if(e.disabled)return;const p=t.vnode.el.getBoundingClientRect(),{clientX:g,clientY:m}=n_(v);let b=g-p.left,_=m-p.top;b=Math.max(0,b),b=Math.min(b,p.width),_=Math.max(0,_),_=Math.min(_,p.height),a.value=b,r.value=_,e.color.set({saturation:b/p.width*100,value:100-_/p.height*100})}function d(v){if(e.disabled)return;const{shiftKey:p}=v,g=Mn(v),m=p?10:1;let b=!0;switch(g){case De.left:f(-m);break;case De.right:f(m);break;case De.up:h(m);break;case De.down:h(-m);break;default:b=!1;break}b&&v.preventDefault()}function f(v){let p=o.value+v;p=p<0?0:p>100?100:p,e.color.set("saturation",p)}function h(v){let p=s.value+v;p=p<0?0:p>100?100:p,e.color.set("value",p)}return{cursorRef:n,cursorTop:r,cursorLeft:a,background:i,saturation:o,brightness:s,hue:l,handleClick:u,handleDrag:c,handleKeydown:d}},M0e=(e,{cursorTop:t,cursorLeft:n,background:r,handleDrag:a})=>{const i=Tt(),o=Ee("color-svpanel");function s(){const l=e.color.get("saturation"),u=e.color.get("value"),{clientWidth:c,clientHeight:d}=i.vnode.el;n.value=l*c/100,t.value=(100-u)*d/100,r.value=`hsl(${e.color.get("hue")}, 100%, 50%)`}return St(()=>{DE(i.vnode.el,{drag:l=>{a(l)},end:l=>{a(l)}}),s()}),_e([()=>e.color.get("hue"),()=>e.color.get("value"),()=>e.color.value],()=>s()),{rootKls:M(()=>o.b()),cursorKls:M(()=>o.e("cursor")),rootStyle:M(()=>({backgroundColor:r.value})),cursorStyle:M(()=>({top:ur(t.value),left:ur(n.value)})),update:s}},P0e=["tabindex","aria-disabled","aria-label","aria-valuenow","aria-valuetext"];var L0e=ye({name:"ElSvPanel",__name:"sv-panel",props:A0e,setup(e,{expose:t}){const n=e,{cursorRef:r,cursorTop:a,cursorLeft:i,background:o,saturation:s,brightness:l,handleClick:u,handleDrag:c,handleKeydown:d}=I0e(n),{rootKls:f,cursorKls:h,rootStyle:v,cursorStyle:p,update:g}=M0e(n,{cursorTop:a,cursorLeft:i,background:o,handleDrag:c}),{t:m}=Yt(),b=M(()=>m("el.colorpicker.svLabel")),_=M(()=>m("el.colorpicker.svDescription",{saturation:s.value,brightness:l.value,color:n.color.value}));return t({update:g}),(w,S)=>(L(),K("div",{class:B(y(f)),style:tt(y(v)),onClick:S[1]||(S[1]=(...x)=>y(u)&&y(u)(...x))},[j("div",{ref_key:"cursorRef",ref:r,class:B(y(h)),style:tt(y(p)),tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,role:"slider","aria-valuemin":"0,0","aria-valuemax":"100,100","aria-label":b.value,"aria-valuenow":`${y(s)},${y(l)}`,"aria-valuetext":_.value,onKeydown:S[0]||(S[0]=(...x)=>y(d)&&y(d)(...x))},null,46,P0e)],6))}}),D0e=L0e;const q9=(e,t)=>{const n=Qt(new r_({enableAlpha:e.showAlpha,format:e.colorFormat||"",value:e.modelValue}));return _e(()=>[e.colorFormat,e.showAlpha],()=>{n.enableAlpha=e.showAlpha,n.format=e.colorFormat||n.format,n.doOnChange(),t(mt,n.value)}),{color:n}};var R0e=ye({name:"ElColorPickerPanel",__name:"color-picker-panel",props:W9,emits:v0e,setup(e,{expose:t,emit:n}){const r=e,a=n,i=Ee("color-picker-panel"),{formItem:o}=ea(),s=ar(),l=H(),u=H(),c=H(),d=H(),f=H(""),{color:h}=Ge(G9,()=>q9(r,a),!0);function v(){h.fromString(f.value),h.value!==f.value&&(f.value=h.value)}function p(){var m;r.validateEvent&&((m=o==null?void 0:o.validate)==null||m.call(o,"blur").catch(It))}function g(){var m,b,_;(m=l.value)==null||m.update(),(b=u.value)==null||b.update(),(_=c.value)==null||_.update()}return St(()=>{r.modelValue&&(f.value=h.value),Ue(g)}),_e(()=>r.modelValue,m=>{m!==h.value&&(m?h.fromString(m):h.clear())}),_e(()=>h.value,m=>{a(mt,m),f.value=m,r.validateEvent&&(o==null||o.validate("change").catch(It))}),Ft(U9,{currentColor:M(()=>h.value)}),t({color:h,inputRef:d,update:g}),(m,b)=>(L(),K("div",{class:B([y(i).b(),y(i).is("disabled",y(s)),y(i).is("border",e.border)]),onFocusout:p},[j("div",{class:B(y(i).e("wrapper"))},[V(w0e,{ref_key:"hueRef",ref:l,color:y(h),vertical:"",disabled:y(s),class:B(["hue-slider",e.hueSliderClass]),style:tt(e.hueSliderStyle)},null,8,["color","disabled","class","style"]),V(D0e,{ref_key:"svRef",ref:u,color:y(h),disabled:y(s)},null,8,["color","disabled"])],2),e.showAlpha?(L(),ve(y0e,{key:0,ref_key:"alphaRef",ref:c,color:y(h),disabled:y(s)},null,8,["color","disabled"])):fe("v-if",!0),e.predefine?(L(),ve(k0e,{key:1,ref:"predefine","enable-alpha":e.showAlpha,color:y(h),colors:e.predefine,disabled:y(s)},null,8,["enable-alpha","color","colors","disabled"])):fe("v-if",!0),j("div",{class:B(y(i).e("footer"))},[V(y(va),{ref_key:"inputRef",ref:d,modelValue:f.value,"onUpdate:modelValue":b[0]||(b[0]=_=>f.value=_),"validate-event":!1,size:"small",disabled:y(s),onChange:v},null,8,["modelValue","disabled"]),he(m.$slots,"footer")],2)],34))}}),O0e=R0e;const X9=xt(O0e),N0e=Oe({persistent:{type:Boolean,default:!0},modelValue:{type:oe(String),default:void 0},id:String,showAlpha:Boolean,colorFormat:{type:oe(String)},disabled:{type:Boolean,default:void 0},clearable:{type:Boolean,default:!0},size:$r,popperClass:Tn.popperClass,popperStyle:Tn.popperStyle,tabindex:{type:[String,Number],default:0},teleported:Tn.teleported,appendTo:Tn.appendTo,predefine:{type:oe(Array)},validateEvent:{type:Boolean,default:!0},...Rf,...ja(["ariaLabel"])}),V0e={[mt]:e=>qe(e)||wr(e),[Vt]:e=>qe(e)||wr(e),activeChange:e=>qe(e)||wr(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0},$0e=["id","aria-label","aria-labelledby","aria-description","aria-disabled","tabindex"];var B0e=ye({name:"ElColorPicker",__name:"color-picker",props:N0e,emits:V0e,setup(e,{expose:t,emit:n}){const r=e,a=n,{t:i}=Yt(),o=Ee("color"),{formItem:s}=ea(),l=Rr(),u=ar(),{valueOnClear:c,isEmptyValue:d}=Iy(r,null),f=q9(r,a),{inputId:h,isLabeledByFormItem:v}=Di(r,{formItemContext:s}),p=H(),g=H(),m=H(),b=H(!1),_=H(!1);let w=!0;const{isFocused:S,handleFocus:x,handleBlur:C}=uu(g,{disabled:u,beforeBlur(J){var Z;return(Z=p.value)==null?void 0:Z.isFocusInsideContent(J)},afterBlur(){var J;$(!1),W(),r.validateEvent&&((J=s==null?void 0:s.validate)==null||J.call(s,"blur").catch(It))}}),T=lle(()=>{var J;return((J=m.value)==null?void 0:J.color)??f.color}),E=M(()=>Ul(r,Object.keys(W9))),k=M(()=>!r.modelValue&&!_.value?"transparent":O(T,r.showAlpha)),A=M(()=>!r.modelValue&&!_.value?"":T.value),I=M(()=>v.value?void 0:r.ariaLabel||i("el.colorpicker.defaultLabel")),P=M(()=>v.value?s==null?void 0:s.labelId:void 0),R=M(()=>[o.b("picker"),o.is("disabled",u.value),o.bm("picker",l.value),o.is("focused",S.value)]);function O(J,Z){const{r:U,g:te,b:Q,a:ue}=J.toRgb();return Z?`rgba(${U}, ${te}, ${Q}, ${ue})`:`rgb(${U}, ${te}, ${Q})`}function $(J){b.value=J}const N=Xs($,100,{leading:!0});function D(){u.value||$(!0)}function F(){N(!1),W()}function W(){Ue(()=>{r.modelValue?T.fromString(r.modelValue):(T.value="",Ue(()=>{_.value=!1}))})}function z(){u.value||(b.value&&W(),N(!b.value))}function Y(){const J=d(T.value)?c.value:T.value;a(mt,J),a(Vt,J),r.validateEvent&&(s==null||s.validate("change").catch(It)),N(!1),Ue(()=>{const Z=new r_({enableAlpha:r.showAlpha,format:r.colorFormat||"",value:r.modelValue});T.compare(Z)||W()})}function q(){N(!1),a(mt,c.value),a(Vt,c.value),r.modelValue!==c.value&&r.validateEvent&&(s==null||s.validate("change").catch(It)),W(),a("clear")}function re(){var J,Z;(Z=(J=m==null?void 0:m.value)==null?void 0:J.inputRef)==null||Z.focus()}function ee(){b.value&&(F(),S.value&&de())}function se(J){J.preventDefault(),J.stopPropagation(),$(!1),W()}function ne(J){switch(Mn(J)){case De.enter:case De.numpadEnter:case De.space:J.preventDefault(),J.stopPropagation(),D();break;case De.esc:se(J);break}}function de(){g.value.focus()}function le(){g.value.blur()}return _e(()=>A.value,J=>{w&&a("activeChange",J),w=!0}),_e(()=>T.value,()=>{!r.modelValue&&!_.value&&(_.value=!0)}),_e(()=>r.modelValue,J=>{J?J&&J!==T.value&&(w=!1,T.fromString(J)):_.value=!1}),_e(()=>b.value,()=>{m.value&&Ue(m.value.update)}),Ft(G9,f),t({color:T,show:D,hide:F,focus:de,blur:le}),(J,Z)=>(L(),ve(y(ua),{ref_key:"popper",ref:p,visible:b.value,"show-arrow":!1,"fallback-placements":["bottom","top","right","left"],offset:0,"gpu-acceleration":!1,"popper-class":[y(o).be("picker","panel"),e.popperClass],"popper-style":e.popperStyle,"stop-popper-mouse-event":!1,pure:"",loop:"",role:"dialog",effect:"light",trigger:"click",teleported:e.teleported,transition:`${y(o).namespace.value}-zoom-in-top`,persistent:e.persistent,"append-to":e.appendTo,onShow:re,onHide:Z[2]||(Z[2]=U=>$(!1))},{content:G(()=>[gt((L(),ve(y(X9),Mt({ref_key:"pickerPanelRef",ref:m},E.value,{border:!1,"validate-event":!1,onKeydown:Yn(se,["esc"])}),{footer:G(()=>[j("div",null,[e.clearable?(L(),ve(y(Xr),{key:0,class:B(y(o).be("footer","link-btn")),text:"",size:"small",onClick:q},{default:G(()=>[Le(ce(y(i)("el.colorpicker.clear")),1)]),_:1},8,["class"])):fe("v-if",!0),V(y(Xr),{plain:"",size:"small",class:B(y(o).be("footer","btn")),onClick:Y},{default:G(()=>[Le(ce(y(i)("el.colorpicker.confirm")),1)]),_:1},8,["class"])])]),_:1},16)),[[y(yc),ee,g.value]])]),default:G(()=>[j("div",Mt({id:y(h),ref_key:"triggerRef",ref:g},J.$attrs,{class:R.value,role:"button","aria-label":I.value,"aria-labelledby":P.value,"aria-description":y(i)("el.colorpicker.description",{color:e.modelValue||""}),"aria-disabled":y(u),tabindex:y(u)?void 0:e.tabindex,onKeydown:ne,onFocus:Z[0]||(Z[0]=(...U)=>y(x)&&y(x)(...U)),onBlur:Z[1]||(Z[1]=(...U)=>y(C)&&y(C)(...U))}),[j("div",{class:B(y(o).be("picker","trigger")),onClick:z},[j("span",{class:B([y(o).be("picker","color"),y(o).is("alpha",e.showAlpha)])},[j("span",{class:B(y(o).be("picker","color-inner")),style:tt({backgroundColor:k.value})},[gt(V(y(Ze),{class:B([y(o).be("picker","icon"),y(o).is("icon-arrow-down")])},{default:G(()=>[V(y(ll))]),_:1},8,["class"]),[[ln,e.modelValue||_.value]]),gt(V(y(Ze),{class:B([y(o).be("picker","empty"),y(o).is("icon-close")])},{default:G(()=>[V(y(To))]),_:1},8,["class"]),[[ln,!e.modelValue&&!_.value]])],6)],2)],2)],16,$0e)]),_:1},8,["visible","popper-class","popper-style","teleported","transition","persistent","append-to"]))}}),F0e=B0e;const z0e=xt(F0e);var H0e=ye({name:"ElContainer",__name:"container",props:{direction:{type:String,required:!1}},setup(e){const t=e,n=pr(),r=Ee("container"),a=M(()=>t.direction==="vertical"?!0:t.direction==="horizontal"?!1:n&&n.default?n.default().some(i=>{const o=i.type.name;return o==="ElHeader"||o==="ElFooter"}):!1);return(i,o)=>(L(),K("section",{class:B([y(r).b(),y(r).is("vertical",a.value)])},[he(i.$slots,"default")],2))}}),W0e=H0e,G0e=ye({name:"ElAside",__name:"aside",props:{width:{type:[String,null],required:!1,default:null}},setup(e){const t=e,n=Ee("aside"),r=M(()=>t.width?n.cssVarBlock({width:t.width}):{});return(a,i)=>(L(),K("aside",{class:B(y(n).b()),style:tt(r.value)},[he(a.$slots,"default")],6))}}),Z9=G0e,U0e=ye({name:"ElFooter",__name:"footer",props:{height:{type:[String,null],required:!1,default:null}},setup(e){const t=e,n=Ee("footer"),r=M(()=>t.height?n.cssVarBlock({height:t.height}):{});return(a,i)=>(L(),K("footer",{class:B(y(n).b()),style:tt(r.value)},[he(a.$slots,"default")],6))}}),J9=U0e,K0e=ye({name:"ElHeader",__name:"header",props:{height:{type:[String,null],required:!1,default:null}},setup(e){const t=e,n=Ee("header"),r=M(()=>t.height?n.cssVarBlock({height:t.height}):{});return(a,i)=>(L(),K("header",{class:B(y(n).b()),style:tt(r.value)},[he(a.$slots,"default")],6))}}),Q9=K0e,Y0e=ye({name:"ElMain",__name:"main",setup(e){const t=Ee("main");return(n,r)=>(L(),K("main",{class:B(y(t).b())},[he(n.$slots,"default")],2))}}),eU=Y0e;const j0e=xt(W0e,{Aside:Z9,Footer:J9,Header:Q9,Main:eU}),q0e=rr(Z9),X0e=rr(J9),Z0e=rr(Q9),J0e=rr(eU),Q0e=Oe({format:{type:String,default:"HH:mm:ss"},prefix:String,suffix:String,title:String,value:{type:oe([Number,Object]),default:0},valueStyle:{type:oe([String,Object,Array,Boolean]),default:void 0}}),ebe={finish:()=>!0,[Vt]:e=>Je(e)},tbe=Oe({decimalSeparator:{type:String,default:"."},groupSeparator:{type:String,default:","},precision:{type:Number,default:0},formatter:Function,value:{type:oe([Number,Object]),default:0},prefix:String,suffix:String,title:String,valueStyle:{type:oe([String,Object,Array,Boolean]),default:void 0}});var nbe=ye({name:"ElStatistic",__name:"statistic",props:tbe,setup(e,{expose:t}){const n=e,r=Ee("statistic"),a=M(()=>{const{value:i,formatter:o,precision:s,decimalSeparator:l,groupSeparator:u}=n;if(et(o))return o(i);if(!Je(i)||Number.isNaN(i))return i;let[c,d=""]=String(i).split(".");return d=d.padEnd(s,"0").slice(0,s>0?s:0),c=c.replace(/\B(?=(\d{3})+(?!\d))/g,u),[c,d].join(d?l:"")});return t({displayValue:a}),(i,o)=>(L(),K("div",{class:B(y(r).b())},[i.$slots.title||e.title?(L(),K("div",{key:0,class:B(y(r).e("head"))},[he(i.$slots,"title",{},()=>[Le(ce(e.title),1)])],2)):fe("v-if",!0),j("div",{class:B(y(r).e("content"))},[i.$slots.prefix||e.prefix?(L(),K("div",{key:0,class:B(y(r).e("prefix"))},[he(i.$slots,"prefix",{},()=>[j("span",null,ce(e.prefix),1)])],2)):fe("v-if",!0),j("span",{class:B(y(r).e("number")),style:tt(e.valueStyle)},ce(a.value),7),i.$slots.suffix||e.suffix?(L(),K("div",{key:1,class:B(y(r).e("suffix"))},[he(i.$slots,"suffix",{},()=>[j("span",null,ce(e.suffix),1)])],2)):fe("v-if",!0)],2)],2))}}),rbe=nbe;const tU=xt(rbe),abe=[["Y",1e3*60*60*24*365],["M",1e3*60*60*24*30],["D",1e3*60*60*24],["H",1e3*60*60],["m",1e3*60],["s",1e3],["S",1]],ON=e=>Je(e)?new Date(e).getTime():e.valueOf(),NN=(e,t)=>{let n=e;return abe.reduce((r,[a,i])=>{const o=new RegExp(`${a}+(?![^\\[\\]]*\\])`,"g");if(o.test(r)){const s=Math.floor(n/i);return n-=s*i,r.replace(o,l=>String(s).padStart(l.length,"0"))}return r},t).replace(/\[([^\]]*)]/g,"$1")};var ibe=ye({name:"ElCountdown",__name:"countdown",props:Q0e,emits:ebe,setup(e,{expose:t,emit:n}){const r=e,a=n;let i;const o=H(0),s=M(()=>NN(o.value,r.format)),l=d=>NN(d,r.format),u=()=>{i&&(Zo(i),i=void 0)},c=()=>{const d=ON(r.value),f=()=>{let h=d-Date.now();a(Vt,h),h<=0?(h=0,u(),a("finish")):i=Pi(f),o.value=h};i=Pi(f)};return St(()=>{o.value=ON(r.value)-Date.now(),_e(()=>[r.value,r.format],()=>{u(),c()},{immediate:!0})}),yn(()=>{u()}),t({displayValue:s}),(d,f)=>(L(),ve(y(tU),{value:o.value,title:e.title,prefix:e.prefix,suffix:e.suffix,"value-style":e.valueStyle,formatter:l},ui({_:2},[Lt(d.$slots,(h,v)=>({name:v,fn:G(()=>[he(d.$slots,v)])}))]),1032,["value","title","prefix","suffix","value-style"]))}}),obe=ibe;const sbe=xt(obe),lbe=Oe({valueFormat:String,dateFormat:String,timeFormat:String,disabled:{type:Boolean,default:void 0},modelValue:{type:oe([Date,Array,String,Number]),default:""},defaultValue:{type:oe([Date,Array])},defaultTime:{type:oe([Date,Array])},isRange:Boolean,...vM,disabledDate:{type:Function},cellClassName:{type:Function},shortcuts:{type:Array,default:()=>[]},arrowControl:Boolean,unlinkPanels:Boolean,showNow:{type:Boolean,default:!0},showConfirm:Boolean,showFooter:Boolean,showWeekNumber:Boolean,type:{type:oe(String),default:"date"},clearable:{type:Boolean,default:!0},border:{type:Boolean,default:!0},editable:{type:Boolean,default:!0}}),CM=Symbol("rootPickerContextKey"),Dy="ElIsDefaultFormat",ube=["date","dates","year","years","month","months","week","range"],TM=Oe({cellClassName:{type:oe(Function)},disabledDate:{type:oe(Function)},date:{type:oe(Object),required:!0},minDate:{type:oe(Object)},maxDate:{type:oe(Object)},parsedValue:{type:oe([Object,Array])},rangeState:{type:oe(Object),default:()=>({endDate:null,selecting:!1})},disabled:Boolean}),nU=Oe({type:{type:oe(String),required:!0,values:Sne},dateFormat:String,timeFormat:String,showNow:{type:Boolean,default:!0},showConfirm:Boolean,showFooter:{type:Boolean,default:!0},showWeekNumber:Boolean,border:Boolean,disabled:Boolean,editable:{type:Boolean,default:!0}}),EM=Oe({unlinkPanels:Boolean,visible:{type:Boolean,default:!0},showConfirm:Boolean,showFooter:{type:Boolean,default:!0},border:Boolean,disabled:Boolean,parsedValue:{type:oe(Array)},singlePanel:Boolean}),kM=e=>({type:String,values:ube,default:e}),cbe=Oe({...nU,parsedValue:{type:oe([Object,Array])},visible:{type:Boolean,default:!0},format:{type:String,default:""}}),Sm=e=>{if(!Me(e))return!1;const[t,n]=e;return _t.isDayjs(t)&&_t.isDayjs(n)&&_t(t).isValid()&&_t(n).isValid()&&t.isSameOrBefore(n)},eS=(e,{lang:t,step:n=1,unit:r,unlinkPanels:a})=>{let i;if(Me(e)){let[o,s]=e.map(l=>_t(l).locale(t));return a||(s=o.add(n,r)),[o,s]}else e?i=_t(e):i=_t();return i=i.locale(t),[i,i.add(n,r)]},dbe=(e,t,{columnIndexOffset:n,startDate:r,nextEndDate:a,now:i,unit:o,relativeDateGetter:s,setCellMetadata:l,setRowMetadata:u})=>{for(let c=0;c{const a=_t().locale(r).startOf("month").month(n).year(t).hour(e.hour()).minute(e.minute()).second(e.second());return oc(a.daysInMonth()).map(i=>a.add(i,"day").toDate())},yv=(e,t,n,r,a)=>{const i=_t().year(t).month(n).startOf("month").hour(e.hour()).minute(e.minute()).second(e.second()),o=a_(e,t,n,r).find(s=>!(a!=null&&a(s)));return o?_t(o).locale(r):i.locale(r)},i_=(e,t,n)=>{const r=e.year();if(!(n!=null&&n(e.toDate())))return e.locale(t);const a=e.month();if(!a_(e,r,a,t).every(n))return yv(e,r,a,t,n);for(let i=0;i<12;i++)if(!a_(e,r,i,t).every(n))return yv(e,r,i,t,n);return e},bv=(e,t,n,r)=>{if(Me(e))return e.map(a=>bv(a,t,n,r));if(qe(e)){const a=r!=null&&r.value?_t(e):_t(e,t);if(!a.isValid())return a}return _t(e,t).locale(n)},fbe=Oe({...TM,showWeekNumber:Boolean,selectionMode:kM("date")}),hbe=["changerange","pick","select"],o_=(e="")=>["normal","today"].includes(e),vbe=(e,t)=>{const{lang:n}=Yt(),r=H(),a=H(),i=H(),o=H(),s=H([[],[],[],[],[],[]]);let l=!1;const u=e.date.$locale().weekStart||7,c=e.date.locale("en").localeData().weekdaysShort().map(F=>F.toLowerCase()),d=M(()=>u>3?7-u:-u),f=M(()=>{const F=e.date.startOf("month");return F.subtract(F.day()||7,"day")}),h=M(()=>c.concat(c).slice(u,u+7)),v=M(()=>$1(y(w)).some(F=>F.isCurrent)),p=M(()=>{const F=e.date.startOf("month");return{startOfMonthDay:F.day()||7,dateCountOfMonth:F.daysInMonth(),dateCountOfLastMonth:F.subtract(1,"month").daysInMonth()}}),g=M(()=>e.selectionMode==="dates"?za(e.parsedValue):[]),m=(F,{count:W,rowIndex:z,columnIndex:Y})=>{const{startOfMonthDay:q,dateCountOfMonth:re,dateCountOfLastMonth:ee}=y(p),se=y(d);if(z>=0&&z<=1){const ne=q+se<0?7+q+se:q+se;if(Y+z*7>=ne)return F.text=W,!0;F.text=ee-(ne-Y%7)+1+z*7,F.type="prev-month"}else return W<=re?F.text=W:(F.text=W-re,F.type="next-month"),!0;return!1},b=(F,{columnIndex:W,rowIndex:z},Y)=>{const{disabledDate:q,cellClassName:re}=e,ee=y(g),se=m(F,{count:Y,rowIndex:z,columnIndex:W}),ne=F.dayjs.toDate();return F.selected=ee.find(de=>de.isSame(F.dayjs,"day")),F.isSelected=!!F.selected,F.isCurrent=x(F),F.disabled=q==null?void 0:q(ne),F.customClass=re==null?void 0:re(ne),se},_=F=>{if(e.selectionMode==="week"){const[W,z]=e.showWeekNumber?[1,7]:[0,6],Y=D(F[W+1]);F[W].inRange=Y,F[W].start=Y,F[z].inRange=Y,F[z].end=Y}},w=M(()=>{const{minDate:F,maxDate:W,rangeState:z,showWeekNumber:Y}=e,q=y(d),re=y(s),ee="day";let se=1;if(dbe({row:6,column:7},re,{startDate:F,columnIndexOffset:Y?1:0,nextEndDate:z.endDate||W||z.selecting&&F||null,now:_t().locale(y(n)).startOf(ee),unit:ee,relativeDateGetter:ne=>y(f).add(ne-q,ee),setCellMetadata:(...ne)=>{b(...ne,se)&&(se+=1)},setRowMetadata:_}),Y)for(let ne=0;ne<6;ne++)re[ne][1].dayjs&&(re[ne][0]={type:"week",text:re[ne][1].dayjs.week()});return re});_e(()=>e.date,async()=>{var F;(F=y(r))!=null&&F.contains(document.activeElement)&&(await Ue(),await S())});const S=async()=>{var F;return(F=y(a))==null?void 0:F.focus()},x=F=>e.selectionMode==="date"&&o_(F.type)&&C(F,e.parsedValue),C=(F,W)=>W?_t(W).locale(y(n)).isSame(e.date.date(Number(F.text)),"day"):!1,T=(F,W)=>{const z=y(p).startOfMonthDay,Y=y(d),q=z+Y<0?7+z+Y:z+Y,re=F*7+(W-(e.showWeekNumber?1:0));return e.date.startOf("month").subtract(q,"day").add(re,"day")},E=F=>{var q;if(!e.rangeState.selecting)return;let W=F.target;if(W.tagName==="SPAN"&&(W=(q=W.parentNode)==null?void 0:q.parentNode),W.tagName==="DIV"&&(W=W.parentNode),W.tagName!=="TD")return;const z=W.parentNode.rowIndex-1,Y=W.cellIndex;y(w)[z][Y].disabled||(z!==y(i)||Y!==y(o))&&(i.value=z,o.value=Y,t("changerange",{selecting:!0,endDate:T(z,Y)}))},k=F=>!y(v)&&(F==null?void 0:F.text)===1&&o_(F.type)||F.isCurrent,A=F=>{l||y(v)||e.selectionMode!=="date"||N(F,!0)},I=F=>{F.target.closest("td")&&(l=!0)},P=F=>{F.target.closest("td")&&(l=!1)},R=F=>{!e.rangeState.selecting||!e.minDate?(t("pick",{minDate:F,maxDate:null}),t("select",!0)):(F>=e.minDate?t("pick",{minDate:e.minDate,maxDate:F}):t("pick",{minDate:F,maxDate:e.minDate}),t("select",!1))},O=F=>{const W=F.week(),z=`${F.year()}w${W}`;t("pick",{year:F.year(),week:W,value:z,date:F.startOf("week")})},$=(F,W)=>{t("pick",W?za(e.parsedValue).filter(z=>(z==null?void 0:z.valueOf())!==F.valueOf()):za(e.parsedValue).concat([F]))},N=(F,W=!1)=>{if(e.disabled)return;const z=F.target.closest("td");if(!z)return;const Y=z.parentNode.rowIndex-1,q=z.cellIndex,re=y(w)[Y][q];if(re.disabled||re.type==="week")return;const ee=T(Y,q);switch(e.selectionMode){case"range":R(ee);break;case"date":t("pick",ee,W);break;case"week":O(ee);break;case"dates":$(ee,!!re.selected);break}},D=F=>{if(e.selectionMode!=="week")return!1;let W=e.date.startOf("day");if(F.type==="prev-month"&&(W=W.subtract(1,"month")),F.type==="next-month"&&(W=W.add(1,"month")),W=W.date(Number.parseInt(F.text,10)),e.parsedValue&&!Me(e.parsedValue)){const z=(e.parsedValue.day()-u+7)%7-1;return e.parsedValue.subtract(z,"day").isSame(W,"day")}return!1};return{WEEKS:h,rows:w,tbodyRef:r,currentCellRef:a,focus:S,isCurrent:x,isWeekActive:D,isSelectedCell:k,handlePickDate:N,handleMouseUp:P,handleMouseDown:I,handleMouseMove:E,handleFocus:A}},pbe=(e,{isCurrent:t,isWeekActive:n})=>{const r=Ee("date-table"),{t:a}=Yt(),i=M(()=>[r.b(),r.is("week-mode",e.selectionMode==="week"&&!e.disabled)]),o=M(()=>a("el.datepicker.dateTablePrompt")),s=u=>{const c=[];return o_(u.type)&&!u.disabled?(c.push("available"),u.type==="today"&&c.push("today")):c.push(u.type),t(u)&&c.push("current"),u.inRange&&(o_(u.type)||e.selectionMode==="week")&&(c.push("in-range"),u.start&&c.push("start-date"),u.end&&c.push("end-date")),(u.disabled||e.disabled)&&c.push("disabled"),u.selected&&c.push("selected"),u.customClass&&c.push(u.customClass),c.join(" ")},l=u=>[r.e("row"),{current:n(u)}];return{tableKls:i,tableLabel:o,weekHeaderClass:r.e("week-header"),getCellClasses:s,getRowKls:l,t:a}},gbe=Oe({cell:{type:oe(Object)}});var AM=ye({name:"ElDatePickerCell",props:gbe,setup(e){const t=Ee("date-table-cell"),{slots:n}=Ge(CM);return()=>{const{cell:r}=e;return he(n,"default",{...r},()=>[V("div",{class:t.b()},[V("span",{class:t.e("text")},[(r==null?void 0:r.renderText)??(r==null?void 0:r.text)])])])}}});const mbe=["aria-label"],ybe=["aria-label"],bbe=["aria-current","aria-selected","tabindex","aria-disabled"];var _be=ye({__name:"basic-date-table",props:fbe,emits:hbe,setup(e,{expose:t,emit:n}){const r=e,{WEEKS:a,rows:i,tbodyRef:o,currentCellRef:s,focus:l,isCurrent:u,isWeekActive:c,isSelectedCell:d,handlePickDate:f,handleMouseUp:h,handleMouseDown:v,handleMouseMove:p,handleFocus:g}=vbe(r,n),{tableLabel:m,tableKls:b,getCellClasses:_,getRowKls:w,weekHeaderClass:S,t:x}=pbe(r,{isCurrent:u,isWeekActive:c});let C=!1;return yn(()=>{C=!0}),t({focus:l}),(T,E)=>(L(),K("table",{"aria-label":y(m),class:B(y(b)),cellspacing:"0",cellpadding:"0",role:"grid",onClick:E[1]||(E[1]=(...k)=>y(f)&&y(f)(...k)),onMousemove:E[2]||(E[2]=(...k)=>y(p)&&y(p)(...k)),onMousedown:E[3]||(E[3]=(...k)=>y(v)&&y(v)(...k)),onMouseup:E[4]||(E[4]=(...k)=>y(h)&&y(h)(...k))},[j("tbody",{ref_key:"tbodyRef",ref:o},[j("tr",null,[T.showWeekNumber?(L(),K("th",{key:0,scope:"col",class:B(y(S))},null,2)):fe("v-if",!0),(L(!0),K(ze,null,Lt(y(a),(k,A)=>(L(),K("th",{key:A,"aria-label":y(x)("el.datepicker.weeksFull."+k),scope:"col"},ce(y(x)("el.datepicker.weeks."+k)),9,ybe))),128))]),(L(!0),K(ze,null,Lt(y(i),(k,A)=>(L(),K("tr",{key:A,class:B(y(w)(T.showWeekNumber?k[2]:k[1]))},[(L(!0),K(ze,null,Lt(k,(I,P)=>(L(),K("td",{key:`${A}.${P}`,ref_for:!0,ref:R=>!y(C)&&y(d)(I)&&(s.value=R),class:B(y(_)(I)),"aria-current":I.isCurrent?"date":void 0,"aria-selected":I.isCurrent,tabindex:T.disabled?void 0:y(d)(I)?0:-1,"aria-disabled":T.disabled,onFocus:E[0]||(E[0]=(...R)=>y(g)&&y(g)(...R))},[V(y(AM),{cell:I},null,8,["cell"])],42,bbe))),128))],2))),128))],512)],42,mbe))}}),RE=_be;const wbe=Oe({...TM,selectionMode:kM("month")}),Sbe=["aria-label"],xbe=["aria-selected","aria-label","tabindex","onKeydown"];var Cbe=ye({__name:"basic-month-table",props:wbe,emits:["changerange","pick","select"],setup(e,{expose:t,emit:n}){const r=e,a=n,i=Ee("month-table"),{t:o,lang:s}=Yt(),l=H(),u=H(),c=H(r.date.locale("en").localeData().monthsShort().map(w=>w.toLowerCase())),d=H([[],[],[]]),f=H(),h=H(),v=M(()=>{var x,C,T;const w=d.value,S=_t().locale(s.value).startOf("month");for(let E=0;E<3;E++){const k=w[E];for(let A=0;A<4;A++){const I=k[A]||(k[A]={row:E,column:A,type:"normal",inRange:!1,start:!1,end:!1,text:-1,disabled:!1,isSelected:!1,customClass:void 0,date:void 0,dayjs:void 0,isCurrent:void 0,selected:void 0,renderText:void 0,timestamp:void 0});I.type="normal";const P=E*4+A,R=r.date.startOf("year").month(P),O=r.rangeState.endDate||r.maxDate||r.rangeState.selecting&&r.minDate||null;I.inRange=!!(r.minDate&&R.isSameOrAfter(r.minDate,"month")&&O&&R.isSameOrBefore(O,"month"))||!!(r.minDate&&R.isSameOrBefore(r.minDate,"month")&&O&&R.isSameOrAfter(O,"month")),(x=r.minDate)!=null&&x.isSameOrAfter(O)?(I.start=!!(O&&R.isSame(O,"month")),I.end=r.minDate&&R.isSame(r.minDate,"month")):(I.start=!!(r.minDate&&R.isSame(r.minDate,"month")),I.end=!!(O&&R.isSame(O,"month"))),S.isSame(R)&&(I.type="today");const $=R.toDate();I.text=P,I.disabled=((C=r.disabledDate)==null?void 0:C.call(r,$))||!1,I.date=$,I.customClass=(T=r.cellClassName)==null?void 0:T.call(r,$),I.dayjs=R,I.timestamp=R.valueOf(),I.isSelected=m(I)}}return w}),p=()=>{var w;(w=u.value)==null||w.focus()},g=w=>{const S={},x=r.date.year(),C=new Date,T=w.text;return S.disabled=r.disabled||(r.disabledDate?a_(r.date,x,T,s.value).every(r.disabledDate):!1),S.current=za(r.parsedValue).some(E=>_t.isDayjs(E)&&E.year()===x&&E.month()===T),S.today=C.getFullYear()===x&&C.getMonth()===T,w.customClass&&(S[w.customClass]=!0),w.inRange&&(S["in-range"]=!0,w.start&&(S["start-date"]=!0),w.end&&(S["end-date"]=!0)),S},m=w=>{const S=r.date.year(),x=w.text;return za(r.date).some(C=>C.year()===S&&C.month()===x)},b=w=>{var T;if(!r.rangeState.selecting)return;let S=w.target;if(S.tagName==="SPAN"&&(S=(T=S.parentNode)==null?void 0:T.parentNode),S.tagName==="DIV"&&(S=S.parentNode),S.tagName!=="TD")return;const x=S.parentNode.rowIndex,C=S.cellIndex;v.value[x][C].disabled||(x!==f.value||C!==h.value)&&(f.value=x,h.value=C,a("changerange",{selecting:!0,endDate:r.date.startOf("year").month(x*4+C)}))},_=w=>{var E;if(r.disabled)return;const S=(E=w.target)==null?void 0:E.closest("td");if((S==null?void 0:S.tagName)!=="TD"||Fs(S,"disabled"))return;const x=S.cellIndex,C=S.parentNode.rowIndex*4+x,T=r.date.startOf("year").month(C);if(r.selectionMode==="months"){if(w.type==="keydown"){a("pick",za(r.parsedValue),!1);return}const k=yv(r.date,r.date.year(),C,s.value,r.disabledDate);a("pick",Fs(S,"current")?za(r.parsedValue).filter(A=>(A==null?void 0:A.year())!==k.year()||(A==null?void 0:A.month())!==k.month()):za(r.parsedValue).concat([_t(k)]))}else r.selectionMode==="range"?r.rangeState.selecting?(r.minDate&&T>=r.minDate?a("pick",{minDate:r.minDate,maxDate:T}):a("pick",{minDate:T,maxDate:r.minDate}),a("select",!1)):(a("pick",{minDate:T,maxDate:null}),a("select",!0)):a("pick",C)};return _e(()=>r.date,async()=>{var w,S;(w=l.value)!=null&&w.contains(document.activeElement)&&(await Ue(),(S=u.value)==null||S.focus())}),t({focus:p}),(w,S)=>(L(),K("table",{role:"grid","aria-label":y(o)("el.datepicker.monthTablePrompt"),class:B(y(i).b()),onClick:_,onMousemove:b},[j("tbody",{ref_key:"tbodyRef",ref:l},[(L(!0),K(ze,null,Lt(v.value,(x,C)=>(L(),K("tr",{key:C},[(L(!0),K(ze,null,Lt(x,(T,E)=>(L(),K("td",{key:E,ref_for:!0,ref:k=>T.isSelected&&(u.value=k),class:B(g(T)),"aria-selected":!!T.isSelected,"aria-label":y(o)(`el.datepicker.month${+T.text+1}`),tabindex:T.isSelected?0:-1,onKeydown:[Yn(ut(_,["prevent","stop"]),["space"]),Yn(ut(_,["prevent","stop"]),["enter"])]},[V(y(AM),{cell:{...T,renderText:y(o)("el.datepicker.months."+c.value[T.text])}},null,8,["cell"])],42,xbe))),128))]))),128))],512)],42,Sbe))}}),xm=Cbe;const Tbe=Oe({...TM,selectionMode:kM("year")}),Ebe=["aria-label"],kbe=["aria-selected","aria-label","tabindex","onKeydown"];var Abe=ye({__name:"basic-year-table",props:Tbe,emits:["changerange","pick","select"],setup(e,{expose:t,emit:n}){const r=(S,x)=>{const C=_t(String(S)).locale(x).startOf("year");return oc(C.endOf("year").dayOfYear()).map(T=>C.add(T,"day").toDate())},a=e,i=n,o=Ee("year-table"),{t:s,lang:l}=Yt(),u=H(),c=H(),d=M(()=>Math.floor(a.date.year()/10)*10),f=H([[],[],[]]),h=H(),v=H(),p=M(()=>{var C,T,E;const S=f.value,x=_t().locale(l.value).startOf("year");for(let k=0;k<3;k++){const A=S[k];for(let I=0;I<4&&!(k*4+I>=10);I++){let P=A[I];P||(P={row:k,column:I,type:"normal",inRange:!1,start:!1,end:!1,text:-1,disabled:!1,isSelected:!1,customClass:void 0,date:void 0,dayjs:void 0,isCurrent:void 0,selected:void 0,renderText:void 0,timestamp:void 0}),P.type="normal";const R=k*4+I+d.value,O=_t().year(R),$=a.rangeState.endDate||a.maxDate||a.rangeState.selecting&&a.minDate||null;P.inRange=!!(a.minDate&&O.isSameOrAfter(a.minDate,"year")&&$&&O.isSameOrBefore($,"year"))||!!(a.minDate&&O.isSameOrBefore(a.minDate,"year")&&$&&O.isSameOrAfter($,"year")),(C=a.minDate)!=null&&C.isSameOrAfter($)?(P.start=!!($&&O.isSame($,"year")),P.end=!!(a.minDate&&O.isSame(a.minDate,"year"))):(P.start=!!(a.minDate&&O.isSame(a.minDate,"year")),P.end=!!($&&O.isSame($,"year"))),x.isSame(O)&&(P.type="today"),P.text=R;const N=O.toDate();P.disabled=((T=a.disabledDate)==null?void 0:T.call(a,N))||!1,P.date=N,P.customClass=(E=a.cellClassName)==null?void 0:E.call(a,N),P.dayjs=O,P.timestamp=O.valueOf(),P.isSelected=b(P),A[I]=P}}return S}),g=()=>{var S;(S=c.value)==null||S.focus()},m=S=>{const x={},C=_t().locale(l.value),T=S.text;return x.disabled=a.disabled||(a.disabledDate?r(T,l.value).every(a.disabledDate):!1),x.today=C.year()===T,x.current=za(a.parsedValue).some(E=>E.year()===T),S.customClass&&(x[S.customClass]=!0),S.inRange&&(x["in-range"]=!0,S.start&&(x["start-date"]=!0),S.end&&(x["end-date"]=!0)),x},b=S=>{const x=S.text;return za(a.date).some(C=>C.year()===x)},_=S=>{var k;if(a.disabled)return;const x=(k=S.target)==null?void 0:k.closest("td");if(!x||!x.textContent||Fs(x,"disabled"))return;const C=x.cellIndex,T=x.parentNode.rowIndex*4+C+d.value,E=_t().year(T);if(a.selectionMode==="range")a.rangeState.selecting?(a.minDate&&E>=a.minDate?i("pick",{minDate:a.minDate,maxDate:E}):i("pick",{minDate:E,maxDate:a.minDate}),i("select",!1)):(i("pick",{minDate:E,maxDate:null}),i("select",!0));else if(a.selectionMode==="years"){if(S.type==="keydown"){i("pick",za(a.parsedValue),!1);return}const A=i_(E.startOf("year"),l.value,a.disabledDate);i("pick",Fs(x,"current")?za(a.parsedValue).filter(I=>(I==null?void 0:I.year())!==T):za(a.parsedValue).concat([A]))}else i("pick",T)},w=S=>{var E;if(!a.rangeState.selecting)return;const x=(E=S.target)==null?void 0:E.closest("td");if(!x)return;const C=x.parentNode.rowIndex,T=x.cellIndex;p.value[C][T].disabled||(C!==h.value||T!==v.value)&&(h.value=C,v.value=T,i("changerange",{selecting:!0,endDate:_t().year(d.value).add(C*4+T,"year")}))};return _e(()=>a.date,async()=>{var S,x;(S=u.value)!=null&&S.contains(document.activeElement)&&(await Ue(),(x=c.value)==null||x.focus())}),t({focus:g}),(S,x)=>(L(),K("table",{role:"grid","aria-label":y(s)("el.datepicker.yearTablePrompt"),class:B(y(o).b()),onClick:_,onMousemove:w},[j("tbody",{ref_key:"tbodyRef",ref:u},[(L(!0),K(ze,null,Lt(p.value,(C,T)=>(L(),K("tr",{key:T},[(L(!0),K(ze,null,Lt(C,(E,k)=>(L(),K("td",{key:`${T}_${k}`,ref_for:!0,ref:A=>E.isSelected&&(c.value=A),class:B(["available",m(E)]),"aria-selected":E.isSelected,"aria-label":String(E.text),tabindex:E.isSelected?0:-1,onKeydown:[Yn(ut(_,["prevent","stop"]),["space"]),Yn(ut(_,["prevent","stop"]),["enter"])]},[V(y(AM),{cell:E},null,8,["cell"])],42,kbe))),128))]))),128))],512)],42,Ebe))}}),Cm=Abe;const Ibe=["disabled","onClick"],Mbe=["aria-label","disabled"],Pbe=["aria-label","disabled"],Lbe=["tabindex","aria-disabled"],Dbe=["tabindex","aria-disabled"],Rbe=["aria-label","disabled"],Obe=["aria-label","disabled"];var Nbe=ye({__name:"panel-date-pick",props:cbe,emits:["pick","set-picker-option","panel-change"],setup(e,{emit:t}){const n=(xe,rt,Te)=>!0,r=e,a=t,i=Ee("picker-panel"),o=Ee("date-picker"),s=iu(),l=pr(),{t:u,lang:c}=Yt(),d=Ge(cl),f=Ge(Dy,void 0),{shortcuts:h,disabledDate:v,cellClassName:p,defaultTime:g}=d.props,m=xn(d.props,"defaultValue"),b=H(),_=H(_t().locale(c.value)),w=H(!1);let S=!1;const x=M(()=>_t(g).locale(c.value)),C=M(()=>_.value.month()),T=M(()=>_.value.year()),E=H([]),k=H(null),A=H(null),I=xe=>E.value.length>0?n(xe,E.value,r.format||"HH:mm:ss"):!0,P=xe=>g&&!Pe.value&&!w.value&&!S?x.value.year(xe.year()).month(xe.month()).date(xe.date()):le.value?xe.millisecond(0):xe.startOf("day"),R=(xe,...rt)=>{xe?Me(xe)?a("pick",xe.map(P),...rt):a("pick",P(xe),...rt):a("pick",xe,...rt),k.value=null,A.value=null,w.value=!1,S=!1},O=async(xe,rt)=>{if(z.value==="date"&&_t.isDayjs(xe)){const Te=Sp(r.parsedValue);let Qe=Te?Te.year(xe.year()).month(xe.month()).date(xe.date()):xe;I(Qe),_.value=Qe,R(Qe,le.value||rt)}else z.value==="week"?R(xe.date):z.value==="dates"&&R(xe,!0)},$=xe=>{const rt=xe?"add":"subtract";_.value=_.value[rt](1,"month"),At("month")},N=xe=>{const rt=_.value,Te=xe?"add":"subtract";_.value=D.value==="year"?rt[Te](10,"year"):rt[Te](1,"year"),At("year")},D=H("date"),F=M(()=>{const xe=u("el.datepicker.year");if(D.value==="year"){const rt=Math.floor(T.value/10)*10;return xe?`${rt} ${xe} - ${rt+9} ${xe}`:`${rt} - ${rt+9}`}return`${T.value} ${xe}`}),W=xe=>{const rt=et(xe.value)?xe.value():xe.value;if(rt){S=!0,R(_t(rt).locale(c.value));return}xe.onClick&&xe.onClick({attrs:s,slots:l,emit:a})},z=M(()=>{const{type:xe}=r;return["week","month","months","year","years","dates"].includes(xe)?xe:"date"}),Y=M(()=>z.value==="dates"||z.value==="months"||z.value==="years"),q=M(()=>z.value==="date"?D.value:z.value),re=M(()=>!!h.length),ee=async(xe,rt)=>{z.value==="month"?(_.value=yv(_.value,_.value.year(),xe,c.value,v),R(_.value,!1)):z.value==="months"?R(xe,rt??!0):(_.value=yv(_.value,_.value.year(),xe,c.value,v),D.value="date",["month","year","date","week"].includes(z.value)&&(R(_.value,!0),await Ue(),zt())),At("month")},se=async(xe,rt)=>{z.value==="year"?(_.value=i_(_.value.startOf("year").year(xe),c.value,v),R(_.value,!1)):z.value==="years"?R(xe,rt??!0):(_.value=i_(_.value.year(xe),c.value,v),D.value="month",["month","year","date","week"].includes(z.value)&&(R(_.value,!0),await Ue(),zt())),At("year")},ne=ar(),de=async xe=>{ne.value||(D.value=xe,await Ue(),zt())},le=M(()=>r.type==="datetime"||r.type==="datetimerange"),J=M(()=>{const xe=le.value||z.value==="dates",rt=z.value==="years",Te=z.value==="months",Qe=D.value==="date",jt=D.value==="year",Xe=D.value==="month";return xe&&Qe||rt&&jt||Te&&Xe}),Z=M(()=>!Y.value&&r.showNow||r.showConfirm),U=M(()=>v?r.parsedValue?Me(r.parsedValue)?v(r.parsedValue[0].toDate()):v(r.parsedValue.toDate()):!0:!1),te=()=>{if(Y.value)R(r.parsedValue);else{let xe=Sp(r.parsedValue);if(!xe){const rt=_t(g).locale(c.value),Te=at();xe=rt.year(Te.year()).month(Te.month()).date(Te.date())}_.value=xe,R(xe)}},Q=M(()=>v?v(_t().locale(c.value).toDate()):!1),ue=()=>{const xe=_t().locale(c.value).toDate();w.value=!0,(!v||!v(xe))&&I(xe)&&(_.value=_t().locale(c.value),R(_.value))},pe=M(()=>r.timeFormat||VG(r.format)||"HH:mm:ss"),me=M(()=>r.dateFormat||NG(r.format)||"YYYY-MM-DD"),Pe=M(()=>{if(A.value)return A.value;if(!(!r.parsedValue&&!m.value))return(Sp(r.parsedValue)||_.value).format(pe.value)}),Ne=M(()=>{if(k.value)return k.value;if(!(!r.parsedValue&&!m.value))return(Sp(r.parsedValue)||_.value).format(me.value)}),ie=H(!1),ae=()=>{ie.value=!0},ge=()=>{ie.value=!1},be=xe=>({hour:xe.hour(),minute:xe.minute(),second:xe.second(),year:xe.year(),month:xe.month(),date:xe.date()}),$e=(xe,rt,Te)=>{const{hour:Qe,minute:jt,second:Xe}=be(xe),ft=Sp(r.parsedValue);_.value=ft?ft.hour(Qe).minute(jt).second(Xe):xe,R(_.value,!0),Te||(ie.value=rt)},Re=xe=>{const rt=_t(xe,pe.value).locale(c.value);if(rt.isValid()&&I(rt)){const{year:Te,month:Qe,date:jt}=be(_.value);_.value=rt.year(Te).month(Qe).date(jt),A.value=null,ie.value=!1,R(_.value,!0)}},Se=xe=>{const rt=bv(xe,me.value,c.value,f);if(rt.isValid()){if(v&&v(rt.toDate()))return;const{hour:Te,minute:Qe,second:jt}=be(_.value);_.value=rt.hour(Te).minute(Qe).second(jt),k.value=null,R(_.value,!0)}},Ae=xe=>_t.isDayjs(xe)&&xe.isValid()&&(v?!v(xe.toDate()):!0),nt=xe=>bv(xe,r.format,c.value,f),at=()=>{const xe=_t(m.value).locale(c.value);if(!m.value){const rt=x.value;return _t().hour(rt.hour()).minute(rt.minute()).second(rt.second()).locale(c.value)}return xe},zt=()=>{var xe;["week","month","year","date"].includes(z.value)&&((xe=b.value)==null||xe.focus())},on=()=>{zt(),z.value==="week"&&it(De.down)},Bt=xe=>{const rt=Mn(xe);[De.up,De.down,De.left,De.right,De.home,De.end,De.pageUp,De.pageDown].includes(rt)&&(it(rt),xe.stopPropagation(),xe.preventDefault()),[De.enter,De.space,De.numpadEnter].includes(rt)&&k.value===null&&A.value===null&&(xe.preventDefault(),R(_.value,!1))},it=xe=>{const{up:rt,down:Te,left:Qe,right:jt,home:Xe,end:ft,pageUp:vt,pageDown:kt}=De,Gt={year:{[rt]:-4,[Te]:4,[Qe]:-1,[jt]:1,offset:(bt,Cn)=>bt.setFullYear(bt.getFullYear()+Cn)},month:{[rt]:-4,[Te]:4,[Qe]:-1,[jt]:1,offset:(bt,Cn)=>bt.setMonth(bt.getMonth()+Cn)},week:{[rt]:-1,[Te]:1,[Qe]:-1,[jt]:1,offset:(bt,Cn)=>bt.setDate(bt.getDate()+Cn*7)},date:{[rt]:-7,[Te]:7,[Qe]:-1,[jt]:1,[Xe]:bt=>-bt.getDay(),[ft]:bt=>-bt.getDay()+6,[vt]:bt=>-new Date(bt.getFullYear(),bt.getMonth(),0).getDate(),[kt]:bt=>new Date(bt.getFullYear(),bt.getMonth()+1,0).getDate(),offset:(bt,Cn)=>bt.setDate(bt.getDate()+Cn)}},fn=_.value.toDate();for(;Math.abs(_.value.diff(fn,"year",!0))<1;){const bt=Gt[q.value];if(!bt)return;if(bt.offset(fn,et(bt[xe])?bt[xe](fn):bt[xe]??0),v&&v(fn))break;const Cn=_t(fn).locale(c.value);_.value=Cn,a("pick",Cn,!0);break}},At=xe=>{a("panel-change",_.value.toDate(),xe,D.value)};return _e(()=>z.value,xe=>{if(["month","year"].includes(xe)){D.value=xe;return}else if(xe==="years"){D.value="year";return}else if(xe==="months"){D.value="month";return}D.value="date"},{immediate:!0}),_e(()=>m.value,xe=>{xe&&(_.value=at())},{immediate:!0}),_e(()=>r.parsedValue,xe=>{if(xe){if(Y.value||Me(xe))return;_.value=xe}else _.value=at()},{immediate:!0}),a("set-picker-option",["isValidValue",Ae]),a("set-picker-option",["parseUserInput",nt]),a("set-picker-option",["handleFocusPicker",on]),(xe,rt)=>(L(),K("div",{class:B([y(i).b(),y(o).b(),y(i).is("border",xe.border),y(i).is("disabled",y(ne)),{"has-sidebar":xe.$slots.sidebar||re.value,"has-time":le.value}])},[j("div",{class:B(y(i).e("body-wrapper"))},[he(xe.$slots,"sidebar",{class:B(y(i).e("sidebar"))}),re.value?(L(),K("div",{key:0,class:B(y(i).e("sidebar"))},[(L(!0),K(ze,null,Lt(y(h),(Te,Qe)=>(L(),K("button",{key:Qe,type:"button",disabled:y(ne),class:B(y(i).e("shortcut")),onClick:jt=>W(Te)},ce(Te.text),11,Ibe))),128))],2)):fe("v-if",!0),j("div",{class:B(y(i).e("body"))},[le.value?(L(),K("div",{key:0,class:B(y(o).e("time-header"))},[j("span",{class:B(y(o).e("editor-wrap"))},[V(y(va),{placeholder:y(u)("el.datepicker.selectDate"),"model-value":Ne.value,size:"small","validate-event":!1,disabled:y(ne),readonly:!xe.editable,onInput:rt[0]||(rt[0]=Te=>k.value=Te),onChange:Se},null,8,["placeholder","model-value","disabled","readonly"])],2),gt((L(),K("span",{class:B(y(o).e("editor-wrap"))},[V(y(va),{placeholder:y(u)("el.datepicker.selectTime"),"model-value":Pe.value,size:"small","validate-event":!1,disabled:y(ne),readonly:!xe.editable,onFocus:ae,onInput:rt[1]||(rt[1]=Te=>A.value=Te),onChange:Re},null,8,["placeholder","model-value","disabled","readonly"]),V(y(K1),{visible:ie.value,format:pe.value,"parsed-value":_.value,onPick:$e},null,8,["visible","format","parsed-value"])],2)),[[y(yc),ge]])],2)):fe("v-if",!0),gt(j("div",{class:B([y(o).e("header"),(D.value==="year"||D.value==="month")&&y(o).em("header","bordered")])},[j("span",{class:B(y(o).e("prev-btn"))},[j("button",{type:"button","aria-label":y(u)("el.datepicker.prevYear"),class:B(["d-arrow-left",y(i).e("icon-btn")]),disabled:y(ne),onClick:rt[2]||(rt[2]=Te=>N(!1))},[he(xe.$slots,"prev-year",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(pc))]),_:1})])],10,Mbe),gt(j("button",{type:"button","aria-label":y(u)("el.datepicker.prevMonth"),class:B([y(i).e("icon-btn"),"arrow-left"]),disabled:y(ne),onClick:rt[3]||(rt[3]=Te=>$(!1))},[he(xe.$slots,"prev-month",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(Yl))]),_:1})])],10,Pbe),[[ln,D.value==="date"]])],2),j("span",{role:"button",class:B(y(o).e("header-label")),"aria-live":"polite",tabindex:xe.disabled?void 0:0,"aria-disabled":xe.disabled,onKeydown:rt[4]||(rt[4]=Yn(Te=>de("year"),["enter"])),onClick:rt[5]||(rt[5]=Te=>de("year"))},ce(F.value),43,Lbe),gt(j("span",{role:"button","aria-live":"polite",tabindex:xe.disabled?void 0:0,"aria-disabled":xe.disabled,class:B([y(o).e("header-label"),{active:D.value==="month"}]),onKeydown:rt[6]||(rt[6]=Yn(Te=>de("month"),["enter"])),onClick:rt[7]||(rt[7]=Te=>de("month"))},ce(y(u)(`el.datepicker.month${C.value+1}`)),43,Dbe),[[ln,D.value==="date"]]),j("span",{class:B(y(o).e("next-btn"))},[gt(j("button",{type:"button","aria-label":y(u)("el.datepicker.nextMonth"),class:B([y(i).e("icon-btn"),"arrow-right"]),disabled:y(ne),onClick:rt[8]||(rt[8]=Te=>$(!0))},[he(xe.$slots,"next-month",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(Wa))]),_:1})])],10,Rbe),[[ln,D.value==="date"]]),j("button",{type:"button","aria-label":y(u)("el.datepicker.nextYear"),class:B([y(i).e("icon-btn"),"d-arrow-right"]),disabled:y(ne),onClick:rt[9]||(rt[9]=Te=>N(!0))},[he(xe.$slots,"next-year",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(gc))]),_:1})])],10,Obe)],2)],2),[[ln,D.value!=="time"]]),j("div",{class:B(y(i).e("content")),onKeydown:Bt},[D.value==="date"?(L(),ve(RE,{key:0,ref_key:"currentViewRef",ref:b,"selection-mode":z.value,date:_.value,"parsed-value":xe.parsedValue,"disabled-date":y(v),disabled:y(ne),"cell-class-name":y(p),"show-week-number":xe.showWeekNumber,onPick:O},null,8,["selection-mode","date","parsed-value","disabled-date","disabled","cell-class-name","show-week-number"])):fe("v-if",!0),D.value==="year"?(L(),ve(Cm,{key:1,ref_key:"currentViewRef",ref:b,"selection-mode":z.value,date:_.value,"disabled-date":y(v),disabled:y(ne),"parsed-value":xe.parsedValue,"cell-class-name":y(p),onPick:se},null,8,["selection-mode","date","disabled-date","disabled","parsed-value","cell-class-name"])):fe("v-if",!0),D.value==="month"?(L(),ve(xm,{key:2,ref_key:"currentViewRef",ref:b,"selection-mode":z.value,date:_.value,"parsed-value":xe.parsedValue,"disabled-date":y(v),disabled:y(ne),"cell-class-name":y(p),onPick:ee},null,8,["selection-mode","date","parsed-value","disabled-date","disabled","cell-class-name"])):fe("v-if",!0)],34)],2)],2),xe.showFooter&&J.value&&Z.value?(L(),K("div",{key:0,class:B(y(i).e("footer"))},[gt(V(y(Xr),{text:"",size:"small",class:B(y(i).e("link-btn")),disabled:Q.value,onClick:ue},{default:G(()=>[Le(ce(y(u)("el.datepicker.now")),1)]),_:1},8,["class","disabled"]),[[ln,!Y.value&&xe.showNow]]),xe.showConfirm?(L(),ve(y(Xr),{key:0,plain:"",size:"small",class:B(y(i).e("link-btn")),disabled:U.value,onClick:te},{default:G(()=>[Le(ce(y(u)("el.datepicker.confirm")),1)]),_:1},8,["class","disabled"])):fe("v-if",!0)],2)):fe("v-if",!0)],2))}}),Vbe=Nbe;const $be=Oe({...nU,...EM}),Bbe=e=>{const{emit:t}=Tt(),n=iu(),r=pr();return i=>{const o=et(i.value)?i.value():i.value;if(o){t("pick",[_t(o[0]).locale(e.value),_t(o[1]).locale(e.value)]);return}i.onClick&&i.onClick({attrs:n,slots:r,emit:t})}},IM=(e,{defaultValue:t,defaultTime:n,leftDate:r,rightDate:a,step:i,unit:o,sortDates:s})=>{const{emit:l}=Tt(),{pickerNs:u}=Ge(CM),c=Ee("date-range-picker"),{t:d,lang:f}=Yt(),h=Bbe(f),v=H(),p=H(),g=H({endDate:null,selecting:!1}),m=x=>{g.value=x},b=(x=!1)=>{const C=y(v),T=y(p);Sm([C,T])&&l("pick",[C,T],x)},_=x=>{g.value.selecting=x,x||(g.value.endDate=null)},w=x=>{if(Me(x)&&x.length===2){const[C,T]=x;v.value=C,r.value=C,p.value=T,s(y(v),y(p))}else S()},S=()=>{let[x,C]=eS(y(t),{lang:y(f),step:i,unit:o,unlinkPanels:e.unlinkPanels});const T=k=>k.diff(k.startOf("d"),"ms"),E=y(n);if(E){let k=0,A=0;if(Me(E)){const[I,P]=E.map(_t);k=T(I),A=T(P)}else{const I=T(_t(E));k=I,A=I}x=x.startOf("d").add(k,"ms"),C=C.startOf("d").add(A,"ms")}v.value=void 0,p.value=void 0,r.value=x,a.value=C};return _e(t,x=>{x&&S()},{immediate:!0}),_e(()=>e.parsedValue,x=>{(!(x!=null&&x.length)||!or(x,[v.value,p.value]))&&w(x)},{immediate:!0}),_e(()=>e.visible,()=>{e.visible&&w(e.parsedValue)},{immediate:!0}),{minDate:v,maxDate:p,rangeState:g,lang:f,ppNs:u,drpNs:c,handleChangeRange:m,handleRangeConfirm:b,handleShortcutClick:h,onSelect:_,parseValue:w,t:d}},Fbe=(e,t,n,r)=>{const a=H("date"),i=H(),o=H("date"),s=H(),{disabledDate:l}=Ge(cl).props,{t:u,lang:c}=Yt(),d=M(()=>n.value.year()),f=M(()=>n.value.month()),h=M(()=>r.value.year()),v=M(()=>r.value.month());function p(S,x){const C=u("el.datepicker.year");if(S.value==="year"){const T=Math.floor(x.value/10)*10;return C?`${T} ${C} - ${T+9} ${C}`:`${T} - ${T+9}`}return`${x.value} ${C}`}function g(S){S==null||S.focus()}async function m(S,x){if(e.disabled)return;const C=S==="left"?a:o,T=S==="left"?i:s;C.value=x,await Ue(),g(T.value)}async function b(S,x,C){if(e.disabled)return;const T=x==="left",E=T?n:r,k=T?r:n,A=T?a:o,I=T?i:s;S==="year"&&(E.value=i_(E.value.year(C),c.value,l)),S==="month"&&(E.value=yv(E.value,E.value.year(),C,c.value,l)),e.unlinkPanels||(k.value=x==="left"?E.value.add(1,"month"):E.value.subtract(1,"month")),A.value=S==="year"?"month":"date",await Ue(),g(I.value),_(S)}function _(S){t("panel-change",[n.value.toDate(),r.value.toDate()],S)}function w(S,x,C){const T=C?"add":"subtract";return S==="year"?x[T](10,"year"):x[T](1,"year")}return{leftCurrentView:a,rightCurrentView:o,leftCurrentViewRef:i,rightCurrentViewRef:s,leftYear:d,rightYear:h,leftMonth:f,rightMonth:v,leftYearLabel:M(()=>p(a,d)),rightYearLabel:M(()=>p(o,h)),showLeftPicker:S=>m("left",S),showRightPicker:S=>m("right",S),handleLeftYearPick:S=>b("year","left",S),handleRightYearPick:S=>b("year","right",S),handleLeftMonthPick:S=>b("month","left",S),handleRightMonthPick:S=>b("month","right",S),handlePanelChange:_,adjustDateByView:w}},zbe=["disabled","onClick"],Hbe=["aria-label","disabled"],Wbe=["aria-label","disabled"],Gbe=["disabled","aria-label"],Ube=["disabled","aria-label"],Kbe=["tabindex","aria-disabled"],Ybe=["tabindex","aria-disabled"],jbe=["disabled","aria-label"],qbe=["disabled","aria-label"],Xbe=["aria-label","disabled"],Zbe=["disabled","aria-label"],Jbe=["tabindex","aria-disabled"],Qbe=["tabindex","aria-disabled"],E0="month";var e1e=ye({__name:"panel-date-range",props:$be,emits:["pick","set-picker-option","calendar-change","panel-change","clear"],setup(e,{emit:t}){const n=e,r=t,a=Ge(cl),i=Ge(Dy,void 0),{disabledDate:o,cellClassName:s,defaultTime:l,clearable:u}=a.props,c=xn(a.props,"format"),d=xn(a.props,"shortcuts"),f=xn(a.props,"defaultValue"),{lang:h}=Yt(),v=H(_t().locale(h.value)),p=H(_t().locale(h.value).add(1,E0)),{minDate:g,maxDate:m,rangeState:b,ppNs:_,drpNs:w,handleChangeRange:S,handleRangeConfirm:x,handleShortcutClick:C,onSelect:T,parseValue:E,t:k}=IM(n,{defaultValue:f,defaultTime:l,leftDate:v,rightDate:p,unit:E0,sortDates:jn});_e(()=>n.visible,We=>{!We&&b.value.selecting&&(E(n.parsedValue),T(!1))});const A=H({min:null,max:null}),I=H({min:null,max:null}),{leftCurrentView:P,rightCurrentView:R,leftCurrentViewRef:O,rightCurrentViewRef:$,leftYear:N,rightYear:D,leftMonth:F,rightMonth:W,leftYearLabel:z,rightYearLabel:Y,showLeftPicker:q,showRightPicker:re,handleLeftYearPick:ee,handleRightYearPick:se,handleLeftMonthPick:ne,handleRightMonthPick:de,handlePanelChange:le,adjustDateByView:J}=Fbe(n,r,v,p),Z=M(()=>!!d.value.length),U=M(()=>A.value.min!==null?A.value.min:g.value?g.value.format(me.value):""),te=M(()=>A.value.max!==null?A.value.max:m.value||g.value?(m.value||g.value).format(me.value):""),Q=M(()=>I.value.min!==null?I.value.min:g.value?g.value.format(pe.value):""),ue=M(()=>I.value.max!==null?I.value.max:m.value||g.value?(m.value||g.value).format(pe.value):""),pe=M(()=>n.timeFormat||VG(c.value||"")||"HH:mm:ss"),me=M(()=>n.dateFormat||NG(c.value||"")||"YYYY-MM-DD"),Pe=We=>Sm(We)&&(o?!o(We[0].toDate())&&!o(We[1].toDate()):!0),Ne=()=>{v.value=J(P.value,v.value,!1),n.unlinkPanels||(p.value=v.value.add(1,"month")),le("year")},ie=()=>{v.value=v.value.subtract(1,"month"),n.unlinkPanels||(p.value=v.value.add(1,"month")),le("month")},ae=()=>{n.unlinkPanels?p.value=J(R.value,p.value,!0):(v.value=J(R.value,v.value,!0),p.value=v.value.add(1,"month")),le("year")},ge=()=>{n.unlinkPanels?p.value=p.value.add(1,"month"):(v.value=v.value.add(1,"month"),p.value=v.value.add(1,"month")),le("month")},be=()=>{v.value=J(P.value,v.value,!0),le("year")},$e=()=>{v.value=v.value.add(1,"month"),le("month")},Re=()=>{p.value=J(R.value,p.value,!1),le("year")},Se=()=>{p.value=p.value.subtract(1,"month"),le("month")},Ae=M(()=>{const We=(F.value+1)%12,st=F.value+1>=12?1:0;return n.singlePanel||n.unlinkPanels&&new Date(N.value+st,We)n.singlePanel||n.unlinkPanels&&D.value*12+W.value-(N.value*12+F.value+1)>=12),at=ar(),zt=M(()=>!(g.value&&m.value&&!b.value.selecting&&Sm([g.value,m.value])&&!at.value)),on=M(()=>n.type==="datetime"||n.type==="datetimerange"),Bt=(We,st)=>{if(We)return l?_t(l[st]||l).locale(h.value).year(We.year()).month(We.month()).date(We.date()):We},it=(We,st=!0)=>{const we=We.minDate,He=We.maxDate,je=Bt(we,0),Xt=Bt(He,1);m.value===Xt&&g.value===je||(r("calendar-change",[we.toDate(),He&&He.toDate()]),m.value=Xt,g.value=je,!on.value&&st&&(st=!je||!Xt),x(st))},At=H(!1),xe=H(!1),rt=()=>{At.value=!1},Te=()=>{xe.value=!1},Qe=(We,st)=>{if(!o||!o(We.toDate()))return We;const we=We.isBefore(st);let He=We;for(;we?He.isBefore(st):He.isAfter(st);)if(He=we?He.add(1,"day"):He.subtract(1,"day"),!o(He.toDate()))return He;return We},jt=(We,st)=>{A.value[st]=We;const we=_t(We,me.value).locale(h.value);if(we.isValid()){if(o&&o(we.toDate()))return;if(st==="min"){if(v.value=we,g.value=(g.value||v.value).year(we.year()).month(we.month()).date(we.date()),!n.unlinkPanels&&!m.value){const He=Qe(g.value.add(1,"month"),g.value);p.value=He,m.value=He}}else if(p.value=we,m.value=(m.value||p.value).year(we.year()).month(we.month()).date(we.date()),!n.unlinkPanels&&!g.value){const He=Qe(m.value.subtract(1,"month"),m.value);v.value=He,g.value=He}jn(g.value,m.value),x(!0)}},Xe=(We,st)=>{if(A.value[st]=null,st==="min"){if(!n.unlinkPanels&&m.value&&g.value&&m.value.isBefore(g.value)){const we=Qe(g.value.add(1,"month"),g.value);p.value=we,m.value=we}}else if(!n.unlinkPanels&&g.value&&m.value&&g.value.isAfter(m.value)){const we=Qe(m.value.subtract(1,"month"),m.value);v.value=we,g.value=we}jn(g.value,m.value),x(!0)},ft=(We,st)=>{I.value[st]=We;const we=_t(We,pe.value).locale(h.value);we.isValid()&&(st==="min"?(At.value=!0,g.value=(g.value||v.value).hour(we.hour()).minute(we.minute()).second(we.second()),v.value=g.value):(xe.value=!0,m.value=(m.value||p.value).hour(we.hour()).minute(we.minute()).second(we.second()),p.value=m.value))},vt=(We,st)=>{I.value[st]=null,st==="min"?(v.value=g.value,At.value=!1,(!m.value||m.value.isBefore(g.value))&&(m.value=g.value)):(p.value=m.value,xe.value=!1,m.value&&m.value.isBefore(g.value)&&(g.value=m.value)),x(!0)},kt=(We,st,we)=>{I.value.min||(We&&(g.value=(g.value||v.value).hour(We.hour()).minute(We.minute()).second(We.second())),we||(At.value=st),(!m.value||m.value.isBefore(g.value))&&(m.value=g.value,p.value=We,Ue(()=>{E(n.parsedValue)})),x(!0))},Gt=(We,st,we)=>{I.value.max||(We&&(m.value=(m.value||p.value).hour(We.hour()).minute(We.minute()).second(We.second())),we||(xe.value=st),m.value&&m.value.isBefore(g.value)&&(g.value=m.value),x(!0))},fn=()=>{bt(),r("clear")},bt=()=>{let We=null;a!=null&&a.emptyValues&&(We=a.emptyValues.valueOnClear.value),v.value=eS(y(f),{lang:y(h),unit:"month",unlinkPanels:n.unlinkPanels})[0],p.value=v.value.add(1,"month"),m.value=void 0,g.value=void 0,x(!0),r("pick",We)},Cn=We=>bv(We,c.value||"",h.value,i);function jn(We,st){if(n.unlinkPanels&&st){const we=(We==null?void 0:We.year())||0,He=(We==null?void 0:We.month())||0,je=st.year(),Xt=st.month();p.value=we===je&&He===Xt?st.add(1,E0):st}else p.value=v.value.add(1,E0),st&&(p.value=p.value.hour(st.hour()).minute(st.minute()).second(st.second()))}return r("set-picker-option",["isValidValue",Pe]),r("set-picker-option",["parseUserInput",Cn]),r("set-picker-option",["handleClear",bt]),(We,st)=>(L(),K("div",{class:B([y(_).b(),y(w).b(),y(_).is("border",We.border),y(_).is("disabled",y(at)),{"has-sidebar":We.$slots.sidebar||Z.value,"has-time":on.value,"single-panel":We.singlePanel}])},[j("div",{class:B(y(_).e("body-wrapper"))},[he(We.$slots,"sidebar",{class:B(y(_).e("sidebar"))}),Z.value?(L(),K("div",{key:0,class:B(y(_).e("sidebar"))},[(L(!0),K(ze,null,Lt(d.value,(we,He)=>(L(),K("button",{key:He,type:"button",disabled:y(at),class:B(y(_).e("shortcut")),onClick:je=>y(C)(we)},ce(we.text),11,zbe))),128))],2)):fe("v-if",!0),j("div",{class:B(y(_).e("body"))},[on.value?(L(),K("div",{key:0,class:B(y(w).e("time-header"))},[j("span",{class:B(y(w).e("editors-wrap"))},[j("span",{class:B(y(w).e("time-picker-wrap"))},[V(y(va),{size:"small",disabled:y(b).selecting||y(at),placeholder:y(k)("el.datepicker.startDate"),class:B(y(w).e("editor")),"model-value":U.value,"validate-event":!1,readonly:!We.editable,onInput:st[0]||(st[0]=we=>jt(we,"min")),onChange:st[1]||(st[1]=we=>Xe(we,"min"))},null,8,["disabled","placeholder","class","model-value","readonly"])],2),gt((L(),K("span",{class:B(y(w).e("time-picker-wrap"))},[V(y(va),{size:"small",class:B(y(w).e("editor")),disabled:y(b).selecting||y(at),placeholder:y(k)("el.datepicker.startTime"),"model-value":Q.value,"validate-event":!1,readonly:!We.editable,onFocus:st[2]||(st[2]=we=>At.value=!0),onInput:st[3]||(st[3]=we=>ft(we,"min")),onChange:st[4]||(st[4]=we=>vt(we,"min"))},null,8,["class","disabled","placeholder","model-value","readonly"]),V(y(K1),{visible:At.value,format:pe.value,"datetime-role":"start","parsed-value":y(g)||v.value,onPick:kt},null,8,["visible","format","parsed-value"])],2)),[[y(yc),rt]])],2),j("span",null,[V(y(Ze),null,{default:G(()=>[V(y(Wa))]),_:1})]),j("span",{class:B([y(w).e("editors-wrap"),"is-right"])},[j("span",{class:B(y(w).e("time-picker-wrap"))},[V(y(va),{size:"small",class:B(y(w).e("editor")),disabled:y(b).selecting||y(at),placeholder:y(k)("el.datepicker.endDate"),"model-value":te.value,readonly:!y(g)||!We.editable,"validate-event":!1,onInput:st[5]||(st[5]=we=>jt(we,"max")),onChange:st[6]||(st[6]=we=>Xe(we,"max"))},null,8,["class","disabled","placeholder","model-value","readonly"])],2),gt((L(),K("span",{class:B(y(w).e("time-picker-wrap"))},[V(y(va),{size:"small",class:B(y(w).e("editor")),disabled:y(b).selecting||y(at),placeholder:y(k)("el.datepicker.endTime"),"model-value":ue.value,readonly:!y(g)||!We.editable,"validate-event":!1,onFocus:st[7]||(st[7]=we=>y(g)&&(xe.value=!0)),onInput:st[8]||(st[8]=we=>ft(we,"max")),onChange:st[9]||(st[9]=we=>vt(we,"max"))},null,8,["class","disabled","placeholder","model-value","readonly"]),V(y(K1),{"datetime-role":"end",visible:xe.value,format:pe.value,"parsed-value":y(m)||p.value,onPick:Gt},null,8,["visible","format","parsed-value"])],2)),[[y(yc),Te]])],2)],2)):fe("v-if",!0),j("div",{class:B([y(_).e("content"),y(w).e("content"),y(w).is("left",!We.singlePanel)])},[j("div",{class:B(y(w).e("header"))},[j("button",{type:"button",class:B([y(_).e("icon-btn"),"d-arrow-left"]),"aria-label":y(k)("el.datepicker.prevYear"),disabled:y(at),onClick:Ne},[he(We.$slots,"prev-year",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(pc))]),_:1})])],10,Hbe),gt(j("button",{type:"button",class:B([y(_).e("icon-btn"),"arrow-left"]),"aria-label":y(k)("el.datepicker.prevMonth"),disabled:y(at),onClick:ie},[he(We.$slots,"prev-month",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(Yl))]),_:1})])],10,Wbe),[[ln,y(P)==="date"]]),We.unlinkPanels||We.singlePanel?(L(),K("button",{key:0,type:"button",disabled:!nt.value||y(at),class:B([[y(_).e("icon-btn"),y(_).is("disabled",!nt.value||y(at))],"d-arrow-right"]),"aria-label":y(k)("el.datepicker.nextYear"),onClick:be},[he(We.$slots,"next-year",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(gc))]),_:1})])],10,Gbe)):fe("v-if",!0),We.unlinkPanels&&y(P)==="date"||We.singlePanel?(L(),K("button",{key:1,type:"button",disabled:!Ae.value||y(at),class:B([[y(_).e("icon-btn"),y(_).is("disabled",!Ae.value||y(at))],"arrow-right"]),"aria-label":y(k)("el.datepicker.nextMonth"),onClick:$e},[he(We.$slots,"next-month",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(Wa))]),_:1})])],10,Ube)):fe("v-if",!0),j("div",null,[j("span",{role:"button",class:B(y(w).e("header-label")),"aria-live":"polite",tabindex:We.disabled?void 0:0,"aria-disabled":We.disabled,onKeydown:st[10]||(st[10]=Yn(we=>y(q)("year"),["enter"])),onClick:st[11]||(st[11]=we=>y(q)("year"))},ce(y(z)),43,Kbe),gt(j("span",{role:"button","aria-live":"polite",tabindex:We.disabled?void 0:0,"aria-disabled":We.disabled,class:B([y(w).e("header-label"),{active:y(P)==="month"}]),onKeydown:st[12]||(st[12]=Yn(we=>y(q)("month"),["enter"])),onClick:st[13]||(st[13]=we=>y(q)("month"))},ce(y(k)(`el.datepicker.month${v.value.month()+1}`)),43,Ybe),[[ln,y(P)==="date"]])])],2),y(P)==="date"?(L(),ve(RE,{key:0,ref_key:"leftCurrentViewRef",ref:O,"selection-mode":"range",date:v.value,"min-date":y(g),"max-date":y(m),"range-state":y(b),"disabled-date":y(o),"cell-class-name":y(s),"show-week-number":We.showWeekNumber,disabled:y(at),onChangerange:y(S),onPick:it,onSelect:y(T)},null,8,["date","min-date","max-date","range-state","disabled-date","cell-class-name","show-week-number","disabled","onChangerange","onSelect"])):fe("v-if",!0),y(P)==="year"?(L(),ve(Cm,{key:1,ref_key:"leftCurrentViewRef",ref:O,"selection-mode":"year",date:v.value,"disabled-date":y(o),"parsed-value":We.parsedValue,disabled:y(at),onPick:y(ee)},null,8,["date","disabled-date","parsed-value","disabled","onPick"])):fe("v-if",!0),y(P)==="month"?(L(),ve(xm,{key:2,ref_key:"leftCurrentViewRef",ref:O,"selection-mode":"month",date:v.value,"parsed-value":We.parsedValue,"disabled-date":y(o),disabled:y(at),onPick:y(ne)},null,8,["date","parsed-value","disabled-date","disabled","onPick"])):fe("v-if",!0)],2),We.singlePanel?fe("v-if",!0):(L(),K("div",{key:1,class:B([[y(_).e("content"),y(w).e("content")],"is-right"])},[j("div",{class:B(y(w).e("header"))},[We.unlinkPanels?(L(),K("button",{key:0,type:"button",disabled:!nt.value||y(at),class:B([[y(_).e("icon-btn"),y(_).is("disabled",!nt.value||y(at))],"d-arrow-left"]),"aria-label":y(k)("el.datepicker.prevYear"),onClick:Re},[he(We.$slots,"prev-year",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(pc))]),_:1})])],10,jbe)):fe("v-if",!0),We.unlinkPanels&&y(R)==="date"?(L(),K("button",{key:1,type:"button",disabled:!Ae.value||y(at),class:B([[y(_).e("icon-btn"),y(_).is("disabled",!Ae.value||y(at))],"arrow-left"]),"aria-label":y(k)("el.datepicker.prevMonth"),onClick:Se},[he(We.$slots,"prev-month",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(Yl))]),_:1})])],10,qbe)):fe("v-if",!0),j("button",{type:"button","aria-label":y(k)("el.datepicker.nextYear"),class:B([y(_).e("icon-btn"),"d-arrow-right"]),disabled:y(at),onClick:ae},[he(We.$slots,"next-year",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(gc))]),_:1})])],10,Xbe),gt(j("button",{type:"button",class:B([y(_).e("icon-btn"),"arrow-right"]),disabled:y(at),"aria-label":y(k)("el.datepicker.nextMonth"),onClick:ge},[he(We.$slots,"next-month",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(Wa))]),_:1})])],10,Zbe),[[ln,y(R)==="date"]]),j("div",null,[j("span",{role:"button",class:B(y(w).e("header-label")),"aria-live":"polite",tabindex:We.disabled?void 0:0,"aria-disabled":We.disabled,onKeydown:st[14]||(st[14]=Yn(we=>y(re)("year"),["enter"])),onClick:st[15]||(st[15]=we=>y(re)("year"))},ce(y(Y)),43,Jbe),gt(j("span",{role:"button","aria-live":"polite",tabindex:We.disabled?void 0:0,"aria-disabled":We.disabled,class:B([y(w).e("header-label"),{active:y(R)==="month"}]),onKeydown:st[16]||(st[16]=Yn(we=>y(re)("month"),["enter"])),onClick:st[17]||(st[17]=we=>y(re)("month"))},ce(y(k)(`el.datepicker.month${p.value.month()+1}`)),43,Qbe),[[ln,y(R)==="date"]])])],2),y(R)==="date"?(L(),ve(RE,{key:0,ref_key:"rightCurrentViewRef",ref:$,"selection-mode":"range",date:p.value,"min-date":y(g),"max-date":y(m),"range-state":y(b),"disabled-date":y(o),"cell-class-name":y(s),"show-week-number":We.showWeekNumber,disabled:y(at),onChangerange:y(S),onPick:it,onSelect:y(T)},null,8,["date","min-date","max-date","range-state","disabled-date","cell-class-name","show-week-number","disabled","onChangerange","onSelect"])):fe("v-if",!0),y(R)==="year"?(L(),ve(Cm,{key:1,ref_key:"rightCurrentViewRef",ref:$,"selection-mode":"year",date:p.value,"disabled-date":y(o),"parsed-value":We.parsedValue,disabled:y(at),onPick:y(se)},null,8,["date","disabled-date","parsed-value","disabled","onPick"])):fe("v-if",!0),y(R)==="month"?(L(),ve(xm,{key:2,ref_key:"rightCurrentViewRef",ref:$,"selection-mode":"month",date:p.value,"parsed-value":We.parsedValue,"disabled-date":y(o),disabled:y(at),onPick:y(de)},null,8,["date","parsed-value","disabled-date","disabled","onPick"])):fe("v-if",!0)],2))],2)],2),We.showFooter&&on.value&&(We.showConfirm||y(u))?(L(),K("div",{key:0,class:B(y(_).e("footer"))},[y(u)?(L(),ve(y(Xr),{key:0,text:"",size:"small",class:B(y(_).e("link-btn")),onClick:fn},{default:G(()=>[Le(ce(y(k)("el.datepicker.clear")),1)]),_:1},8,["class"])):fe("v-if",!0),We.showConfirm?(L(),ve(y(Xr),{key:1,plain:"",size:"small",class:B(y(_).e("link-btn")),disabled:zt.value,onClick:st[18]||(st[18]=we=>y(x)(!1))},{default:G(()=>[Le(ce(y(k)("el.datepicker.confirm")),1)]),_:1},8,["class","disabled"])):fe("v-if",!0)],2)):fe("v-if",!0)],2))}}),t1e=e1e;const n1e=Oe({...EM}),r1e=["pick","set-picker-option","calendar-change"],a1e=({unlinkPanels:e,leftDate:t,rightDate:n})=>{const{t:r}=Yt();return{leftPrevYear:()=>{t.value=t.value.subtract(1,"year"),e.value||(n.value=n.value.subtract(1,"year"))},rightNextYear:()=>{e.value||(t.value=t.value.add(1,"year")),n.value=n.value.add(1,"year")},leftNextYear:()=>{t.value=t.value.add(1,"year")},rightPrevYear:()=>{n.value=n.value.subtract(1,"year")},leftLabel:M(()=>`${t.value.year()} ${r("el.datepicker.year")}`),rightLabel:M(()=>`${n.value.year()} ${r("el.datepicker.year")}`),leftYear:M(()=>t.value.year()),rightYear:M(()=>n.value.year()===t.value.year()?t.value.year()+1:n.value.year())}},i1e=["disabled","onClick"],o1e=["disabled"],s1e=["disabled"],l1e=["disabled"],u1e=["disabled"],k0="year";var c1e=ye({name:"DatePickerMonthRange",__name:"panel-month-range",props:n1e,emits:r1e,setup(e,{emit:t}){const n=e,r=t,{lang:a}=Yt(),i=Ge(cl),o=Ge(Dy,void 0),{shortcuts:s,disabledDate:l,cellClassName:u}=i.props,c=xn(i.props,"format"),d=xn(i.props,"defaultValue"),f=H(_t().locale(a.value)),h=H(_t().locale(a.value).add(1,k0)),{minDate:v,maxDate:p,rangeState:g,ppNs:m,drpNs:b,handleChangeRange:_,handleRangeConfirm:w,handleShortcutClick:S,onSelect:x,parseValue:C}=IM(n,{defaultValue:d,leftDate:f,rightDate:h,unit:k0,sortDates:z}),T=M(()=>!!s.length),{leftPrevYear:E,rightNextYear:k,leftNextYear:A,rightPrevYear:I,leftLabel:P,rightLabel:R,leftYear:O,rightYear:$}=a1e({unlinkPanels:xn(n,"unlinkPanels"),leftDate:f,rightDate:h}),N=M(()=>n.singlePanel||n.unlinkPanels&&$.value>O.value+1),D=(q,re=!0)=>{const ee=q.minDate,se=q.maxDate;p.value===se&&v.value===ee||(r("calendar-change",[ee.toDate(),se&&se.toDate()]),p.value=se,v.value=ee,re&&w())},F=()=>{let q=null;i!=null&&i.emptyValues&&(q=i.emptyValues.valueOnClear.value),f.value=eS(y(d),{lang:y(a),unit:"year",unlinkPanels:n.unlinkPanels})[0],h.value=f.value.add(1,"year"),r("pick",q)},W=q=>bv(q,c.value,a.value,o);function z(q,re){n.unlinkPanels&&re?h.value=((q==null?void 0:q.year())||0)===re.year()?re.add(1,k0):re:h.value=f.value.add(1,k0)}const Y=ar();return _e(()=>n.visible,q=>{!q&&g.value.selecting&&(C(n.parsedValue),x(!1))}),r("set-picker-option",["isValidValue",Sm]),r("set-picker-option",["parseUserInput",W]),r("set-picker-option",["handleClear",F]),(q,re)=>(L(),K("div",{class:B([y(m).b(),y(b).b(),y(m).is("border",q.border),y(m).is("disabled",y(Y)),{"has-sidebar":!!q.$slots.sidebar||T.value,"single-panel":q.singlePanel}])},[j("div",{class:B(y(m).e("body-wrapper"))},[he(q.$slots,"sidebar",{class:B(y(m).e("sidebar"))}),T.value?(L(),K("div",{key:0,class:B(y(m).e("sidebar"))},[(L(!0),K(ze,null,Lt(y(s),(ee,se)=>(L(),K("button",{key:se,type:"button",class:B(y(m).e("shortcut")),disabled:y(Y),onClick:ne=>y(S)(ee)},ce(ee.text),11,i1e))),128))],2)):fe("v-if",!0),j("div",{class:B(y(m).e("body"))},[j("div",{class:B([y(m).e("content"),y(b).e("content"),y(b).is("left",!q.singlePanel)])},[j("div",{class:B(y(b).e("header"))},[j("button",{type:"button",class:B([y(m).e("icon-btn"),"d-arrow-left"]),disabled:y(Y),onClick:re[0]||(re[0]=(...ee)=>y(E)&&y(E)(...ee))},[he(q.$slots,"prev-year",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(pc))]),_:1})])],10,o1e),q.unlinkPanels||q.singlePanel?(L(),K("button",{key:0,type:"button",disabled:!N.value||y(Y),class:B([[y(m).e("icon-btn"),y(m).is("disabled",!N.value||y(Y))],"d-arrow-right"]),onClick:re[1]||(re[1]=(...ee)=>y(A)&&y(A)(...ee))},[he(q.$slots,"next-year",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(gc))]),_:1})])],10,s1e)):fe("v-if",!0),j("div",null,ce(y(P)),1)],2),V(xm,{"selection-mode":"range",date:f.value,"min-date":y(v),"max-date":y(p),"range-state":y(g),"disabled-date":y(l),disabled:y(Y),"cell-class-name":y(u),onChangerange:y(_),onPick:D,onSelect:y(x)},null,8,["date","min-date","max-date","range-state","disabled-date","disabled","cell-class-name","onChangerange","onSelect"])],2),q.singlePanel?fe("v-if",!0):(L(),K("div",{key:0,class:B([[y(m).e("content"),y(b).e("content")],"is-right"])},[j("div",{class:B(y(b).e("header"))},[q.unlinkPanels?(L(),K("button",{key:0,type:"button",disabled:!N.value||y(Y),class:B([[y(m).e("icon-btn"),y(m).is("disabled",!N.value||y(Y))],"d-arrow-left"]),onClick:re[2]||(re[2]=(...ee)=>y(I)&&y(I)(...ee))},[he(q.$slots,"prev-year",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(pc))]),_:1})])],10,l1e)):fe("v-if",!0),j("button",{type:"button",class:B([y(m).e("icon-btn"),"d-arrow-right"]),disabled:y(Y),onClick:re[3]||(re[3]=(...ee)=>y(k)&&y(k)(...ee))},[he(q.$slots,"next-year",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(gc))]),_:1})])],10,u1e),j("div",null,ce(y(R)),1)],2),V(xm,{"selection-mode":"range",date:h.value,"min-date":y(v),"max-date":y(p),"range-state":y(g),"disabled-date":y(l),disabled:y(Y),"cell-class-name":y(u),onChangerange:y(_),onPick:D,onSelect:y(x)},null,8,["date","min-date","max-date","range-state","disabled-date","disabled","cell-class-name","onChangerange","onSelect"])],2))],2)],2)],2))}}),d1e=c1e;const f1e=Oe({...EM}),h1e=["pick","set-picker-option","calendar-change"],v1e=({unlinkPanels:e,leftDate:t,rightDate:n})=>({leftPrevYear:()=>{t.value=t.value.subtract(10,"year"),e.value||(n.value=n.value.subtract(10,"year"))},rightNextYear:()=>{e.value||(t.value=t.value.add(10,"year")),n.value=n.value.add(10,"year")},leftNextYear:()=>{t.value=t.value.add(10,"year")},rightPrevYear:()=>{n.value=n.value.subtract(10,"year")},leftLabel:M(()=>{const s=Math.floor(t.value.year()/10)*10;return`${s}-${s+9}`}),rightLabel:M(()=>{const s=Math.floor(n.value.year()/10)*10;return`${s}-${s+9}`}),leftYear:M(()=>Math.floor(t.value.year()/10)*10+9),rightYear:M(()=>Math.floor(n.value.year()/10)*10)}),p1e=["disabled","onClick"],g1e=["disabled"],m1e=["disabled"],y1e=["disabled"],b1e=["disabled"],Jf=10,xp="year";var _1e=ye({name:"DatePickerYearRange",__name:"panel-year-range",props:f1e,emits:h1e,setup(e,{emit:t}){const n=e,r=t,{lang:a}=Yt(),i=H(_t().locale(a.value)),o=H(_t().locale(a.value).add(Jf,xp)),s=Ge(Dy,void 0),l=Ge(cl),{shortcuts:u,disabledDate:c,cellClassName:d}=l.props,f=xn(l.props,"format"),h=xn(l.props,"defaultValue"),{minDate:v,maxDate:p,rangeState:g,ppNs:m,drpNs:b,handleChangeRange:_,handleRangeConfirm:w,handleShortcutClick:S,onSelect:x,parseValue:C}=IM(n,{defaultValue:h,leftDate:i,rightDate:o,step:Jf,unit:xp,sortDates:se}),{leftPrevYear:T,rightNextYear:E,leftNextYear:k,rightPrevYear:A,leftLabel:I,rightLabel:P,leftYear:R,rightYear:O}=v1e({unlinkPanels:xn(n,"unlinkPanels"),leftDate:i,rightDate:o}),$=ar(),N=M(()=>!!u.length),D=M(()=>[m.b(),b.b(),m.is("border",n.border),m.is("disabled",$.value),{"has-sidebar":!!pr().sidebar||N.value,"single-panel":n.singlePanel}]),F=M(()=>({content:[m.e("content"),b.e("content"),b.is("left",!n.singlePanel)],arrowLeftBtn:[m.e("icon-btn"),"d-arrow-left"],arrowRightBtn:[m.e("icon-btn"),m.is("disabled",!z.value||$.value),"d-arrow-right"]})),W=M(()=>({content:[m.e("content"),b.e("content"),"is-right"],arrowLeftBtn:[m.e("icon-btn"),m.is("disabled",!z.value||$.value),"d-arrow-left"],arrowRightBtn:[m.e("icon-btn"),"d-arrow-right"]})),z=M(()=>n.singlePanel||n.unlinkPanels&&O.value>R.value+1),Y=(ne,de=!0)=>{const le=ne.minDate,J=ne.maxDate;p.value===J&&v.value===le||(r("calendar-change",[le.toDate(),J&&J.toDate()]),p.value=J,v.value=le,de&&w())},q=ne=>bv(ne,f.value,a.value,s),re=ne=>Sm(ne)&&(c?!c(ne[0].toDate())&&!c(ne[1].toDate()):!0),ee=()=>{let ne=null;l!=null&&l.emptyValues&&(ne=l.emptyValues.valueOnClear.value);const de=eS(y(h),{lang:y(a),step:Jf,unit:xp,unlinkPanels:n.unlinkPanels});i.value=de[0],o.value=de[1],r("pick",ne)};function se(ne,de){if(n.unlinkPanels&&de){const le=(ne==null?void 0:ne.year())||0,J=de.year();o.value=le+Jf>J?de.add(Jf,xp):de}else o.value=i.value.add(Jf,xp)}return _e(()=>n.visible,ne=>{!ne&&g.value.selecting&&(C(n.parsedValue),x(!1))}),r("set-picker-option",["isValidValue",re]),r("set-picker-option",["parseUserInput",q]),r("set-picker-option",["handleClear",ee]),(ne,de)=>(L(),K("div",{class:B(D.value)},[j("div",{class:B(y(m).e("body-wrapper"))},[he(ne.$slots,"sidebar",{class:B(y(m).e("sidebar"))}),N.value?(L(),K("div",{key:0,class:B(y(m).e("sidebar"))},[(L(!0),K(ze,null,Lt(y(u),(le,J)=>(L(),K("button",{key:J,type:"button",class:B(y(m).e("shortcut")),disabled:y($),onClick:Z=>y(S)(le)},ce(le.text),11,p1e))),128))],2)):fe("v-if",!0),j("div",{class:B(y(m).e("body"))},[j("div",{class:B(F.value.content)},[j("div",{class:B(y(b).e("header"))},[j("button",{type:"button",class:B(F.value.arrowLeftBtn),disabled:y($),onClick:de[0]||(de[0]=(...le)=>y(T)&&y(T)(...le))},[he(ne.$slots,"prev-year",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(pc))]),_:1})])],10,g1e),ne.unlinkPanels||ne.singlePanel?(L(),K("button",{key:0,type:"button",disabled:!z.value||y($),class:B(F.value.arrowRightBtn),onClick:de[1]||(de[1]=(...le)=>y(k)&&y(k)(...le))},[he(ne.$slots,"next-year",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(gc))]),_:1})])],10,m1e)):fe("v-if",!0),j("div",null,ce(y(I)),1)],2),V(Cm,{"selection-mode":"range",date:i.value,"min-date":y(v),"max-date":y(p),"range-state":y(g),"disabled-date":y(c),disabled:y($),"cell-class-name":y(d),onChangerange:y(_),onPick:Y,onSelect:y(x)},null,8,["date","min-date","max-date","range-state","disabled-date","disabled","cell-class-name","onChangerange","onSelect"])],2),ne.singlePanel?fe("v-if",!0):(L(),K("div",{key:0,class:B(W.value.content)},[j("div",{class:B(y(b).e("header"))},[ne.unlinkPanels?(L(),K("button",{key:0,type:"button",disabled:!z.value||y($),class:B(W.value.arrowLeftBtn),onClick:de[2]||(de[2]=(...le)=>y(A)&&y(A)(...le))},[he(ne.$slots,"prev-year",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(pc))]),_:1})])],10,y1e)):fe("v-if",!0),j("button",{type:"button",class:B(W.value.arrowRightBtn),disabled:y($),onClick:de[3]||(de[3]=(...le)=>y(E)&&y(E)(...le))},[he(ne.$slots,"next-year",{},()=>[V(y(Ze),null,{default:G(()=>[V(y(gc))]),_:1})])],10,b1e),j("div",null,ce(y(P)),1)],2),V(Cm,{"selection-mode":"range",date:o.value,"min-date":y(v),"max-date":y(p),"range-state":y(g),"disabled-date":y(c),disabled:y($),"cell-class-name":y(d),onChangerange:y(_),onPick:Y,onSelect:y(x)},null,8,["date","min-date","max-date","range-state","disabled-date","disabled","cell-class-name","onChangerange","onSelect"])],2))],2)],2)],2))}}),w1e=_1e;const S1e=function(e){switch(e){case"daterange":case"datetimerange":return t1e;case"monthrange":return d1e;case"yearrange":return w1e;default:return Vbe}};var rU={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(du,function(){return function(n,r){var a=r.prototype,i=a.format;a.format=function(o){var s=this,l=this.$locale();if(!this.isValid())return i.bind(this)(o);var u=this.$utils(),c=(o||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(d){switch(d){case"Q":return Math.ceil((s.$M+1)/3);case"Do":return l.ordinal(s.$D);case"gggg":return s.weekYear();case"GGGG":return s.isoWeekYear();case"wo":return l.ordinal(s.week(),"W");case"w":case"ww":return u.s(s.week(),d==="w"?1:2,"0");case"W":case"WW":return u.s(s.isoWeek(),d==="W"?1:2,"0");case"k":case"kk":return u.s(String(s.$H===0?24:s.$H),d==="k"?1:2,"0");case"X":return Math.floor(s.$d.getTime()/1e3);case"x":return s.$d.getTime();case"z":return"["+s.offsetName()+"]";case"zzz":return"["+s.offsetName("long")+"]";default:return d}});return i.bind(this)(c)}}})})(rU);var x1e=rU.exports;const C1e=fu(x1e);var aU={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(du,function(){var n="week",r="year";return function(a,i,o){var s=i.prototype;s.week=function(l){if(l===void 0&&(l=null),l!==null)return this.add(7*(l-this.week()),"day");var u=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var c=o(this).startOf(r).add(1,r).date(u),d=o(this).endOf(n);if(c.isBefore(d))return 1}var f=o(this).startOf(r).date(u).startOf(n).subtract(1,"millisecond"),h=this.diff(f,n,!0);return h<0?o(this).startOf("week").week():Math.ceil(h)},s.weeks=function(l){return l===void 0&&(l=null),this.week(l)}}})})(aU);var T1e=aU.exports;const E1e=fu(T1e);var iU={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(du,function(){return function(n,r){r.prototype.weekYear=function(){var a=this.month(),i=this.week(),o=this.year();return i===1&&a===11?o+1:a===0&&i>=52?o-1:o}}})})(iU);var k1e=iU.exports;const A1e=fu(k1e);var oU={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(du,function(){return function(n,r,a){r.prototype.dayOfYear=function(i){var o=Math.round((a(this).startOf("day")-a(this).startOf("year"))/864e5)+1;return i==null?o:this.add(i-o,"day")}}})})(oU);var I1e=oU.exports;const M1e=fu(I1e);var sU={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(du,function(){return function(n,r){r.prototype.isSameOrAfter=function(a,i){return this.isSame(a,i)||this.isAfter(a,i)}}})})(sU);var P1e=sU.exports;const L1e=fu(P1e);var lU={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(du,function(){return function(n,r){r.prototype.isSameOrBefore=function(a,i){return this.isSame(a,i)||this.isBefore(a,i)}}})})(lU);var D1e=lU.exports;const R1e=fu(D1e);function O1e(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Vn(e)}_t.extend(a9);_t.extend(C1e);_t.extend(gM);_t.extend(E1e);_t.extend(A1e);_t.extend(M1e);_t.extend(L1e);_t.extend(R1e);var N1e=ye({name:"ElDatePickerPanel",install:null,inheritAttrs:!1,props:lbe,emits:[mt,"calendar-change","panel-change","visible-change","clear"],setup(e,{slots:t,emit:n,attrs:r}){const a=Ee("picker-panel");qt(Ge("EP_PICKER_BASE",void 0))&&Ft(cl,{props:Qt({...Jr(e)})}),Ft(CM,{slots:t,pickerNs:a});const{parsedValue:i,onCalendarChange:o,onPanelChange:s,onSetPickerOption:l,onPick:u}=Ge(RG,()=>FG(e,n),!0);return()=>V(S1e(e.type),Mt(my(r,"onPick"),e,{parsedValue:i.value,"onSet-picker-option":l,"onCalendar-change":o,"onPanel-change":s,onClear:()=>n("clear"),onPick:u}),O1e(t)?t:{default:()=>[t]})}});const uU=xt(N1e),V1e=Oe({...pM,type:{type:oe(String),default:"date"}});function $1e(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Vn(e)}var B1e=ye({name:"ElDatePicker",install:null,props:V1e,emits:[mt],setup(e,{expose:t,emit:n,slots:r}){Ft(Dy,M(()=>!e.format)),Ft(hM,Qt(xn(e,"popperOptions")));const a=H();t({focus:()=>{var o;(o=a.value)==null||o.focus()},blur:()=>{var o;(o=a.value)==null||o.blur()},handleOpen:()=>{var o;(o=a.value)==null||o.handleOpen()},handleClose:()=>{var o;(o=a.value)==null||o.handleClose()}});const i=o=>{n(mt,o)};return()=>V(zG,Mt(e,{format:e.format??(Npe[e.type]||"YYYY-MM-DD"),type:e.type,ref:a,"onUpdate:modelValue":i}),{default:o=>V(uU,Mt({disabled:e.disabled,editable:e.editable,border:!1},o),$1e(r)?r:{default:()=>[r]}),"range-separator":r["range-separator"]})}});const F1e=xt(B1e),z1e=Oe({border:Boolean,column:{type:Number,default:3},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},size:$r,title:{type:String,default:""},extra:{type:String,default:""},labelWidth:{type:[String,Number]}}),cU="ElDescriptionsItem",H1e=Oe({label:{type:String,default:""},span:{type:Number,default:1},rowspan:{type:Number,default:1},width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},labelWidth:{type:[String,Number]},align:{type:String,values:wR,default:"left"},labelAlign:{type:String,values:wR},className:{type:String,default:""},labelClassName:{type:String,default:""}}),dU=ye({name:cU,props:H1e}),MM=Symbol("elDescriptions"),W1e=Oe({row:{type:oe(Array),default:()=>[]}});var Cp=ye({name:"ElDescriptionsCell",props:{cell:{type:Object},tag:{type:String,default:"td"},type:{type:String}},setup(){return{descriptions:Ge(MM,{})}},render(){var p;const e=Hce(this.cell),t=(((p=this.cell)==null?void 0:p.dirs)||[]).map(g=>{const{dir:m,arg:b,modifiers:_,value:w}=g;return[m,w,b,_]}),{border:n,direction:r}=this.descriptions,a=r==="vertical",i=()=>{var g,m,b;return((b=(m=(g=this.cell)==null?void 0:g.children)==null?void 0:m.label)==null?void 0:b.call(m))||e.label},o=()=>{var g,m,b;return(b=(m=(g=this.cell)==null?void 0:g.children)==null?void 0:m.default)==null?void 0:b.call(m)},s=e.span,l=e.rowspan,u=e.align?`is-${e.align}`:"",c=e.labelAlign?`is-${e.labelAlign}`:u,d=e.className,f=e.labelClassName,h={width:ur(this.type==="label"?e.labelWidth??this.descriptions.labelWidth??e.width:e.width),minWidth:ur(e.minWidth)},v=Ee("descriptions");switch(this.type){case"label":return gt(ot(this.tag,{style:h,class:[v.e("cell"),v.e("label"),v.is("bordered-label",n),v.is("vertical-label",a),c,f],colSpan:a?s:1,rowspan:a?1:l},i()),t);case"content":return gt(ot(this.tag,{style:h,class:[v.e("cell"),v.e("content"),v.is("bordered-content",n),v.is("vertical-content",a),u,d],colSpan:a?s:s*2-1,rowspan:a?l*2-1:l},o()),t);default:{const g=i(),m={},b=ur(e.labelWidth??this.descriptions.labelWidth);return b&&(m.width=b,m.display="inline-block"),gt(ot("td",{style:h,class:[v.e("cell"),u],colSpan:s,rowspan:l},[wr(g)?void 0:ot("span",{style:m,class:[v.e("label"),f]},g),ot("span",{class:[v.e("content"),d]},o())]),t)}}}});const G1e={key:1};var U1e=ye({name:"ElDescriptionsRow",__name:"descriptions-row",props:W1e,setup(e){const t=Ge(MM,{});return(n,r)=>y(t).direction==="vertical"?(L(),K(ze,{key:0},[j("tr",null,[(L(!0),K(ze,null,Lt(e.row,(a,i)=>(L(),ve(y(Cp),{key:`tr1-${i}`,cell:a,tag:"th",type:"label"},null,8,["cell"]))),128))]),j("tr",null,[(L(!0),K(ze,null,Lt(e.row,(a,i)=>(L(),ve(y(Cp),{key:`tr2-${i}`,cell:a,tag:"td",type:"content"},null,8,["cell"]))),128))])],64)):(L(),K("tr",G1e,[(L(!0),K(ze,null,Lt(e.row,(a,i)=>(L(),K(ze,{key:`tr3-${i}`},[y(t).border?(L(),K(ze,{key:0},[V(y(Cp),{cell:a,tag:"td",type:"label"},null,8,["cell"]),V(y(Cp),{cell:a,tag:"td",type:"content"},null,8,["cell"])],64)):(L(),ve(y(Cp),{key:1,cell:a,tag:"td",type:"both"},null,8,["cell"]))],64))),128))]))}}),K1e=U1e,Y1e=ye({name:"ElDescriptions",__name:"description",props:z1e,setup(e){const t=e,n=Ee("descriptions"),r=Rr(),a=pr();Ft(MM,t);const i=M(()=>[n.b(),n.m(r.value)]),o=(l,u,c,d=!1)=>(l.props||(l.props={}),u>c&&(l.props.span=c),d&&(l.props.span=u),l),s=()=>{if(!a.default)return[];const l=Fi(a.default()).filter(v=>{var p;return((p=v==null?void 0:v.type)==null?void 0:p.name)===cU}),u=[];let c=[],d=t.column,f=0;const h=[];return l.forEach((v,p)=>{var _,w,S;const g=((_=v.props)==null?void 0:_.span)||1,m=((w=v.props)==null?void 0:w.rowspan)||1,b=u.length;if(h[b]||(h[b]=0),m>1)for(let x=1;x0&&(d-=h[b],h[b]=0),pd?d:g),p===l.length-1){const x=t.column-f%t.column;c.push(o(v,x,d,!0)),u.push(c);return}g(L(),K("div",{class:B(i.value)},[e.title||e.extra||l.$slots.title||l.$slots.extra?(L(),K("div",{key:0,class:B(y(n).e("header"))},[j("div",{class:B(y(n).e("title"))},[he(l.$slots,"title",{},()=>[Le(ce(e.title),1)])],2),j("div",{class:B(y(n).e("extra"))},[he(l.$slots,"extra",{},()=>[Le(ce(e.extra),1)])],2)],2)):fe("v-if",!0),j("div",{class:B(y(n).e("body"))},[j("table",{class:B([y(n).e("table"),y(n).is("bordered",e.border)])},[j("tbody",null,[(L(!0),K(ze,null,Lt(s(),(c,d)=>(L(),ve(K1e,{key:d,row:c},null,8,["row"]))),128))])],2)],2)],2))}}),j1e=Y1e;const q1e=xt(j1e,{DescriptionsItem:dU}),X1e=rr(dU),fU=Oe({center:Boolean,alignCenter:{type:Boolean,default:void 0},closeIcon:{type:An},draggable:{type:Boolean,default:void 0},overflow:{type:Boolean,default:void 0},fullscreen:Boolean,headerClass:String,bodyClass:String,footerClass:String,showClose:{type:Boolean,default:!0},title:{type:String,default:""},ariaLevel:{type:String,default:"2"}}),Z1e={close:()=>!0},hU=Oe({...fU,appendToBody:Boolean,appendTo:{type:oe([String,Object]),default:"body"},beforeClose:{type:oe(Function)},destroyOnClose:Boolean,closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},modal:{type:Boolean,default:!0},modalPenetrable:Boolean,openDelay:{type:Number,default:0},closeDelay:{type:Number,default:0},top:{type:String},modelValue:Boolean,modalClass:String,headerClass:String,bodyClass:String,footerClass:String,width:{type:[String,Number]},zIndex:{type:Number},trapFocus:Boolean,headerAriaLevel:{type:String,default:"2"},transition:{type:oe([String,Object]),default:void 0}}),vU={open:()=>!0,opened:()=>!0,close:()=>!0,closed:()=>!0,[mt]:e=>En(e),openAutoFocus:()=>!0,closeAutoFocus:()=>!0},J1e=Oe({mask:{type:Boolean,default:!0},customMaskEvent:Boolean,overlayClass:{type:oe([String,Array,Object])},zIndex:{type:oe([String,Number])}}),Q1e={click:e=>e instanceof MouseEvent},e_e="overlay";var t_e=ye({name:"ElOverlay",props:J1e,emits:Q1e,setup(e,{slots:t,emit:n}){const r=Ee(e_e),a=l=>{n("click",l)},{onClick:i,onMousedown:o,onMouseup:s}=XI(e.customMaskEvent?void 0:a);return()=>e.mask?V("div",{class:[r.b(),e.overlayClass],style:{zIndex:e.zIndex},onClick:i,onMousedown:o,onMouseup:s},[he(t,"default")],14,["onClick","onMouseup","onMousedown"]):ot("div",{class:e.overlayClass,style:{zIndex:e.zIndex,position:"fixed",top:"0px",right:"0px",bottom:"0px",left:"0px"}},[he(t,"default")])}});const PM=t_e,pU=Symbol("dialogInjectionKey"),VN="dialog-fade",n_e="ElDialog",gU=(e,t)=>{const n=Tt().emit,{nextZIndex:r}=Cy();let a="";const i=ba(),o=ba(),s=H(!1),l=H(!1),u=H(!1),c=H(e.zIndex??r()),d=H(!1);let f,h;const v=cu(),p=M(()=>{var Y;return((Y=v.value)==null?void 0:Y.namespace)??"el"}),g=M(()=>{var Y;return(Y=v.value)==null?void 0:Y.dialog}),m=M(()=>{const Y={},q=`--${p.value}-dialog`;if(!e.fullscreen){e.top&&(Y[`${q}-margin-top`]=e.top);const re=ur(e.width);re&&(Y[`${q}-width`]=re)}return Y}),b=M(()=>{var Y;return(e.draggable??((Y=g.value)==null?void 0:Y.draggable)??!1)&&!e.fullscreen}),_=M(()=>{var Y;return e.alignCenter??((Y=g.value)==null?void 0:Y.alignCenter)??!1}),w=M(()=>{var Y;return e.overflow??((Y=g.value)==null?void 0:Y.overflow)??!1}),S=M(()=>e.modalPenetrable&&!e.modal&&!e.fullscreen),x=M(()=>_.value?{display:"flex"}:{}),C=M(()=>{var re;const Y=e.transition??((re=g.value)==null?void 0:re.transition)??"dialog-fade",q={name:Y,onAfterEnter:T,onBeforeLeave:k,onAfterLeave:E};if(yt(Y)){const ee={...Y},se=(ne,de)=>le=>{Me(ne)?ne.forEach(J=>{et(J)&&J(le)}):et(ne)&&ne(le),de()};return ee.onAfterEnter=se(ee.onAfterEnter,T),ee.onBeforeLeave=se(ee.onBeforeLeave,k),ee.onAfterLeave=se(ee.onAfterLeave,E),ee.name||(ee.name=VN,wn(n_e,`transition.name is missing when using object syntax, fallback to '${VN}'`)),ee}return q});function T(){n("opened")}function E(){n("closed"),n(mt,!1),e.destroyOnClose&&(u.value=!1),d.value=!1}function k(){d.value=!0,n("close")}function A(){h==null||h(),f==null||f(),e.openDelay&&e.openDelay>0?{stop:f}=cv(()=>O(),e.openDelay):O()}function I(){f==null||f(),h==null||h(),e.closeDelay&&e.closeDelay>0?{stop:h}=cv(()=>$(),e.closeDelay):$()}function P(){function Y(q){q||(l.value=!0,s.value=!1)}e.beforeClose?e.beforeClose(Y):I()}function R(){e.closeOnClickModal&&P()}function O(){cn&&(s.value=!0)}function $(){s.value=!1}function N(){n("openAutoFocus")}function D(){n("closeAutoFocus")}function F(Y){var q;((q=Y.detail)==null?void 0:q.focusReason)==="pointer"&&Y.preventDefault()}e.lockScroll&&Bw(s);function W(){e.closeOnPressEscape&&P()}function z(){!s.value||!S.value||e.zIndex!==void 0||(c.value=r())}return _e(()=>e.zIndex,()=>{c.value=e.zIndex??r()}),_e(()=>e.modelValue,Y=>{Y?(l.value=!1,d.value=!1,A(),u.value=!0,c.value=e.zIndex??r(),Ue(()=>{n("open"),t.value&&(t.value.parentElement.scrollTop=0,t.value.parentElement.scrollLeft=0,t.value.scrollTop=0)})):s.value&&I()}),_e(()=>e.fullscreen,Y=>{t.value&&(Y?(a=t.value.style.transform,t.value.style.transform=""):t.value.style.transform=a)}),St(()=>{e.modelValue&&(s.value=!0,u.value=!0,A())}),{afterEnter:T,afterLeave:E,beforeLeave:k,handleClose:P,onModalClick:R,close:I,doClose:$,onOpenAutoFocus:N,onCloseAutoFocus:D,onCloseRequested:W,onFocusoutPrevented:F,bringToFront:z,titleId:i,bodyId:o,closed:l,style:m,overlayDialogStyle:x,rendered:u,visible:s,zIndex:c,transitionConfig:C,_draggable:b,_alignCenter:_,_overflow:w,closing:d,penetrable:S}},LM=(...e)=>t=>{e.forEach(n=>{n.value=t})},r_e=["aria-level"],a_e=["aria-label"],i_e=["id"];var o_e=ye({name:"ElDialogContent",__name:"dialog-content",props:fU,emits:Z1e,setup(e,{expose:t}){const{t:n}=Yt(),{Close:r}=lG,a=e,{dialogRef:i,headerRef:o,bodyId:s,ns:l,style:u}=Ge(pU),{focusTrapRef:c}=Ge(bG),d=LM(c,i),f=M(()=>!!a.draggable),{resetPosition:h,updatePosition:v,isDragging:p}=yW(i,o,f,M(()=>!!a.overflow)),g=M(()=>[l.b(),l.is("fullscreen",a.fullscreen),l.is("draggable",f.value),l.is("dragging",p.value),l.is("align-center",!!a.alignCenter),{[l.m("center")]:a.center}]);return t({resetPosition:h,updatePosition:v}),(m,b)=>(L(),K("div",{ref:y(d),class:B(g.value),style:tt(y(u)),tabindex:"-1"},[j("header",{ref_key:"headerRef",ref:o,class:B([y(l).e("header"),e.headerClass,{"show-close":e.showClose}])},[he(m.$slots,"header",{},()=>[j("span",{role:"heading","aria-level":e.ariaLevel,class:B(y(l).e("title"))},ce(e.title),11,r_e)]),e.showClose?(L(),K("button",{key:0,"aria-label":y(n)("el.dialog.close"),class:B(y(l).e("headerbtn")),type:"button",onClick:b[0]||(b[0]=_=>m.$emit("close"))},[V(y(Ze),{class:B(y(l).e("close"))},{default:G(()=>[(L(),ve(Et(e.closeIcon||y(r))))]),_:1},8,["class"])],10,a_e)):fe("v-if",!0)],2),j("div",{id:y(s),class:B([y(l).e("body"),e.bodyClass])},[he(m.$slots,"default")],10,i_e),m.$slots.footer?(L(),K("footer",{key:0,class:B([y(l).e("footer"),e.footerClass])},[he(m.$slots,"footer")],2)):fe("v-if",!0)],6))}}),s_e=o_e;const l_e=["aria-label","aria-labelledby","aria-describedby"];var u_e=ye({name:"ElDialog",inheritAttrs:!1,__name:"dialog",props:hU,emits:vU,setup(e,{expose:t}){const n=e,r=pr();Bs({scope:"el-dialog",from:"the title slot",replacement:"the header slot",version:"3.0.0",ref:"https://element-plus.org/en-US/component/dialog.html#slots"},M(()=>!!r.title));const a=Ee("dialog"),i=H(),o=H(),s=H(),{visible:l,titleId:u,bodyId:c,style:d,overlayDialogStyle:f,rendered:h,transitionConfig:v,zIndex:p,_draggable:g,_alignCenter:m,_overflow:b,penetrable:_,handleClose:w,onModalClick:S,onOpenAutoFocus:x,onCloseAutoFocus:C,onCloseRequested:T,onFocusoutPrevented:E,bringToFront:k,closing:A}=gU(n,i);Ft(pU,{dialogRef:i,headerRef:o,bodyId:c,ns:a,rendered:h,style:d});const I=XI(S);return t({visible:l,dialogContentRef:s,resetPosition:()=>{var R;(R=s.value)==null||R.resetPosition()},handleClose:w}),(R,O)=>(L(),ve(Bv,{to:e.appendTo,disabled:e.appendTo!=="body"?!1:!e.appendToBody},[V(ya,Mt(y(v),{persisted:""}),{default:G(()=>[gt(V(y(PM),{"custom-mask-event":"",mask:e.modal,"overlay-class":[e.modalClass??"",`${y(a).namespace.value}-modal-dialog`,y(a).is("penetrable",y(_))],"z-index":y(p)},{default:G(()=>[j("div",{role:"dialog","aria-modal":"true","aria-label":e.title||void 0,"aria-labelledby":e.title?void 0:y(u),"aria-describedby":y(c),class:B([`${y(a).namespace.value}-overlay-dialog`,y(a).is("closing",y(A))]),style:tt(y(f)),onClick:O[0]||(O[0]=(...$)=>y(I).onClick&&y(I).onClick(...$)),onMousedown:O[1]||(O[1]=(...$)=>y(I).onMousedown&&y(I).onMousedown(...$)),onMouseup:O[2]||(O[2]=(...$)=>y(I).onMouseup&&y(I).onMouseup(...$))},[V(y(Uv),{loop:"",trapped:y(l),"focus-start-el":"container",onFocusAfterTrapped:y(x),onFocusAfterReleased:y(C),onFocusoutPrevented:y(E),onReleaseRequested:y(T)},{default:G(()=>[y(h)?(L(),ve(s_e,Mt({key:0,ref_key:"dialogContentRef",ref:s},R.$attrs,{center:e.center,"align-center":y(m),"close-icon":e.closeIcon,draggable:y(g),overflow:y(b),fullscreen:e.fullscreen,"header-class":e.headerClass,"body-class":e.bodyClass,"footer-class":e.footerClass,"show-close":e.showClose,title:e.title,"aria-level":e.headerAriaLevel,onClose:y(w),onMousedown:y(k)}),ui({header:G(()=>[R.$slots.title?he(R.$slots,"title",{key:1}):he(R.$slots,"header",{key:0,close:y(w),titleId:y(u),titleClass:y(a).e("title")})]),default:G(()=>[he(R.$slots,"default")]),_:2},[R.$slots.footer?{name:"footer",fn:G(()=>[he(R.$slots,"footer")]),key:"0"}:void 0]),1040,["center","align-center","close-icon","draggable","overflow","fullscreen","header-class","body-class","footer-class","show-close","title","aria-level","onClose","onMousedown"])):fe("v-if",!0)]),_:3},8,["trapped","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])],46,l_e)]),_:3},8,["mask","overlay-class","z-index"]),[[ln,y(l)]])]),_:3},16)],8,["to","disabled"]))}}),c_e=u_e;const d_e=xt(c_e),f_e=Oe({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},contentPosition:{type:String,values:["left","center","right"],default:"center"},borderStyle:{type:oe(String),default:"solid"}});var h_e=ye({name:"ElDivider",__name:"divider",props:f_e,setup(e){const t=e,n=Ee("divider"),r=M(()=>n.cssVar({"border-style":t.borderStyle}));return(a,i)=>(L(),K("div",{class:B([y(n).b(),y(n).m(e.direction)]),style:tt(r.value),role:"separator"},[a.$slots.default&&e.direction!=="vertical"?(L(),K("div",{key:0,class:B([y(n).e("text"),y(n).is(e.contentPosition)])},[he(a.$slots,"default")],2)):fe("v-if",!0)],6))}}),v_e=h_e;const mU=xt(v_e),p_e=Oe({...hU,direction:{type:String,default:"rtl",values:["ltr","rtl","ttb","btt"]},resizable:Boolean,size:{type:[String,Number],default:"30%"},withHeader:{type:Boolean,default:!0},modalFade:{type:Boolean,default:!0},headerAriaLevel:{type:String,default:"2"}}),g_e={...vU,"resize-start":(e,t)=>e instanceof MouseEvent&&typeof t=="number",resize:(e,t)=>e instanceof MouseEvent&&typeof t=="number","resize-end":(e,t)=>e instanceof MouseEvent&&typeof t=="number"};function m_e(e,t,n){const{width:r,height:a}=NI(),i=M(()=>["ltr","rtl"].includes(e.direction)),o=M(()=>["ltr","ttb"].includes(e.direction)?1:-1),s=M(()=>i.value?r.value:a.value),l=M(()=>Nw(u.value+o.value*c.value,4,s.value)),u=H(0),c=H(0),d=H(!1),f=H(!1);let h=[],v=[];const p=()=>{var S;const w=(S=t.value)==null?void 0:S.closest('[aria-modal="true"]');return w?i.value?w.offsetWidth:w.offsetHeight:100};_e(()=>[e.size,e.resizable],()=>{f.value=!1,u.value=0,c.value=0,b()});const g=w=>{e.resizable&&(f.value||(u.value=p(),f.value=!0),h=[w.pageX,w.pageY],d.value=!0,n("resize-start",w,u.value),v.push(gn(window,"mouseup",b),gn(window,"mousemove",m)))},m=w=>{const{pageX:S,pageY:x}=w,C=S-h[0],T=x-h[1];c.value=i.value?C:T,n("resize",w,l.value)},b=w=>{d.value&&(h=[],u.value=l.value,c.value=0,d.value=!1,v.forEach(S=>S==null?void 0:S()),v=[],w&&n("resize-end",w,u.value))},_=gn(t,"mousedown",g);return yn(()=>{_(),b()}),{size:M(()=>f.value?`${l.value}px`:ur(e.size)),isResizing:d,isHorizontal:i}}const y_e=["aria-label","aria-labelledby","aria-describedby"],b_e=["id","aria-level"],__e=["aria-label"],w_e=["id"];var S_e=ye({name:"ElDrawer",inheritAttrs:!1,__name:"drawer",props:p_e,emits:g_e,setup(e,{expose:t,emit:n}){const r=e,a=n,i=pr();Bs({scope:"el-drawer",from:"the title slot",replacement:"the header slot",version:"3.0.0",ref:"https://element-plus.org/en-US/component/drawer.html#slots"},M(()=>!!i.title));const o=H(),s=H(),l=H(),u=Ee("drawer"),{t:c}=Yt(),{afterEnter:d,afterLeave:f,beforeLeave:h,visible:v,rendered:p,titleId:g,bodyId:m,zIndex:b,onModalClick:_,onOpenAutoFocus:w,onCloseAutoFocus:S,onFocusoutPrevented:x,onCloseRequested:C,handleClose:T}=gU(r,o),{isHorizontal:E,size:k,isResizing:A}=m_e(r,l,a),I=M(()=>r.modalPenetrable&&!r.modal);return t({handleClose:T}),(P,R)=>(L(),ve(Bv,{to:e.appendTo,disabled:e.appendTo!=="body"?!1:!e.appendToBody},[V(ya,{name:y(u).b("fade"),onAfterEnter:y(d),onAfterLeave:y(f),onBeforeLeave:y(h),persisted:""},{default:G(()=>[gt(V(y(PM),{mask:e.modal,"overlay-class":[y(u).is("drawer"),e.modalClass??"",`${y(u).namespace.value}-modal-drawer`,y(u).is("penetrable",I.value)],"z-index":y(b),onClick:y(_)},{default:G(()=>[V(y(Uv),{loop:"",trapped:y(v),"focus-trap-el":o.value,"focus-start-el":s.value,onFocusAfterTrapped:y(w),onFocusAfterReleased:y(S),onFocusoutPrevented:y(x),onReleaseRequested:y(C)},{default:G(()=>[j("div",Mt({ref_key:"drawerRef",ref:o,"aria-modal":"true","aria-label":e.title||void 0,"aria-labelledby":e.title?void 0:y(g),"aria-describedby":y(m)},P.$attrs,{class:[y(u).b(),e.direction,y(v)&&"open",y(u).is("dragging",y(A))],style:{[y(E)?"width":"height"]:y(k)},role:"dialog",onClick:R[1]||(R[1]=ut(()=>{},["stop"]))}),[j("span",{ref_key:"focusStartRef",ref:s,class:B(y(u).e("sr-focus")),tabindex:"-1"},null,2),e.withHeader?(L(),K("header",{key:0,class:B([y(u).e("header"),e.headerClass])},[P.$slots.title?he(P.$slots,"title",{key:1},()=>[fe(" DEPRECATED SLOT ")]):he(P.$slots,"header",{key:0,close:y(T),titleId:y(g),titleClass:y(u).e("title")},()=>[j("span",{id:y(g),role:"heading","aria-level":e.headerAriaLevel,class:B(y(u).e("title"))},ce(e.title),11,b_e)]),e.showClose?(L(),K("button",{key:2,"aria-label":y(c)("el.drawer.close"),class:B(y(u).e("close-btn")),type:"button",onClick:R[0]||(R[0]=(...O)=>y(T)&&y(T)(...O))},[V(y(Ze),{class:B(y(u).e("close"))},{default:G(()=>[V(y(To))]),_:1},8,["class"])],10,__e)):fe("v-if",!0)],2)):fe("v-if",!0),y(p)?(L(),K("div",{key:1,id:y(m),class:B([y(u).e("body"),e.bodyClass])},[he(P.$slots,"default")],10,w_e)):fe("v-if",!0),P.$slots.footer?(L(),K("div",{key:2,class:B([y(u).e("footer"),e.footerClass])},[he(P.$slots,"footer")],2)):fe("v-if",!0),e.resizable?(L(),K("div",{key:3,ref_key:"draggerRef",ref:l,style:tt({zIndex:y(b)}),class:B(y(u).e("dragger"))},null,6)):fe("v-if",!0)],16,y_e)]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])]),_:3},8,["mask","overlay-class","z-index","onClick"]),[[ln,y(v)]])]),_:3},8,["name","onAfterEnter","onAfterLeave","onBeforeLeave"])],8,["to","disabled"]))}}),x_e=S_e;const C_e=xt(x_e),Yb=Oe({trigger:{...Ws.trigger,type:oe([String,Array])},triggerKeys:{type:oe(Array),default:()=>[De.enter,De.numpadEnter,De.space,De.down]},virtualTriggering:Ws.virtualTriggering,virtualRef:Ws.virtualRef,effect:{...Tn.effect,default:"light"},type:{type:oe(String)},placement:{type:oe(String),default:"bottom"},popperOptions:{type:oe(Object),default:()=>({})},id:String,size:{type:String,default:""},splitButton:Boolean,hideOnClick:{type:Boolean,default:!0},loop:{type:Boolean,default:!0},showArrow:{type:Boolean,default:!0},showTimeout:{type:Number,default:150},hideTimeout:{type:Number,default:150},tabindex:{type:oe([Number,String]),default:0},maxHeight:{type:oe([Number,String]),default:""},popperClass:Tn.popperClass,popperStyle:Tn.popperStyle,disabled:Boolean,role:{type:String,values:uG,default:"menu"},buttonProps:{type:oe(Object)},teleported:Tn.teleported,appendTo:Tn.appendTo,persistent:{type:Boolean,default:!0}}),yU=Oe({command:{type:[Object,String,Number],default:()=>({})},disabled:Boolean,divided:Boolean,textValue:String,icon:{type:An}}),T_e=Oe({onKeydown:{type:oe(Function)}}),tS=Symbol("elDropdown"),bU="elDropdown";var E_e=ye({inheritAttrs:!1});function k_e(e,t,n,r,a,i){return he(e.$slots,"default")}var A_e=Gr(E_e,[["render",k_e]]),I_e=ye({name:"ElCollectionItem",inheritAttrs:!1});function M_e(e,t,n,r,a,i){return he(e.$slots,"default")}var P_e=Gr(I_e,[["render",M_e]]);const _U="data-el-collection-item",L_e=e=>{const t=`El${e}Collection`,n=`${t}Item`,r=Symbol(t),a=Symbol(n);return{COLLECTION_INJECTION_KEY:r,COLLECTION_ITEM_INJECTION_KEY:a,ElCollection:Object.assign({},A_e,{name:t,setup(){const i=H(),o=new Map;Ft(r,{itemMap:o,getItems:()=>{const l=y(i);if(!l)return[];const u=Array.from(l.querySelectorAll(`[${_U}]`));return[...o.values()].sort((c,d)=>u.indexOf(c.ref)-u.indexOf(d.ref))},collectionRef:i})}}),ElCollectionItem:Object.assign({},P_e,{name:n,setup(i,{attrs:o}){const s=H(),l=Ge(r,void 0);Ft(a,{collectionItemRef:s}),St(()=>{const u=y(s);u&&l.itemMap.set(u,{ref:u,...o})}),yn(()=>{const u=y(s);l.itemMap.delete(u)})}})}},D_e=Oe({style:{type:oe([String,Array,Object,Boolean]),default:void 0},currentTabId:{type:oe(String)},defaultCurrentTabId:String,loop:Boolean,dir:{type:String,values:["ltr","rtl"],default:"ltr"},orientation:{type:oe(String)},onBlur:Function,onFocus:Function,onMousedown:Function}),{ElCollection:R_e,ElCollectionItem:O_e,COLLECTION_INJECTION_KEY:wU,COLLECTION_ITEM_INJECTION_KEY:N_e}=L_e("RovingFocusGroup"),DM=Symbol("elRovingFocusGroup"),SU=Symbol("elRovingFocusGroupItem"),V_e={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"},$_e=(e,t)=>e,B_e=(e,t,n)=>{const r=$_e(Mn(e));return V_e[r]},F_e=(e,t)=>e.map((n,r)=>e[(r+t)%e.length]),$N=e=>{const{activeElement:t}=document;for(const n of e)if(n===t||(n.focus(),t!==document.activeElement))return},BN="currentTabIdChange",FN="rovingFocusGroup.entryFocus",z_e={bubbles:!1,cancelable:!0};var H_e=ye({name:"ElRovingFocusGroupImpl",inheritAttrs:!1,props:D_e,emits:[BN,"entryFocus"],setup(e,{emit:t}){const n=H((e.currentTabId||e.defaultCurrentTabId)??null),r=H(!1),a=H(!1),i=H(),{getItems:o}=Ge(wU,void 0),s=M(()=>[{outline:"none"},e.style]),l=p=>{t(BN,p)},u=()=>{r.value=!0},c=Yr(p=>{var g;(g=e.onMousedown)==null||g.call(e,p)},()=>{a.value=!0}),d=Yr(p=>{var g;(g=e.onFocus)==null||g.call(e,p)},p=>{const g=!y(a),{target:m,currentTarget:b}=p;if(m===b&&g&&!y(r)){const _=new Event(FN,z_e);if(b==null||b.dispatchEvent(_),!_.defaultPrevented){const w=o().filter(S=>S.focusable);$N([w.find(S=>S.active),w.find(S=>S.id===y(n)),...w].filter(Boolean).map(S=>S.ref))}}a.value=!1}),f=Yr(p=>{var g;(g=e.onBlur)==null||g.call(e,p)},()=>{r.value=!1}),h=(...p)=>{t("entryFocus",...p)},v=p=>{const g=B_e(p);if(g){p.preventDefault();let m=o().filter(b=>b.focusable).map(b=>b.ref);switch(g){case"last":m.reverse();break;case"prev":case"next":{g==="prev"&&m.reverse();const b=m.indexOf(p.currentTarget);m=e.loop?F_e(m,b+1):m.slice(b+1);break}}Ue(()=>{$N(m)})}};Ft(DM,{currentTabbedId:rv(n),loop:xn(e,"loop"),tabIndex:M(()=>y(r)?-1:0),rovingFocusGroupRef:i,rovingFocusGroupRootStyle:s,orientation:xn(e,"orientation"),dir:xn(e,"dir"),onItemFocus:l,onItemShiftTab:u,onBlur:f,onFocus:d,onMousedown:c,onKeydown:v}),_e(()=>e.currentTabId,p=>{n.value=p??null}),gn(i,FN,h)}});function W_e(e,t,n,r,a,i){return he(e.$slots,"default")}var G_e=Gr(H_e,[["render",W_e]]),U_e=ye({name:"ElRovingFocusGroup",components:{ElFocusGroupCollection:R_e,ElRovingFocusGroupImpl:G_e}});function K_e(e,t,n,r,a,i){const o=Ie("el-roving-focus-group-impl"),s=Ie("el-focus-group-collection");return L(),ve(s,null,{default:G(()=>[V(o,Dl(Rl(e.$attrs)),{default:G(()=>[he(e.$slots,"default")]),_:3},16)]),_:3})}var Y_e=Gr(U_e,[["render",K_e]]),j_e=ye({components:{ElRovingFocusCollectionItem:O_e},props:{focusable:{type:Boolean,default:!0},active:Boolean},emits:["mousedown","focus","keydown"],setup(e,{emit:t}){const{currentTabbedId:n,onItemFocus:r,onItemShiftTab:a,onKeydown:i}=Ge(DM,void 0),o=ba(),s=H(),l=Yr(f=>{t("mousedown",f)},f=>{e.focusable?r(y(o)):f.preventDefault()}),u=Yr(f=>{t("focus",f)},()=>{r(y(o))}),c=Yr(f=>{t("keydown",f)},f=>{const{shiftKey:h,target:v,currentTarget:p}=f;if(Mn(f)===De.tab&&h){a();return}v===p&&i(f)}),d=M(()=>n.value===y(o));return Ft(SU,{rovingFocusGroupItemRef:s,tabIndex:M(()=>y(d)?0:-1),handleMousedown:l,handleFocus:u,handleKeydown:c}),{id:o,handleKeydown:c,handleFocus:u,handleMousedown:l}}});function q_e(e,t,n,r,a,i){const o=Ie("el-roving-focus-collection-item");return L(),ve(o,{id:e.id,focusable:e.focusable,active:e.active},{default:G(()=>[he(e.$slots,"default")]),_:3},8,["id","focusable","active"])}var X_e=Gr(j_e,[["render",q_e]]),Z_e=Y_e;const{ButtonGroup:J_e}=Xr;var Q_e=ye({name:"ElDropdown",components:{ElButton:Xr,ElButtonGroup:J_e,ElScrollbar:ts,ElTooltip:ua,ElRovingFocusGroup:Z_e,ElOnlyChild:hG,ElIcon:Ze,ArrowDown:ll},props:Yb,emits:["visible-change","click","command"],setup(e,{emit:t}){const n=Tt(),r=Ee("dropdown"),{t:a}=Yt(),i=H(),o=H(),s=H(),l=H(),u=H(null),c=H(null),d=H(!1),f=M(()=>({maxHeight:ur(e.maxHeight)})),h=M(()=>[r.m(w.value)]),v=M(()=>jr(e.trigger)),p=ba().value,g=M(()=>e.id||p);function m(){var P;(P=s.value)==null||P.onClose(void 0,0)}function b(){var P;(P=s.value)==null||P.onClose()}function _(){var P;(P=s.value)==null||P.onOpen()}const w=Rr();function S(...P){t("command",...P)}function x(){}function C(){const P=y(l);v.value.includes("hover")&&(P==null||P.focus({preventScroll:!0})),c.value=null}function T(P){c.value=P}function E(){t("visible-change",!0)}function k(P){var R;d.value=(P==null?void 0:P.type)==="keydown",(R=l.value)==null||R.focus()}function A(){t("visible-change",!1)}return Ft(tS,{contentRef:l,role:M(()=>e.role),triggerId:g,isUsingKeyboard:d,onItemEnter:x,onItemLeave:C,handleClose:b}),Ft(bU,{instance:n,dropdownSize:w,handleClick:m,commandHandler:S,trigger:xn(e,"trigger"),hideOnClick:xn(e,"hideOnClick")}),{t:a,ns:r,scrollbar:u,wrapStyle:f,dropdownTriggerKls:h,dropdownSize:w,triggerId:g,currentTabId:c,handleCurrentTabIdChange:T,handlerMainButtonClick:P=>{t("click",P)},handleClose:b,handleOpen:_,handleBeforeShowTooltip:E,handleShowTooltip:k,handleBeforeHideTooltip:A,popperRef:s,contentRef:l,triggeringElementRef:i,referenceElementRef:o}}});function ewe(e,t,n,r,a,i){const o=Ie("el-roving-focus-group"),s=Ie("el-scrollbar"),l=Ie("el-only-child"),u=Ie("el-tooltip"),c=Ie("el-button"),d=Ie("arrow-down"),f=Ie("el-icon"),h=Ie("el-button-group");return L(),K("div",{class:B([e.ns.b(),e.ns.is("disabled",e.disabled)])},[V(u,{ref:"popperRef",role:e.role,effect:e.effect,"fallback-placements":["bottom","top"],"popper-options":e.popperOptions,"gpu-acceleration":!1,placement:e.placement,"popper-class":[e.ns.e("popper"),e.popperClass],"popper-style":e.popperStyle,trigger:e.trigger,"trigger-keys":e.triggerKeys,"trigger-target-el":e.contentRef,"show-arrow":e.showArrow,"show-after":e.trigger==="hover"?e.showTimeout:0,"hide-after":e.trigger==="hover"?e.hideTimeout:0,"virtual-ref":e.virtualRef??e.triggeringElementRef,"virtual-triggering":e.virtualTriggering||e.splitButton,disabled:e.disabled,transition:`${e.ns.namespace.value}-zoom-in-top`,teleported:e.teleported,"append-to":e.appendTo,pure:"","focus-on-target":"",persistent:e.persistent,onBeforeShow:e.handleBeforeShowTooltip,onShow:e.handleShowTooltip,onBeforeHide:e.handleBeforeHideTooltip},ui({content:G(()=>[V(s,{ref:"scrollbar","wrap-style":e.wrapStyle,tag:"div","view-class":e.ns.e("list")},{default:G(()=>[V(o,{loop:e.loop,"current-tab-id":e.currentTabId,orientation:"horizontal",onCurrentTabIdChange:e.handleCurrentTabIdChange},{default:G(()=>[he(e.$slots,"dropdown")]),_:3},8,["loop","current-tab-id","onCurrentTabIdChange"])]),_:3},8,["wrap-style","view-class"])]),_:2},[e.splitButton?void 0:{name:"default",fn:G(()=>[V(l,{id:e.triggerId,ref:"triggeringElementRef",role:"button",tabindex:e.tabindex},{default:G(()=>[he(e.$slots,"default")]),_:3},8,["id","tabindex"])]),key:"0"}]),1032,["role","effect","popper-options","placement","popper-class","popper-style","trigger","trigger-keys","trigger-target-el","show-arrow","show-after","hide-after","virtual-ref","virtual-triggering","disabled","transition","teleported","append-to","persistent","onBeforeShow","onShow","onBeforeHide"]),e.splitButton?(L(),ve(h,{key:0},{default:G(()=>[V(c,Mt({ref:"referenceElementRef"},e.buttonProps,{size:e.dropdownSize,type:e.type,disabled:e.disabled,tabindex:e.tabindex,onClick:e.handlerMainButtonClick}),{default:G(()=>[he(e.$slots,"default")]),_:3},16,["size","type","disabled","tabindex","onClick"]),V(c,Mt({id:e.triggerId,ref:"triggeringElementRef"},e.buttonProps,{role:"button",size:e.dropdownSize,type:e.type,class:e.ns.e("caret-button"),disabled:e.disabled,tabindex:e.tabindex,"aria-label":e.t("el.dropdown.toggleDropdown")}),{default:G(()=>[V(f,{class:B(e.ns.e("icon"))},{default:G(()=>[V(d)]),_:1},8,["class"])]),_:1},16,["id","size","type","class","disabled","tabindex","aria-label"])]),_:3})):fe("v-if",!0)],2)}var twe=Gr(Q_e,[["render",ewe]]),nwe=ye({name:"DropdownItemImpl",components:{ElIcon:Ze},props:yU,emits:["pointermove","pointerleave","click","clickimpl"],setup(e,{emit:t}){const n=Ee("dropdown"),{role:r}=Ge(tS,void 0),{collectionItemRef:a}=Ge(N_e,void 0),{rovingFocusGroupItemRef:i,tabIndex:o,handleFocus:s,handleKeydown:l,handleMousedown:u}=Ge(SU,void 0),c=LM(a,i),d=M(()=>r.value==="menu"?"menuitem":r.value==="navigation"?"link":"button"),f=Yr(h=>{const v=Mn(h);if([De.enter,De.numpadEnter,De.space].includes(v))return h.preventDefault(),h.stopImmediatePropagation(),t("clickimpl",h),!0},l);return{ns:n,itemRef:c,dataset:{[_U]:""},role:d,tabIndex:o,handleFocus:s,handleKeydown:f,handleMousedown:u}}});const rwe=["aria-disabled","tabindex","role"];function awe(e,t,n,r,a,i){const o=Ie("el-icon");return L(),K(ze,null,[e.divided?(L(),K("li",{key:0,role:"separator",class:B(e.ns.bem("menu","item","divided"))},null,2)):fe("v-if",!0),j("li",Mt({ref:e.itemRef},{...e.dataset,...e.$attrs},{"aria-disabled":e.disabled,class:[e.ns.be("menu","item"),e.ns.is("disabled",e.disabled)],tabindex:e.tabIndex,role:e.role,onClick:t[0]||(t[0]=s=>e.$emit("clickimpl",s)),onFocus:t[1]||(t[1]=(...s)=>e.handleFocus&&e.handleFocus(...s)),onKeydown:t[2]||(t[2]=ut((...s)=>e.handleKeydown&&e.handleKeydown(...s),["self"])),onMousedown:t[3]||(t[3]=(...s)=>e.handleMousedown&&e.handleMousedown(...s)),onPointermove:t[4]||(t[4]=s=>e.$emit("pointermove",s)),onPointerleave:t[5]||(t[5]=s=>e.$emit("pointerleave",s))}),[e.icon||e.$slots.icon?(L(),ve(o,{key:0},{default:G(()=>[he(e.$slots,"icon",{},()=>[(L(),ve(Et(e.icon)))])]),_:3})):fe("v-if",!0),he(e.$slots,"default")],16,rwe)],64)}var iwe=Gr(nwe,[["render",awe]]);const xU=()=>{const e=Ge(bU,{});return{elDropdown:e,_elDropdownSize:M(()=>e==null?void 0:e.dropdownSize)}};var owe=ye({name:"ElDropdownItem",components:{ElRovingFocusItem:X_e,ElDropdownItemImpl:iwe},inheritAttrs:!1,props:yU,emits:["pointermove","pointerleave","click"],setup(e,{emit:t,attrs:n}){const{elDropdown:r}=xU(),a=Tt(),{onItemEnter:i,onItemLeave:o}=Ge(tS,void 0),s=Yr(u=>(t("pointermove",u),u.defaultPrevented),aO(u=>{if(e.disabled){o(u);return}const c=u.currentTarget;c===document.activeElement||c.contains(document.activeElement)||(i(u),u.defaultPrevented||c==null||c.focus({preventScroll:!0}))})),l=Yr(u=>(t("pointerleave",u),u.defaultPrevented),aO(o));return{handleClick:Yr(u=>{if(!e.disabled)return t("click",u),u.type!=="keydown"&&u.defaultPrevented},u=>{var c,d,f;if(e.disabled){u.stopImmediatePropagation();return}(c=r==null?void 0:r.hideOnClick)!=null&&c.value&&((d=r.handleClick)==null||d.call(r)),(f=r.commandHandler)==null||f.call(r,e.command,a,u)}),handlePointerMove:s,handlePointerLeave:l,propsAndAttrs:M(()=>({...e,...n}))}}});function swe(e,t,n,r,a,i){const o=Ie("el-dropdown-item-impl"),s=Ie("el-roving-focus-item");return L(),ve(s,{focusable:!e.disabled},{default:G(()=>[V(o,Mt(e.propsAndAttrs,{onPointerleave:e.handlePointerLeave,onPointermove:e.handlePointerMove,onClickimpl:e.handleClick}),ui({default:G(()=>[he(e.$slots,"default")]),_:2},[e.$slots.icon?{name:"icon",fn:G(()=>[he(e.$slots,"icon")]),key:"0"}:void 0]),1040,["onPointerleave","onPointermove","onClickimpl"])]),_:3},8,["focusable"])}var CU=Gr(owe,[["render",swe]]),lwe=ye({name:"ElDropdownMenu",props:T_e,setup(e){const t=Ee("dropdown"),{_elDropdownSize:n}=xU(),r=n.value,{contentRef:a,role:i,triggerId:o,isUsingKeyboard:s,handleClose:l}=Ge(tS,void 0),{rovingFocusGroupRef:u,rovingFocusGroupRootStyle:c,onBlur:d,onFocus:f,onKeydown:h,onMousedown:v}=Ge(DM,void 0),{collectionRef:p}=Ge(wU,void 0),g=M(()=>[t.b("menu"),t.bm("menu",r==null?void 0:r.value)]),m=LM(a,u,p),b=Yr(w=>{var S;(S=e.onKeydown)==null||S.call(e,w)},w=>{const{currentTarget:S,target:x}=w,C=Mn(w);if(S.contains(x),De.tab===C)return l();h(w)});function _(w){s.value&&f(w)}return{size:r,rovingFocusGroupRootStyle:c,dropdownKls:g,role:i,triggerId:o,dropdownListWrapperRef:m,handleKeydown:b,onBlur:d,handleFocus:_,onMousedown:v}}});const uwe=["role","aria-labelledby"];function cwe(e,t,n,r,a,i){return L(),K("ul",{ref:e.dropdownListWrapperRef,class:B(e.dropdownKls),style:tt(e.rovingFocusGroupRootStyle),tabindex:-1,role:e.role,"aria-labelledby":e.triggerId,onFocusin:t[0]||(t[0]=(...o)=>e.handleFocus&&e.handleFocus(...o)),onFocusout:t[1]||(t[1]=(...o)=>e.onBlur&&e.onBlur(...o)),onKeydown:t[2]||(t[2]=ut((...o)=>e.handleKeydown&&e.handleKeydown(...o),["self"])),onMousedown:t[3]||(t[3]=ut((...o)=>e.onMousedown&&e.onMousedown(...o),["self"]))},[he(e.$slots,"default")],46,uwe)}var TU=Gr(lwe,[["render",cwe]]);const dwe=xt(twe,{DropdownItem:CU,DropdownMenu:TU}),fwe=rr(CU),hwe=rr(TU),vwe=Oe({image:{type:String,default:""},imageSize:Number,description:{type:String,default:""}}),pwe={viewBox:"0 0 79 86",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},gwe=["id"],mwe=["stop-color"],ywe=["stop-color"],bwe=["id"],_we=["stop-color"],wwe=["stop-color"],Swe=["id"],xwe={stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},Cwe={transform:"translate(-1268.000000, -535.000000)"},Twe={transform:"translate(1268.000000, 535.000000)"},Ewe=["fill"],kwe=["fill"],Awe={transform:"translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)"},Iwe=["fill"],Mwe=["fill"],Pwe=["fill"],Lwe=["fill"],Dwe=["fill"],Rwe={transform:"translate(53.000000, 45.000000)"},Owe=["fill","xlink:href"],Nwe=["fill","mask"],Vwe=["fill"];var $we=ye({name:"ImgEmpty",__name:"img-empty",setup(e){const t=Ee("empty"),n=ba();return(r,a)=>(L(),K("svg",pwe,[j("defs",null,[j("linearGradient",{id:`linearGradient-1-${y(n)}`,x1:"38.8503086%",y1:"0%",x2:"61.1496914%",y2:"100%"},[j("stop",{"stop-color":`var(${y(t).cssVarBlockName("fill-color-1")})`,offset:"0%"},null,8,mwe),j("stop",{"stop-color":`var(${y(t).cssVarBlockName("fill-color-4")})`,offset:"100%"},null,8,ywe)],8,gwe),j("linearGradient",{id:`linearGradient-2-${y(n)}`,x1:"0%",y1:"9.5%",x2:"100%",y2:"90.5%"},[j("stop",{"stop-color":`var(${y(t).cssVarBlockName("fill-color-1")})`,offset:"0%"},null,8,_we),j("stop",{"stop-color":`var(${y(t).cssVarBlockName("fill-color-6")})`,offset:"100%"},null,8,wwe)],8,bwe),j("rect",{id:`path-3-${y(n)}`,x:"0",y:"0",width:"17",height:"36"},null,8,Swe)]),j("g",xwe,[j("g",Cwe,[j("g",Twe,[j("path",{d:"M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z",fill:`var(${y(t).cssVarBlockName("fill-color-3")})`},null,8,Ewe),j("polygon",{fill:`var(${y(t).cssVarBlockName("fill-color-7")})`,transform:"translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) ",points:"13 58 53 58 42 45 2 45"},null,8,kwe),j("g",Awe,[j("polygon",{fill:`var(${y(t).cssVarBlockName("fill-color-7")})`,transform:"translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) ",points:"2.84078316e-14 3 18 3 23 7 5 7"},null,8,Iwe),j("polygon",{fill:`var(${y(t).cssVarBlockName("fill-color-5")})`,points:"-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43"},null,8,Mwe),j("rect",{fill:`url(#linearGradient-1-${y(n)})`,transform:"translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) ",x:"38",y:"7",width:"17",height:"36"},null,8,Pwe),j("polygon",{fill:`var(${y(t).cssVarBlockName("fill-color-2")})`,transform:"translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) ",points:"24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12"},null,8,Lwe)]),j("rect",{fill:`url(#linearGradient-2-${y(n)})`,x:"13",y:"45",width:"40",height:"36"},null,8,Dwe),j("g",Rwe,[j("use",{fill:`var(${y(t).cssVarBlockName("fill-color-8")})`,transform:"translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) ","xlink:href":`#path-3-${y(n)}`},null,8,Owe),j("polygon",{fill:`var(${y(t).cssVarBlockName("fill-color-9")})`,mask:`url(#mask-4-${y(n)})`,transform:"translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) ",points:"7 0 24 0 20 18 7 16.5"},null,8,Nwe)]),j("polygon",{fill:`var(${y(t).cssVarBlockName("fill-color-2")})`,transform:"translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) ",points:"62 45 79 45 70 58 53 58"},null,8,Vwe)])])])]))}}),Bwe=$we;const Fwe=["src"],zwe={key:1};var Hwe=ye({name:"ElEmpty",__name:"empty",props:vwe,setup(e){const t=e,{t:n}=Yt(),r=Ee("empty"),a=M(()=>t.description||n("el.table.emptyText")),i=M(()=>({width:ur(t.imageSize)}));return(o,s)=>(L(),K("div",{class:B(y(r).b())},[j("div",{class:B(y(r).e("image")),style:tt(i.value)},[e.image?(L(),K("img",{key:0,src:e.image,ondragstart:"return false"},null,8,Fwe)):he(o.$slots,"image",{key:1},()=>[V(Bwe)])],6),j("div",{class:B(y(r).e("description"))},[o.$slots.description?he(o.$slots,"description",{key:0}):(L(),K("p",zwe,ce(a.value),1))],2),o.$slots.default?(L(),K("div",{key:0,class:B(y(r).e("bottom"))},[he(o.$slots,"default")],2)):fe("v-if",!0)],2))}}),Wwe=Hwe;const EU=xt(Wwe),Gwe=Oe({hideOnClickModal:Boolean,src:{type:String,default:""},fit:{type:String,values:["","contain","cover","fill","none","scale-down"],default:""},loading:{type:String,values:["eager","lazy"]},lazy:Boolean,scrollContainer:{type:oe([String,Object])},previewSrcList:{type:oe(Array),default:()=>sr([])},previewTeleported:Boolean,zIndex:{type:Number},initialIndex:{type:Number,default:0},infinite:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},zoomRate:{type:Number,default:1.2},scale:{type:Number,default:1},minScale:{type:Number,default:.2},maxScale:{type:Number,default:7},showProgress:Boolean,crossorigin:{type:oe(String)}}),Uwe={load:e=>e instanceof Event,error:e=>e instanceof Event,switch:e=>Je(e),close:()=>!0,show:()=>!0},Kwe=Oe({urlList:{type:oe(Array),default:()=>sr([])},zIndex:{type:Number},initialIndex:{type:Number,default:0},infinite:{type:Boolean,default:!0},hideOnClickModal:Boolean,teleported:Boolean,closeOnPressEscape:{type:Boolean,default:!0},zoomRate:{type:Number,default:1.2},scale:{type:Number,default:1},minScale:{type:Number,default:.2},maxScale:{type:Number,default:7},showProgress:Boolean,crossorigin:{type:oe(String)}}),Ywe={close:()=>!0,error:e=>e instanceof Event,switch:e=>Je(e),rotate:e=>Je(e)},jwe=["src","crossorigin"];var qwe=ye({name:"ElImageViewer",__name:"image-viewer",props:Kwe,emits:Ywe,setup(e,{expose:t,emit:n}){const r={CONTAIN:{name:"contain",icon:$s(Tde)},ORIGINAL:{name:"original",icon:$s(Jde)}},a=e,i=n;let o;const{t:s}=Yt(),l=Ee("image-viewer"),{nextZIndex:u}=Cy(),c=H(),d=H(),f=Xz(),h=M(()=>{const{scale:le,minScale:J,maxScale:Z}=a;return Nw(le,J,Z)}),v=H(!0),p=H(!1),g=H(!1),m=H(a.initialIndex),b=Ut(r.CONTAIN),_=H({scale:h.value,deg:0,offsetX:0,offsetY:0,enableTransition:!1}),w=H(a.zIndex??u());Bw(g,{ns:l});const S=M(()=>{const{urlList:le}=a;return le.length<=1}),x=M(()=>m.value===0),C=M(()=>m.value===a.urlList.length-1),T=M(()=>a.urlList[m.value]),E=M(()=>[l.e("btn"),l.e("prev"),l.is("disabled",!a.infinite&&x.value)]),k=M(()=>[l.e("btn"),l.e("next"),l.is("disabled",!a.infinite&&C.value)]),A=M(()=>{const{scale:le,deg:J,offsetX:Z,offsetY:U,enableTransition:te}=_.value;let Q=Z/le,ue=U/le;const pe=J*Math.PI/180,me=Math.cos(pe),Pe=Math.sin(pe);Q=Q*me+ue*Pe,ue=ue*me-Z/le*Pe;const Ne={transform:`scale(${le}) rotate(${J}deg) translate(${Q}px, ${ue}px)`,transition:te?"transform .3s":""};return b.value.name===r.CONTAIN.name&&(Ne.maxWidth=Ne.maxHeight="100%"),Ne}),I=M(()=>`${m.value+1} / ${a.urlList.length}`);function P(){O(),o==null||o(),g.value=!1,i("close")}function R(){const le=Ku(Z=>{switch(Mn(Z)){case De.esc:a.closeOnPressEscape&&P();break;case De.space:z();break;case De.left:q();break;case De.up:ee("zoomIn");break;case De.right:re();break;case De.down:ee("zoomOut");break}}),J=Ku(Z=>{ee((Z.deltaY||Z.deltaX)<0?"zoomIn":"zoomOut",{zoomRate:a.zoomRate,enableTransition:!1})});f.run(()=>{gn(document,"keydown",le),gn(c,"wheel",J)})}function O(){f.stop()}function $(){v.value=!1}function N(le){p.value=!0,v.value=!1,i("error",le),le.target.alt=s("el.image.error")}function D(le){if(v.value||le.button!==0||!c.value)return;_.value.enableTransition=!1;const{offsetX:J,offsetY:Z}=_.value,U=le.pageX,te=le.pageY,Q=Ku(me=>{_.value={..._.value,offsetX:J+me.pageX-U,offsetY:Z+me.pageY-te}}),ue=gn(document,"mousemove",Q),pe=gn(document,"mouseup",()=>{ue(),pe()});le.preventDefault()}function F(le){if(v.value||!c.value||le.touches.length!==1)return;_.value.enableTransition=!1;const{offsetX:J,offsetY:Z}=_.value,{pageX:U,pageY:te}=le.touches[0],Q=Ku(me=>{const Pe=me.touches[0];_.value={..._.value,offsetX:J+Pe.pageX-U,offsetY:Z+Pe.pageY-te}}),ue=gn(document,"touchmove",Q),pe=gn(document,"touchend",()=>{ue(),pe()});le.preventDefault()}function W(){_.value={scale:h.value,deg:0,offsetX:0,offsetY:0,enableTransition:!1}}function z(){if(v.value||p.value)return;const le=dm(r),J=Object.values(r),Z=b.value.name;b.value=r[le[(J.findIndex(U=>U.name===Z)+1)%le.length]],W()}function Y(le){p.value=!1;const J=a.urlList.length;m.value=(le+J)%J}function q(){x.value&&!a.infinite||Y(m.value-1)}function re(){C.value&&!a.infinite||Y(m.value+1)}function ee(le,J={}){if(v.value||p.value)return;const{minScale:Z,maxScale:U}=a,{zoomRate:te,rotateDeg:Q,enableTransition:ue}={zoomRate:a.zoomRate,rotateDeg:90,enableTransition:!0,...J};switch(le){case"zoomOut":_.value.scale>Z&&(_.value.scale=Number.parseFloat((_.value.scale/te).toFixed(3)));break;case"zoomIn":_.value.scale0)return le.preventDefault(),!1}}return _e(()=>h.value,le=>{_.value.scale=le}),_e(T,()=>{Ue(()=>{var le;(le=d.value)!=null&&le.complete||(v.value=!0)})}),_e(m,le=>{W(),i("switch",le)}),St(()=>{g.value=!0,R(),o=gn("wheel",de,{passive:!1})}),t({setActiveItem:Y}),(le,J)=>(L(),ve(Bv,{to:"body",disabled:!e.teleported},[V(ya,{name:"viewer-fade",appear:""},{default:G(()=>[j("div",{ref_key:"wrapper",ref:c,tabindex:-1,class:B(y(l).e("wrapper")),style:tt({zIndex:w.value})},[V(y(Uv),{loop:"",trapped:"","focus-trap-el":c.value,"focus-start-el":"container",onFocusoutPrevented:se,onReleaseRequested:ne},{default:G(()=>[j("div",{class:B(y(l).e("mask")),onClick:J[0]||(J[0]=ut(Z=>e.hideOnClickModal&&P(),["self"]))},null,2),fe(" CLOSE "),j("span",{class:B([y(l).e("btn"),y(l).e("close")]),onClick:P},[V(y(Ze),null,{default:G(()=>[V(y(To))]),_:1})],2),fe(" ARROW "),S.value?fe("v-if",!0):(L(),K(ze,{key:0},[j("span",{class:B(E.value),onClick:q},[V(y(Ze),null,{default:G(()=>[V(y(Yl))]),_:1})],2),j("span",{class:B(k.value),onClick:re},[V(y(Ze),null,{default:G(()=>[V(y(Wa))]),_:1})],2)],64)),le.$slots.progress||e.showProgress?(L(),K("div",{key:1,class:B([y(l).e("btn"),y(l).e("progress")])},[he(le.$slots,"progress",{activeIndex:m.value,total:e.urlList.length},()=>[Le(ce(I.value),1)])],2)):fe("v-if",!0),fe(" ACTIONS "),j("div",{class:B([y(l).e("btn"),y(l).e("actions")])},[j("div",{class:B(y(l).e("actions__inner"))},[he(le.$slots,"toolbar",{actions:ee,prev:q,next:re,reset:z,activeIndex:m.value,setActiveItem:Y},()=>[V(y(Ze),{onClick:J[1]||(J[1]=Z=>ee("zoomOut"))},{default:G(()=>[V(y(_fe))]),_:1}),V(y(Ze),{onClick:J[2]||(J[2]=Z=>ee("zoomIn"))},{default:G(()=>[V(y(sG))]),_:1}),j("i",{class:B(y(l).e("actions__divider"))},null,2),V(y(Ze),{onClick:z},{default:G(()=>[(L(),ve(Et(b.value.icon)))]),_:1}),j("i",{class:B(y(l).e("actions__divider"))},null,2),V(y(Ze),{onClick:J[3]||(J[3]=Z=>ee("anticlockwise"))},{default:G(()=>[V(y(jde))]),_:1}),V(y(Ze),{onClick:J[4]||(J[4]=Z=>ee("clockwise"))},{default:G(()=>[V(y(Xde))]),_:1})])],2)],2),fe(" CANVAS "),j("div",{class:B(y(l).e("canvas"))},[p.value&&le.$slots["viewer-error"]?he(le.$slots,"viewer-error",{key:0,activeIndex:m.value,src:T.value}):(L(),K("img",{ref_key:"imgRef",ref:d,key:T.value,src:T.value,style:tt(A.value),class:B(y(l).e("img")),crossorigin:e.crossorigin,onLoad:$,onError:N,onMousedown:D,onTouchstart:F},null,46,jwe))],2),he(le.$slots,"default")]),_:3},8,["focus-trap-el"])],6)]),_:3})],8,["disabled"]))}}),Xwe=qwe;const kU=xt(Xwe),Zwe=["src","loading","crossorigin"],Jwe={key:0};var Qwe=ye({name:"ElImage",inheritAttrs:!1,__name:"image",props:Gwe,emits:Uwe,setup(e,{expose:t,emit:n}){const r=e,a=n,{t:i}=Yt(),o=Ee("image"),s=iu(),l=M(()=>lv(Object.entries(s).filter(([N])=>/^(data-|on[A-Z])/i.test(N)||["id","style"].includes(N)))),u=Ow({excludeListeners:!0,excludeKeys:M(()=>Object.keys(l.value))}),c=H(),d=H(!1),f=H(!0),h=H(!1),v=H(),p=H(),g=cn&&"loading"in HTMLImageElement.prototype;let m;const b=M(()=>[o.e("inner"),w.value&&o.e("preview"),f.value&&o.is("loading")]),_=M(()=>{const{fit:N}=r;return cn&&N?{objectFit:N}:{}}),w=M(()=>{const{previewSrcList:N}=r;return Me(N)&&N.length>0}),S=M(()=>{const{previewSrcList:N,initialIndex:D}=r;let F=D;return D>N.length-1&&(F=0),F}),x=M(()=>r.loading==="eager"?!1:!g&&r.loading==="lazy"||r.lazy),C=()=>{cn&&(f.value=!0,d.value=!1,c.value=r.src)};function T(N){f.value=!1,d.value=!1,a("load",N)}function E(N){f.value=!1,d.value=!0,a("error",N)}function k(N){N&&(C(),P())}const A=dW(k,200,!0);async function I(){if(!cn)return;await Ue();const{scrollContainer:N}=r;if(ki(N))p.value=N;else if(qe(N)&&N!=="")p.value=document.querySelector(N)??void 0;else if(v.value){const F=FI(v.value);p.value=yy(F)?void 0:F}const{stop:D}=wle(v,([F])=>{A(F.isIntersecting)},{root:p});m=D}function P(){!cn||!A||(m==null||m(),p.value=void 0,m=void 0)}function R(){w.value&&(h.value=!0,a("show"))}function O(){h.value=!1,a("close")}function $(N){a("switch",N)}return _e(()=>r.src,()=>{x.value?(f.value=!0,d.value=!1,P(),I()):C()}),St(()=>{x.value?I():C()}),t({showPreview:R}),(N,D)=>(L(),K("div",Mt({ref_key:"container",ref:v},l.value,{class:[y(o).b(),N.$attrs.class]}),[d.value?he(N.$slots,"error",{key:0},()=>[j("div",{class:B(y(o).e("error"))},ce(y(i)("el.image.error")),3)]):(L(),K(ze,{key:1},[c.value!==void 0?(L(),K("img",Mt({key:0},y(u),{src:c.value,loading:e.loading,style:_.value,class:b.value,crossorigin:e.crossorigin,onClick:R,onLoad:T,onError:E}),null,16,Zwe)):fe("v-if",!0),f.value?(L(),K("div",{key:1,class:B(y(o).e("wrapper"))},[he(N.$slots,"placeholder",{},()=>[j("div",{class:B(y(o).e("placeholder"))},null,2)])],2)):fe("v-if",!0)],64)),w.value?(L(),K(ze,{key:2},[h.value?(L(),ve(y(kU),{key:0,"z-index":e.zIndex,"initial-index":S.value,infinite:e.infinite,"zoom-rate":e.zoomRate,"min-scale":e.minScale,"max-scale":e.maxScale,"show-progress":e.showProgress,"url-list":e.previewSrcList,scale:e.scale,crossorigin:e.crossorigin,"hide-on-click-modal":e.hideOnClickModal,teleported:e.previewTeleported,"close-on-press-escape":e.closeOnPressEscape,onClose:O,onSwitch:$},ui({toolbar:G(F=>[he(N.$slots,"toolbar",Dl(Rl(F)))]),default:G(()=>[N.$slots.viewer?(L(),K("div",Jwe,[he(N.$slots,"viewer")])):fe("v-if",!0)]),_:2},[N.$slots.progress?{name:"progress",fn:G(F=>[he(N.$slots,"progress",Dl(Rl(F)))]),key:"0"}:void 0,N.$slots["viewer-error"]?{name:"viewer-error",fn:G(F=>[he(N.$slots,"viewer-error",Dl(Rl(F)))]),key:"1"}:void 0]),1032,["z-index","initial-index","infinite","zoom-rate","min-scale","max-scale","show-progress","url-list","scale","crossorigin","hide-on-click-modal","teleported","close-on-press-escape"])):fe("v-if",!0)],64)):fe("v-if",!0)],16))}}),eSe=Qwe;const tSe=xt(eSe),nSe=Oe({id:{type:String,default:void 0},step:{type:Number,default:1},stepStrictly:Boolean,max:{type:Number,default:Number.MAX_SAFE_INTEGER},min:{type:Number,default:Number.MIN_SAFE_INTEGER},modelValue:{type:[Number,null]},readonly:Boolean,disabled:{type:Boolean,default:void 0},size:$r,controls:{type:Boolean,default:!0},controlsPosition:{type:String,default:"",values:["","right"]},valueOnClear:{type:oe([String,Number,null]),validator:e=>e===null||Je(e)||["min","max"].includes(e),default:null},name:String,placeholder:String,precision:{type:Number,validator:e=>e>=0&&e===Number.parseInt(`${e}`,10)},validateEvent:{type:Boolean,default:!0},...ja(["ariaLabel"]),inputmode:{type:oe(String),default:void 0},align:{type:oe(String),default:"center"},disabledScientific:Boolean,formatter:{type:Function},parser:{type:Function},tabindex:{type:[String,Number],default:0}}),rSe={[Vt]:(e,t)=>t!==e,blur:e=>e instanceof FocusEvent,focus:e=>e instanceof FocusEvent,[Mr]:e=>Je(e)||wr(e),[mt]:e=>Je(e)||wr(e)},aSe=["aria-label"],iSe=["aria-label"];var oSe=ye({name:"ElInputNumber",__name:"input-number",props:nSe,emits:rSe,setup(e,{expose:t,emit:n}){const r=e,a=n,{t:i}=Yt(),o=Ee("input-number"),s=H(),l=Qt({currentValue:r.modelValue,userInput:null}),{formItem:u}=ea(),c=M(()=>Je(r.modelValue)&&r.modelValue<=r.min),d=M(()=>Je(r.modelValue)&&r.modelValue>=r.max),f=M(()=>{const N=b(r.step);return qt(r.precision)?Math.max(b(r.modelValue),N):(N>r.precision&&wn("InputNumber","precision should not be less than the decimal places of step"),r.precision)}),h=M(()=>r.controls&&r.controlsPosition==="right"),v=Rr(),p=ar(),g=M(()=>{if(l.userInput!==null)return l.userInput;let N=l.currentValue;if(wr(N))return"";if(Je(N)){if(Number.isNaN(N))return"";qt(r.precision)||(N=N.toFixed(r.precision))}return N}),m=(N,D)=>{if(qt(D)&&(D=f.value),D===0)return Math.round(N);let F=String(N);const W=F.indexOf(".");if(W===-1||!F.replace(".","").split("")[W+D])return N;const z=F.length;return F.charAt(z-1)==="5"&&(F=`${F.slice(0,Math.max(0,z-1))}6`),Number.parseFloat(Number(F).toFixed(D))},b=N=>{if(wr(N))return 0;const D=N.toString(),F=D.indexOf(".");let W=0;return F!==-1&&(W=D.length-F-1),W},_=(N,D=1)=>Je(N)?N>=Number.MAX_SAFE_INTEGER&&D===1?(wn("InputNumber","The value has reached the maximum safe integer limit."),N):N<=Number.MIN_SAFE_INTEGER&&D===-1?(wn("InputNumber","The value has reached the minimum safe integer limit."),N):m(N+r.step*D):l.currentValue,w=N=>{const D=Mn(N),F=SW(N);if(r.disabledScientific&&["e","E"].includes(F)){N.preventDefault();return}switch(D){case De.up:N.preventDefault(),S();break;case De.down:N.preventDefault(),x();break}},S=()=>{r.readonly||p.value||d.value||(T(_(Number(g.value)||0)),a(Mr,l.currentValue),O())},x=()=>{r.readonly||p.value||c.value||(T(_(Number(g.value)||0,-1)),a(Mr,l.currentValue),O())},C=(N,D)=>{const{max:F,min:W,step:z,precision:Y,stepStrictly:q,valueOnClear:re}=r;FF||eeF?F:W,D&&a("update:modelValue",ee)),ee},T=(N,D=!0)=>{var z;const F=l.currentValue,W=C(N);if(!D){a(mt,W);return}l.userInput=null,!(F===W&&N)&&(a(mt,W),F!==W&&a(Vt,W,F),r.validateEvent&&((z=u==null?void 0:u.validate)==null||z.call(u,"change").catch(It)),l.currentValue=W)},E=N=>{l.userInput=N;let D=N===""?null:Number.parseFloat(N);Number.isNaN(D)&&(D=null),a(Mr,D),T(D,!1)},k=N=>{const D=N!==""?Number.parseFloat(N):"";(Je(D)&&!Number.isNaN(D)||r.formatter&&Number.isNaN(D)||D==="")&&T(D),O(),l.userInput=null},A=()=>{var N,D;(D=(N=s.value)==null?void 0:N.focus)==null||D.call(N)},I=()=>{var N,D;(D=(N=s.value)==null?void 0:N.blur)==null||D.call(N)},P=N=>{a("focus",N)},R=N=>{var D,F,W;l.userInput=null,l.currentValue===null&&((D=s.value)!=null&&D.input)&&(s.value.input.value=((F=r.formatter)==null?void 0:F.call(r,""))??""),a("blur",N),r.validateEvent&&((W=u==null?void 0:u.validate)==null||W.call(u,"blur").catch(It))},O=()=>{l.currentValue!==r.modelValue&&(l.currentValue=r.modelValue)},$=N=>{document.activeElement===N.target&&N.preventDefault()};return _e(()=>r.modelValue,(N,D)=>{const F=C(N,!0);l.userInput===null&&F!==D&&(l.currentValue=F)},{immediate:!0}),_e(()=>r.precision,()=>{l.currentValue=C(r.modelValue)}),St(()=>{var z;const{min:N,max:D,modelValue:F}=r,W=(z=s.value)==null?void 0:z.input;if(W.setAttribute("role","spinbutton"),Number.isFinite(D)?W.setAttribute("aria-valuemax",String(D)):W.removeAttribute("aria-valuemax"),Number.isFinite(N)?W.setAttribute("aria-valuemin",String(N)):W.removeAttribute("aria-valuemin"),W.setAttribute("aria-valuenow",l.currentValue||l.currentValue===0?String(l.currentValue):""),W.setAttribute("aria-disabled",String(p.value)),!Je(F)&&F!=null){let Y=Number(F);Number.isNaN(Y)&&(Y=null),a(mt,Y)}W.addEventListener("wheel",$,{passive:!1})}),is(()=>{var N,D;(D=(N=s.value)==null?void 0:N.input)==null||D.setAttribute("aria-valuenow",`${l.currentValue??""}`)}),t({focus:A,blur:I}),(N,D)=>(L(),K("div",{class:B([y(o).b(),y(o).m(y(v)),y(o).is("disabled",y(p)),y(o).is("without-controls",!e.controls),y(o).is("controls-right",h.value),y(o).is(e.align,!!e.align)]),onDragstart:D[0]||(D[0]=ut(()=>{},["prevent"]))},[e.controls?gt((L(),K("span",{key:0,role:"button","aria-label":y(i)("el.inputNumber.decrease"),class:B([y(o).e("decrease"),y(o).is("disabled",c.value)]),onKeydown:Yn(x,["enter"])},[he(N.$slots,"decrease-icon",{},()=>[V(y(Ze),null,{default:G(()=>[h.value?(L(),ve(y(ll),{key:0})):(L(),ve(y(Ode),{key:1}))]),_:1})])],42,aSe)),[[y(U1),x]]):fe("v-if",!0),e.controls?gt((L(),K("span",{key:1,role:"button","aria-label":y(i)("el.inputNumber.increase"),class:B([y(o).e("increase"),y(o).is("disabled",d.value)]),onKeydown:Yn(S,["enter"])},[he(N.$slots,"increase-icon",{},()=>[V(y(Ze),null,{default:G(()=>[h.value?(L(),ve(y(Kw),{key:0})):(L(),ve(y(iG),{key:1}))]),_:1})])],42,iSe)),[[y(U1),S]]):fe("v-if",!0),V(y(va),{id:e.id,ref_key:"input",ref:s,type:e.formatter?"text":"number",step:e.step,"model-value":g.value,placeholder:e.placeholder,readonly:e.readonly,disabled:y(p),size:y(v),max:e.max,min:e.min,name:e.name,"aria-label":e.ariaLabel,"validate-event":!1,inputmode:e.inputmode,formatter:e.formatter,parser:e.parser,tabindex:e.tabindex,onKeydown:w,onBlur:R,onFocus:P,onInput:E,onChange:k},ui({_:2},[N.$slots.prefix?{name:"prefix",fn:G(()=>[he(N.$slots,"prefix")]),key:"0"}:void 0,N.$slots.suffix?{name:"suffix",fn:G(()=>[he(N.$slots,"suffix")]),key:"1"}:void 0]),1032,["id","type","step","model-value","placeholder","readonly","disabled","size","max","min","name","aria-label","inputmode","formatter","parser","tabindex"])],34))}}),sSe=oSe;const AU=xt(sSe),lSe=Oe({modelValue:{type:oe(Array)},max:Number,tagType:{...jl.type,default:"info"},tagEffect:jl.effect,effect:{type:oe(String),default:"light"},trigger:{type:oe(String),default:De.enter},draggable:Boolean,delimiter:{type:[String,RegExp],default:""},size:$r,clearable:Boolean,clearIcon:{type:An,default:ul},disabled:{type:Boolean,default:void 0},validateEvent:{type:Boolean,default:!0},readonly:Boolean,autofocus:Boolean,id:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},maxlength:{type:[String,Number]},minlength:{type:[String,Number]},placeholder:String,autocomplete:{type:oe(String),default:"off"},saveOnBlur:{type:Boolean,default:!0},collapseTags:Boolean,collapseTagsTooltip:Boolean,maxCollapseTags:{type:Number,default:1},ariaLabel:String}),uSe={[mt]:e=>Me(e)||qt(e),[Vt]:e=>Me(e)||qt(e),[Mr]:e=>qe(e),"add-tag":e=>qe(e)||Me(e),"remove-tag":(e,t)=>qe(e)&&Je(t),"drag-tag":(e,t,n)=>Je(e)&&Je(t)&&qe(n),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0};function cSe({wrapperRef:e,handleDragged:t,afterDragged:n}){const r=Ee("input-tag"),a=Ut(),i=H(!1);let o,s,l,u;function c(v){return`.${r.e("inner")} .${r.namespace.value}-tag:nth-child(${v+1})`}function d(v,p){o=p,s=e.value.querySelector(c(p)),s&&(s.style.opacity="0.5"),v.dataTransfer.effectAllowed="move"}function f(v,p){if(l=p,v.preventDefault(),v.dataTransfer.dropEffect="move",qt(o)||o===p){i.value=!1;return}const g=e.value.querySelector(c(p)).getBoundingClientRect(),m=o+1!==p,b=o-1!==p,_=v.clientX-g.left,w=m?b?.5:1:-1,S=b?m?.5:0:1;_<=g.width*w?u="before":_>g.width*S?u="after":u=void 0;const x=e.value.querySelector(`.${r.e("inner")}`),C=x.getBoundingClientRect(),T=Number.parseFloat(Il(x,"gap"))/2,E=g.top-C.top;let k=-9999;if(u==="before")k=Math.max(g.left-C.left-T,Math.floor(-T/2));else if(u==="after"){const A=g.right-C.left;k=A+(C.width===A?Math.floor(T/2):T)}mW(a.value,{top:`${E}px`,left:`${k}px`}),i.value=!!u}function h(v){v.preventDefault(),s&&(s.style.opacity=""),u&&!qt(o)&&!qt(l)&&o!==l&&t(o,l,u),i.value=!1,o=void 0,s=null,l=void 0,u=void 0,n==null||n()}return{dropIndicatorRef:a,showDropIndicator:i,handleDragStart:d,handleDragOver:f,handleDragEnd:h}}function dSe(){const e=H(!1);return{hovering:e,handleMouseEnter:()=>{e.value=!0},handleMouseLeave:()=>{e.value=!1}}}function fSe({props:e,emit:t,formItem:n}){const r=ar(),a=Rr(),i=Ut(),o=H(),s=H(),l=M(()=>["small"].includes(a.value)?"small":"default"),u=M(()=>{var $;return($=e.modelValue)!=null&&$.length?void 0:e.placeholder}),c=M(()=>!(e.readonly||r.value)),d=M(()=>{var $;return qt(e.max)?!1:((($=e.modelValue)==null?void 0:$.length)??0)>=e.max}),f=M(()=>{var $;return e.collapseTags?($=e.modelValue)==null?void 0:$.slice(0,e.maxCollapseTags):e.modelValue}),h=M(()=>{var $;return e.collapseTags?($=e.modelValue)==null?void 0:$.slice(e.maxCollapseTags):[]}),v=$=>{const N=[...e.modelValue??[],...jr($)];t(mt,N),t(Vt,N),t("add-tag",$),o.value=void 0},p=$=>{var F;const N=$.split(e.delimiter),D=N.length>1?N.map(W=>W.trim()).filter(Boolean):[];if(e.max){const W=e.max-(((F=e.modelValue)==null?void 0:F.length)??0);D.splice(W)}return D.length===1?D[0]:D},g=$=>{var q;const N=(q=$.clipboardData)==null?void 0:q.getData("text");if(e.readonly||d.value||!e.delimiter||!N)return;const{selectionStart:D=0,selectionEnd:F=0,value:W}=$.target,z=W.slice(0,D)+N+W.slice(F),Y=p(z);Y.length&&(v(Y),t(Mr,z),$.preventDefault())},m=$=>{if(d.value){o.value=void 0;return}if(!I.value){if(e.delimiter&&o.value){const N=p(o.value);N.length&&v(N)}t(Mr,$.target.value)}},b=$=>{var N;if(!I.value)switch(Mn($)){case e.trigger:$.preventDefault(),$.stopPropagation(),w();break;case De.numpadEnter:e.trigger===De.enter&&($.preventDefault(),$.stopPropagation(),w());break;case De.backspace:!o.value&&((N=e.modelValue)!=null&&N.length)&&($.preventDefault(),$.stopPropagation(),S(e.modelValue.length-1));break}},_=$=>{if(!(I.value||!pW()))switch(Mn($)){case De.space:e.trigger===De.space&&($.preventDefault(),$.stopPropagation(),w());break}},w=()=>{var N;const $=(N=o.value)==null?void 0:N.trim();!$||d.value||v($)},S=$=>{const N=(e.modelValue??[]).slice(),[D]=N.splice($,1);t(mt,N),t(Vt,N),t("remove-tag",D,$)},x=()=>{o.value=void 0,t(mt,void 0),t(Vt,void 0),t("clear")},C=($,N,D)=>{const F=(e.modelValue??[]).slice(),[W]=F.splice($,1),z=N>$&&D==="before"?-1:N<$&&D==="after"?1:0;F.splice(N+z,0,W),t(mt,F),t(Vt,F),t("drag-tag",$,N+z,W)},T=()=>{var $;($=i.value)==null||$.focus()},E=()=>{var $;($=i.value)==null||$.blur()},{wrapperRef:k,isFocused:A}=uu(i,{disabled:r,beforeBlur($){var N;return(N=s.value)==null?void 0:N.isFocusInsideContent($)},afterBlur(){var $;e.saveOnBlur?w():o.value=void 0,e.validateEvent&&(($=n==null?void 0:n.validate)==null||$.call(n,"blur").catch(It))}}),{isComposing:I,handleCompositionStart:P,handleCompositionUpdate:R,handleCompositionEnd:O}=Ay({afterComposition:m});return _e(()=>e.modelValue,()=>{var $;e.validateEvent&&(($=n==null?void 0:n.validate)==null||$.call(n,Vt).catch(It))}),{inputRef:i,wrapperRef:k,tagTooltipRef:s,isFocused:A,isComposing:I,inputValue:o,size:a,tagSize:l,placeholder:u,closable:c,disabled:r,inputLimit:d,showTagList:f,collapseTagList:h,handleDragged:C,handlePaste:g,handleInput:m,handleKeydown:b,handleKeyup:_,handleAddTag:w,handleRemoveTag:S,handleClear:x,handleCompositionStart:P,handleCompositionUpdate:R,handleCompositionEnd:O,focus:T,blur:E}}function hSe({props:e,isFocused:t,hovering:n,disabled:r,inputValue:a,size:i,validateState:o,validateIcon:s,needStatusIcon:l}){const u=iu(),c=pr(),d=Ee("input-tag"),f=Ee("input"),h=H(),v=H(),p=M(()=>[d.b(),d.is("focused",t.value),d.is("hovering",n.value),d.is("disabled",r.value),d.m(i.value),d.e("wrapper"),u.class]),g=M(()=>[u.style]),m=M(()=>{var E,k;return[d.e("inner"),d.is("draggable",e.draggable),d.is("left-space",!((E=e.modelValue)!=null&&E.length)&&!c.prefix),d.is("right-space",!((k=e.modelValue)!=null&&k.length)&&!_.value)]}),b=M(()=>{var E;return e.clearable&&!r.value&&!e.readonly&&(((E=e.modelValue)==null?void 0:E.length)||a.value)&&(t.value||n.value)}),_=M(()=>c.suffix||b.value||o.value&&s.value&&l.value),w=Qt({innerWidth:0,collapseItemWidth:0}),S=()=>{if(!v.value)return 0;const E=window.getComputedStyle(v.value);return Number.parseFloat(E.gap||"6px")},x=()=>{w.innerWidth=Number.parseFloat(window.getComputedStyle(v.value).width)},C=()=>{w.collapseItemWidth=h.value.getBoundingClientRect().width},T=M(()=>{if(!e.collapseTags)return{};const E=S(),k=E+11,A=h.value&&e.maxCollapseTags===1?w.innerWidth-w.collapseItemWidth-E-k:w.innerWidth-k;return{maxWidth:`${Math.max(A,0)}px`}});return Kn(v,x),Kn(h,C),{ns:d,nsInput:f,containerKls:p,containerStyle:g,innerKls:m,showClear:b,showSuffix:_,tagStyle:T,collapseItemRef:h,innerRef:v}}const vSe=["id","minlength","maxlength","disabled","readonly","autocomplete","tabindex","placeholder","autofocus","ariaLabel"],pSe=["textContent"];var gSe=ye({name:"ElInputTag",inheritAttrs:!1,__name:"input-tag",props:lSe,emits:uSe,setup(e,{expose:t,emit:n}){const r=e,a=n,i=Ow(),o=pr(),{form:s,formItem:l}=ea(),{inputId:u}=Di(r,{formItemContext:l}),c=M(()=>(s==null?void 0:s.statusIcon)??!1),d=M(()=>(l==null?void 0:l.validateState)||""),f=M(()=>d.value&&jw[d.value]),{inputRef:h,wrapperRef:v,tagTooltipRef:p,isFocused:g,inputValue:m,size:b,tagSize:_,placeholder:w,closable:S,disabled:x,showTagList:C,collapseTagList:T,handleDragged:E,handlePaste:k,handleInput:A,handleKeydown:I,handleKeyup:P,handleRemoveTag:R,handleClear:O,handleCompositionStart:$,handleCompositionUpdate:N,handleCompositionEnd:D,focus:F,blur:W}=fSe({props:r,emit:a,formItem:l}),{hovering:z,handleMouseEnter:Y,handleMouseLeave:q}=dSe(),{calculatorRef:re,inputStyle:ee}=VI(),{dropIndicatorRef:se,showDropIndicator:ne,handleDragStart:de,handleDragOver:le,handleDragEnd:J}=cSe({wrapperRef:v,handleDragged:E,afterDragged:F}),{ns:Z,nsInput:U,containerKls:te,containerStyle:Q,innerKls:ue,showClear:pe,showSuffix:me,tagStyle:Pe,collapseItemRef:Ne,innerRef:ie}=hSe({props:r,hovering:z,isFocused:g,inputValue:m,disabled:x,size:b,validateState:d,validateIcon:f,needStatusIcon:c});return t({focus:F,blur:W}),(ae,ge)=>(L(),K("div",{ref_key:"wrapperRef",ref:v,class:B(y(te)),style:tt(y(Q)),onMouseenter:ge[9]||(ge[9]=(...be)=>y(Y)&&y(Y)(...be)),onMouseleave:ge[10]||(ge[10]=(...be)=>y(q)&&y(q)(...be))},[y(o).prefix?(L(),K("div",{key:0,class:B(y(Z).e("prefix"))},[he(ae.$slots,"prefix")],2)):fe("v-if",!0),j("div",{ref_key:"innerRef",ref:ie,class:B(y(ue))},[(L(!0),K(ze,null,Lt(y(C),(be,$e)=>(L(),ve(y(Nl),{key:$e,size:y(_),closable:y(S),type:e.tagType,effect:e.tagEffect,draggable:y(S)&&e.draggable,style:tt(y(Pe)),"disable-transitions":"",onClose:Re=>y(R)($e),onDragstart:Re=>y(de)(Re,$e),onDragover:Re=>y(le)(Re,$e),onDragend:y(J),onDrop:ge[0]||(ge[0]=ut(()=>{},["stop"]))},{default:G(()=>[he(ae.$slots,"tag",{value:be,index:$e},()=>[Le(ce(be),1)])]),_:2},1032,["size","closable","type","effect","draggable","style","onClose","onDragstart","onDragover","onDragend"]))),128)),e.collapseTags&&e.modelValue&&e.modelValue.length>e.maxCollapseTags?(L(),ve(y(ua),{key:0,ref_key:"tagTooltipRef",ref:p,disabled:!e.collapseTagsTooltip,"fallback-placements":["bottom","top","right","left"],effect:e.effect,placement:"bottom"},{default:G(()=>[j("div",{ref_key:"collapseItemRef",ref:Ne,class:B(y(Z).e("collapse-tag"))},[V(y(Nl),{closable:!1,size:y(_),type:e.tagType,effect:e.tagEffect,"disable-transitions":""},{default:G(()=>[Le(" + "+ce(e.modelValue.length-e.maxCollapseTags),1)]),_:1},8,["size","type","effect"])],2)]),content:G(()=>[j("div",{class:B(y(Z).e("input-tag-list"))},[(L(!0),K(ze,null,Lt(y(T),(be,$e)=>(L(),ve(y(Nl),{key:$e,size:y(_),closable:y(S),type:e.tagType,effect:e.tagEffect,"disable-transitions":"",onClose:Re=>y(R)($e+e.maxCollapseTags)},{default:G(()=>[he(ae.$slots,"tag",{value:be,index:$e+e.maxCollapseTags},()=>[Le(ce(be),1)])]),_:2},1032,["size","closable","type","effect","onClose"]))),128))],2)]),_:3},8,["disabled","effect"])):fe("v-if",!0),j("div",{class:B(y(Z).e("input-wrapper"))},[gt(j("input",Mt({id:y(u),ref_key:"inputRef",ref:h,"onUpdate:modelValue":ge[1]||(ge[1]=be=>Hn(m)?m.value=be:null)},y(i),{type:"text",minlength:e.minlength,maxlength:e.maxlength,disabled:y(x),readonly:e.readonly,autocomplete:e.autocomplete,tabindex:e.tabindex,placeholder:y(w),autofocus:e.autofocus,ariaLabel:e.ariaLabel,class:y(Z).e("input"),style:y(ee),onCompositionstart:ge[2]||(ge[2]=(...be)=>y($)&&y($)(...be)),onCompositionupdate:ge[3]||(ge[3]=(...be)=>y(N)&&y(N)(...be)),onCompositionend:ge[4]||(ge[4]=(...be)=>y(D)&&y(D)(...be)),onPaste:ge[5]||(ge[5]=(...be)=>y(k)&&y(k)(...be)),onInput:ge[6]||(ge[6]=(...be)=>y(A)&&y(A)(...be)),onKeydown:ge[7]||(ge[7]=(...be)=>y(I)&&y(I)(...be)),onKeyup:ge[8]||(ge[8]=(...be)=>y(P)&&y(P)(...be))}),null,16,vSe),[[hH,y(m)]]),j("span",{ref_key:"calculatorRef",ref:re,"aria-hidden":"true",class:B(y(Z).e("input-calculator")),textContent:ce(y(m))},null,10,pSe)],2),gt(j("div",{ref_key:"dropIndicatorRef",ref:se,class:B(y(Z).e("drop-indicator"))},null,2),[[ln,y(ne)]])],2),y(me)?(L(),K("div",{key:1,class:B(y(Z).e("suffix"))},[he(ae.$slots,"suffix"),y(pe)?(L(),ve(y(Ze),{key:0,class:B([y(Z).e("icon"),y(Z).e("clear")]),onMousedown:ut(y(It),["prevent"]),onClick:y(O)},{default:G(()=>[(L(),ve(Et(e.clearIcon)))]),_:1},8,["class","onMousedown","onClick"])):fe("v-if",!0),d.value&&f.value&&c.value?(L(),ve(y(Ze),{key:1,class:B([y(U).e("icon"),y(U).e("validateIcon"),y(U).is("loading",d.value==="validating")])},{default:G(()=>[(L(),ve(Et(f.value)))]),_:1},8,["class"])):fe("v-if",!0)],2)):fe("v-if",!0)],38))}}),mSe=gSe;const ySe=xt(mSe),bSe={[mt]:e=>qe(e),[Vt]:e=>qe(e),finish:e=>qe(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent},_Se=["id","aria-label","aria-labelledby"],wSe=["value","type","disabled","readonly","inputmode","aria-label","onClick","onKeydown","onInput"];var SSe=ye({name:"ElInputOtp",__name:"input-otp",props:{modelValue:{type:[String,Number],required:!1},length:{type:Number,required:!1,default:6},validator:{type:Function,required:!1,default:()=>!0},inputmode:{type:null,required:!1},type:{type:String,required:!1,default:"outlined"},size:{type:null,required:!1,default:"default"},mask:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1,default:void 0},readonly:{type:Boolean,required:!1},id:{type:String,required:!1},validateEvent:{type:Boolean,required:!1,default:!0},separator:{type:[String,Object,Function],required:!1},ariaLabel:{type:String,required:!1}},emits:bSe,setup(e,{expose:t,emit:n}){const r=e,a=n,i=M(()=>{const k=String(r.modelValue??"");return Array.from({length:r.length},(A,I)=>k.charAt(I))}),o=M(()=>{const{separator:k}=r,A=et(k)?k:()=>k;return Array.from({length:r.length-1},(I,P)=>A(P))}),s=H(i.value),l=H(!1),u=H([]),c=Ee("input-otp"),{t:d}=Yt(),{formItem:f}=ea(),{inputId:h,isLabeledByFormItem:v}=Di(r,{formItemContext:f}),p=ar();let g=r.modelValue;const m=k=>{const A=s.value.findIndex((I,P)=>!I&&P<=k);return A===-1?k:A},b=k=>{var A;(A=u.value)!=null&&A.includes(k.relatedTarget)||(l.value=!0,a("focus",k))},_=k=>{var A,I;(A=u.value)!=null&&A.includes(k.relatedTarget)||(l.value=!1,a("blur",k),r.validateEvent&&((I=f==null?void 0:f.validate)==null||I.call(f,"blur").catch(It)))},w=(k=!0)=>{const A=s.value.join("").slice(0,r.length);A!==r.modelValue&&(a(mt,A),k&&A.length===r.length&&a("finish",A))},S=(k,A)=>{const I=Mn(k);let P=!0;switch(I){case De.backspace:if(r.readonly)break;s.value[A]="",T(A-1),w();break;case De.delete:if(r.readonly)break;s.value[A]="",T(A),w();break;case De.up:case De.left:T(A-1);break;case De.down:case De.right:T(A+1);break;default:P=!1}P&&k.preventDefault()},x=(k,A)=>{const I=k.target,P=m(A);let R=P+1,O=I.value;if(O.length>1){const $=C(O,P);I.value=s.value[A]??"",$.forEach((N,D)=>s.value[P+D]=N),T(P+$.length),w();return}r.validator(O,P)||(I.value=s.value[A]??"",O=I.value,R=P),s.value[P]=O,P!==A&&(I.value=s.value[A]??""),T(R),w()},C=(k,A=0)=>{const I=`${k??""}`.split(""),P=[];for(const R of I){if(P.length+A>=r.length)break;r.validator(R,P.length+A)&&P.push(R)}return P},T=(k=0)=>{var P;const A=Nw(k,0,r.length-1),I=(P=u.value)==null?void 0:P[A];document.activeElement!==I&&(I==null||I.focus()),Pi(()=>{!r.readonly&&document.activeElement===I&&(I==null||I.select())})},E=()=>{var k,A;(A=(k=u.value)==null?void 0:k.find(I=>document.activeElement===I))==null||A.blur()};return _e(()=>r.modelValue,()=>{var k;s.value=i.value,r.validateEvent&&((k=f==null?void 0:f.validate)==null||k.call(f,"change").catch(It))}),_e(()=>r.length,()=>{s.value=i.value,w(!1)}),_e(l,k=>{if(k){g=r.modelValue;return}g!==r.modelValue&&a(Vt,r.modelValue)}),t({inputRefs:u,focus:T,blur:E}),(k,A)=>{var I;return L(),K("div",{id:y(h),class:B([y(c).b(),y(c).m(e.size),y(c).m(e.type),y(c).is("disabled",y(p))]),role:"group","aria-label":y(v)?void 0:e.ariaLabel||y(d)("el.inputOTP.groupLabel"),"aria-labelledby":y(v)?(I=y(f))==null?void 0:I.labelId:void 0},[(L(!0),K(ze,null,Lt(e.length,(P,R)=>(L(),K(ze,{key:R},[j("label",{class:B(y(c).e("input-field"))},[j("input",{ref_for:!0,ref_key:"inputRefs",ref:u,value:s.value[R],class:B(y(c).e("input")),type:e.mask?"password":"text",disabled:y(p),readonly:e.readonly,inputmode:e.inputmode,autocomplete:"one-time-code","aria-label":y(d)("el.inputOTP.defaultLabel",{index:R+1}),onFocus:b,onBlur:_,onClick:O=>T(R),onKeydown:O=>S(O,R),onInput:O=>x(O,R)},null,42,wSe)],2),(k.$slots.separator||o.value[R])&&R[(L(),ve(Et(()=>o.value[R])))]):fe("v-if",!0)],64))),128))],10,_Se)}}}),xSe=SSe;const CSe=xt(xSe),TSe=Oe({type:{type:String,values:["primary","success","warning","info","danger","default"],default:void 0},underline:{type:[Boolean,String],values:[!0,!1,"always","never","hover"],default:void 0},disabled:Boolean,href:{type:String,default:""},target:{type:String,default:"_self"},icon:{type:An}}),ESe={click:e=>e instanceof MouseEvent},kSe=["href","target"];var ASe=ye({name:"ElLink",__name:"link",props:TSe,emits:ESe,setup(e,{emit:t}){const n=e,r=t,a=cu("link");Bs({scope:"el-link",from:"The underline option (boolean)",replacement:"'always' | 'hover' | 'never'",version:"3.0.0",ref:"https://element-plus.org/en-US/component/link.html#underline"},M(()=>En(n.underline)));const i=Ee("link"),o=M(()=>{var u;return[i.b(),i.m(n.type??((u=a.value)==null?void 0:u.type)??"default"),i.is("disabled",n.disabled),i.is("underline",s.value==="always"),i.is("hover-underline",s.value==="hover"&&!n.disabled)]}),s=M(()=>{var u;return En(n.underline)?n.underline?"hover":"never":n.underline??((u=a.value)==null?void 0:u.underline)??"hover"});function l(u){n.disabled||r("click",u)}return(u,c)=>(L(),K("a",{class:B(o.value),href:e.disabled||!e.href?void 0:e.href,target:e.disabled||!e.href?void 0:e.target,onClick:l},[e.icon?(L(),ve(y(Ze),{key:0},{default:G(()=>[(L(),ve(Et(e.icon)))]),_:1})):fe("v-if",!0),u.$slots.default?(L(),K("span",{key:1,class:B(y(i).e("inner"))},[he(u.$slots,"default")],2)):fe("v-if",!0),u.$slots.icon?he(u.$slots,"icon",{key:2}):fe("v-if",!0)],10,kSe))}}),ISe=ASe;const MSe=xt(ISe),RM="rootMenu",s_="subMenu:";function IU(e,t){const n=M(()=>{let r=e.parent;const a=[t.value];for(;r.type.name!=="ElMenu";)r.props.index&&a.unshift(r.props.index),r=r.parent;return a});return{parentMenu:M(()=>{let r=e.parent;for(;r&&!["ElMenu","ElSubMenu"].includes(r.type.name);)r=r.parent;return r}),indexPath:n}}function PSe(e){return M(()=>{const t=e.backgroundColor;return t?new mr(t).shade(20).toString():""})}const MU=(e,t)=>{const n=Ee("menu");return M(()=>n.cssVarBlock({"text-color":e.textColor||"","hover-text-color":e.textColor||"","bg-color":e.backgroundColor||"","hover-bg-color":PSe(e).value||"","active-color":e.activeTextColor||"",level:`${t}`}))},LSe=Oe({index:{type:String,required:!0},showTimeout:Number,hideTimeout:Number,popperClass:String,popperStyle:{type:oe([String,Object])},disabled:Boolean,teleported:{type:Boolean,default:void 0},popperOffset:Number,expandCloseIcon:{type:An},expandOpenIcon:{type:An},collapseCloseIcon:{type:An},collapseOpenIcon:{type:An}}),Vx="ElSubMenu";var OM=ye({name:Vx,props:LSe,setup(e,{slots:t,expose:n}){const r=Tt(),{indexPath:a,parentMenu:i}=IU(r,M(()=>e.index)),o=Ee("menu"),s=Ee("sub-menu"),l=Ge(RM);l||nr(Vx,"can not inject root menu");const u=Ge(`${s_}${i.value.uid}`);u||nr(Vx,"can not inject sub menu");const c=H({}),d=H({});let f;const h=H(!1),v=H(),p=H(),g=M(()=>u.level===0),m=M(()=>T.value==="horizontal"&&g.value?"bottom-start":"right-start"),b=M(()=>T.value==="horizontal"&&g.value||T.value==="vertical"&&!l.props.collapse?e.expandCloseIcon&&e.expandOpenIcon?x.value?e.expandOpenIcon:e.expandCloseIcon:ll:e.collapseCloseIcon&&e.collapseOpenIcon?x.value?e.collapseOpenIcon:e.collapseCloseIcon:Wa),_=M(()=>{const Y=e.teleported;return qt(Y)?g.value:Y}),w=M(()=>l.props.collapse?`${o.namespace.value}-zoom-in-left`:`${o.namespace.value}-zoom-in-top`),S=M(()=>T.value==="horizontal"&&g.value?["bottom-start","bottom-end","top-start","top-end","right-start","left-start"]:["right-start","right","right-end","left-start","bottom-start","bottom-end","top-start","top-end"]),x=M(()=>l.openedMenus.includes(e.index)),C=M(()=>[...Object.values(c.value),...Object.values(d.value)].some(({active:Y})=>Y)),T=M(()=>l.props.mode),E=M(()=>l.props.persistent),k=Qt({index:e.index,indexPath:a,active:C}),A=MU(l.props,u.level+1),I=M(()=>e.popperOffset??l.props.popperOffset),P=M(()=>e.popperClass??l.props.popperClass),R=M(()=>e.popperStyle??l.props.popperStyle),O=M(()=>e.showTimeout??l.props.showTimeout),$=M(()=>e.hideTimeout??l.props.hideTimeout),N=()=>{var Y,q,re;return(re=(q=(Y=p.value)==null?void 0:Y.popperRef)==null?void 0:q.popperInstanceRef)==null?void 0:re.destroy()},D=Y=>{Y||N()},F=()=>{l.props.menuTrigger==="hover"&&l.props.mode==="horizontal"||l.props.collapse&&l.props.mode==="vertical"||e.disabled||l.handleSubMenuClick({index:e.index,indexPath:a.value,active:C.value})},W=(Y,q=O.value)=>{var re;if(Y.type!=="focus"){if(l.props.menuTrigger==="click"&&l.props.mode==="horizontal"||!l.props.collapse&&l.props.mode==="vertical"||e.disabled){u.mouseInChild.value=!0;return}u.mouseInChild.value=!0,f==null||f(),{stop:f}=cv(()=>{l.openMenu(e.index,a.value)},q),_.value&&((re=i.value.vnode.el)==null||re.dispatchEvent(new MouseEvent("mouseenter"))),Y.type==="mouseenter"&&Y.target&&Ue(()=>{wy(Y.target,{preventScroll:!0})})}},z=(Y=!1)=>{var q;if(l.props.menuTrigger==="click"&&l.props.mode==="horizontal"||!l.props.collapse&&l.props.mode==="vertical"){u.mouseInChild.value=!1;return}f==null||f(),u.mouseInChild.value=!1,{stop:f}=cv(()=>!h.value&&l.closeMenu(e.index,a.value),$.value),_.value&&Y&&((q=u.handleMouseleave)==null||q.call(u,!0))};_e(()=>l.props.collapse,Y=>D(!!Y));{const Y=re=>{d.value[re.index]=re},q=re=>{delete d.value[re.index]};Ft(`${s_}${r.uid}`,{addSubMenu:Y,removeSubMenu:q,handleMouseleave:z,mouseInChild:h,level:u.level+1})}return n({opened:x}),St(()=>{l.addSubMenu(k),u.addSubMenu(k)}),yn(()=>{u.removeSubMenu(k),l.removeSubMenu(k)}),()=>{var re;const Y=[(re=t.title)==null?void 0:re.call(t),ot(Ze,{class:s.e("icon-arrow"),style:{transform:x.value?e.expandCloseIcon&&e.expandOpenIcon||e.collapseCloseIcon&&e.collapseOpenIcon&&l.props.collapse?"none":"rotateZ(180deg)":"none"}},{default:()=>qe(b.value)?ot(r.appContext.components[b.value]):ot(b.value)})],q=l.isMenuPopup?ot(ua,{ref:p,visible:x.value,effect:"light",pure:!0,offset:I.value,showArrow:!1,persistent:E.value,popperClass:P.value,popperStyle:R.value,placement:m.value,teleported:_.value,fallbackPlacements:S.value,transition:w.value,gpuAcceleration:!1},{content:()=>{var ee;return ot("div",{class:[o.m(T.value),o.m("popup-container"),P.value],onMouseenter:se=>W(se,100),onMouseleave:()=>z(!0),onFocus:se=>W(se,100)},[ot("ul",{class:[o.b(),o.m("popup"),o.m(`popup-${m.value}`)],style:A.value},[(ee=t.default)==null?void 0:ee.call(t)])])},default:()=>ot("div",{class:s.e("title"),onClick:F},Y)}):ot(ze,{},[ot("div",{class:s.e("title"),ref:v,onClick:F},Y),ot(Qw,{},{default:()=>{var ee;return gt(ot("ul",{role:"menu",class:[o.b(),o.m("inline")],style:A.value},[(ee=t.default)==null?void 0:ee.call(t)]),[[ln,x.value]])}})]);return ot("li",{class:[s.b(),s.is("active",C.value),s.is("opened",x.value),s.is("disabled",e.disabled)],role:"menuitem",ariaHaspopup:!0,ariaExpanded:x.value,onMouseenter:W,onMouseleave:()=>z(),onFocus:W},[q])}}}),DSe=class{constructor(e,t){this.parent=e,this.domNode=t,this.subIndex=0,this.subMenuItems=this.domNode.querySelectorAll("li"),this.addListeners()}gotoSubIndex(e){e===this.subMenuItems.length?e=0:e<0&&(e=this.subMenuItems.length-1),this.subMenuItems[e].focus(),this.subIndex=e}addListeners(){const e=this.parent.domNode;this.subMenuItems.forEach(t=>{t.addEventListener("keydown",n=>{const r=Mn(n);let a=!1;switch(r){case De.down:this.gotoSubIndex(this.subIndex+1),a=!0;break;case De.up:this.gotoSubIndex(this.subIndex-1),a=!0;break;case De.tab:Fb(e,"mouseleave");break;case De.enter:case De.numpadEnter:case De.space:a=!0,n.currentTarget.click();break}return a&&(n.preventDefault(),n.stopPropagation()),!1})})}},RSe=class{constructor(e,t){this.domNode=e,this.submenu=null,this.init(t)}init(e){this.domNode.setAttribute("tabindex","0");const t=this.domNode.querySelector(`.${e}-menu`);t&&(this.submenu=new DSe(this,t)),this.addListeners()}addListeners(){this.domNode.addEventListener("keydown",e=>{var r,a;const t=Mn(e);let n=!1;switch(t){case De.down:Fb(e.currentTarget,"mouseenter"),(r=this.submenu)==null||r.gotoSubIndex(0),n=!0;break;case De.up:Fb(e.currentTarget,"mouseenter"),(a=this.submenu)==null||a.gotoSubIndex(this.submenu.subMenuItems.length-1),n=!0;break;case De.tab:Fb(e.currentTarget,"mouseleave");break;case De.enter:case De.numpadEnter:case De.space:n=!0,e.currentTarget.click();break}n&&e.preventDefault()})}},OSe=class{constructor(e,t){this.domNode=e,this.init(t)}init(e){const t=this.domNode.childNodes;Array.from(t).forEach(n=>{n.nodeType===1&&new RSe(n,e)})}},NSe=ye({name:"ElMenuCollapseTransition",__name:"menu-collapse-transition",setup(e){const t=Ee("menu"),n={onBeforeEnter:r=>r.style.opacity="0.2",onEnter(r,a){go(r,`${t.namespace.value}-opacity-transition`),r.style.opacity="1",a()},onAfterEnter(r){Ha(r,`${t.namespace.value}-opacity-transition`),r.style.opacity=""},onBeforeLeave(r){r.dataset||(r.dataset={}),Fs(r,t.m("collapse"))?(Ha(r,t.m("collapse")),r.dataset.oldOverflow=r.style.overflow,r.dataset.scrollWidth=r.clientWidth.toString(),go(r,t.m("collapse"))):(go(r,t.m("collapse")),r.dataset.oldOverflow=r.style.overflow,r.dataset.scrollWidth=r.clientWidth.toString(),Ha(r,t.m("collapse"))),r.style.width=`${r.scrollWidth}px`,r.style.overflow="hidden"},onLeave(r){go(r,"horizontal-collapse-transition"),r.style.width=`${r.dataset.scrollWidth}px`}};return(r,a)=>(L(),ve(ya,Mt({mode:"out-in"},n),{default:G(()=>[he(r.$slots,"default")]),_:3},16))}}),VSe=NSe;const $Se=Oe({mode:{type:String,values:["horizontal","vertical"],default:"vertical"},defaultActive:{type:String,default:""},defaultOpeneds:{type:oe(Array),default:()=>sr([])},uniqueOpened:Boolean,router:Boolean,menuTrigger:{type:String,values:["hover","click"],default:"hover"},collapse:Boolean,backgroundColor:String,textColor:String,activeTextColor:String,closeOnClickOutside:Boolean,collapseTransition:{type:Boolean,default:!0},ellipsis:{type:Boolean,default:!0},popperOffset:{type:Number,default:6},ellipsisIcon:{type:An,default:()=>Bde},popperEffect:{type:oe(String),default:"dark"},popperClass:String,popperStyle:{type:oe([String,Object])},showTimeout:{type:Number,default:300},hideTimeout:{type:Number,default:300},persistent:{type:Boolean,default:!0}}),$x=e=>Me(e)&&e.every(t=>qe(t)),BSe={close:(e,t)=>qe(e)&&$x(t),open:(e,t)=>qe(e)&&$x(t),select:(e,t,n,r)=>qe(e)&&$x(t)&&yt(n)&&(qt(r)||r instanceof Promise)},zN=64;var FSe=ye({name:"ElMenu",props:$Se,emits:BSe,setup(e,{emit:t,slots:n,expose:r}){const a=Tt(),i=a.appContext.config.globalProperties.$router,o=H(),s=H(),l=Ee("menu"),u=Ee("sub-menu");let c=zN;const d=H(-1),f=H(e.defaultOpeneds&&!e.collapse?e.defaultOpeneds.slice(0):[]),h=H(e.defaultActive),v=H({}),p=H({}),g=M(()=>e.mode==="horizontal"||e.mode==="vertical"&&e.collapse),m=()=>{const N=h.value&&v.value[h.value];!N||e.mode==="horizontal"||e.collapse||N.indexPath.forEach(D=>{const F=p.value[D];F&&b(D,F.indexPath)})},b=(N,D)=>{f.value.includes(N)||(e.uniqueOpened&&(f.value=f.value.filter(F=>D.includes(F))),f.value.push(N),t("open",N,D))},_=N=>{const D=f.value.indexOf(N);D!==-1&&f.value.splice(D,1)},w=(N,D)=>{_(N),t("close",N,D)},S=({index:N,indexPath:D})=>{f.value.includes(N)?w(N,D):b(N,D)},x=N=>{(e.mode==="horizontal"||e.collapse)&&(f.value=[]);const{index:D,indexPath:F}=N;if(!(wr(D)||wr(F)))if(e.router&&i){const W=N.route||D,z=i.push(W).then(Y=>(Y||(h.value=D),Y));t("select",D,F,{index:D,indexPath:F,route:W},z)}else h.value=D,t("select",D,F,{index:D,indexPath:F})},C=N=>{var F;const D=v.value;h.value=((F=D[N]||h.value&&D[h.value]||D[e.defaultActive])==null?void 0:F.index)??N},T=N=>{const D=getComputedStyle(N),F=Number.parseInt(D.marginLeft,10),W=Number.parseInt(D.marginRight,10);return N.offsetWidth+F+W||0},E=()=>{if(!o.value)return-1;const N=Array.from(o.value.childNodes).filter(re=>re.nodeName!=="#comment"&&(re.nodeName!=="#text"||re.nodeValue)),D=getComputedStyle(o.value),F=Number.parseInt(D.paddingLeft,10),W=Number.parseInt(D.paddingRight,10),z=o.value.clientWidth-F-W;let Y=0,q=0;return N.forEach((re,ee)=>{Y+=T(re),Y<=z-c&&(q=ee+1)}),q===N.length?-1:q},k=N=>p.value[N].indexPath,A=(N,D=33.34)=>{let F;return()=>{F&&clearTimeout(F),F=setTimeout(()=>{N()},D)}};let I=!0;const P=()=>{const N=Lr(s);if(N&&(c=T(N)||zN),d.value===E())return;const D=()=>{d.value=-1,Ue(()=>{d.value=E()})};I?D():A(D)(),I=!1};_e(()=>e.defaultActive,N=>{v.value[N]||(h.value=""),C(N)}),_e(()=>e.collapse,N=>{N&&(f.value=[])}),_e(v.value,m);let R;Ua(()=>{e.mode==="horizontal"&&e.ellipsis?R=Kn(o,P).stop:R==null||R()});const O=H(!1);{const N=z=>{p.value[z.index]=z},D=z=>{delete p.value[z.index]};Ft(RM,Qt({props:e,openedMenus:f,items:v,subMenus:p,activeIndex:h,isMenuPopup:g,addMenuItem:z=>{v.value[z.index]=z},removeMenuItem:z=>{delete v.value[z.index]},addSubMenu:N,removeSubMenu:D,openMenu:b,closeMenu:w,handleMenuItemClick:x,handleSubMenuClick:S})),Ft(`${s_}${a.uid}`,{addSubMenu:N,removeSubMenu:D,mouseInChild:O,level:0})}St(()=>{e.mode==="horizontal"&&new OSe(a.vnode.el,l.namespace.value)}),r({open:D=>{const{indexPath:F}=p.value[D];F.forEach(W=>b(W,F))},close:_,updateActiveIndex:C,handleResize:P});const $=MU(e,0);return()=>{var z;let N=((z=n.default)==null?void 0:z.call(n))??[];const D=[];if(e.mode==="horizontal"&&o.value){const Y=Fi(N).filter(ee=>(ee==null?void 0:ee.shapeFlag)!==8),q=d.value===-1?Y:Y.slice(0,d.value),re=d.value===-1?[]:Y.slice(d.value);re!=null&&re.length&&e.ellipsis&&(N=q,D.push(ot(OM,{ref:s,index:"sub-menu-more",class:u.e("hide-arrow"),popperOffset:e.popperOffset},{title:()=>ot(Ze,{class:u.e("icon-more")},{default:()=>ot(e.ellipsisIcon)}),default:()=>re})))}const F=e.closeOnClickOutside?[[yc,()=>{f.value.length&&(O.value||(f.value.forEach(Y=>t("close",Y,k(Y))),f.value=[]))}]]:[],W=gt(ot("ul",{key:String(e.collapse),role:"menubar",ref:o,style:$.value,class:{[l.b()]:!0,[l.m(e.mode)]:!0,[l.m("collapse")]:e.collapse}},[...N,...D]),F);return e.collapseTransition&&e.mode==="vertical"?ot(VSe,()=>W):W}}});const zSe=Oe({index:{type:String,required:!0},route:{type:oe([String,Object])},disabled:Boolean}),HSe={click:e=>qe(e.index)&&Me(e.indexPath)},WSe={title:String},Bx="ElMenuItem";var GSe=ye({name:Bx,__name:"menu-item",props:zSe,emits:HSe,setup(e,{expose:t,emit:n}){const r=e,a=n,i=Tt(),o=Ge(RM),s=Ee("menu"),l=Ee("menu-item");o||nr(Bx,"can not inject root menu");const{parentMenu:u,indexPath:c}=IU(i,xn(r,"index")),d=Ge(`${s_}${u.value.uid}`);d||nr(Bx,"can not inject sub menu");const f=M(()=>r.index===o.activeIndex),h=Qt({index:r.index,indexPath:c,active:f}),v=()=>{r.disabled||(o.handleMenuItemClick({index:r.index,indexPath:c.value,route:r.route}),a("click",h))};return St(()=>{d.addSubMenu(h),o.addMenuItem(h)}),yn(()=>{d.removeSubMenu(h),o.removeMenuItem(h)}),t({parentMenu:u,rootMenu:o,active:f,nsMenu:s,nsMenuItem:l,handleClick:v}),(p,g)=>(L(),K("li",{class:B([y(l).b(),y(l).is("active",f.value),y(l).is("disabled",e.disabled)]),role:"menuitem",tabindex:"-1",onClick:v},[y(u).type.name==="ElMenu"&&y(o).props.collapse&&p.$slots.title?(L(),ve(y(ua),{key:0,effect:y(o).props.popperEffect,placement:"right","fallback-placements":["left"],"popper-class":y(o).props.popperClass,"popper-style":y(o).props.popperStyle,persistent:y(o).props.persistent,"focus-on-target":""},{content:G(()=>[he(p.$slots,"title")]),default:G(()=>[j("div",{class:B(y(s).be("tooltip","trigger"))},[he(p.$slots,"default")],2)]),_:3},8,["effect","popper-class","popper-style","persistent"])):(L(),K(ze,{key:1},[he(p.$slots,"default"),he(p.$slots,"title")],64))],2))}}),PU=GSe,USe=ye({name:"ElMenuItemGroup",__name:"menu-item-group",props:WSe,setup(e){const t=Ee("menu-item-group");return(n,r)=>(L(),K("li",{class:B(y(t).b())},[j("div",{class:B(y(t).e("title"))},[n.$slots.title?he(n.$slots,"title",{key:1}):(L(),K(ze,{key:0},[Le(ce(e.title),1)],64))],2),j("ul",null,[he(n.$slots,"default")])],2))}}),LU=USe;const KSe=xt(FSe,{MenuItem:PU,MenuItemGroup:LU,SubMenu:OM}),YSe=rr(PU),jSe=rr(LU),qSe=rr(OM),XSe=Oe({icon:{type:An,default:()=>nde},title:String,content:{type:String,default:""}}),ZSe={back:()=>!0},JSe=["aria-label"];var QSe=ye({name:"ElPageHeader",__name:"page-header",props:XSe,emits:ZSe,setup(e,{emit:t}){const n=t,{t:r}=Yt(),a=Ee("page-header");function i(){n("back")}return(o,s)=>(L(),K("div",{class:B([y(a).b(),y(a).is("contentful",!!o.$slots.default),{[y(a).m("has-breadcrumb")]:!!o.$slots.breadcrumb,[y(a).m("has-extra")]:!!o.$slots.extra}])},[o.$slots.breadcrumb?(L(),K("div",{key:0,class:B(y(a).e("breadcrumb"))},[he(o.$slots,"breadcrumb")],2)):fe("v-if",!0),j("div",{class:B(y(a).e("header"))},[j("div",{class:B(y(a).e("left"))},[j("div",{class:B(y(a).e("back")),role:"button",tabindex:"0",onClick:i},[e.icon||o.$slots.icon?(L(),K("div",{key:0,"aria-label":e.title||y(r)("el.pageHeader.title"),class:B(y(a).e("icon"))},[he(o.$slots,"icon",{},()=>[e.icon?(L(),ve(y(Ze),{key:0},{default:G(()=>[(L(),ve(Et(e.icon)))]),_:1})):fe("v-if",!0)])],10,JSe)):fe("v-if",!0),j("div",{class:B(y(a).e("title"))},[he(o.$slots,"title",{},()=>[Le(ce(e.title||y(r)("el.pageHeader.title")),1)])],2)],2),V(y(mU),{direction:"vertical"}),j("div",{class:B(y(a).e("content"))},[he(o.$slots,"content",{},()=>[Le(ce(e.content),1)])],2)],2),o.$slots.extra?(L(),K("div",{key:0,class:B(y(a).e("extra"))},[he(o.$slots,"extra")],2)):fe("v-if",!0)],2),o.$slots.default?(L(),K("div",{key:1,class:B(y(a).e("main"))},[he(o.$slots,"default")],2)):fe("v-if",!0)],2))}}),exe=QSe;const txe=xt(exe),DU=Symbol("elPaginationKey"),nxe=Oe({disabled:Boolean,currentPage:{type:Number,default:1},prevText:{type:String},prevIcon:{type:An}}),rxe={click:e=>e instanceof MouseEvent},axe=["disabled","aria-label","aria-disabled"],ixe={key:0};var oxe=ye({name:"ElPaginationPrev",__name:"prev",props:nxe,emits:rxe,setup(e){const t=e,{t:n}=Yt(),r=M(()=>t.disabled||t.currentPage<=1);return(a,i)=>(L(),K("button",{type:"button",class:"btn-prev",disabled:r.value,"aria-label":a.prevText||y(n)("el.pagination.prev"),"aria-disabled":r.value,onClick:i[0]||(i[0]=o=>a.$emit("click",o))},[a.prevText?(L(),K("span",ixe,ce(a.prevText),1)):(L(),ve(y(Ze),{key:1},{default:G(()=>[(L(),ve(Et(a.prevIcon)))]),_:1}))],8,axe))}}),sxe=oxe;const lxe=Oe({disabled:Boolean,currentPage:{type:Number,default:1},pageCount:{type:Number,default:50},nextText:{type:String},nextIcon:{type:An}}),uxe=["disabled","aria-label","aria-disabled"],cxe={key:0};var dxe=ye({name:"ElPaginationNext",__name:"next",props:lxe,emits:["click"],setup(e){const t=e,{t:n}=Yt(),r=M(()=>t.disabled||t.currentPage===t.pageCount||t.pageCount===0);return(a,i)=>(L(),K("button",{type:"button",class:"btn-next",disabled:r.value,"aria-label":a.nextText||y(n)("el.pagination.next"),"aria-disabled":r.value,onClick:i[0]||(i[0]=o=>a.$emit("click",o))},[a.nextText?(L(),K("span",cxe,ce(a.nextText),1)):(L(),ve(y(Ze),{key:1},{default:G(()=>[(L(),ve(Et(a.nextIcon)))]),_:1}))],8,uxe))}}),fxe=dxe;const NM=()=>Ge(DU,{}),hxe=Oe({pageSize:{type:Number,required:!0},pageSizes:{type:oe(Array),default:()=>sr([10,20,30,40,50,100])},popperClass:{type:String},popperStyle:{type:oe([String,Object])},disabled:Boolean,teleported:Boolean,size:{type:String,values:ss},appendSizeTo:String});var vxe=ye({name:"ElPaginationSizes",__name:"sizes",props:hxe,emits:["page-size-change"],setup(e,{emit:t}){const n=e,r=t,{t:a}=Yt(),i=Ee("pagination"),o=NM(),s=H(n.pageSize);_e(()=>n.pageSizes,(c,d)=>{or(c,d)||Me(c)&&r("page-size-change",c.includes(n.pageSize)?n.pageSize:n.pageSizes[0])}),_e(()=>n.pageSize,c=>{s.value=c});const l=M(()=>n.pageSizes);function u(c){var d;c!==s.value&&(s.value=c,(d=o.handleSizeChange)==null||d.call(o,Number(c)))}return(c,d)=>(L(),K("span",{class:B(y(i).e("sizes"))},[V(y(bc),{"model-value":s.value,disabled:c.disabled,"popper-class":c.popperClass,"popper-style":c.popperStyle,size:c.size,teleported:c.teleported,"validate-event":!1,"append-to":c.appendSizeTo,onChange:u},{default:G(()=>[(L(!0),K(ze,null,Lt(l.value,f=>(L(),ve(y(j1),{key:f,value:f,label:f+y(a)("el.pagination.pagesize")},null,8,["value","label"]))),128))]),_:1},8,["model-value","disabled","popper-class","popper-style","size","teleported","append-to"])],2))}}),pxe=vxe;const gxe=Oe({size:{type:String,values:ss}}),mxe=["disabled"];var yxe=ye({name:"ElPaginationJumper",__name:"jumper",props:gxe,setup(e){const{t}=Yt(),n=Ee("pagination"),{pageCount:r,disabled:a,currentPage:i,changeEvent:o}=NM(),s=H(),l=M(()=>s.value??(i==null?void 0:i.value));function u(d){s.value=d?+d:""}function c(d){d=Math.trunc(+d),o==null||o(d),s.value=void 0}return(d,f)=>(L(),K("span",{class:B(y(n).e("jump")),disabled:y(a)},[j("span",{class:B([y(n).e("goto")])},ce(y(t)("el.pagination.goto")),3),V(y(va),{size:d.size,class:B([y(n).e("editor"),y(n).is("in-pagination")]),min:1,max:y(r),disabled:y(a),"model-value":l.value,"validate-event":!1,"aria-label":y(t)("el.pagination.page"),type:"number","onUpdate:modelValue":u,onChange:c},null,8,["size","class","max","disabled","model-value","aria-label"]),j("span",{class:B([y(n).e("classifier")])},ce(y(t)("el.pagination.pageClassifier")),3)],10,mxe))}}),bxe=yxe;const _xe=Oe({total:{type:Number,default:1e3}}),wxe=["disabled"];var Sxe=ye({name:"ElPaginationTotal",__name:"total",props:_xe,setup(e){const{t}=Yt(),n=Ee("pagination"),{disabled:r}=NM();return(a,i)=>(L(),K("span",{class:B(y(n).e("total")),disabled:y(r)},ce(y(t)("el.pagination.total",{total:a.total})),11,wxe))}}),xxe=Sxe;const Cxe=Oe({currentPage:{type:Number,default:1},pageCount:{type:Number,required:!0},pagerCount:{type:Number,default:7},disabled:Boolean}),Txe=["aria-current","aria-label","tabindex"],Exe=["tabindex","aria-label"],kxe=["aria-current","aria-label","tabindex"],Axe=["tabindex","aria-label"],Ixe=["aria-current","aria-label","tabindex"];var Mxe=ye({name:"ElPaginationPager",__name:"pager",props:Cxe,emits:[Vt],setup(e,{emit:t}){const n=e,r=t,a=Ee("pager"),i=Ee("icon"),{t:o}=Yt(),s=H(!1),l=H(!1),u=H(!1),c=H(!1),d=H(!1),f=H(!1),h=M(()=>{const S=n.pagerCount,x=(S-1)/2,C=Number(n.currentPage),T=Number(n.pageCount);let E=!1,k=!1;T>S&&(C>S-x&&(E=!0),C["more","btn-quickprev",i.b(),a.is("disabled",n.disabled)]),p=M(()=>["more","btn-quicknext",i.b(),a.is("disabled",n.disabled)]),g=M(()=>n.disabled?-1:0);_e(()=>[n.pageCount,n.pagerCount,n.currentPage],([S,x,C])=>{const T=(x-1)/2;let E=!1,k=!1;S>x&&(E=C>x-T,k=CT&&(C=T)),C!==E&&r(Vt,C)}return(S,x)=>(L(),K("ul",{class:B(y(a).b()),onClick:w,onKeyup:Yn(_,["enter"])},[S.pageCount>0?(L(),K("li",{key:0,class:B([[y(a).is("active",S.currentPage===1),y(a).is("disabled",S.disabled)],"number"]),"aria-current":S.currentPage===1,"aria-label":y(o)("el.pagination.currentPage",{pager:1}),tabindex:g.value}," 1 ",10,Txe)):fe("v-if",!0),s.value?(L(),K("li",{key:1,class:B(v.value),tabindex:g.value,"aria-label":y(o)("el.pagination.prevPages",{pager:S.pagerCount-2}),onMouseenter:x[0]||(x[0]=C=>m(!0)),onMouseleave:x[1]||(x[1]=C=>u.value=!1),onFocus:x[2]||(x[2]=C=>b(!0)),onBlur:x[3]||(x[3]=C=>d.value=!1)},[(u.value||d.value)&&!S.disabled?(L(),ve(y(pc),{key:0})):(L(),ve(y(AO),{key:1}))],42,Exe)):fe("v-if",!0),(L(!0),K(ze,null,Lt(h.value,C=>(L(),K("li",{key:C,class:B([[y(a).is("active",S.currentPage===C),y(a).is("disabled",S.disabled)],"number"]),"aria-current":S.currentPage===C,"aria-label":y(o)("el.pagination.currentPage",{pager:C}),tabindex:g.value},ce(C),11,kxe))),128)),l.value?(L(),K("li",{key:2,class:B(p.value),tabindex:g.value,"aria-label":y(o)("el.pagination.nextPages",{pager:S.pagerCount-2}),onMouseenter:x[4]||(x[4]=C=>m()),onMouseleave:x[5]||(x[5]=C=>c.value=!1),onFocus:x[6]||(x[6]=C=>b()),onBlur:x[7]||(x[7]=C=>f.value=!1)},[(c.value||f.value)&&!S.disabled?(L(),ve(y(gc),{key:0})):(L(),ve(y(AO),{key:1}))],42,Axe)):fe("v-if",!0),S.pageCount>1?(L(),K("li",{key:3,class:B([[y(a).is("active",S.currentPage===S.pageCount),y(a).is("disabled",S.disabled)],"number"]),"aria-current":S.currentPage===S.pageCount,"aria-label":y(o)("el.pagination.currentPage",{pager:S.pageCount}),tabindex:g.value},ce(S.pageCount),11,Ixe)):fe("v-if",!0)],34))}}),Pxe=Mxe;const qa=e=>typeof e!="number",Lxe=Oe({pageSize:Number,defaultPageSize:Number,total:Number,pageCount:Number,pagerCount:{type:Number,validator:e=>Je(e)&&Math.trunc(e)===e&&e>4&&e<22&&e%2===1,default:7},currentPage:Number,defaultCurrentPage:Number,layout:{type:String,default:["prev","pager","next","jumper","->","total"].join(", ")},pageSizes:{type:oe(Array),default:()=>sr([10,20,30,40,50,100])},popperClass:{type:String,default:""},popperStyle:{type:oe([String,Object])},prevText:{type:String,default:""},prevIcon:{type:An,default:()=>Yl},nextText:{type:String,default:""},nextIcon:{type:An,default:()=>Wa},teleported:{type:Boolean,default:!0},small:Boolean,size:$r,background:Boolean,disabled:Boolean,hideOnSinglePage:Boolean,appendSizeTo:String}),Dxe={"update:current-page":e=>Je(e),"update:page-size":e=>Je(e),"size-change":e=>Je(e),change:(e,t)=>Je(e)&&Je(t),"current-change":e=>Je(e),"prev-click":e=>Je(e),"next-click":e=>Je(e)},HN="ElPagination";var Rxe=ye({name:HN,props:Lxe,emits:Dxe,setup(e,{emit:t,slots:n}){const{t:r}=Yt(),a=Ee("pagination"),i=Tt().vnode.props||{},o=QW(),s=M(()=>e.small?"small":e.size??o.value);Bs({from:"small",replacement:"size",version:"3.0.0",scope:"el-pagination",ref:"https://element-plus.org/zh-CN/component/pagination.html"},M(()=>!!e.small));const l="onUpdate:currentPage"in i||"onUpdate:current-page"in i||"onCurrentChange"in i,u="onUpdate:pageSize"in i||"onUpdate:page-size"in i||"onSizeChange"in i,c=M(()=>{if(qa(e.total)&&qa(e.pageCount)||!qa(e.currentPage)&&!l)return!1;if(e.layout.includes("sizes")){if(qa(e.pageCount)){if(!qa(e.total)&&!qa(e.pageSize)&&!u)return!1}else if(!u)return!1}return!0}),d=H(qa(e.defaultPageSize)?10:e.defaultPageSize),f=H(qa(e.defaultCurrentPage)?1:e.defaultCurrentPage),h=M({get(){return qa(e.pageSize)?d.value:e.pageSize},set(S){qa(e.pageSize)&&(d.value=S),u&&(t("update:page-size",S),t("size-change",S))}}),v=M(()=>{let S=0;return qa(e.pageCount)?qa(e.total)||(S=Math.max(1,Math.ceil(e.total/h.value))):S=e.pageCount,S}),p=M({get(){return qa(e.currentPage)?f.value:e.currentPage},set(S){let x=S;S<1?x=1:S>v.value&&(x=v.value),qa(e.currentPage)&&(f.value=x),l&&(t("update:current-page",x),t("current-change",x))}});_e(v,S=>{p.value>S&&(p.value=S)}),_e([p,h],S=>{t(Vt,...S)},{flush:"post"});function g(S){p.value=S}function m(S){h.value=S;const x=v.value;p.value>x&&(p.value=x)}function b(){e.disabled||(p.value-=1,t("prev-click",p.value))}function _(){e.disabled||(p.value+=1,t("next-click",p.value))}function w(S,x){S&&(S.props||(S.props={}),S.props.class=[S.props.class,x].join(" "))}return Ft(DU,{pageCount:v,disabled:M(()=>e.disabled),currentPage:p,changeEvent:g,handleSizeChange:m}),()=>{var A;if(!c.value)return wn(HN,r("el.pagination.deprecationWarning")),null;if(!e.layout||e.hideOnSinglePage&&v.value<=1)return null;const S=[],x=[],C=ot("div",{class:a.e("rightwrapper")},x),T={prev:ot(sxe,{disabled:e.disabled,currentPage:p.value,prevText:e.prevText,prevIcon:e.prevIcon,onClick:b}),jumper:ot(bxe,{size:s.value}),pager:ot(Pxe,{currentPage:p.value,pageCount:v.value,pagerCount:e.pagerCount,onChange:g,disabled:e.disabled}),next:ot(fxe,{disabled:e.disabled,currentPage:p.value,pageCount:v.value,nextText:e.nextText,nextIcon:e.nextIcon,onClick:_}),sizes:ot(pxe,{pageSize:h.value,pageSizes:e.pageSizes,popperClass:e.popperClass,popperStyle:e.popperStyle,disabled:e.disabled,teleported:e.teleported,size:s.value,appendSizeTo:e.appendSizeTo}),slot:((A=n==null?void 0:n.default)==null?void 0:A.call(n))??null,total:ot(xxe,{total:qa(e.total)?0:e.total})},E=e.layout.split(",").map(I=>I.trim());let k=!1;return E.forEach(I=>{if(I==="->"){k=!0;return}k?x.push(T[I]):S.push(T[I])}),w(S[0],a.is("first")),w(S[S.length-1],a.is("last")),k&&x.length>0&&(w(x[0],a.is("first")),w(x[x.length-1],a.is("last")),S.push(C)),ot("div",{class:[a.b(),a.is("background",e.background),a.m(s.value)]},S)}}});const Oxe=xt(Rxe),Nxe=Oe({title:String,confirmButtonText:String,cancelButtonText:String,confirmButtonType:{type:String,values:sE,default:"primary"},cancelButtonType:{type:String,values:sE,default:"text"},icon:{type:An,default:()=>Kde},iconColor:{type:String,default:"#f90"},hideIcon:Boolean,hideAfter:{type:Number,default:200},effect:{...Tn.effect,default:"light"},teleported:Tn.teleported,persistent:Tn.persistent,width:{type:[String,Number],default:150},virtualTriggering:Ws.virtualTriggering,virtualRef:Ws.virtualRef}),Vxe={confirm:e=>e instanceof MouseEvent,cancel:e=>e instanceof MouseEvent};var $xe=ye({name:"ElPopconfirm",__name:"popconfirm",props:Nxe,emits:Vxe,setup(e,{expose:t,emit:n}){const r=e,a=n,{t:i}=Yt(),o=Ee("popconfirm"),s=H(),l=H(),u=M(()=>{var m;return(m=y(s))==null?void 0:m.popperRef}),c=()=>{var m,b;(b=(m=l.value)==null?void 0:m.focus)==null||b.call(m)},d=()=>{var m,b;(b=(m=s.value)==null?void 0:m.onClose)==null||b.call(m)},f=M(()=>({width:ur(r.width)})),h=m=>{a("confirm",m),d()},v=m=>{a("cancel",m),d()},p=M(()=>r.confirmButtonText||i("el.popconfirm.confirmButtonText")),g=M(()=>r.cancelButtonText||i("el.popconfirm.cancelButtonText"));return t({popperRef:u,hide:d}),(m,b)=>(L(),ve(y(ua),Mt({ref_key:"tooltipRef",ref:s,trigger:"click",effect:e.effect},m.$attrs,{"virtual-triggering":e.virtualTriggering,"virtual-ref":e.virtualRef,"popper-class":`${y(o).namespace.value}-popover`,"popper-style":f.value,teleported:e.teleported,"fallback-placements":["bottom","top","right","left"],"hide-after":e.hideAfter,persistent:e.persistent,loop:"",onShow:c}),{content:G(()=>[j("div",{ref_key:"rootRef",ref:l,tabindex:"-1",class:B(y(o).b())},[j("div",{class:B(y(o).e("main"))},[!e.hideIcon&&e.icon?(L(),ve(y(Ze),{key:0,class:B(y(o).e("icon")),style:tt({color:e.iconColor})},{default:G(()=>[(L(),ve(Et(e.icon)))]),_:1},8,["class","style"])):fe("v-if",!0),Le(" "+ce(e.title),1)],2),j("div",{class:B(y(o).e("action"))},[he(m.$slots,"actions",{confirm:h,cancel:v},()=>[V(y(Xr),{size:"small",type:e.cancelButtonType==="text"?"":e.cancelButtonType,text:e.cancelButtonType==="text",onClick:v},{default:G(()=>[Le(ce(g.value),1)]),_:1},8,["type","text"]),V(y(Xr),{size:"small",type:e.confirmButtonType==="text"?"":e.confirmButtonType,text:e.confirmButtonType==="text",onClick:h},{default:G(()=>[Le(ce(p.value),1)]),_:1},8,["type","text"])])],2)],2)]),default:G(()=>[m.$slots.reference?he(m.$slots,"reference",{key:0}):fe("v-if",!0)]),_:3},16,["effect","virtual-triggering","virtual-ref","popper-class","popper-style","teleported","hide-after","persistent"]))}}),Bxe=$xe;const Fxe=xt(Bxe),zxe=Oe({type:{type:String,default:"line",values:["line","circle","dashboard"]},percentage:{type:Number,default:0,validator:e=>e>=0&&e<=100},status:{type:String,default:"",values:["","success","exception","warning"]},indeterminate:Boolean,duration:{type:Number,default:3},strokeWidth:{type:Number,default:6},strokeLinecap:{type:oe(String),default:"round"},textInside:Boolean,width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:oe([String,Array,Function]),default:""},striped:Boolean,stripedFlow:Boolean,format:{type:oe(Function),default:e=>`${e}%`}}),Hxe=["aria-valuenow"],Wxe={viewBox:"0 0 100 100"},Gxe=["d","stroke","stroke-linecap","stroke-width"],Uxe=["d","stroke","opacity","stroke-linecap","stroke-width"],Kxe={key:0};var Yxe=ye({name:"ElProgress",__name:"progress",props:zxe,setup(e){const t={success:"#13ce66",exception:"#ff4949",warning:"#e6a23c",default:"#20a0ff"},n=e,r=Ee("progress"),a=M(()=>{const _={width:`${n.percentage}%`,animationDuration:`${n.duration}s`},w=b(n.percentage);return w.includes("gradient")?_.background=w:_.backgroundColor=w,_}),i=M(()=>(n.strokeWidth/n.width*100).toFixed(1)),o=M(()=>["circle","dashboard"].includes(n.type)?Number.parseInt(`${50-Number.parseFloat(i.value)/2}`,10):0),s=M(()=>{const _=o.value,w=n.type==="dashboard";return` + M 50 50 + m 0 ${w?"":"-"}${_} + a ${_} ${_} 0 1 1 0 ${w?"-":""}${_*2} + a ${_} ${_} 0 1 1 0 ${w?"":"-"}${_*2} + `}),l=M(()=>2*Math.PI*o.value),u=M(()=>n.type==="dashboard"?.75:1),c=M(()=>`${-1*l.value*(1-u.value)/2}px`),d=M(()=>({strokeDasharray:`${l.value*u.value}px, ${l.value}px`,strokeDashoffset:c.value})),f=M(()=>({strokeDasharray:`${l.value*u.value*(n.percentage/100)}px, ${l.value}px`,strokeDashoffset:c.value,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease, opacity ease 0.6s"})),h=M(()=>{let _;return n.color?_=b(n.percentage):_=t[n.status]||t.default,_}),v=M(()=>n.status==="warning"?Yw:n.type==="line"?n.status==="success"?rM:ul:n.status==="success"?mv:To),p=M(()=>n.type==="line"?12+n.strokeWidth*.4:n.width*.111111+2),g=M(()=>n.format(n.percentage));function m(_){const w=100/_.length;return _.map((S,x)=>qe(S)?{color:S,percentage:(x+1)*w}:S).sort((S,x)=>S.percentage-x.percentage)}const b=_=>{var S;const{color:w}=n;if(et(w))return w(_);if(qe(w))return w;{const x=m(w);for(const C of x)if(C.percentage>_)return C.color;return(S=x[x.length-1])==null?void 0:S.color}};return(_,w)=>(L(),K("div",{class:B([y(r).b(),y(r).m(e.type),y(r).is(e.status),{[y(r).m("without-text")]:!e.showText,[y(r).m("text-inside")]:e.textInside}]),role:"progressbar","aria-valuenow":e.percentage,"aria-valuemin":"0","aria-valuemax":"100"},[e.type==="line"?(L(),K("div",{key:0,class:B(y(r).b("bar"))},[j("div",{class:B(y(r).be("bar","outer")),style:tt({height:`${e.strokeWidth}px`})},[j("div",{class:B([y(r).be("bar","inner"),{[y(r).bem("bar","inner","indeterminate")]:e.indeterminate},{[y(r).bem("bar","inner","striped")]:e.striped},{[y(r).bem("bar","inner","striped-flow")]:e.stripedFlow}]),style:tt(a.value)},[(e.showText||_.$slots.default)&&e.textInside?(L(),K("div",{key:0,class:B(y(r).be("bar","innerText"))},[he(_.$slots,"default",{percentage:e.percentage},()=>[j("span",null,ce(g.value),1)])],2)):fe("v-if",!0)],6)],6)],2)):(L(),K("div",{key:1,class:B(y(r).b("circle")),style:tt({height:`${e.width}px`,width:`${e.width}px`})},[(L(),K("svg",Wxe,[j("path",{class:B(y(r).be("circle","track")),d:s.value,stroke:`var(${y(r).cssVarName("fill-color-light")}, #e5e9f2)`,"stroke-linecap":e.strokeLinecap,"stroke-width":i.value,fill:"none",style:tt(d.value)},null,14,Gxe),j("path",{class:B(y(r).be("circle","path")),d:s.value,stroke:h.value,fill:"none",opacity:e.percentage?1:0,"stroke-linecap":e.strokeLinecap,"stroke-width":i.value,style:tt(f.value)},null,14,Uxe)]))],6)),(e.showText||_.$slots.default)&&!e.textInside?(L(),K("div",{key:2,class:B(y(r).e("text")),style:tt({fontSize:`${p.value}px`})},[he(_.$slots,"default",{percentage:e.percentage},()=>[e.status?(L(),ve(y(Ze),{key:1},{default:G(()=>[(L(),ve(Et(v.value)))]),_:1})):(L(),K("span",Kxe,ce(g.value),1))])],6)):fe("v-if",!0)],10,Hxe))}}),jxe=Yxe;const RU=xt(jxe),qxe=Oe({modelValue:{type:Number,default:0},id:{type:String,default:void 0},lowThreshold:{type:Number,default:2},highThreshold:{type:Number,default:4},max:{type:Number,default:5},colors:{type:oe([Array,Object]),default:()=>sr(["","",""])},voidColor:{type:String,default:""},disabledVoidColor:{type:String,default:""},icons:{type:oe([Array,Object]),default:()=>[g0,g0,g0]},voidIcon:{type:An,default:()=>dfe},disabledVoidIcon:{type:An,default:()=>g0},disabled:{type:Boolean,default:void 0},allowHalf:Boolean,showText:Boolean,showScore:Boolean,textColor:{type:String,default:""},texts:{type:oe(Array),default:()=>sr(["Extremely bad","Disappointed","Fair","Satisfied","Surprise"])},scoreTemplate:{type:String,default:"{value}"},size:$r,clearable:Boolean,...ja(["ariaLabel"])}),Xxe={[Vt]:e=>Je(e),[mt]:e=>Je(e)},Zxe=["id","aria-label","aria-labelledby","aria-valuenow","aria-valuetext","aria-valuemax","tabindex","aria-disabled"],Jxe=["onMousemove","onClick"];var Qxe=ye({name:"ElRate",__name:"rate",props:qxe,emits:Xxe,setup(e,{expose:t,emit:n}){function r(D,F){const W=Y=>yt(Y),z=F[Object.keys(F).map(Y=>+Y).filter(Y=>{const q=F[Y];return W(q)&&q.excluded?DY-q)[0]];return W(z)&&z.value||z}const a=e,i=n,o=Ge(Js,void 0),s=Rr(),l=Ee("rate"),{inputId:u,isLabeledByFormItem:c}=Di(a,{formItemContext:o}),d=H(Ei(a.modelValue,0,a.max)),f=H(-1),h=H(!0),v=H([]),p=M(()=>v.value.map(D=>D.$el.clientWidth)),g=M(()=>[l.b(),l.m(s.value)]),m=ar(),b=M(()=>l.cssVarBlock({"void-color":a.voidColor,"disabled-void-color":a.disabledVoidColor,"fill-color":x.value})),_=M(()=>{let D="";return a.showScore?D=a.scoreTemplate.replace(/\{\s*value\s*\}/,m.value?`${a.modelValue}`:`${d.value}`):a.showText&&(D=a.texts[Math.ceil(d.value)-1]),D}),w=M(()=>a.modelValue*100-Math.floor(a.modelValue)*100),S=M(()=>Me(a.colors)?{[a.lowThreshold]:a.colors[0],[a.highThreshold]:{value:a.colors[1],excluded:!0},[a.max]:a.colors[2]}:a.colors),x=M(()=>{const D=r(d.value,S.value);return yt(D)?"":D}),C=M(()=>{let D="";return m.value?D=`${w.value}%`:a.allowHalf&&(D="50%"),{color:x.value,width:D}}),T=M(()=>{let D=Me(a.icons)?[...a.icons]:{...a.icons};return D=$s(D),Me(D)?{[a.lowThreshold]:D[0],[a.highThreshold]:{value:D[1],excluded:!0},[a.max]:D[2]}:D}),E=M(()=>r(a.modelValue,T.value)),k=M(()=>m.value?qe(a.disabledVoidIcon)?a.disabledVoidIcon:$s(a.disabledVoidIcon):qe(a.voidIcon)?a.voidIcon:$s(a.voidIcon)),A=M(()=>r(d.value,T.value));function I(D){const F=m.value&&w.value>0&&D-1a.modelValue,W=a.allowHalf&&h.value&&D-.5<=d.value&&D>d.value;return F||W}function P(D){a.clearable&&D===a.modelValue&&(D=0),i(mt,D),a.modelValue!==D&&i(Vt,D)}function R(D){m.value||(a.allowHalf&&h.value?P(d.value):P(D))}function O(D){if(m.value)return;const F=Mn(D),W=a.allowHalf?.5:1;let z=d.value;switch(F){case De.up:case De.right:z+=W;break;case De.left:case De.down:z-=W;break}if(z=Ei(z,0,a.max),z!==d.value)return D.stopPropagation(),D.preventDefault(),i(mt,z),i(Vt,z),z}function $(D,F){m.value||(a.allowHalf&&F?(h.value=F.offsetX*2<=p.value[D-1],d.value=h.value?D-.5:D):d.value=D,f.value=D)}function N(){m.value||(a.allowHalf&&(h.value=a.modelValue!==Math.floor(a.modelValue)),d.value=Ei(a.modelValue,0,a.max),f.value=-1)}return _e(()=>a.modelValue,D=>{d.value=Ei(D,0,a.max),h.value=a.modelValue!==Math.floor(a.modelValue)}),a.modelValue||i(mt,0),t({setCurrentValue:$,resetCurrentValue:N}),(D,F)=>{var W;return L(),K("div",{id:y(u),class:B([g.value,y(l).is("disabled",y(m))]),role:"slider","aria-label":y(c)?void 0:e.ariaLabel||"rating","aria-labelledby":y(c)?(W=y(o))==null?void 0:W.labelId:void 0,"aria-valuenow":d.value,"aria-valuetext":_.value||void 0,"aria-valuemin":"0","aria-valuemax":e.max,style:tt(b.value),tabindex:y(m)?void 0:0,"aria-disabled":y(m),onKeydown:O},[(L(!0),K(ze,null,Lt(e.max,(z,Y)=>(L(),K("span",{key:Y,class:B(y(l).e("item")),onMousemove:q=>$(z,q),onMouseleave:N,onClick:q=>R(z)},[V(y(Ze),{ref_for:!0,ref_key:"iconRefs",ref:v,class:B([y(l).e("icon"),{hover:f.value===z},y(l).is("active",z<=d.value),y(l).is("focus-visible",z===Math.ceil(d.value||1))])},{default:G(()=>[gt((L(),ve(Et(A.value),null,null,512)),[[ln,!I(z)&&z<=d.value]]),gt((L(),ve(Et(k.value),null,null,512)),[[ln,!I(z)&&z>d.value]]),gt((L(),ve(Et(k.value),{class:B([y(l).em("decimal","box")])},null,8,["class"])),[[ln,I(z)]]),gt(V(y(Ze),{style:tt(C.value),class:B([y(l).e("icon"),y(l).e("decimal")])},{default:G(()=>[(L(),ve(Et(E.value)))]),_:1},8,["style","class"]),[[ln,I(z)]])]),_:2},1032,["class"])],42,Jxe))),128)),e.showText||e.showScore?(L(),K("span",{key:0,class:B(y(l).e("text")),style:tt({color:e.textColor})},ce(_.value),7)):fe("v-if",!0)],46,Zxe)}}}),eCe=Qxe;const tCe=xt(eCe),Td={primary:"icon-primary",success:"icon-success",warning:"icon-warning",error:"icon-error",info:"icon-info"},WN={[Td.primary]:pm,[Td.success]:cde,[Td.warning]:Yw,[Td.error]:aM,[Td.info]:pm},nCe=Oe({title:{type:String,default:""},subTitle:{type:String,default:""},icon:{type:String,values:["primary","success","warning","info","error"],default:"info"}});var rCe=ye({name:"ElResult",__name:"result",props:nCe,setup(e){const t=e,n=Ee("result"),r=M(()=>{const a=t.icon,i=a&&Td[a]?Td[a]:"icon-info";return{class:i,component:WN[i]||WN["icon-info"]}});return(a,i)=>(L(),K("div",{class:B(y(n).b())},[j("div",{class:B(y(n).e("icon"))},[he(a.$slots,"icon",{},()=>[r.value.component?(L(),ve(Et(r.value.component),{key:0,class:B(r.value.class)},null,8,["class"])):fe("v-if",!0)])],2),e.title||a.$slots.title?(L(),K("div",{key:0,class:B(y(n).e("title"))},[he(a.$slots,"title",{},()=>[j("p",null,ce(e.title),1)])],2)):fe("v-if",!0),e.subTitle||a.$slots["sub-title"]?(L(),K("div",{key:1,class:B(y(n).e("subtitle"))},[he(a.$slots,"sub-title",{},()=>[j("p",null,ce(e.subTitle),1)])],2)):fe("v-if",!0),a.$slots.extra?(L(),K("div",{key:2,class:B(y(n).e("extra"))},[he(a.$slots,"extra")],2)):fe("v-if",!0)],2))}}),aCe=rCe;const iCe=xt(aCe),VM=Symbol("ElSelectV2Injection"),oCe=Oe({allowCreate:Boolean,autocomplete:{type:oe(String),default:"none"},automaticDropdown:Boolean,clearable:Boolean,clearIcon:{type:An,default:ul},effect:{type:oe(String),default:"light"},collapseTags:Boolean,collapseTagsTooltip:Boolean,tagTooltip:{type:oe(Object),default:()=>({})},maxCollapseTags:{type:Number,default:1},defaultFirstOption:Boolean,disabled:{type:Boolean,default:void 0},estimatedOptionHeight:{type:Number,default:void 0},filterable:Boolean,filterMethod:{type:oe(Function)},height:{type:Number,default:274},itemHeight:{type:Number,default:34},id:String,loading:Boolean,loadingText:String,modelValue:{type:oe([Array,String,Number,Boolean,Object]),default:void 0},multiple:Boolean,multipleLimit:{type:Number,default:0},name:String,noDataText:String,noMatchText:String,remoteMethod:{type:oe(Function)},reserveKeyword:{type:Boolean,default:!0},options:{type:oe(Array),required:!0},placeholder:{type:String},teleported:Tn.teleported,persistent:{type:Boolean,default:!0},popperClass:Tn.popperClass,popperStyle:Tn.popperStyle,popperOptions:{type:oe(Object),default:()=>({})},remote:Boolean,debounce:{type:Number,default:300},size:$r,props:{type:oe(Object),default:()=>Y1},valueKey:{type:String,default:"value"},scrollbarAlwaysOn:Boolean,validateEvent:{type:Boolean,default:!0},offset:{type:Number,default:12},remoteShowSuffix:Boolean,showArrow:{type:Boolean,default:!0},placement:{type:oe(String),values:ol,default:"bottom-start"},fallbackPlacements:{type:oe(Array),default:["bottom-start","top-start","right","left"]},tagType:{...jl.type,default:"info"},tagEffect:{...jl.effect,default:"light"},tabindex:{type:[String,Number],default:0},appendTo:Tn.appendTo,fitInputWidth:{type:[Boolean,Number],default:!0,validator(e){return En(e)||Je(e)}},suffixIcon:{type:An,default:ll},...Rf,...ja(["ariaLabel"])}),sCe=Oe({data:Array,disabled:Boolean,hovering:Boolean,item:{type:oe(Object),required:!0},index:Number,style:Object,selected:Boolean,created:Boolean}),lCe={[mt]:e=>!0,[Vt]:e=>!0,"end-reached":mm["end-reached"],"remove-tag":e=>!0,"visible-change":e=>!0,focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0},uCe={hover:e=>Je(e),select:(e,t)=>!0};var cCe=ye({props:{item:{type:Object,required:!0},style:{type:Object},height:Number},setup(){return{ns:Ee("select")}}});function dCe(e,t,n,r,a,i){return L(),K("div",{class:B(e.ns.be("group","title")),style:tt({...e.style,lineHeight:`${e.height}px`})},ce(e.item.label),7)}var fCe=Gr(cCe,[["render",dCe]]);function hCe(e,{emit:t}){return{hoverItem:()=>{e.disabled||t("hover",e.index)},selectOptionClick:()=>{e.disabled||t("select",e.item,e.index)}}}var vCe=ye({props:sCe,emits:uCe,setup(e,{emit:t}){const n=Ge(VM),r=Ee("select"),a=uv?null:"mousemove",{hoverItem:i,selectOptionClick:o}=hCe(e,{emit:t}),{getLabel:s}=Ly(n.props),l=n.contentId;return{ns:r,contentId:l,mouseMoveEventName:a,hoverItem:i,handleMousedown:c=>{let d=c.target;const f=c.currentTarget;for(;d&&d!==f;){if(vf(d))return;d=d.parentElement}c.preventDefault()},selectOptionClick:o,getLabel:s}}});const pCe=["id","aria-selected","aria-disabled"];function gCe(e,t,n,r,a,i){return L(),K("li",Mt({id:`${e.contentId}-${e.index}`,role:"option","aria-selected":e.selected,"aria-disabled":e.disabled||void 0,style:e.style,class:[e.ns.be("dropdown","item"),e.ns.is("selected",e.selected),e.ns.is("disabled",e.disabled),e.ns.is("created",e.created),e.ns.is("hovering",e.hovering)]},{[Ud(e.mouseMoveEventName)]:t[0]||(t[0]=(...o)=>e.hoverItem&&e.hoverItem(...o))},{onMousedown:t[1]||(t[1]=(...o)=>e.handleMousedown&&e.handleMousedown(...o)),onClick:t[2]||(t[2]=ut((...o)=>e.selectOptionClick&&e.selectOptionClick(...o),["stop"]))}),[he(e.$slots,"default",{item:e.item,index:e.index,disabled:e.disabled},()=>[j("span",null,ce(e.getLabel(e.item)),1)])],16,pCe)}var mCe=Gr(vCe,[["render",gCe]]),yCe=ye({name:"ElSelectDropdown",props:{loading:Boolean,data:{type:Array,required:!0},hoveringIndex:Number,width:Number,id:String,ariaLabel:String},emits:{"end-reached":mm["end-reached"]},setup(e,{slots:t,expose:n,emit:r}){const a=Ge(VM),i=Ee("select"),{getLabel:o,getValue:s,getDisabled:l}=Ly(a.props),u=H([]),c=H(),d=M(()=>e.data.length);_e(()=>d.value,()=>{var I,P;(P=(I=a.tooltipRef.value)==null?void 0:I.updatePopper)==null||P.call(I)});const f=M(()=>qt(a.props.estimatedOptionHeight)),h=M(()=>f.value?{itemSize:a.props.itemHeight}:{estimatedSize:a.props.estimatedOptionHeight,itemSize:I=>u.value[I]}),v=(I=[],P)=>{const{props:{valueKey:R}}=a;return yt(P)?I&&I.some(O=>$n(_r(O,R))===_r(P,R)):I.includes(P)},p=(I,P)=>{if(yt(P)){const{valueKey:R}=a.props;return _r(I,R)===_r(P,R)}else return I===P},g=(I,P)=>a.props.multiple?v(I,s(P)):p(I,s(P)),m=(I,P)=>{const{disabled:R,multiple:O,multipleLimit:$}=a.props;return R||!P&&(O?$>0&&I.length>=$:!1)},b=I=>e.hoveringIndex===I;n({listRef:c,isSized:f,isItemDisabled:m,isItemHovering:b,isItemSelected:g,scrollToItem:I=>{const P=c.value;P&&P.scrollToItem(I)},resetScrollTop:()=>{const I=c.value;I&&I.resetScrollTop()}});const S=I=>{const{index:P,data:R,style:O}=I,$=y(f),{itemSize:N,estimatedSize:D}=y(h),{modelValue:F}=a.props,{onSelect:W,onHover:z}=a,Y=R[P];if(Y.type==="Group")return V(fCe,{item:Y,style:O,height:$?N:D},null);const q=g(F,Y),re=m(F,q),ee=b(P);return V(mCe,Mt(I,{selected:q,disabled:l(Y)||re,created:!!Y.created,hovering:ee,item:Y,onSelect:W,onHover:z}),{default:se=>{var ne;return((ne=t.default)==null?void 0:ne.call(t,se))||V("span",null,[o(Y)])}})},{onKeyboardNavigate:x,onKeyboardSelect:C}=a,T=()=>{x("forward")},E=()=>{x("backward")},k=I=>{const P=Mn(I),{tab:R,esc:O,down:$,up:N,enter:D,numpadEnter:F}=De;switch([O,$,N,D,F].includes(P)&&(I.preventDefault(),I.stopPropagation()),P){case R:case O:break;case $:T();break;case N:E();break;case D:case F:C();break}},A=I=>{r("end-reached",I)};return()=>{var F,W,z,Y;const{data:I,width:P}=e,{height:R,multiple:O,scrollbarAlwaysOn:$}=a.props,N=uv?!0:$,D=y(f)?Zw:$me;return V("div",{class:[i.b("dropdown"),i.is("multiple",O)],style:{width:`${P}px`}},[(F=t.header)==null?void 0:F.call(t),((W=t.loading)==null?void 0:W.call(t))||((z=t.empty)==null?void 0:z.call(t))||V(D,Mt({ref:c},y(h),{className:i.be("dropdown","list"),scrollbarAlwaysOn:N,data:I,height:R,width:P,total:I.length,innerElement:"ul",innerProps:{id:e.id,role:"listbox","aria-label":e.ariaLabel,"aria-orientation":"vertical"},onEndReached:A,onKeydown:k}),{default:q=>V(S,q,null)}),(Y=t.footer)==null?void 0:Y.call(t)])}}});function bCe(e,t){const{aliasProps:n,getLabel:r,getValue:a}=Ly(e),i=H(0),o=H(),s=M(()=>e.allowCreate&&e.filterable);_e(()=>e.options,h=>{const v=new Set(h.map(p=>r(p)));t.createdOptions=t.createdOptions.filter(p=>!v.has(r(p)))});function l(h){const v=p=>r(p)===h;return e.options&&e.options.some(v)||t.createdOptions.some(v)}function u(h){s.value&&(e.multiple&&h.created?i.value++:o.value=h)}function c(h){if(s.value)if(h&&h.length>0){if(l(h)){t.createdOptions=t.createdOptions.filter(p=>r(p)!==t.previousQuery);return}const v={[n.value.value]:h,[n.value.label]:h,created:!0,[n.value.disabled]:!1};t.createdOptions.length>=i.value?t.createdOptions[i.value]=v:t.createdOptions.push(v)}else if(e.multiple)t.createdOptions.length=i.value;else{const v=o.value;t.createdOptions.length=0,v&&v.created&&t.createdOptions.push(v)}}function d(h){if(!s.value||!h||!h.created||h.created&&e.reserveKeyword&&t.inputValue===r(h))return;const v=t.createdOptions.findIndex(p=>a(p)===a(h));~v&&(t.createdOptions.splice(v,1),i.value--)}function f(){s.value&&(t.createdOptions.length=0,i.value=0)}return{createNewOption:c,removeNewOption:d,selectNewOption:u,clearAllNewOption:f}}const _Ce=(e,t)=>{const{t:n}=Yt(),r=pr(),a=Ee("select"),i=Ee("input"),{form:o,formItem:s}=ea(),{inputId:l}=Di(e,{formItemContext:s}),{aliasProps:u,getLabel:c,getValue:d,getDisabled:f,getOptions:h}=Ly(e),{valueOnClear:v,isEmptyValue:p}=Iy(e),g=Qt({inputValue:"",cachedOptions:[],createdOptions:[],hoveringIndex:-1,inputHovering:!1,selectionWidth:0,collapseItemWidth:0,previousQuery:null,previousValue:void 0,selectedLabel:"",menuVisibleOnFocus:!1,isBeforeHide:!1}),m=H(-1),b=H(!1),_=H(),w=H(),S=H(),x=H(),C=H(),T=H(),E=H(),k=H(),A=H(),I=H(),{isComposing:P,handleCompositionStart:R,handleCompositionEnd:O,handleCompositionUpdate:$}=Ay({afterComposition:Be=>qn(Be)}),N=ar(),{wrapperRef:D,isFocused:F,handleBlur:W}=uu(C,{disabled:N,afterFocus(){e.automaticDropdown&&!re.value&&(re.value=!0,g.menuVisibleOnFocus=!0)},beforeBlur(Be){var Ct,Ht;return((Ct=S.value)==null?void 0:Ct.isFocusInsideContent(Be))||((Ht=x.value)==null?void 0:Ht.isFocusInsideContent(Be))},afterBlur(){var Be;re.value=!1,g.menuVisibleOnFocus=!1,e.validateEvent&&((Be=s==null?void 0:s.validate)==null||Be.call(s,"blur").catch(It))}}),z=M(()=>Pe("")),Y=M(()=>e.loading?!1:e.options.length>0||g.createdOptions.length>0),q=H([]),re=H(!1),ee=M(()=>(o==null?void 0:o.statusIcon)??!1),se=M(()=>{const Be=q.value.length*e.itemHeight;return Be>e.height?e.height:Be}),ne=M(()=>e.multiple?Me(e.modelValue)&&e.modelValue.length>0:!p(e.modelValue)),de=M(()=>e.clearable&&!N.value&&ne.value&&(F.value||g.inputHovering)),le=M(()=>e.remote&&e.filterable&&!e.remoteShowSuffix?"":e.suffixIcon),J=M(()=>le.value&&a.is("reverse",re.value)),Z=M(()=>(s==null?void 0:s.validateState)||""),U=M(()=>{if(Z.value)return jw[Z.value]}),te=M(()=>e.remote?e.debounce:0),Q=M(()=>e.remote&&!g.inputValue&&!Y.value),ue=M(()=>e.loading?e.loadingText||n("el.select.loading"):e.filterable&&g.inputValue&&Y.value&&q.value.length===0?e.noMatchText||n("el.select.noMatch"):Y.value?null:e.noDataText||n("el.select.noData")),pe=M(()=>e.filterable&&et(e.filterMethod)),me=M(()=>e.filterable&&e.remote&&et(e.remoteMethod)),Pe=Be=>{const Ct=new RegExp($I(Be),"i"),Ht=Zt=>pe.value||me.value?!0:Be?Ct.test(c(Zt)||""):!0;return e.loading?[]:[...g.createdOptions,...e.options].reduce((Zt,fa)=>{const mi=h(fa);if(Me(mi)){const pp=mi.filter(Ht);pp.length>0&&Zt.push({label:c(fa),type:"Group"},...pp)}else(e.remote||Ht(fa))&&Zt.push(fa);return Zt},[])},Ne=()=>{q.value=Pe(g.inputValue)},ie=M(()=>{const Be=new Map;return z.value.forEach((Ct,Ht)=>{Be.set(We(d(Ct)),{option:Ct,index:Ht})}),Be}),ae=M(()=>{const Be=new Map;return q.value.forEach((Ct,Ht)=>{Be.set(We(d(Ct)),{option:Ct,index:Ht})}),Be}),ge=M(()=>q.value.every(Be=>f(Be))),be=Rr(),$e=M(()=>be.value==="small"?"small":"default"),Re=()=>{var Ct;if(Je(e.fitInputWidth)){m.value=e.fitInputWidth;return}const Be=((Ct=_.value)==null?void 0:Ct.offsetWidth)||200;!e.fitInputWidth&&Y.value?Ue(()=>{m.value=Math.max(Be,Se())}):m.value=Be},Se=()=>{var mi,pp;const Be=document.createElement("canvas").getContext("2d"),Ct=a.be("dropdown","item"),Ht=(((pp=(mi=k.value)==null?void 0:mi.listRef)==null?void 0:pp.innerRef)||document).querySelector(`.${Ct}`);if(Ht===null||Be===null)return 0;const Zt=getComputedStyle(Ht),fa=Number.parseFloat(Zt.paddingLeft)+Number.parseFloat(Zt.paddingRight);return Be.font=`bold ${Zt.font.replace(new RegExp(`\\b${Zt.fontWeight}\\b`),"")}`,q.value.reduce((JQ,QQ)=>{const eee=Be.measureText(c(QQ));return Math.max(eee.width,JQ)},0)+fa},Ae=()=>{if(!w.value)return 0;const Be=window.getComputedStyle(w.value);return Number.parseFloat(Be.gap||"6px")},nt=M(()=>{const Be=Ae(),Ct=e.filterable?Be+11:0;return{maxWidth:`${I.value&&e.maxCollapseTags===1?g.selectionWidth-g.collapseItemWidth-Be-Ct:g.selectionWidth-Ct}px`}}),at=M(()=>({maxWidth:`${g.selectionWidth}px`})),zt=M(()=>Me(e.modelValue)?e.modelValue.length===0&&!g.inputValue:e.filterable?!g.inputValue:!0),on=M(()=>{const Be=e.placeholder??n("el.select.placeholder");return e.multiple||!ne.value?Be:g.selectedLabel}),Bt=M(()=>{var Be,Ct;return(Ct=(Be=S.value)==null?void 0:Be.popperRef)==null?void 0:Ct.contentRef}),it=M(()=>{if(e.multiple){const Be=e.modelValue.length;if(Be>0&&ae.value.has(e.modelValue[Be-1])){const{index:Ct}=ae.value.get(e.modelValue[Be-1]);return Ct}}else if(!p(e.modelValue)&&ae.value.has(e.modelValue)){const{index:Be}=ae.value.get(e.modelValue);return Be}return-1}),At=M({get(){return re.value&&(e.loading||!Q.value||e.remote&&!!r.empty)&&(!b.value||!oi(g.previousQuery)||Y.value)},set(Be){re.value=Be}}),xe=M(()=>e.multiple?e.collapseTags?g.cachedOptions.slice(0,e.maxCollapseTags):g.cachedOptions:[]),rt=M(()=>e.multiple?e.collapseTags?g.cachedOptions.slice(e.maxCollapseTags):[]:[]),{createNewOption:Te,removeNewOption:Qe,selectNewOption:jt,clearAllNewOption:Xe}=bCe(e,g),ft=Be=>{var Ct;N.value||e.filterable&&re.value&&Be&&!((Ct=E.value)!=null&&Ct.contains(Be.target))||(g.menuVisibleOnFocus?g.menuVisibleOnFocus=!1:re.value=!re.value)},vt=()=>{g.inputValue.length>0&&!re.value&&(re.value=!0),Te(g.inputValue),Ue(()=>{Gt(g.inputValue)})},kt=by(()=>{vt(),b.value=!1},te),Gt=Be=>{g.previousQuery===Be||P.value||(g.previousQuery=Be,e.filterable&&et(e.filterMethod)?e.filterMethod(Be):e.filterable&&e.remote&&et(e.remoteMethod)&&e.remoteMethod(Be),e.defaultFirstOption&&(e.filterable||e.remote)&&q.value.length?Ue(fn):Ue(rn))},fn=()=>{const Be=q.value.filter(Zt=>!Zt.disabled&&Zt.type!=="Group"),Ct=Be.find(Zt=>Zt.created),Ht=Be[0];g.hoveringIndex=jn(q.value,Ct||Ht)},bt=Be=>{or(e.modelValue,Be)||t(Vt,Be)},Cn=Be=>{t(mt,Be),bt(Be),g.previousValue=e.multiple?String(Be):Be,Ue(()=>{if(e.multiple&&Me(e.modelValue)){const Ct=g.cachedOptions.slice(),Ht=e.modelValue.map(Zt=>hp(Zt,Ct));or(g.cachedOptions,Ht)||(g.cachedOptions=Ht)}else Kf(!0)})},jn=(Be=[],Ct)=>{if(!yt(Ct))return Be.indexOf(Ct);const Ht=e.valueKey;let Zt=-1;return Be.some((fa,mi)=>_r(fa,Ht)===_r(Ct,Ht)?(Zt=mi,!0):!1),Zt},We=Be=>yt(Be)?_r(Be,e.valueKey):Be,st=()=>{Re()},we=Be=>{t("end-reached",Be)},He=()=>{g.selectionWidth=Number.parseFloat(window.getComputedStyle(w.value).width)},je=()=>{g.collapseItemWidth=I.value.getBoundingClientRect().width},Xt=()=>{var Be,Ct;(Ct=(Be=S.value)==null?void 0:Be.updatePopper)==null||Ct.call(Be)},kn=()=>{var Be,Ct;(Ct=(Be=x.value)==null?void 0:Be.updatePopper)==null||Ct.call(Be)},Un=Be=>{const Ct=d(Be);if(e.multiple){let Ht=e.modelValue.slice();const Zt=jn(Ht,Ct);Zt>-1?(Ht=[...Ht.slice(0,Zt),...Ht.slice(Zt+1)],g.cachedOptions.splice(Zt,1),Qe(Be)):(e.multipleLimit<=0||Ht.length{let Ht=e.modelValue.slice();const Zt=jn(Ht,d(Ct));Zt>-1&&!N.value&&(Ht=[...e.modelValue.slice(0,Zt),...e.modelValue.slice(Zt+1)],g.cachedOptions.splice(Zt,1),Cn(Ht),t("remove-tag",d(Ct)),Qe(Ct)),Be.stopPropagation(),Ia()},Ia=()=>{var Be;(Be=C.value)==null||Be.focus()},mu=()=>{var Be;if(re.value){re.value=!1,Ue(()=>{var Ct;return(Ct=C.value)==null?void 0:Ct.blur()});return}(Be=C.value)==null||Be.blur()},yu=()=>{g.inputValue.length>0?g.inputValue="":re.value=!1},bu=Be=>tW(Be,Ct=>!g.cachedOptions.some(Ht=>d(Ht)===Ct&&f(Ht))),Uf=Be=>{const Ct=Mn(Be);if(e.multiple&&Ct!==De.delete&&g.inputValue.length===0){Be.preventDefault();const Ht=e.modelValue.slice(),Zt=bu(Ht);if(Zt<0)return;const fa=Ht[Zt];Ht.splice(Zt,1);const mi=g.cachedOptions[Zt];g.cachedOptions.splice(Zt,1),Qe(mi),Cn(Ht),t("remove-tag",fa)}},vl=()=>{let Be;Me(e.modelValue)?Be=[]:Be=v.value,g.selectedLabel="",re.value=!1,Cn(Be),t("clear"),Xe(),Ia()},_u=(Be,Ct=void 0)=>{const Ht=q.value;if(!["forward","backward"].includes(Be)||N.value||Ht.length<=0||ge.value||P.value)return;if(!re.value)return ft();qt(Ct)&&(Ct=g.hoveringIndex);let Zt=-1;Be==="forward"?(Zt=Ct+1,Zt>=Ht.length&&(Zt=0)):Be==="backward"&&(Zt=Ct-1,(Zt<0||Zt>=Ht.length)&&(Zt=Ht.length-1));const fa=Ht[Zt];if(f(fa)||fa.type==="Group")return _u(Be,Zt);g.hoveringIndex=Zt,Po(Zt)},Ve=()=>{if(re.value)~g.hoveringIndex&&q.value[g.hoveringIndex]&&Un(q.value[g.hoveringIndex]);else return ft()},dt=Be=>{g.hoveringIndex=Be??-1},rn=()=>{if(!e.multiple)g.hoveringIndex=q.value.findIndex(Be=>We(d(Be))===We(e.modelValue));else{const Be=e.modelValue.length;if(Be>0){const Ct=e.modelValue[Be-1];g.hoveringIndex=q.value.findIndex(Ht=>We(Ct)===We(d(Ht)))}else g.hoveringIndex=-1}},qn=Be=>{if(g.inputValue=Be.target.value,e.remote)b.value=!0,kt();else return vt()},Ar=Be=>{re.value=!1,F.value&&W(new FocusEvent("blur",Be))},Pr=()=>(g.isBeforeHide=!1,Ue(()=>{~it.value&&Po(it.value)})),Po=Be=>{k.value.scrollToItem(Be)},hp=(Be,Ct)=>{const Ht=We(Be);if(ie.value.has(Ht)){const{option:Zt}=ie.value.get(Ht);return Zt}if(Ct&&Ct.length){const Zt=Ct.find(fa=>We(d(fa))===Ht);if(Zt)return Zt}return{[u.value.value]:Be,[u.value.label]:Be}},Nc=Be=>{var Ct;return((Ct=ie.value.get(d(Be)))==null?void 0:Ct.index)??-1},Kf=(Be=!1)=>{if(e.multiple)if(e.modelValue.length>0){const Ct=g.cachedOptions.slice();g.cachedOptions.length=0,g.previousValue=e.modelValue.toString();for(const Ht of e.modelValue){const Zt=hp(Ht,Ct);g.cachedOptions.push(Zt)}}else g.cachedOptions=[],g.previousValue=void 0;else if(ne.value){g.previousValue=e.modelValue;const Ct=q.value,Ht=Ct.findIndex(Zt=>We(d(Zt))===We(e.modelValue));~Ht?g.selectedLabel=c(Ct[Ht]):(!g.selectedLabel||Be)&&(g.selectedLabel=We(e.modelValue))}else g.selectedLabel="",g.previousValue=void 0;Xe(),Re()};_e(()=>e.fitInputWidth,()=>{Re()}),_e(re,Be=>{Be?(e.persistent||Re(),Gt("")):(g.inputValue="",g.previousQuery=null,g.isBeforeHide=!0,g.menuVisibleOnFocus=!1,Te(""))}),_e(()=>e.modelValue,(Be,Ct)=>{var Ht;(!Be||Me(Be)&&Be.length===0||e.multiple&&!or(Be.toString(),g.previousValue)||!e.multiple&&We(Be)!==We(g.previousValue))&&Kf(!0),!or(Be,Ct)&&e.validateEvent&&((Ht=s==null?void 0:s.validate)==null||Ht.call(s,"change").catch(It))},{deep:!0}),_e(()=>e.options,()=>{const Be=C.value;(!Be||Be&&document.activeElement!==Be)&&Kf()},{deep:!0,flush:"post"}),_e(()=>q.value,()=>(Re(),k.value&&Ue(k.value.resetScrollTop))),Ua(()=>{g.isBeforeHide||Ne()}),Ua(()=>{const{valueKey:Be,options:Ct}=e,Ht=new Map;for(const Zt of Ct){const fa=d(Zt);let mi=fa;if(yt(mi)&&(mi=_r(fa,Be)),Ht.get(mi)){wn("ElSelectV2","The option values you provided seem to be duplicated, which may cause some problems, please check.");break}else Ht.set(mi,!0)}}),St(()=>{Kf()}),Kn(_,st),Kn(w,He),Kn(D,Xt),Kn(A,kn),Kn(I,je);let vp;return _e(()=>At.value,Be=>{Be?vp=Kn(k,Xt).stop:(vp==null||vp(),vp=void 0),t("visible-change",Be)}),{inputId:l,collapseTagSize:$e,currentPlaceholder:on,expanded:re,emptyText:ue,popupHeight:se,debounce:te,allOptions:z,allOptionsValueMap:ie,filteredOptions:q,iconComponent:le,iconReverse:J,tagStyle:nt,collapseTagStyle:at,popperSize:m,dropdownMenuVisible:At,hasModelValue:ne,shouldShowPlaceholder:zt,selectDisabled:N,selectSize:be,needStatusIcon:ee,showClearBtn:de,states:g,isFocused:F,nsSelect:a,nsInput:i,inputRef:C,menuRef:k,tagMenuRef:A,tooltipRef:S,tagTooltipRef:x,selectRef:_,wrapperRef:D,selectionRef:w,prefixRef:T,suffixRef:E,collapseItemRef:I,popperRef:Bt,validateState:Z,validateIcon:U,showTagList:xe,collapseTagList:rt,debouncedOnInputChange:kt,deleteTag:Qn,getLabel:c,getValue:d,getDisabled:f,getValueKey:We,getIndex:Nc,handleClear:vl,handleClickOutside:Ar,handleDel:Uf,handleEsc:yu,focus:Ia,blur:mu,handleMenuEnter:Pr,handleResize:st,resetSelectionWidth:He,updateTooltip:Xt,updateTagTooltip:kn,updateOptions:Ne,toggleMenu:ft,scrollTo:Po,onInput:qn,onKeyboardNavigate:_u,onKeyboardSelect:Ve,onEndReached:we,onSelect:Un,onHover:dt,handleCompositionStart:R,handleCompositionEnd:O,handleCompositionUpdate:$}};var wCe=ye({name:"ElSelectV2",components:{ElSelectMenu:yCe,ElTag:Nl,ElTooltip:ua,ElIcon:Ze},directives:{ClickOutside:yc},props:oCe,emits:lCe,setup(e,{emit:t}){const n=M(()=>{const{modelValue:l,multiple:u}=e,c=u?[]:void 0;return Me(l)?u?l:c:u?c:l}),r=_Ce(Qt({...Jr(e),modelValue:n}),t),{calculatorRef:a,inputStyle:i}=VI(),o=ba();Ft(VM,{props:Qt({...Jr(e),height:r.popupHeight,modelValue:n}),expanded:r.expanded,tooltipRef:r.tooltipRef,contentId:o,onSelect:r.onSelect,onHover:r.onHover,onKeyboardNavigate:r.onKeyboardNavigate,onKeyboardSelect:r.onKeyboardSelect});const s=M(()=>e.multiple?r.states.cachedOptions.map(l=>r.getLabel(l)):r.states.selectedLabel);return{...r,modelValue:n,selectedLabel:s,calculatorRef:a,inputStyle:i,contentId:o,BORDER_HORIZONTAL_WIDTH:2}}});const SCe=["id","value","autocomplete","tabindex","aria-expanded","aria-label","disabled","aria-controls","aria-activedescendant","readonly","name"],xCe=["textContent"],CCe={key:1};function TCe(e,t,n,r,a,i){const o=Ie("el-tag"),s=Ie("el-tooltip"),l=Ie("el-icon"),u=Ie("el-select-menu"),c=os("click-outside");return gt((L(),K("div",{ref:"selectRef",class:B([e.nsSelect.b(),e.nsSelect.m(e.selectSize)]),onMouseenter:t[15]||(t[15]=d=>e.states.inputHovering=!0),onMouseleave:t[16]||(t[16]=d=>e.states.inputHovering=!1)},[V(s,{ref:"tooltipRef",visible:e.dropdownMenuVisible,teleported:e.teleported,"popper-class":[e.nsSelect.e("popper"),e.popperClass],"popper-style":e.popperStyle,"gpu-acceleration":!1,"stop-popper-mouse-event":!1,"popper-options":e.popperOptions,"fallback-placements":e.fallbackPlacements,effect:e.effect,placement:e.placement,pure:"",transition:`${e.nsSelect.namespace.value}-zoom-in-top`,trigger:"click",persistent:e.persistent,"append-to":e.appendTo,"show-arrow":e.showArrow,offset:e.offset,onBeforeShow:e.handleMenuEnter,onHide:t[14]||(t[14]=d=>e.states.isBeforeHide=!1)},{default:G(()=>{var d;return[j("div",{ref:"wrapperRef",class:B([e.nsSelect.e("wrapper"),e.nsSelect.is("focused",e.isFocused),e.nsSelect.is("hovering",e.states.inputHovering),e.nsSelect.is("filterable",e.filterable),e.nsSelect.is("disabled",e.selectDisabled)]),onClick:t[11]||(t[11]=ut((...f)=>e.toggleMenu&&e.toggleMenu(...f),["prevent"]))},[e.$slots.prefix?(L(),K("div",{key:0,ref:"prefixRef",class:B(e.nsSelect.e("prefix"))},[he(e.$slots,"prefix")],2)):fe("v-if",!0),j("div",{ref:"selectionRef",class:B([e.nsSelect.e("selection"),e.nsSelect.is("near",e.multiple&&!e.$slots.prefix&&!!e.modelValue.length)])},[e.multiple?he(e.$slots,"tag",{key:0,data:e.states.cachedOptions,deleteTag:e.deleteTag,selectDisabled:e.selectDisabled},()=>{var f,h,v,p,g,m,b,_,w,S,x,C,T;return[(L(!0),K(ze,null,Lt(e.showTagList,E=>(L(),K("div",{key:e.getValueKey(e.getValue(E)),class:B(e.nsSelect.e("selected-item"))},[V(o,{closable:!e.selectDisabled&&!e.getDisabled(E),size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",style:tt(e.tagStyle),onClose:k=>e.deleteTag(k,E)},{default:G(()=>[j("span",{class:B(e.nsSelect.e("tags-text"))},[he(e.$slots,"label",{index:e.getIndex(E),label:e.getLabel(E),value:e.getValue(E)},()=>[Le(ce(e.getLabel(E)),1)])],2)]),_:2},1032,["closable","size","type","effect","style","onClose"])],2))),128)),e.collapseTags&&e.states.cachedOptions.length>e.maxCollapseTags?(L(),ve(s,{key:0,ref:"tagTooltipRef",disabled:e.dropdownMenuVisible||!e.collapseTagsTooltip,"fallback-placements":((f=e.tagTooltip)==null?void 0:f.fallbackPlacements)??["bottom","top","right","left"],effect:((h=e.tagTooltip)==null?void 0:h.effect)??e.effect,placement:((v=e.tagTooltip)==null?void 0:v.placement)??"bottom","popper-class":((p=e.tagTooltip)==null?void 0:p.popperClass)??e.popperClass,"popper-style":((g=e.tagTooltip)==null?void 0:g.popperStyle)??e.popperStyle,teleported:((m=e.tagTooltip)==null?void 0:m.teleported)??e.teleported,"append-to":((b=e.tagTooltip)==null?void 0:b.appendTo)??e.appendTo,"popper-options":((_=e.tagTooltip)==null?void 0:_.popperOptions)??e.popperOptions,transition:(w=e.tagTooltip)==null?void 0:w.transition,"show-after":(S=e.tagTooltip)==null?void 0:S.showAfter,"hide-after":(x=e.tagTooltip)==null?void 0:x.hideAfter,"auto-close":(C=e.tagTooltip)==null?void 0:C.autoClose,offset:(T=e.tagTooltip)==null?void 0:T.offset},{default:G(()=>[j("div",{ref:"collapseItemRef",class:B(e.nsSelect.e("selected-item"))},[V(o,{closable:!1,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,style:tt(e.collapseTagStyle),"disable-transitions":""},{default:G(()=>[j("span",{class:B(e.nsSelect.e("tags-text"))}," + "+ce(e.states.cachedOptions.length-e.maxCollapseTags),3)]),_:1},8,["size","type","effect","style"])],2)]),content:G(()=>[j("div",{ref:"tagMenuRef",class:B(e.nsSelect.e("selection"))},[(L(!0),K(ze,null,Lt(e.collapseTagList,E=>(L(),K("div",{key:e.getValueKey(e.getValue(E)),class:B(e.nsSelect.e("selected-item"))},[V(o,{class:"in-tooltip",closable:!e.selectDisabled&&!e.getDisabled(E),size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",onClose:k=>e.deleteTag(k,E)},{default:G(()=>[j("span",{class:B(e.nsSelect.e("tags-text"))},[he(e.$slots,"label",{index:e.getIndex(E),label:e.getLabel(E),value:e.getValue(E)},()=>[Le(ce(e.getLabel(E)),1)])],2)]),_:2},1032,["closable","size","type","effect","onClose"])],2))),128))],2)]),_:3},8,["disabled","fallback-placements","effect","placement","popper-class","popper-style","teleported","append-to","popper-options","transition","show-after","hide-after","auto-close","offset"])):fe("v-if",!0)]}):fe("v-if",!0),j("div",{class:B([e.nsSelect.e("selected-item"),e.nsSelect.e("input-wrapper"),e.nsSelect.is("hidden",!e.filterable||e.selectDisabled||e.multiple&&!e.states.inputValue&&!e.isFocused)])},[j("input",{id:e.inputId,ref:"inputRef",value:e.states.inputValue,style:tt(e.inputStyle),autocomplete:e.autocomplete,tabindex:e.tabindex,"aria-autocomplete":"none","aria-haspopup":"listbox",autocapitalize:"off","aria-expanded":e.expanded,"aria-label":e.ariaLabel,class:B([e.nsSelect.e("input"),e.nsSelect.is(e.selectSize)]),disabled:e.selectDisabled,role:"combobox","aria-controls":e.contentId,"aria-activedescendant":e.states.hoveringIndex>=0?`${e.contentId}-${e.states.hoveringIndex}`:"",readonly:!e.filterable,spellcheck:"false",type:"text",name:e.name,onInput:t[0]||(t[0]=(...f)=>e.onInput&&e.onInput(...f)),onChange:t[1]||(t[1]=ut(()=>{},["stop"])),onCompositionstart:t[2]||(t[2]=(...f)=>e.handleCompositionStart&&e.handleCompositionStart(...f)),onCompositionupdate:t[3]||(t[3]=(...f)=>e.handleCompositionUpdate&&e.handleCompositionUpdate(...f)),onCompositionend:t[4]||(t[4]=(...f)=>e.handleCompositionEnd&&e.handleCompositionEnd(...f)),onKeydown:[t[5]||(t[5]=Yn(ut(f=>e.onKeyboardNavigate("backward"),["stop","prevent"]),["up"])),t[6]||(t[6]=Yn(ut(f=>e.onKeyboardNavigate("forward"),["stop","prevent"]),["down"])),t[7]||(t[7]=Yn(ut((...f)=>e.onKeyboardSelect&&e.onKeyboardSelect(...f),["stop","prevent"]),["enter"])),t[8]||(t[8]=Yn(ut((...f)=>e.handleEsc&&e.handleEsc(...f),["stop","prevent"]),["esc"])),t[9]||(t[9]=Yn(ut((...f)=>e.handleDel&&e.handleDel(...f),["stop"]),["delete"]))],onClick:t[10]||(t[10]=ut((...f)=>e.toggleMenu&&e.toggleMenu(...f),["stop"]))},null,46,SCe),e.filterable?(L(),K("span",{key:0,ref:"calculatorRef","aria-hidden":"true",class:B(e.nsSelect.e("input-calculator")),textContent:ce(e.states.inputValue)},null,10,xCe)):fe("v-if",!0)],2),e.shouldShowPlaceholder?(L(),K("div",{key:1,class:B([e.nsSelect.e("selected-item"),e.nsSelect.e("placeholder"),e.nsSelect.is("transparent",!e.hasModelValue||e.expanded&&!e.states.inputValue)])},[e.hasModelValue?he(e.$slots,"label",{key:0,index:((d=e.allOptionsValueMap.get(e.modelValue))==null?void 0:d.index)??-1,label:e.currentPlaceholder,value:e.modelValue},()=>[j("span",null,ce(e.currentPlaceholder),1)]):(L(),K("span",CCe,ce(e.currentPlaceholder),1))],2)):fe("v-if",!0)],2),j("div",{ref:"suffixRef",class:B(e.nsSelect.e("suffix"))},[e.iconComponent?gt((L(),ve(l,{key:0,class:B([e.nsSelect.e("caret"),e.nsInput.e("icon"),e.iconReverse])},{default:G(()=>[(L(),ve(Et(e.iconComponent)))]),_:1},8,["class"])),[[ln,!e.showClearBtn]]):fe("v-if",!0),e.showClearBtn&&e.clearIcon?(L(),ve(l,{key:1,class:B([e.nsSelect.e("caret"),e.nsInput.e("icon"),e.nsSelect.e("clear")]),onClick:ut(e.handleClear,["prevent","stop"])},{default:G(()=>[(L(),ve(Et(e.clearIcon)))]),_:1},8,["class","onClick"])):fe("v-if",!0),e.validateState&&e.validateIcon&&e.needStatusIcon?(L(),ve(l,{key:2,class:B([e.nsInput.e("icon"),e.nsInput.e("validateIcon"),e.nsInput.is("loading",e.validateState==="validating")])},{default:G(()=>[(L(),ve(Et(e.validateIcon)))]),_:1},8,["class"])):fe("v-if",!0)],2)],2)]}),content:G(()=>[V(u,{id:e.contentId,ref:"menuRef",data:e.filteredOptions,width:e.popperSize-e.BORDER_HORIZONTAL_WIDTH,"hovering-index":e.states.hoveringIndex,"scrollbar-always-on":e.scrollbarAlwaysOn,"aria-label":e.ariaLabel,onEndReached:e.onEndReached},ui({default:G(d=>[he(e.$slots,"default",Dl(Rl(d)))]),_:2},[e.$slots.header?{name:"header",fn:G(()=>[j("div",{class:B(e.nsSelect.be("dropdown","header")),onClick:t[12]||(t[12]=ut(()=>{},["stop"]))},[he(e.$slots,"header")],2)]),key:"0"}:void 0,e.$slots.loading&&e.loading?{name:"loading",fn:G(()=>[j("div",{class:B(e.nsSelect.be("dropdown","loading"))},[he(e.$slots,"loading")],2)]),key:"1"}:e.loading||e.filteredOptions.length===0?{name:"empty",fn:G(()=>[j("div",{class:B(e.nsSelect.be("dropdown","empty"))},[he(e.$slots,"empty",{},()=>[j("span",null,ce(e.emptyText),1)])],2)]),key:"2"}:void 0,e.$slots.footer?{name:"footer",fn:G(()=>[j("div",{class:B(e.nsSelect.be("dropdown","footer")),onClick:t[13]||(t[13]=ut(()=>{},["stop"]))},[he(e.$slots,"footer")],2)]),key:"3"}:void 0]),1032,["id","data","width","hovering-index","scrollbar-always-on","aria-label","onEndReached"])]),_:3},8,["visible","teleported","popper-class","popper-style","popper-options","fallback-placements","effect","placement","transition","persistent","append-to","show-arrow","offset","onBeforeShow"])],34)),[[c,e.handleClickOutside,e.popperRef]])}var ECe=Gr(wCe,[["render",TCe]]);const kCe=xt(ECe),ACe=Oe({animated:Boolean,count:{type:Number,default:1},rows:{type:Number,default:3},loading:{type:Boolean,default:!0},throttle:{type:oe([Number,Object])}}),ICe=Oe({variant:{type:String,values:["circle","rect","h1","h3","text","caption","p","image","button"],default:"text"}});var MCe=ye({name:"ElSkeletonItem",__name:"skeleton-item",props:ICe,setup(e){const t=Ee("skeleton");return(n,r)=>(L(),K("div",{class:B([y(t).e("item"),y(t).e(e.variant)])},[e.variant==="image"?(L(),ve(y(Wde),{key:0})):fe("v-if",!0)],2))}}),l_=MCe,PCe=ye({name:"ElSkeleton",__name:"skeleton",props:ACe,setup(e,{expose:t}){const n=e,r=Ee("skeleton"),a=Hue(xn(n,"loading"),n.throttle);return t({uiLoading:a}),(i,o)=>y(a)?(L(),K("div",Mt({key:0,class:[y(r).b(),y(r).is("animated",e.animated)]},i.$attrs),[(L(!0),K(ze,null,Lt(e.count,s=>(L(),K(ze,{key:s},[y(a)?he(i.$slots,"template",{key:s},()=>[V(l_,{class:B(y(r).is("first")),variant:"p"},null,8,["class"]),(L(!0),K(ze,null,Lt(e.rows,l=>(L(),ve(l_,{key:l,class:B([y(r).e("paragraph"),y(r).is("last",l===e.rows&&e.rows>1)]),variant:"p"},null,8,["class"]))),128))]):fe("v-if",!0)],64))),128))],16)):he(i.$slots,"default",Dl(Mt({key:1},i.$attrs)))}}),LCe=PCe;const DCe=xt(LCe,{SkeletonItem:l_}),RCe=rr(l_),OU=Symbol("sliderContextKey"),OCe=Oe({modelValue:{type:oe([Number,Array]),default:0},id:{type:String,default:void 0},min:{type:Number,default:0},max:{type:Number,default:100},step:{type:oe([Number,String]),default:1},showInput:Boolean,showInputControls:{type:Boolean,default:!0},size:$r,inputSize:$r,showStops:Boolean,showTooltip:{type:Boolean,default:!0},formatTooltip:{type:oe(Function),default:void 0},disabled:{type:Boolean,default:void 0},range:Boolean,vertical:Boolean,height:String,rangeStartLabel:{type:String,default:void 0},rangeEndLabel:{type:String,default:void 0},formatValueText:{type:oe(Function),default:void 0},tooltipClass:{type:String,default:void 0},placement:{type:String,values:ol,default:"top"},marks:{type:oe(Object)},validateEvent:{type:Boolean,default:!0},persistent:{type:Boolean,default:!0},...ja(["ariaLabel"])}),Fx=e=>Je(e)||Me(e)&&e.every(Je),NCe={[mt]:Fx,[Mr]:Fx,[Vt]:Fx},VCe=(e,t,n)=>{const r=H();return St(async()=>{e.range?(Me(e.modelValue)?(t.firstValue=Math.max(e.min,e.modelValue[0]),t.secondValue=Math.min(e.max,e.modelValue[1])):(t.firstValue=e.min,t.secondValue=e.max),t.oldValue=[t.firstValue,t.secondValue]):(!Je(e.modelValue)||Number.isNaN(e.modelValue)?t.firstValue=e.min:t.firstValue=Math.min(e.max,Math.max(e.min,e.modelValue)),t.oldValue=t.firstValue),gn(window,"resize",n),await Ue(),n()}),{sliderWrapper:r}},$Ce=e=>{const t=M(()=>e.marks?Object.keys(e.marks).map(Number.parseFloat).sort((n,r)=>n-r).filter(n=>n<=e.max&&n>=e.min).map(n=>({point:n,position:(n-e.min)*100/(e.max-e.min),mark:e.marks[n]})):[]);return Ua(()=>{if(e.step==="mark"&&!e.marks&&wn("ElSlider","marks prop must be provided when step is mark"),e.marks){const n=Object.keys(e.marks),r=t.value.map(i=>i.point),a=n.filter(i=>{const o=Number.parseFloat(i);return Number.isNaN(o)||!r.includes(o)});a.length>0&&wn("ElSlider",`Some marks keys are invalid (not a number or out of [min, max]): [${a.map(i=>`'${i}'`).join(", ")}] and will be ignored.`)}}),t},BCe=(e,t,n)=>{const{formItem:r}=ea(),a=Ut(),i=H(),o=H(),s={firstButton:i,secondButton:o},l=ar(),u=M(()=>Math.min(t.firstValue,t.secondValue)),c=M(()=>Math.max(t.firstValue,t.secondValue)),d=M(()=>e.range?`${100*(c.value-u.value)/(e.max-e.min)}%`:`${100*(t.firstValue-e.min)/(e.max-e.min)}%`),f=M(()=>e.range?`${100*(u.value-e.min)/(e.max-e.min)}%`:"0%"),h=M(()=>e.vertical?{height:e.height}:{}),v=M(()=>e.vertical?{height:d.value,bottom:f.value}:{width:d.value,left:f.value}),p=()=>{a.value&&(t.sliderSize=a.value.getBoundingClientRect()[e.vertical?"height":"width"])},g=A=>{const I=e.min+A*(e.max-e.min)/100;if(!e.range)return i;let P;return Math.abs(u.value-I)t.secondValue?"firstButton":"secondButton",s[P]},m=A=>{const I=g(A);return I.value.setPosition(A),I},b=A=>{t.firstValue=A??e.min,w(e.range?[u.value,c.value]:A??e.min)},_=A=>{t.secondValue=A,e.range&&w([u.value,c.value])},w=A=>{n(mt,A),n(Mr,A)},S=async()=>{await Ue(),n(Vt,e.range?[u.value,c.value]:e.modelValue)},x=A=>{var P,R,O,$;if(l.value||t.dragging)return;p();let I=0;if(e.vertical){const N=((R=(P=A.touches)==null?void 0:P.item(0))==null?void 0:R.clientY)??A.clientY;I=(a.value.getBoundingClientRect().bottom-N)/t.sliderSize*100}else I=(((($=(O=A.touches)==null?void 0:O.item(0))==null?void 0:$.clientX)??A.clientX)-a.value.getBoundingClientRect().left)/t.sliderSize*100;if(!(I<0||I>100))return m(I)};return{elFormItem:r,slider:a,firstButton:i,secondButton:o,sliderDisabled:l,minValue:u,maxValue:c,runwayStyle:h,barStyle:v,resetSize:p,setPosition:m,emitChange:S,onSliderWrapperPrevent:A=>{var I,P;((I=s.firstButton.value)!=null&&I.dragging||(P=s.secondButton.value)!=null&&P.dragging)&&A.preventDefault()},onSliderClick:A=>{x(A)&&S()},onSliderDown:async A=>{const I=x(A);I&&(await Ue(),I.value.onButtonDown(A))},onSliderMarkerDown:A=>{l.value||t.dragging||m(A)&&S()},setFirstValue:b,setSecondValue:_}},FCe=(e,t,n,r)=>({stops:M(()=>{if(!e.showStops||e.min>e.max)return[];if(e.step==="mark"||e.step===0)return e.step===0&&wn("ElSlider","step should not be 0."),[];const o=Math.ceil((e.max-e.min)/e.step),s=100*e.step/(e.max-e.min),l=Array.from({length:o-1}).map((u,c)=>(c+1)*s);return e.range?l.filter(u=>u<100*(n.value-e.min)/(e.max-e.min)||u>100*(r.value-e.min)/(e.max-e.min)):l.filter(u=>u>100*(t.firstValue-e.min)/(e.max-e.min))}),getStopStyle:o=>e.vertical?{bottom:`${o}%`}:{left:`${o}%`}}),zCe=(e,t,n,r,a,i)=>{const o=u=>{a(mt,u),a(Mr,u)},s=()=>e.range?![n.value,r.value].every((u,c)=>u===t.oldValue[c]):e.modelValue!==t.oldValue,l=()=>{var c,d;e.min>e.max&&nr("Slider","min should not be greater than max.");const u=e.modelValue;e.range&&Me(u)?u[1]e.max?o([e.max,e.max]):u[0]e.max?o([u[0],e.max]):(t.firstValue=u[0],t.secondValue=u[1],s()&&(e.validateEvent&&((c=i==null?void 0:i.validate)==null||c.call(i,"change").catch(It)),t.oldValue=u.slice())):!e.range&&Je(u)&&!Number.isNaN(u)&&(ue.max?o(e.max):(t.firstValue=u,s()&&(e.validateEvent&&((d=i==null?void 0:i.validate)==null||d.call(i,"change").catch(It)),t.oldValue=u)))};l(),_e(()=>t.dragging,u=>{u||l()}),_e(()=>e.modelValue,(u,c)=>{t.dragging||Me(u)&&Me(c)&&u.every((d,f)=>d===c[f])&&t.firstValue===u[0]&&t.secondValue===u[1]||l()},{deep:!0}),_e(()=>[e.min,e.max],()=>{l()})},HCe=(e,t,n)=>{const r=H(),a=H(!1),i=M(()=>t.value instanceof Function);return{tooltip:r,tooltipVisible:a,formatValue:M(()=>i.value&&t.value(e.modelValue)||e.modelValue),displayTooltip:Xs(()=>{n.value&&(a.value=!0)},50),hideTooltip:Xs(()=>{n.value&&(a.value=!1)},50)}},WCe=(e,t,n)=>{const{disabled:r,min:a,max:i,step:o,showTooltip:s,persistent:l,precision:u,sliderSize:c,formatTooltip:d,emitChange:f,resetSize:h,updateDragging:v,markList:p}=Ge(OU),{tooltip:g,tooltipVisible:m,formatValue:b,displayTooltip:_,hideTooltip:w}=HCe(e,d,s),S=H(),x=M(()=>`${(e.modelValue-a.value)/(i.value-a.value)*100}%`),C=M(()=>e.vertical?{bottom:x.value}:{left:x.value}),T=M(()=>o.value==="mark"&&p.value.length>0),E=()=>{t.hovering=!0,_()},k=()=>{t.hovering=!1,t.dragging||w()},A=se=>{r.value||(se.preventDefault(),Y(se),window.addEventListener("mousemove",q),window.addEventListener("touchmove",q),window.addEventListener("mouseup",re),window.addEventListener("touchend",re),window.addEventListener("contextmenu",re),S.value.focus())},I=se=>{r.value||(t.newPosition=Number.parseFloat(x.value)+se/(i.value-a.value)*100,ee(t.newPosition),f())},P=se=>{if(r.value||!p.value.length)return;const ne=e.modelValue,de=Number.EPSILON,le=Math.abs(se);let J;if(se>0){const Z=p.value.findIndex(U=>U.point>ne+de);if(Z!==-1){const U=Math.min(Z+le-1,p.value.length-1);J=p.value[U].point}}else{let Z=-1;for(let U=p.value.length-1;U>=0;U--)if(p.value[U].point{T.value?P(-1):Je(o.value)&&I(-o.value)},O=()=>{T.value?P(1):Je(o.value)&&I(o.value)},$=()=>{T.value?P(-4):Je(o.value)&&I(-o.value*4)},N=()=>{T.value?P(4):Je(o.value)&&I(o.value*4)},D=()=>{r.value||(ee(0),f())},F=()=>{r.value||(ee(100),f())},W=se=>{const ne=Mn(se);let de=!0;switch(ne){case De.left:case De.down:R();break;case De.right:case De.up:O();break;case De.home:D();break;case De.end:F();break;case De.pageDown:$();break;case De.pageUp:N();break;default:de=!1;break}de&&se.preventDefault()},z=se=>{let ne,de;return se.type.startsWith("touch")?(de=se.touches[0].clientY,ne=se.touches[0].clientX):(de=se.clientY,ne=se.clientX),{clientX:ne,clientY:de}},Y=se=>{t.dragging=!0,t.isClick=!0;const{clientX:ne,clientY:de}=z(se);e.vertical?t.startY=de:t.startX=ne,t.startPosition=Number.parseFloat(x.value),t.newPosition=t.startPosition},q=se=>{if(t.dragging){t.isClick=!1,_(),h();let ne;const{clientX:de,clientY:le}=z(se);e.vertical?(t.currentY=le,ne=(t.startY-t.currentY)/c.value*100):(t.currentX=de,ne=(t.currentX-t.startX)/c.value*100),t.newPosition=t.startPosition+ne,ee(t.newPosition)}},re=()=>{t.dragging&&(setTimeout(()=>{t.dragging=!1,t.hovering||w(),t.isClick||ee(t.newPosition),f()},0),window.removeEventListener("mousemove",q),window.removeEventListener("touchmove",q),window.removeEventListener("mouseup",re),window.removeEventListener("touchend",re),window.removeEventListener("contextmenu",re))},ee=async se=>{if(se===null||Number.isNaN(+se))return;se=Ei(se,0,100);let ne;if(o.value==="mark")p.value.length===0?ne=se<=50?a.value:i.value:ne=p.value.reduce((de,le)=>Math.abs(le.position-se)t.dragging,se=>{v(se)}),gn(S,"touchstart",A,{passive:!1}),{disabled:r,button:S,tooltip:g,tooltipVisible:m,showTooltip:s,persistent:l,wrapperStyle:C,formatValue:b,handleMouseEnter:E,handleMouseLeave:k,onButtonDown:A,onKeyDown:W,setPosition:ee}},GCe=Oe({modelValue:{type:Number,default:0},vertical:Boolean,tooltipClass:String,placement:{type:String,values:ol,default:"top"}}),UCe={[mt]:e=>Je(e)},KCe=["tabindex"];var YCe=ye({name:"ElSliderButton",__name:"button",props:GCe,emits:UCe,setup(e,{expose:t,emit:n}){const r=e,a=n,i=Ee("slider"),o=Qt({hovering:!1,dragging:!1,isClick:!1,startX:0,currentX:0,startY:0,currentY:0,startPosition:0,newPosition:0,oldValue:r.modelValue}),s=M(()=>d.value?f.value:!1),{disabled:l,button:u,tooltip:c,showTooltip:d,persistent:f,tooltipVisible:h,wrapperStyle:v,formatValue:p,handleMouseEnter:g,handleMouseLeave:m,onButtonDown:b,onKeyDown:_,setPosition:w}=WCe(r,o,a),{hovering:S,dragging:x}=Jr(o);return t({onButtonDown:b,onKeyDown:_,setPosition:w,hovering:S,dragging:x}),(C,T)=>(L(),K("div",{ref_key:"button",ref:u,class:B([y(i).e("button-wrapper"),{hover:y(S),dragging:y(x)}]),style:tt(y(v)),tabindex:y(l)?void 0:0,onMouseenter:T[0]||(T[0]=(...E)=>y(g)&&y(g)(...E)),onMouseleave:T[1]||(T[1]=(...E)=>y(m)&&y(m)(...E)),onMousedown:T[2]||(T[2]=(...E)=>y(b)&&y(b)(...E)),onFocus:T[3]||(T[3]=(...E)=>y(g)&&y(g)(...E)),onBlur:T[4]||(T[4]=(...E)=>y(m)&&y(m)(...E)),onKeydown:T[5]||(T[5]=(...E)=>y(_)&&y(_)(...E))},[V(y(ua),{ref_key:"tooltip",ref:c,visible:y(h),placement:C.placement,"fallback-placements":["top","bottom","right","left"],"stop-popper-mouse-event":!1,"popper-class":C.tooltipClass,disabled:!y(d),persistent:s.value},{content:G(()=>[j("span",null,ce(y(p)),1)]),default:G(()=>[j("div",{class:B([y(i).e("button"),{hover:y(S),dragging:y(x)}])},null,2)]),_:1},8,["visible","placement","popper-class","disabled","persistent"])],46,KCe))}}),GN=YCe;const jCe=Oe({mark:{type:oe([String,Object]),default:void 0}});var qCe=ye({name:"ElSliderMarker",props:jCe,setup(e){const t=Ee("slider"),n=M(()=>qe(e.mark)?e.mark:e.mark.label),r=M(()=>qe(e.mark)?void 0:e.mark.style);return()=>ot("div",{class:t.e("marks-text"),style:r.value},n.value)}});const XCe=["id","role","aria-label","aria-labelledby"],ZCe={key:1};var JCe=ye({name:"ElSlider",__name:"slider",props:OCe,emits:NCe,setup(e,{expose:t,emit:n}){const r=e,a=n,i=Ee("slider"),{t:o}=Yt(),s=Qt({firstValue:0,secondValue:0,oldValue:0,dragging:!1,sliderSize:1}),{elFormItem:l,slider:u,firstButton:c,secondButton:d,sliderDisabled:f,minValue:h,maxValue:v,runwayStyle:p,barStyle:g,resetSize:m,emitChange:b,onSliderWrapperPrevent:_,onSliderClick:w,onSliderDown:S,onSliderMarkerDown:x,setFirstValue:C,setSecondValue:T}=BCe(r,s,a),{stops:E,getStopStyle:k}=FCe(r,s,h,v),{inputId:A,isLabeledByFormItem:I}=Di(r,{formItemContext:l}),P=Rr(),R=M(()=>r.inputSize||P.value),O=M(()=>r.showInput&&!r.range&&r.step!=="mark"),$=M(()=>r.ariaLabel||o("el.slider.defaultLabel",{min:r.min,max:r.max})),N=M(()=>r.range?r.rangeStartLabel||o("el.slider.defaultRangeStartLabel"):$.value),D=M(()=>r.formatValueText?r.formatValueText(se.value):`${se.value}`),F=M(()=>r.rangeEndLabel||o("el.slider.defaultRangeEndLabel")),W=M(()=>r.formatValueText?r.formatValueText(ne.value):`${ne.value}`),z=M(()=>[i.b(),i.m(P.value),i.is("vertical",r.vertical),{[i.m("with-input")]:O.value}]),Y=$Ce(r);zCe(r,s,h,v,a,l);const q=M(()=>Je(r.step)?r.step:1),re=M(()=>{const J=Je(r.step)?r.step:1,Z=[r.min,r.max,J].map(U=>{const te=`${U}`.split(".")[1];return te?te.length:0});return Math.max.apply(null,Z)}),{sliderWrapper:ee}=VCe(r,s,m),{firstValue:se,secondValue:ne,sliderSize:de}=Jr(s),le=J=>{s.dragging=J};return gn(ee,"touchstart",_,{passive:!1}),gn(ee,"touchmove",_,{passive:!1}),Ft(OU,{...Jr(r),sliderSize:de,disabled:f,precision:re,markList:Y,emitChange:b,resetSize:m,updateDragging:le}),t({onSliderClick:w}),(J,Z)=>{var U,te;return L(),K("div",{id:J.range?y(A):void 0,ref_key:"sliderWrapper",ref:ee,class:B(z.value),role:J.range?"group":void 0,"aria-label":J.range&&!y(I)?$.value:void 0,"aria-labelledby":J.range&&y(I)?(U=y(l))==null?void 0:U.labelId:void 0},[j("div",{ref_key:"slider",ref:u,class:B([y(i).e("runway"),{"show-input":O.value},y(i).is("disabled",y(f))]),style:tt(y(p)),onMousedown:Z[0]||(Z[0]=(...Q)=>y(S)&&y(S)(...Q)),onTouchstartPassive:Z[1]||(Z[1]=(...Q)=>y(S)&&y(S)(...Q))},[j("div",{class:B(y(i).e("bar")),style:tt(y(g))},null,6),V(GN,{id:J.range?void 0:y(A),ref_key:"firstButton",ref:c,"model-value":y(se),vertical:J.vertical,"tooltip-class":J.tooltipClass,placement:J.placement,role:"slider","aria-label":J.range||!y(I)?N.value:void 0,"aria-labelledby":!J.range&&y(I)?(te=y(l))==null?void 0:te.labelId:void 0,"aria-valuemin":J.min,"aria-valuemax":J.range?y(ne):J.max,"aria-valuenow":y(se),"aria-valuetext":D.value,"aria-orientation":J.vertical?"vertical":"horizontal","aria-disabled":y(f),"onUpdate:modelValue":y(C)},null,8,["id","model-value","vertical","tooltip-class","placement","aria-label","aria-labelledby","aria-valuemin","aria-valuemax","aria-valuenow","aria-valuetext","aria-orientation","aria-disabled","onUpdate:modelValue"]),J.range?(L(),ve(GN,{key:0,ref_key:"secondButton",ref:d,"model-value":y(ne),vertical:J.vertical,"tooltip-class":J.tooltipClass,placement:J.placement,role:"slider","aria-label":F.value,"aria-valuemin":y(se),"aria-valuemax":J.max,"aria-valuenow":y(ne),"aria-valuetext":W.value,"aria-orientation":J.vertical?"vertical":"horizontal","aria-disabled":y(f),"onUpdate:modelValue":y(T)},null,8,["model-value","vertical","tooltip-class","placement","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","aria-valuetext","aria-orientation","aria-disabled","onUpdate:modelValue"])):fe("v-if",!0),J.showStops?(L(),K("div",ZCe,[(L(!0),K(ze,null,Lt(y(E),(Q,ue)=>(L(),K("div",{key:ue,class:B(y(i).e("stop")),style:tt(y(k)(Q))},null,6))),128))])):fe("v-if",!0),y(Y).length>0?(L(),K(ze,{key:2},[j("div",null,[(L(!0),K(ze,null,Lt(y(Y),(Q,ue)=>(L(),K("div",{key:ue,style:tt(y(k)(Q.position)),class:B([y(i).e("stop"),y(i).e("marks-stop")])},null,6))),128))]),j("div",{class:B(y(i).e("marks"))},[(L(!0),K(ze,null,Lt(y(Y),(Q,ue)=>(L(),ve(y(qCe),{key:ue,mark:Q.mark,style:tt(y(k)(Q.position)),onMousedown:ut(pe=>y(x)(Q.position),["stop"])},null,8,["mark","style","onMousedown"]))),128))],2)],64)):fe("v-if",!0)],38),O.value?(L(),ve(y(AU),{key:0,ref:"input","model-value":y(se),class:B(y(i).e("input")),step:q.value,disabled:y(f),controls:J.showInputControls,min:J.min,max:J.max,precision:re.value,size:R.value,"onUpdate:modelValue":y(C),onChange:y(b)},null,8,["model-value","class","step","disabled","controls","min","max","precision","size","onUpdate:modelValue","onChange"])):fe("v-if",!0)],10,XCe)}}}),QCe=JCe;const eTe=xt(QCe),tTe=Oe({prefixCls:{type:String}}),UN=ye({name:"ElSpaceItem",props:tTe,setup(e,{slots:t}){const n=Ee("space"),r=M(()=>`${e.prefixCls||n.b()}__item`);return()=>ot("div",{class:r.value},he(t,"default"))}}),KN={small:8,default:12,large:16};function nTe(e){const t=Ee("space"),n=M(()=>[t.b(),t.m(e.direction),e.class]),r=H(0),a=H(0),i=M(()=>[e.wrap||e.fill?{flexWrap:"wrap"}:{},{alignItems:e.alignment},{rowGap:`${a.value}px`,columnGap:`${r.value}px`},e.style]),o=M(()=>e.fill?{flexGrow:1,minWidth:`${e.fillRatio}%`}:{});return Ua(()=>{const{size:s="small",wrap:l,direction:u,fill:c}=e;if(Me(s)){const[d=0,f=0]=s;r.value=d,a.value=f}else{let d;Je(s)?d=s:d=KN[s||"small"]||KN.small,(l||c)&&u==="horizontal"?r.value=a.value=d:u==="horizontal"?(r.value=d,a.value=0):(a.value=d,r.value=0)}}),{classes:n,containerStyle:i,itemStyle:o}}const rTe=Oe({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},class:{type:oe([String,Object,Array]),default:""},style:{type:oe([String,Array,Object,Boolean]),default:""},alignment:{type:oe(String),default:"center"},prefixCls:{type:String},spacer:{type:oe([Object,String,Number,Array]),default:null,validator:e=>Vn(e)||Je(e)||qe(e)},wrap:Boolean,fill:Boolean,fillRatio:{type:Number,default:100},size:{type:[String,Array,Number],values:ss,validator:e=>Je(e)||Me(e)&&e.length===2&&e.every(Je)}}),aTe=ye({name:"ElSpace",props:rTe,setup(e,{slots:t}){const{classes:n,containerStyle:r,itemStyle:a}=nTe(e);function i(o,s="",l=[]){const{prefixCls:u}=e;return o.forEach((c,d)=>{eE(c)?Me(c.children)&&c.children.forEach((f,h)=>{eE(f)&&Me(f.children)?i(f.children,`${s+h}-`,l):Vn(f)&&(f==null?void 0:f.type)===Tr?l.push(f):l.push(V(UN,{style:a.value,prefixCls:u,key:`nested-${s+h}`},{default:()=>[f]},12,["style","prefixCls"]))}):zce(c)&&l.push(V(UN,{style:a.value,prefixCls:u,key:`LoopKey${s+d}`},{default:()=>[c]},12,["style","prefixCls"]))}),l}return()=>{const{spacer:o,direction:s}=e,l=he(t,"default",{key:0},()=>[]);if((l.children??[]).length===0)return null;if(Me(l.children)){let u=i(l.children);if(o){const c=u.length-1;u=u.reduce((d,f,h)=>{const v=[...d,f];return h!==c&&v.push(V("span",{style:[a.value,s==="vertical"?"width: 100%":null],key:h},[Vn(o)?o:Le(o,1)],4)),v},[])}return V("div",{class:n.value,style:r.value},u,6)}return l.children}}}),iTe=xt(aTe),oTe=Oe({space:{type:[Number,String],default:""},active:{type:Number,default:0},direction:{type:String,default:"horizontal",values:["horizontal","vertical"]},alignCenter:{type:Boolean},simple:{type:Boolean},finishStatus:{type:String,values:["wait","process","finish","error","success"],default:"finish"},processStatus:{type:String,values:["wait","process","finish","error","success"],default:"process"}}),sTe={[Vt]:(e,t)=>[e,t].every(Je)},NU="ElSteps",lTe=Oe({title:{type:String,default:""},icon:{type:An},description:{type:String,default:""},status:{type:String,values:["","wait","process","finish","error","success"],default:""}});var uTe=ye({name:"ElSteps",__name:"steps",props:oTe,emits:sTe,setup(e,{emit:t}){const n=e,r=t,a=Ee("steps"),{children:i,addChild:o,removeChild:s,ChildrenSorter:l}=Uw(Tt(),"ElStep");return _e(i,()=>{i.value.forEach((u,c)=>{u.setIndex(c)})}),Ft(NU,{props:n,steps:i,addStep:o,removeStep:s}),_e(()=>n.active,(u,c)=>{r(Vt,u,c)}),(u,c)=>(L(),K("div",{class:B([y(a).b(),y(a).m(e.simple?"simple":e.direction)])},[he(u.$slots,"default"),V(y(l))],2))}}),cTe=uTe,dTe=ye({name:"ElStep",__name:"item",props:lTe,setup(e){const t=e,n=Ee("step"),r=H(-1),a=H({}),i=H(""),o=Ge(NU),s=Tt();let l=0,u=0;St(()=>{_e([()=>o.props.active,()=>o.props.processStatus,()=>o.props.finishStatus],([T],[E])=>{u=E||0,l=T-u,x(T)},{immediate:!0})});const c=M(()=>t.status||i.value),d=M(()=>{const T=o.steps.value[r.value-1];return T?T.internalStatus.value:"wait"}),f=M(()=>o.props.alignCenter),h=M(()=>o.props.direction==="vertical"),v=M(()=>o.props.simple),p=M(()=>o.steps.value.length),g=M(()=>{var T;return((T=o.steps.value[p.value-1])==null?void 0:T.uid)===s.uid}),m=M(()=>v.value?"":o.props.space),b=M(()=>[n.b(),n.is(v.value?"simple":o.props.direction),n.is("flex",g.value&&!m.value&&!f.value),n.is("center",f.value&&!h.value&&!v.value)]),_=M(()=>{const T={flexBasis:Je(m.value)?`${m.value}px`:m.value?m.value:`${100/(p.value-(f.value?0:1))}%`};return h.value||g.value&&(T.maxWidth=`${100/p.value}%`),T}),w=T=>{r.value=T},S=T=>{const E=T==="wait",k={transitionDelay:`${Math.abs(l)===1?0:l>0?(r.value+1-u)*150:-(r.value+1-o.props.active)*150}ms`},A=T===o.props.processStatus||E?0:100;k.borderWidth=A&&!v.value?"1px":0,k[o.props.direction==="vertical"?"height":"width"]=`${A}%`,a.value=k},x=T=>{T>r.value?i.value=o.props.finishStatus:T===r.value&&d.value!=="error"?i.value=o.props.processStatus:i.value="wait";const E=o.steps.value[r.value-1];E&&E.calcProgress(i.value)},C={uid:s.uid,getVnode:()=>s.vnode,currentStatus:c,internalStatus:i,setIndex:w,calcProgress:S};return o.addStep(C),yn(()=>{o.removeStep(C)}),(T,E)=>(L(),K("div",{style:tt(_.value),class:B(b.value)},[fe(" icon & line "),j("div",{class:B([y(n).e("head"),y(n).is(c.value)])},[v.value?fe("v-if",!0):(L(),K("div",{key:0,class:B(y(n).e("line"))},[j("i",{class:B(y(n).e("line-inner")),style:tt(a.value)},null,6)],2)),j("div",{class:B([y(n).e("icon"),y(n).is(e.icon||T.$slots.icon?"icon":"text")])},[he(T.$slots,"icon",{},()=>[e.icon?(L(),ve(y(Ze),{key:0,class:B(y(n).e("icon-inner"))},{default:G(()=>[(L(),ve(Et(e.icon)))]),_:1},8,["class"])):c.value==="success"?(L(),ve(y(Ze),{key:1,class:B([y(n).e("icon-inner"),y(n).is("status")])},{default:G(()=>[V(y(mv))]),_:1},8,["class"])):c.value==="error"?(L(),ve(y(Ze),{key:2,class:B([y(n).e("icon-inner"),y(n).is("status")])},{default:G(()=>[V(y(To))]),_:1},8,["class"])):v.value?fe("v-if",!0):(L(),K("div",{key:3,class:B(y(n).e("icon-inner"))},ce(r.value+1),3))])],2)],2),fe(" title & description "),j("div",{class:B(y(n).e("main"))},[j("div",{class:B([y(n).e("title"),y(n).is(c.value)])},[he(T.$slots,"title",{},()=>[Le(ce(e.title),1)])],2),v.value?(L(),K("div",{key:0,class:B(y(n).e("arrow"))},null,2)):(L(),K("div",{key:1,class:B([y(n).e("description"),y(n).is(c.value)])},[he(T.$slots,"description",{},()=>[Le(ce(e.description),1)])],2))],2)],6))}}),VU=dTe;const fTe=xt(cTe,{Step:VU}),hTe=rr(VU),$U=e=>["",...ss].includes(e),vTe=Oe({modelValue:{type:[Boolean,String,Number],default:!1},disabled:{type:Boolean,default:void 0},loading:Boolean,size:{type:String,validator:$U},width:{type:[String,Number],default:""},inlinePrompt:Boolean,inactiveActionIcon:{type:An},activeActionIcon:{type:An},activeIcon:{type:An},inactiveIcon:{type:An},activeText:{type:String,default:""},inactiveText:{type:String,default:""},activeValue:{type:[Boolean,String,Number],default:!0},inactiveValue:{type:[Boolean,String,Number],default:!1},name:{type:String,default:""},validateEvent:{type:Boolean,default:!0},beforeChange:{type:oe(Function)},id:String,tabindex:{type:[String,Number]},...ja(["ariaLabel"])}),pTe={[mt]:e=>En(e)||qe(e)||Je(e),[Vt]:e=>En(e)||qe(e)||Je(e),[Mr]:e=>En(e)||qe(e)||Je(e)},gTe=["id","aria-checked","aria-disabled","aria-label","name","true-value","false-value","disabled","tabindex"],mTe=["aria-hidden"],yTe={key:1},bTe={key:1},_Te=["aria-hidden"],A0="ElSwitch";var wTe=ye({name:A0,__name:"switch",props:vTe,emits:pTe,setup(e,{expose:t,emit:n}){const r=e,a=n,{formItem:i}=ea(),o=Rr(),s=Ee("switch"),{inputId:l}=Di(r,{formItemContext:i}),u=ar(M(()=>{if(r.loading)return!0})),c=H(r.modelValue!==!1),d=Ut(),f=M(()=>[s.b(),s.m(o.value),s.is("disabled",u.value),s.is("checked",m.value)]),h=M(()=>[s.e("label"),s.em("label","left"),s.is("active",!m.value)]),v=M(()=>[s.e("label"),s.em("label","right"),s.is("active",m.value)]),p=M(()=>({width:ur(r.width)}));_e(()=>r.modelValue,()=>{c.value=!0});const g=M(()=>c.value?r.modelValue:!1),m=M(()=>g.value===r.activeValue);[r.activeValue,r.inactiveValue].includes(g.value)||(wn(A0,"model-value must be active-value or inactive-value"),a(mt,r.inactiveValue),a(Vt,r.inactiveValue),a(Mr,r.inactiveValue)),_e(m,S=>{var x;d.value.checked=S,r.validateEvent&&((x=i==null?void 0:i.validate)==null||x.call(i,"change").catch(It))});const b=()=>{const S=m.value?r.inactiveValue:r.activeValue;a(mt,S),a(Vt,S),a(Mr,S),Ue(()=>{d.value.checked=m.value})},_=()=>{if(u.value)return;const{beforeChange:S}=r;if(!S){b();return}const x=S();[fc(x),En(x)].includes(!0)||nr(A0,"beforeChange must return type `Promise` or `boolean`"),fc(x)?x.then(C=>{C&&b()}).catch(C=>{wn(A0,`some error occurred: ${C}`)}):x&&b()},w=()=>{var S,x;(x=(S=d.value)==null?void 0:S.focus)==null||x.call(S)};return St(()=>{d.value.checked=m.value}),t({focus:w,checked:m}),(S,x)=>(L(),K("div",{class:B(f.value),onClick:ut(_,["prevent"])},[j("input",{id:y(l),ref_key:"input",ref:d,class:B(y(s).e("input")),type:"checkbox",role:"switch","aria-checked":m.value,"aria-disabled":y(u),"aria-label":e.ariaLabel,name:e.name,"true-value":e.activeValue,"false-value":e.inactiveValue,disabled:y(u),tabindex:e.tabindex,onChange:b,onKeydown:Yn(_,["enter"])},null,42,gTe),!e.inlinePrompt&&(e.inactiveIcon||e.inactiveText||S.$slots.inactive)?(L(),K("span",{key:0,class:B(h.value)},[he(S.$slots,"inactive",{},()=>[e.inactiveIcon?(L(),ve(y(Ze),{key:0},{default:G(()=>[(L(),ve(Et(e.inactiveIcon)))]),_:1})):fe("v-if",!0),!e.inactiveIcon&&e.inactiveText?(L(),K("span",{key:1,"aria-hidden":m.value},ce(e.inactiveText),9,mTe)):fe("v-if",!0)])],2)):fe("v-if",!0),j("span",{class:B(y(s).e("core")),style:tt(p.value)},[e.inlinePrompt?(L(),K("div",{key:0,class:B(y(s).e("inner"))},[m.value?(L(),K("div",{key:1,class:B(y(s).e("inner-wrapper"))},[he(S.$slots,"active",{},()=>[e.activeIcon?(L(),ve(y(Ze),{key:0},{default:G(()=>[(L(),ve(Et(e.activeIcon)))]),_:1})):fe("v-if",!0),!e.activeIcon&&e.activeText?(L(),K("span",bTe,ce(e.activeText),1)):fe("v-if",!0)])],2)):(L(),K("div",{key:0,class:B(y(s).e("inner-wrapper"))},[he(S.$slots,"inactive",{},()=>[e.inactiveIcon?(L(),ve(y(Ze),{key:0},{default:G(()=>[(L(),ve(Et(e.inactiveIcon)))]),_:1})):fe("v-if",!0),!e.inactiveIcon&&e.inactiveText?(L(),K("span",yTe,ce(e.inactiveText),1)):fe("v-if",!0)])],2))],2)):fe("v-if",!0),j("div",{class:B(y(s).e("action"))},[e.loading?(L(),ve(y(Ze),{key:0,class:B(y(s).is("loading"))},{default:G(()=>[V(y(es))]),_:1},8,["class"])):m.value?he(S.$slots,"active-action",{key:1},()=>[e.activeActionIcon?(L(),ve(y(Ze),{key:0},{default:G(()=>[(L(),ve(Et(e.activeActionIcon)))]),_:1})):fe("v-if",!0)]):m.value?fe("v-if",!0):he(S.$slots,"inactive-action",{key:2},()=>[e.inactiveActionIcon?(L(),ve(y(Ze),{key:0},{default:G(()=>[(L(),ve(Et(e.inactiveActionIcon)))]),_:1})):fe("v-if",!0)])],2)],6),!e.inlinePrompt&&(e.activeIcon||e.activeText||S.$slots.active)?(L(),K("span",{key:1,class:B(v.value)},[he(S.$slots,"active",{},()=>[e.activeIcon?(L(),ve(y(Ze),{key:0},{default:G(()=>[(L(),ve(Et(e.activeIcon)))]),_:1})):fe("v-if",!0),!e.activeIcon&&e.activeText?(L(),K("span",{key:1,"aria-hidden":!m.value},ce(e.activeText),9,_Te)):fe("v-if",!0)])],2)):fe("v-if",!0)],2))}}),STe=wTe;const xTe=xt(STe),CTe={data:{type:Array,default:()=>[]},size:$r,width:[String,Number],height:[String,Number],maxHeight:[String,Number],fit:{type:Boolean,default:!0},stripe:Boolean,border:Boolean,rowKey:[String,Function],showHeader:{type:Boolean,default:!0},showSummary:Boolean,sumText:String,summaryMethod:Function,rowClassName:[String,Function],rowStyle:[Object,Function],cellClassName:[String,Function],cellStyle:[Object,Function],headerRowClassName:[String,Function],headerRowStyle:[Object,Function],headerCellClassName:[String,Function],headerCellStyle:[Object,Function],highlightCurrentRow:Boolean,currentRowKey:[String,Number],emptyText:String,expandRowKeys:Array,defaultExpandAll:Boolean,rowExpandable:{type:Function},defaultSort:Object,tooltipEffect:String,tooltipOptions:Object,spanMethod:Function,selectOnIndeterminate:{type:Boolean,default:!0},indent:{type:Number,default:16},treeProps:{type:Object,default:()=>({hasChildren:"hasChildren",children:"children",checkStrictly:!1})},lazy:Boolean,load:Function,style:{type:[String,Object,Array,Boolean],default:()=>({})},className:{type:String,default:""},tableLayout:{type:String,default:"fixed"},scrollbarAlwaysOn:Boolean,flexible:Boolean,showOverflowTooltip:{type:[Boolean,Object],default:void 0},tooltipFormatter:Function,appendFilterPanelTo:String,scrollbarTabindex:{type:[Number,String],default:void 0},allowDragLastColumn:{type:Boolean,default:!0},preserveExpandedContent:Boolean,nativeScrollbar:Boolean};let TTe=1,ETe=1;const kTe=e=>`${e}-table_${TTe++}`,ATe=e=>`${e}_column_${ETe++}`,zx=function(e){var t;return(t=e.target)==null?void 0:t.closest("td")},ITe=function(e,t,n,r,a){if(!t&&!r&&(!a||Me(a)&&!a.length))return e;qe(n)?n=n==="descending"?-1:1:n=n&&n<0?-1:1;const i=r?null:function(s,l){return a?nW(jr(a),u=>qe(u)?_r(s,u):u(s,l,e)):(t!=="$key"&&yt(s)&&"$value"in s&&(s=s.$value),[yt(s)?t?_r(s,t):null:s])},o=function(s,l){var u,c,d,f,h;if(r)return r(s.value,l.value);for(let v=0,p=((u=s.key)==null?void 0:u.length)??0;v((h=l.key)==null?void 0:h[v]))return 1}return 0};return e.map((s,l)=>({value:s,index:l,key:i?i(s,l):null})).sort((s,l)=>{let u=o(s,l);return u||(u=s.index-l.index),u*+n}).map(s=>s.value)},BU=function(e,t){let n=null;return e.columns.forEach(r=>{r.id===t&&(n=r)}),n},MTe=function(e,t){let n=null;for(let r=0;r{if(!e)throw new Error("Row is required when get row identity");if(qe(t)){if(!t.includes("."))return`${e[t]}`;const n=t.split(".");let r=e;for(const a of n)r=r[a];return`${r}`}else if(et(t))return t.call(null,e);return""},qh=function(e,t,n=!1,r="children"){const a=e||[],i={};return a.forEach((o,s)=>{if(i[Cr(o,t)]={row:o,index:s},n){const l=o[r];Me(l)&&Object.assign(i,qh(l,t,!0,r))}}),i};function PTe(e,t){const n={};let r;for(r in e)n[r]=e[r];for(r in t)if(un(t,r)){const a=t[r];qt(a)||(n[r]=a)}return n}function $M(e){return e===""||qt(e)||(e=Number.parseInt(e,10),Number.isNaN(e)&&(e="")),e}function FU(e){return e===""||qt(e)||(e=$M(e),Number.isNaN(e)&&(e=80)),e}function LTe(e){return Je(e)?e:qe(e)?/^\d+(?:px)?$/.test(e)?Number.parseInt(e,10):e:null}function DTe(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,n)=>(...r)=>t(n(...r)))}function Oh(e,t,n,r,a,i,o){let s=i??0,l=!1;const c=(()=>{if(!o)return e.indexOf(t);const p=Cr(t,o);return e.findIndex(g=>Cr(g,o)===p)})(),d=c!==-1,f=a==null?void 0:a.call(null,t,s),h=p=>{p==="add"?e.push(t):e.splice(c,1),l=!0},v=p=>{let g=0;const m=(r==null?void 0:r.children)&&p[r.children];return m&&Me(m)&&(g+=m.length,m.forEach(b=>{g+=v(b)})),g};return(!a||f)&&(En(n)?n&&!d?h("add"):!n&&d&&h("remove"):h(d?"remove":"add")),!(r!=null&&r.checkStrictly)&&(r!=null&&r.children)&&Me(t[r.children])&&t[r.children].forEach(p=>{const g=Oh(e,p,n??!d,r,a,s+1,o);s+=v(p)+1,g&&(l=g)}),l}function RTe(e,t,n="children",r="hasChildren",a=!1){const i=s=>!(Me(s)&&s.length);function o(s,l,u){t(s,l,u),l.forEach(c=>{if(c[r]&&a){t(c,null,u+1);return}const d=c[n];i(d)||o(c,d,u+1)})}e.forEach(s=>{if(s[r]&&a){t(s,null,0);return}const l=s[n];i(l)||o(s,l,0)})}const OTe=(e,t,n,r)=>{const a=et(r==null?void 0:r.tooltipFormatter)?r.tooltipFormatter({row:n,column:r,cellValue:ic(n,r.property).value}):void 0;return Vn(a)?{slotContent:a,content:null,strategy:"fixed",...e}:{slotContent:null,content:a??t,strategy:"fixed",...e}};let dr=null;function NTe(e,t,n,r,a,i){var h;const o=OTe(e,t,n,r),s={...o,slotContent:void 0};if((dr==null?void 0:dr.trigger)===a){const v=(h=dr.vm)==null?void 0:h.component;aW(v==null?void 0:v.props,s),v&&o.slotContent&&(v.slots.content=()=>[o.slotContent]);return}dr==null||dr();const l=i==null?void 0:i.refs.tableWrapper,u=l==null?void 0:l.dataset.prefix,c=V(ua,{virtualTriggering:!0,virtualRef:a,appendTo:l,placement:"top",transition:"none",offset:0,hideAfter:0,...s},o.slotContent?{content:()=>o.slotContent}:void 0);c.appContext={...i.appContext,...i};const d=document.createElement("div");hc(c,d),c.component.exposed.onOpen();const f=l==null?void 0:l.querySelector(`.${u}-scrollbar__wrap`);dr=()=>{var p,g;(g=(p=c.component)==null?void 0:p.exposed)!=null&&g.onClose&&c.component.exposed.onClose(),hc(null,d);const v=dr;f==null||f.removeEventListener("scroll",v),v.trigger=void 0,v.vm=void 0,dr=null},dr.trigger=a??void 0,dr.vm=c,f==null||f.addEventListener("scroll",dr)}function zU(e){return e.children?nW(e.children,zU):[e]}function jN(e,t){return e+t.colSpan}const HU=(e,t,n,r)=>{let a=0,i=e;const o=n.states.columns.value;if(r){const l=zU(r[e]);a=o.slice(0,o.indexOf(l[0])).reduce(jN,0),i=a+l.reduce(jN,0)-1}else a=e;let s;switch(t){case"left":i=o.length-n.states.rightFixedLeafColumnsLength.value&&(s="right");break;default:i=o.length-n.states.rightFixedLeafColumnsLength.value&&(s="right")}return s?{direction:s,start:a,after:i}:{}},BM=(e,t,n,r,a,i=0)=>{const o=[],{direction:s,start:l,after:u}=HU(t,n,r,a);if(s){const c=s==="left";o.push(`${e}-fixed-column--${s}`),c&&u+i===r.states.fixedLeafColumnsLength.value-1?o.push("is-last-column"):!c&&l-i===r.states.columns.value.length-r.states.rightFixedLeafColumnsLength.value&&o.push("is-first-column")}return o};function qN(e,t){return e+(Rw(t.realWidth)||Number.isNaN(t.realWidth)?Number(t.width):t.realWidth)}const FM=(e,t,n,r)=>{const{direction:a,start:i=0,after:o=0}=HU(e,t,n,r);if(!a)return;const s={},l=a==="left",u=n.states.columns.value;return l?s.left=u.slice(0,i).reduce(qN,0):s.right=u.slice(o+1).reverse().reduce(qN,0),s},_v=(e,t)=>{e&&(Number.isNaN(e[t])||(e[t]=`${e[t]}px`))};function WU(e){return e.some(t=>Vn(t)?!(t.type===Tr||t.type===ze&&!WU(t.children)):!0)?e:null}function VTe(e){const t=Tt(),n=H(!1),r=H([]),a=(u,c)=>{const d=t.store.states.rowExpandable.value;return(d==null?void 0:d(u,c))??!0};return{updateExpandRows:()=>{const u=e.data.value||[],c=e.rowKey.value;if(n.value)r.value=t.store.states.rowExpandable.value?u.filter(a):u.slice();else if(c){const d=qh(r.value,c);r.value=u.filter((f,h)=>!!d[Cr(f,c)]&&a(f,h))}else r.value=[]},toggleRowExpansion:(u,c)=>{const d=(e.data.value||[]).indexOf(u);d>-1&&!a(u,d)||Oh(r.value,u,c,void 0,void 0,void 0,e.rowKey.value)&&t.emit("expand-change",u,r.value.slice())},setExpandRowKeys:u=>{t.store.assertRowKey();const c=e.data.value||[],d=e.rowKey.value,f=qh(c,d);r.value=u.reduce((h,v)=>{const p=f[v];return p&&a(p.row,p.index)&&h.push(p.row),h},[])},isRowExpanded:u=>{const c=e.rowKey.value;return c?!!qh(r.value,c)[Cr(u,c)]:r.value.includes(u)},states:{expandRows:r,defaultExpandAll:n}}}function $Te(e){const t=Tt(),n=H(null),r=H(null),a=u=>{t.store.assertRowKey(),n.value=u,o(u)},i=()=>{n.value=null},o=u=>{const{data:c,rowKey:d}=e,f=r.value;let h=null;d.value&&(h=(y(c)||[]).find(v=>Cr(v,d.value)===u)??null),r.value=h??null,t.emit("current-change",r.value,f)};return{setCurrentRowKey:a,restoreCurrentRowKey:i,setCurrentRowByKey:o,updateCurrentRow:u=>{const c=r.value;if(u&&u!==c){r.value=u,t.emit("current-change",r.value,c);return}!u&&c&&(r.value=null,t.emit("current-change",null,c))},updateCurrentRowData:()=>{const u=e.rowKey.value,c=e.data.value||[],d=r.value;d&&!c.includes(d)?u?o(Cr(d,u)):(r.value=null,t.emit("current-change",null,d)):n.value&&(o(n.value),i())},states:{_currentRowKey:n,currentRow:r}}}function BTe(e){const t=H([]),n=H({}),r=H(16),a=H(!1),i=H({}),o=H("hasChildren"),s=H("children"),l=H(!1),u=Tt(),c=M(()=>e.rowKey.value?f(e.data.value||[]):{}),d=M(()=>{const w=e.rowKey.value,S=Object.keys(i.value),x={};return S.length&&S.forEach(C=>{if(i.value[C].length){const T={children:[]};i.value[C].forEach(E=>{const k=Cr(E,w);T.children.push(k),E[o.value]&&!x[k]&&(x[k]={children:[]})}),x[C]=T}}),x}),f=w=>{const S=e.rowKey.value,x={};return RTe(w,(C,T,E)=>{const k=Cr(C,S);Me(T)?x[k]={children:T.map(A=>Cr(A,S)),level:E}:a.value&&(x[k]={children:[],lazy:!0,level:E})},s.value,o.value,a.value),x},h=(w=!1,S)=>{var k,A;S||(S=(k=u.store)==null?void 0:k.states.defaultExpandAll.value);const x=c.value,C=d.value,T=Object.keys(x),E={};if(T.length){const I=y(n),P=[],R=($,N)=>{if(w)return t.value?S||t.value.includes(N):!!(S||$!=null&&$.expanded);{const D=S||t.value&&t.value.includes(N);return!!($!=null&&$.expanded||D)}};T.forEach($=>{const N=I[$],D={...x[$]};if(D.expanded=R(N,$),D.lazy){const{loaded:F=!1,loading:W=!1}=N||{};D.loaded=!!F,D.loading=!!W,P.push($)}E[$]=D});const O=Object.keys(C);a.value&&O.length&&P.length&&O.forEach($=>{var F;const N=I[$],D=C[$].children;if(P.includes($)){if(((F=E[$].children)==null?void 0:F.length)!==0)throw new Error("[ElTable]children must be an empty array.");E[$].children=D}else{const{loaded:W=!1,loading:z=!1}=N||{};E[$]={lazy:!0,loaded:!!W,loading:!!z,expanded:R(N,$),children:D,level:void 0}}})}n.value=E,(A=u.store)==null||A.updateTableScrollY()};_e(()=>t.value,()=>{h(!0)},{deep:!0}),_e(()=>c.value,()=>{h()}),_e(()=>d.value,()=>{h()});const v=w=>{t.value=w,h()},p=w=>a.value&&w&&"loaded"in w&&!w.loaded,g=(w,S)=>{u.store.assertRowKey();const x=e.rowKey.value,C=Cr(w,x),T=C&&n.value[C];if(C&&T&&"expanded"in T){const E=T.expanded;S=qt(S)?!T.expanded:S,n.value[C].expanded=S,E!==S&&u.emit("expand-change",w,S),S&&p(T)&&b(w,C,T),u.store.updateTableScrollY()}},m=w=>{u.store.assertRowKey();const S=e.rowKey.value,x=Cr(w,S),C=n.value[x];p(C)?b(w,x,C):g(w,void 0)},b=(w,S,x)=>{const{load:C}=u.props;C&&!n.value[S].loaded&&(n.value[S].loading=!0,C(w,x,T=>{if(!Me(T))throw new TypeError("[ElTable] data must be an array");n.value[S].loading=!1,n.value[S].loaded=!0,n.value[S].expanded=!0,T.length&&(i.value={...i.value,[S]:T}),u.emit("expand-change",w,!0)}))};return{loadData:b,loadOrToggle:m,toggleTreeExpansion:g,updateTreeExpandKeys:v,updateTreeData:h,updateKeyChildren:(w,S)=>{const{lazy:x,rowKey:C}=u.props;if(x){if(!C)throw new Error("[Table] rowKey is required in updateKeyChild");i.value[w]&&(i.value={...i.value,[w]:S})}},normalize:f,states:{expandRowKeys:t,treeData:n,indent:r,lazy:a,lazyTreeNodeMap:i,lazyColumnIdentifier:o,childrenColumnName:s,checkStrictly:l}}}const FTe=(e,t)=>{const n=t.sortingColumn;return!n||qe(n.sortable)?e:ITe(e,t.sortProp,t.sortOrder,n.sortMethod,n.sortBy)},jb=e=>{const t=[];return e.forEach(n=>{n.children&&n.children.length>0?t.push.apply(t,jb(n.children)):t.push(n)}),t};function zTe(){var jt;const e=Tt(),{size:t}=Jr((jt=e.proxy)==null?void 0:jt.$props),n=H(null),r=H([]),a=H([]),i=H(!1),o=H([]),s=H([]),l=H([]),u=H([]),c=H([]),d=H([]),f=H([]),h=H([]),v=[],p=H(0),g=H(0),m=H(0),b=H(!1),_=H([]),w=H({}),S=H(!1),x=H(!1),C=H(null),T=H(null),E=H({}),k=H(null),A=H(null),I=H(null),P=H(null),R=H(null);let O=[];const $=M(()=>n.value?qh(_.value,n.value):void 0),N=Xe=>{var fn;const{childrenColumnName:ft,lazyTreeNodeMap:vt}=e.store.states,kt=Xe[ft.value]??[];if(!n.value)return kt;const Gt=Cr(Xe,n.value);return[...((fn=vt.value)==null?void 0:fn[Gt])??[],...kt]};_e(r,()=>{var Xe;e.state&&(z(!1),e.props.tableLayout==="auto"&&((Xe=e.refs.tableHeaderRef)==null||Xe.updateFixedColumnStyle()))},{deep:!0});const D=()=>{if(!n.value)throw new Error("[ElTable] prop row-key is required")},F=Xe=>{var ft;(ft=Xe.children)==null||ft.forEach(vt=>{vt.fixed=Xe.fixed,F(vt)})},W=()=>{o.value.forEach(bt=>{F(bt)}),u.value=o.value.filter(bt=>[!0,"left"].includes(bt.fixed));const Xe=o.value.find(bt=>bt.type==="selection");let ft;Xe&&Xe.fixed!=="right"&&!u.value.includes(Xe)&&o.value.indexOf(Xe)===0&&u.value.length&&(u.value.unshift(Xe),ft=!0),c.value=o.value.filter(bt=>bt.fixed==="right");const vt=o.value.filter(bt=>(ft?bt.type!=="selection":!0)&&!bt.fixed);s.value=Array.from(u.value).concat(vt).concat(c.value);const kt=jb(vt),Gt=jb(u.value),fn=jb(c.value);p.value=kt.length,g.value=Gt.length,m.value=fn.length,l.value=Array.from(Gt).concat(kt).concat(fn),i.value=u.value.length>0||c.value.length>0},z=(Xe,ft=!1)=>{Xe&&W(),ft?e.state.doLayout():e.state.debouncedUpdateLayout()},Y=Xe=>$.value?!!$.value[Cr(Xe,n.value)]:_.value.includes(Xe),q=M(()=>{const Xe=new Map;if(!n.value||!C.value)return Xe;let ft=0;const vt=kt=>{Me(kt)&&kt.forEach(Gt=>{const fn=Cr(Gt,n.value);Xe.set(fn,ft),ft+=1;const bt=N(Gt);bt.length&&vt(bt)})};return vt(r.value||[]),Xe}),re=(Xe={})=>{const{emitChange:ft=!0}=Xe;if(Bt.checkStrictly.value||!n.value){w.value={},O=[];return}const vt=n.value,kt=Xe.rowIndexMap??q.value,Gt=C.value,fn=new WeakMap,bt=Xt=>{const kn=fn.get(Xt);if(kn)return kn;const Un=Cr(Xt,vt);return fn.set(Xt,Un),Un},Cn={},jn=[],We=new Set(_.value.map(Xt=>bt(Xt))),st=[];let we=!1;const He=(Xt,kn,Un)=>{const Qn=We.has(kn);Un&&!Qn?(st.push(Xt),We.add(kn),we=!0):!Un&&Qn&&(We.delete(kn),we=!0)},je=Xt=>{let kn=0,Un=0;return Me(Xt)?(Xt.forEach(Qn=>{const Ia=bt(Qn),mu=N(Qn);let yu=0,bu=0;if(mu.length){const vl=je(mu);yu=vl.selectedCount,bu=vl.selectableCount}const Uf=Gt?Gt.call(null,Qn,kt.get(Ia)??0):!0;if(Uf&&bu>0){const vl=yu===bu;!vl&&yu!==0&&(Cn[Ia]=!0,jn.push(Qn)),He(Qn,Ia,vl)}Uf&&(Un+=1,We.has(Ia)&&(kn+=1)),kn+=yu,Un+=bu}),{selectedCount:kn,selectableCount:Un}):{selectedCount:kn,selectableCount:Un}};if(je(r.value||[]),we){const Xt=_.value.filter(kn=>We.has(bt(kn)));st.forEach(kn=>{We.has(bt(kn))&&Xt.push(kn)}),_.value=Xt}w.value=Cn,O=jn,we&&ft&&e.emit("selection-change",_.value?_.value.slice():[])},ee=()=>{b.value=!1;const Xe=_.value;_.value=[],w.value={},O=[],Xe.length&&e.emit("selection-change",[])},se=()=>{var ft,vt;let Xe;if(n.value){Xe=[];const kt=(vt=(ft=e==null?void 0:e.store)==null?void 0:ft.states)==null?void 0:vt.childrenColumnName.value,Gt=qh(r.value,n.value,!0,kt),{lazyTreeNodeMap:fn}=e.store.states;fn.value&&Object.entries(fn.value).forEach(([bt,Cn])=>{Gt[bt]&&Cn.forEach(jn=>{const We=Cr(jn,n.value);Gt[We]||(Gt[We]={row:jn,index:-1})})});for(const bt in $.value)un($.value,bt)&&!Gt[bt]&&Xe.push($.value[bt].row)}else Xe=_.value.filter(kt=>!r.value.includes(kt));if(Xe.length){const kt=_.value.filter(Gt=>!Xe.includes(Gt));_.value=kt,re({emitChange:!1}),e.emit("selection-change",[...kt])}},ne=()=>(_.value||[]).slice(),de=()=>O.slice(),le=(Xe,ft,vt)=>{var We;if(!n.value||Bt.checkStrictly.value||!Bt.lazy.value)return;const{lazyTreeNodeMap:kt,childrenColumnName:Gt}=e.store.states,fn=Cr(Xe,n.value),bt=((We=kt.value)==null?void 0:We[fn])??[],Cn=Xe[Gt.value]??[],jn={children:Gt.value,checkStrictly:!1};for(const st of bt){const we=vt.get(Cr(st,n.value))??0;Oh(_.value,st,ft,jn,C.value,we,n.value),le(st,ft,vt)}for(const st of Cn)le(st,ft,vt)},J=(Xe,ft,vt=!0,kt=!1)=>{var fn,bt,Cn,jn;const Gt={children:(bt=(fn=e==null?void 0:e.store)==null?void 0:fn.states)==null?void 0:bt.childrenColumnName.value,checkStrictly:(jn=(Cn=e==null?void 0:e.store)==null?void 0:Cn.states)==null?void 0:jn.checkStrictly.value};if(Oh(_.value,Xe,ft,Gt,kt?void 0:C.value,r.value.indexOf(Xe),n.value)){Bt.lazy.value&&!Bt.checkStrictly.value?(le(Xe,ft??Y(Xe),q.value),re({emitChange:!1,rowIndexMap:q.value})):re({emitChange:!1});const We=(_.value||[]).slice();vt&&e.emit("select",We,Xe),e.emit("selection-change",We)}},Z=()=>{var Cn,jn;const Xe=x.value?!b.value:!(b.value||_.value.length);b.value=Xe;let ft=!1,vt=0;const kt=(jn=(Cn=e==null?void 0:e.store)==null?void 0:Cn.states)==null?void 0:jn.rowKey.value,{childrenColumnName:Gt}=e.store.states,fn={children:Gt.value,checkStrictly:!1};r.value.forEach((We,st)=>{const we=st+vt;Oh(_.value,We,Xe,fn,C.value,we,kt)&&(ft=!0),vt+=Q(Cr(We,kt))});const bt=q.value;if(Bt.lazy.value&&!Bt.checkStrictly.value&&kt)for(const We of Object.values(Bt.lazyTreeNodeMap.value))for(const st of We){const we=bt.get(Cr(st,kt))??0;Oh(_.value,st,Xe,fn,C.value,we,kt)&&(ft=!0),le(st,Xe,bt)}re({emitChange:!1,rowIndexMap:bt}),ft&&e.emit("selection-change",_.value?[..._.value]:[]),e.emit("select-all",(_.value||[]).slice())},U=()=>{var Gt;if(((Gt=r.value)==null?void 0:Gt.length)===0){b.value=!1;return}let Xe=0,ft=0;const vt=fn=>{for(const bt of fn){const Cn=C.value&&C.value.call(null,bt,Xe);if(Y(bt))ft++;else if(!C.value||Cn)return!1;Xe++;const jn=N(bt);if(jn.length&&!vt(jn))return!1}return!0},kt=vt(r.value||[]);b.value=ft===0?!1:kt},te=Xe=>{if(!n.value)return!1;const ft=Cr(Xe,n.value);return!!w.value[ft]},Q=Xe=>{var Gt;if(!e||!e.store)return 0;const{treeData:ft}=e.store.states;let vt=0;const kt=(Gt=ft.value[Xe])==null?void 0:Gt.children;return kt&&(vt+=kt.length,kt.forEach(fn=>{vt+=Q(fn)})),vt},ue=(Xe,ft)=>{const vt={};return jr(Xe).forEach(kt=>{E.value[kt.id]=ft,vt[kt.columnKey||kt.id]=ft}),vt},pe=(Xe,ft,vt)=>{A.value&&A.value!==Xe&&(A.value.order=null),A.value=Xe,I.value=ft,P.value=vt},me=()=>{let Xe=y(a);Object.keys(E.value).forEach(ft=>{const vt=E.value[ft];if(!vt||vt.length===0)return;const kt=BU({columns:l.value},ft);kt&&kt.filterMethod&&(Xe=Xe.filter(Gt=>vt.some(fn=>kt.filterMethod.call(null,fn,Gt,kt))))}),k.value=Xe},Pe=()=>{r.value=FTe(k.value??[],{sortingColumn:A.value,sortProp:I.value,sortOrder:P.value})},Ne=(Xe=void 0)=>{Xe!=null&&Xe.filter||me(),Pe()},ie=Xe=>{const{tableHeaderRef:ft}=e.refs;if(!ft)return;const vt=Object.assign({},ft.filterPanels),kt=Object.keys(vt);if(kt.length)if(qe(Xe)&&(Xe=[Xe]),Me(Xe)){const Gt=Xe.map(fn=>MTe({columns:l.value},fn));kt.forEach(fn=>{const bt=Gt.find(Cn=>Cn.id===fn);bt&&(bt.filteredValue=[])}),e.store.commit("filterChange",{column:Gt,values:[],silent:!0,multi:!0})}else kt.forEach(Gt=>{const fn=l.value.find(bt=>bt.id===Gt);fn&&(fn.filteredValue=[])}),E.value={},e.store.commit("filterChange",{column:{},values:[],silent:!0})},ae=()=>{A.value&&(pe(null,null,null),e.store.commit("changeSortCondition",{silent:!0}))},{setExpandRowKeys:ge,toggleRowExpansion:be,updateExpandRows:$e,states:Re,isRowExpanded:Se}=VTe({data:r,rowKey:n}),{updateTreeExpandKeys:Ae,toggleTreeExpansion:nt,updateTreeData:at,updateKeyChildren:zt,loadOrToggle:on,states:Bt}=BTe({data:r,rowKey:n}),{updateCurrentRowData:it,updateCurrentRow:At,setCurrentRowKey:xe,states:rt}=$Te({data:r,rowKey:n}),Te=Xe=>{ge(Xe),Ae(Xe)},Qe=(Xe,ft)=>{l.value.some(({type:vt})=>vt==="expand")?be(Xe,ft):nt(Xe,ft)};return _e(()=>Bt.checkStrictly.value,Xe=>{Xe?(w.value={},O=[]):re({emitChange:!1}),U()}),_e(()=>Bt.lazyTreeNodeMap.value,()=>{var kt;if(!Bt.lazy.value||Bt.checkStrictly.value||!n.value)return;const Xe=q.value,ft=_.value.length;for(const Gt of Object.keys(Bt.lazyTreeNodeMap.value))(kt=$.value)!=null&&kt[Gt]&&le($.value[Gt].row,!0,Xe);const vt=_.value.length!==ft;re({emitChange:!vt,rowIndexMap:Xe}),U(),vt&&e.emit("selection-change",[..._.value])}),{assertRowKey:D,updateColumns:W,scheduleLayout:z,isSelected:Y,clearSelection:ee,cleanSelection:se,getSelectionRows:ne,getHalfSelectionRows:de,toggleRowSelection:J,_toggleAllSelection:Z,toggleAllSelection:null,updateAllSelected:U,updateSelectionByChildren:re,getRowIndeterminate:te,updateFilters:ue,updateCurrentRow:At,updateSort:pe,execFilter:me,execSort:Pe,execQuery:Ne,clearFilter:ie,clearSort:ae,toggleRowExpansion:be,setExpandRowKeysAdapter:Te,setCurrentRowKey:xe,toggleRowExpansionAdapter:Qe,isRowExpanded:Se,updateExpandRows:$e,updateCurrentRowData:it,loadOrToggle:on,updateTreeData:at,updateKeyChildren:zt,states:{tableSize:t,rowKey:n,data:r,_data:a,isComplex:i,_columns:o,originColumns:s,columns:l,fixedColumns:u,rightFixedColumns:c,leafColumns:d,fixedLeafColumns:f,rightFixedLeafColumns:h,updateOrderFns:v,leafColumnsLength:p,fixedLeafColumnsLength:g,rightFixedLeafColumnsLength:m,isAllSelected:b,selection:_,selectionIndeterminate:w,reserveSelection:S,selectOnIndeterminate:x,selectable:C,rowExpandable:T,filters:E,filteredData:k,sortingColumn:A,sortProp:I,sortOrder:P,hoverRow:R,...Re,...Bt,...rt}}}function OE(e,t){return e.map(n=>{var r;return n.id===t.id?t:((r=n.children)!=null&&r.length&&(n.children=OE(n.children,t)),n)})}function NE(e){e.forEach(t=>{var n,r;t.no=(n=t.getColumnIndex)==null?void 0:n.call(t),(r=t.children)!=null&&r.length&&NE(t.children)}),e.sort((t,n)=>t.no-n.no)}function HTe(){const e=Tt(),t=zTe(),n=Ee("table"),{t:r}=Yt();return{ns:n,t:r,...t,mutations:{setData(s,l){const u=y(s._data)!==l;s.data.value=l,s._data.value=l,e.store.execQuery(),e.store.updateCurrentRowData(),e.store.updateExpandRows(),e.store.updateTreeData(e.store.states.defaultExpandAll.value),y(s.reserveSelection)?e.store.assertRowKey():u?e.store.clearSelection():e.store.cleanSelection(),e.store.updateSelectionByChildren({emitChange:!1}),e.store.updateAllSelected(),e.$ready&&e.store.scheduleLayout()},insertColumn(s,l,u,c){var h;const d=y(s._columns);let f=[];u?(u&&!u.children&&(u.children=[]),(h=u.children)==null||h.push(l),f=OE(d,u)):(d.push(l),f=d),NE(f),s._columns.value=f,s.updateOrderFns.push(c),l.type==="selection"&&(s.selectable.value=l.selectable,s.reserveSelection.value=l.reserveSelection),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},updateColumnOrder(s,l){var u;((u=l.getColumnIndex)==null?void 0:u.call(l))!==l.no&&(NE(s._columns.value),e.$ready&&e.store.updateColumns())},removeColumn(s,l,u,c){var h;const d=y(s._columns)||[];if(u)(h=u.children)==null||h.splice(u.children.findIndex(v=>v.id===l.id),1),Ue(()=>{var v;((v=u.children)==null?void 0:v.length)===0&&delete u.children}),s._columns.value=OE(d,u);else{const v=d.indexOf(l);v>-1&&(d.splice(v,1),s._columns.value=d)}const f=s.updateOrderFns.indexOf(c);f>-1&&s.updateOrderFns.splice(f,1),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},sort(s,l){const{prop:u,order:c,init:d}=l;if(u){const f=y(s.columns).find(h=>h.property===u);f&&(f.order=c,e.store.updateSort(f,u,c),e.store.commit("changeSortCondition",{init:d}))}},changeSortCondition(s,l){const{sortingColumn:u,sortProp:c,sortOrder:d}=s,f=y(u),h=y(c),v=y(d);Rw(v)&&(s.sortingColumn.value=null,s.sortProp.value=null),e.store.execQuery({filter:!0}),(!l||!(l.silent||l.init))&&e.emit("sort-change",{column:f,prop:h,order:v}),e.store.updateTableScrollY()},filterChange(s,l){const{column:u,values:c,silent:d}=l,f=e.store.updateFilters(u,c);e.store.execQuery(),d||e.emit("filter-change",f),e.store.updateTableScrollY()},toggleAllSelection(){var s,l;(l=(s=e.store).toggleAllSelection)==null||l.call(s)},rowSelectedChanged(s,l){e.store.toggleRowSelection(l),e.store.updateAllSelected()},setHoverRow(s,l){s.hoverRow.value=l},setCurrentRow(s,l){e.store.updateCurrentRow(l)}},commit:function(s,...l){const u=e.store.mutations;if(u[s])u[s].apply(e,[e.store.states,...l]);else throw new Error(`Action not found: ${s}`)},updateTableScrollY:function(){Ue(()=>e.layout.updateScrollY.apply(e.layout))}}}const zM={rowKey:"rowKey",defaultExpandAll:"defaultExpandAll",rowExpandable:"rowExpandable",selectOnIndeterminate:"selectOnIndeterminate",indent:"indent",lazy:"lazy","treeProps.hasChildren":{key:"lazyColumnIdentifier",default:"hasChildren"},"treeProps.children":{key:"childrenColumnName",default:"children"},"treeProps.checkStrictly":{key:"checkStrictly",default:!1}};function WTe(e,t){if(!e)throw new Error("Table is required.");const n=HTe();return n.toggleAllSelection=Xs(n._toggleAllSelection,10),Object.keys(zM).forEach(r=>{GU(UU(t,r),r,n)}),GTe(n,t),n}function GTe(e,t){Object.keys(zM).forEach(n=>{_e(()=>UU(t,n),r=>{GU(r,n,e)})})}function GU(e,t,n){let r=e,a=zM[t];yt(a)&&(r=r||a.default,a=a.key),n.states[a].value=r}function UU(e,t){if(t.includes(".")){const n=t.split(".");let r=e;return n.forEach(a=>{r=r[a]}),r}else return e[t]}var UTe=class{constructor(e){this.observers=[],this.table=null,this.store=null,this.columns=[],this.fit=!0,this.showHeader=!0,this.heightMap={},this.height=H(null),this.scrollX=H(!1),this.scrollY=H(!1),this.bodyWidth=H(null),this.fixedWidth=H(null),this.rightFixedWidth=H(null),this.gutterWidth=0;for(const t in e)un(e,t)&&(Hn(this[t])?this[t].value=e[t]:this[t]=e[t]);if(!this.table)throw new Error("Table is required for Table Layout");if(!this.store)throw new Error("Store is required for Table Layout")}updateScrollY(){const e=this.height.value;if(Rw(e))return!1;const t=this.table.refs.scrollBarRef;if(this.table.vnode.el&&(t!=null&&t.wrapRef)){let n=!0;const r=this.scrollY.value;return n=t.wrapRef.scrollHeight>t.wrapRef.clientHeight,this.scrollY.value=n,r!==n}return!1}setHeight(e,t="height"){if(!cn)return;const n=this.table.vnode.el;if(e=LTe(e),this.height.value=Number(e),this.heightMap[t]=e,!n&&(e||e===0)){Ue(()=>{this.heightMap[t]===e&&this.setHeight(e,t)});return}n&&Je(e)?(n.style[t]=`${e}px`,this.updateElsHeight()):n&&qe(e)&&(n.style[t]=e,this.updateElsHeight())}setMaxHeight(e){this.setHeight(e,"max-height")}getFlattenColumns(){const e=[];return this.table.store.states.columns.value.forEach(t=>{t.isColumnGroup?e.push.apply(e,t.columns):e.push(t)}),e}updateElsHeight(){this.updateScrollY(),this.notifyObservers("scrollable")}headerDisplayNone(e){if(!e)return!0;let t=e;for(;t.tagName!=="DIV";){if(getComputedStyle(t).display==="none")return!0;t=t.parentElement}return!1}updateColumnsWidth(){var s;if(!cn)return;const e=this.fit,t=(s=this.table.vnode.el)==null?void 0:s.clientWidth;let n=0;const r=this.getFlattenColumns(),a=r.filter(l=>!Je(l.width));if(r.forEach(l=>{Je(l.width)&&l.realWidth&&(l.realWidth=null)}),a.length>0&&e){if(r.forEach(l=>{n+=Number(l.width||l.minWidth||80)}),n<=t){this.scrollX.value=!1;const l=t-n;if(a.length===1)a[0].realWidth=Number(a[0].minWidth||80)+l;else{const u=l/a.reduce((d,f)=>d+Number(f.minWidth||80),0);let c=0;a.forEach((d,f)=>{if(f===0)return;const h=Math.floor(Number(d.minWidth||80)*u);c+=h,d.realWidth=Number(d.minWidth||80)+h}),a[0].realWidth=Number(a[0].minWidth||80)+l-c}}else this.scrollX.value=!0,a.forEach(l=>{l.realWidth=Number(l.minWidth)});this.bodyWidth.value=Math.max(n,t),this.table.state.resizeState.value.width=this.bodyWidth.value}else r.forEach(l=>{!l.width&&!l.minWidth?l.realWidth=80:l.realWidth=Number(l.width||l.minWidth),n+=l.realWidth}),this.scrollX.value=n>t,this.bodyWidth.value=n;const i=this.store.states.fixedColumns.value;if(i.length>0){let l=0;i.forEach(u=>{l+=Number(u.realWidth||u.width)}),this.fixedWidth.value=l}const o=this.store.states.rightFixedColumns.value;if(o.length>0){let l=0;o.forEach(u=>{l+=Number(u.realWidth||u.width)}),this.rightFixedWidth.value=l}this.notifyObservers("columns")}addObserver(e){this.observers.push(e)}removeObserver(e){const t=this.observers.indexOf(e);t!==-1&&this.observers.splice(t,1)}notifyObservers(e){this.observers.forEach(t=>{var n,r;switch(e){case"columns":(n=t.state)==null||n.onColumnsChange(this);break;case"scrollable":(r=t.state)==null||r.onScrollableChange(this);break;default:throw new Error(`Table Layout don't have event ${e}.`)}})}};const cs=Symbol("ElTable"),KU=e=>{const t=[];return e.forEach(n=>{n.children?(t.push(n),t.push.apply(t,KU(n.children))):t.push(n)}),t},YU=e=>{let t=1;const n=(a,i)=>{if(i&&(a.level=i.level+1,t{n(s,a),o+=s.colSpan}),a.colSpan=o}else a.colSpan=1};e.forEach(a=>{a.level=1,n(a,void 0)});const r=[];for(let a=0;a{a.children?(a.rowSpan=1,a.children.forEach(i=>i.isSubColumn=!0)):a.rowSpan=t-a.level+1,r[a.level-1].push(a)}),r};function KTe(e){const t=Ge(cs),n=M(()=>YU(e.store.states.originColumns.value));return{isGroup:M(()=>{const i=n.value.length>1;return i&&t&&(t.state.isGroup.value=!0),i}),toggleAllSelection:i=>{i.stopPropagation(),t==null||t.store.commit("toggleAllSelection")},columnRows:n}}var YTe=ye({name:"ElTableFilterPanel",components:{ElCheckbox:Qs,ElCheckboxGroup:SM,ElScrollbar:ts,ElTooltip:ua,ElIcon:Ze,ArrowDown:ll,ArrowUp:Kw},props:{placement:{type:String,default:"bottom-start"},store:{type:Object},column:{type:Object},upDataColumn:{type:Function},appendTo:Tn.appendTo},setup(e){const t=Tt(),{t:n}=Yt(),r=Ee("table-filter"),a=t==null?void 0:t.parent;e.column&&!a.filterPanels.value[e.column.id]&&(a.filterPanels.value[e.column.id]=t);const i=H(null),o=H(null),s=H(0),l=M(()=>e.column&&e.column.filters),u=M(()=>e.column&&e.column.filterClassName?`${r.b()} ${e.column.filterClassName}`:r.b()),c=M({get:()=>{var C;return(((C=e.column)==null?void 0:C.filteredValue)||[])[0]},set:C=>{d.value&&(Bi(C)?d.value.splice(0,1):d.value.splice(0,1,C))}}),d=M({get(){return e.column?e.column.filteredValue||[]:[]},set(C){var T;e.column&&((T=e.upDataColumn)==null||T.call(e,"filteredValue",C))}}),f=M(()=>e.column?e.column.filterMultiple:!0),h=C=>C.value===c.value,v=()=>{var C;(C=i.value)==null||C.onClose()},p=()=>{b(d.value),v()},g=()=>{d.value=[],b(d.value),v()},m=(C,T)=>{c.value=C,s.value=T,Bi(C)?b([]):b(d.value),v()},b=C=>{var T,E;(T=e.store)==null||T.commit("filterChange",{column:e.column,values:C}),(E=e.store)==null||E.updateAllSelected()},_=()=>{var C,T;(C=o.value)==null||C.focus(),!f.value&&S(),e.column&&((T=e.upDataColumn)==null||T.call(e,"filterOpened",!0))},w=()=>{var C;e.column&&((C=e.upDataColumn)==null||C.call(e,"filterOpened",!1))},S=()=>{if(Bi(c)){s.value=0;return}const C=(l.value||[]).findIndex(T=>T.value===c.value);s.value=C>=0?C+1:0};return{multiple:f,filterClassName:u,filteredValue:d,filterValue:c,filters:l,handleConfirm:p,handleReset:g,handleSelect:m,isPropAbsent:Bi,isActive:h,t:n,ns:r,tooltipRef:i,rootRef:o,checkedIndex:s,handleShowTooltip:_,handleHideTooltip:w,handleKeydown:C=>{var I,P;const T=Mn(C),E=(l.value?l.value.length:0)+1;let k=s.value,A=!0;switch(T){case De.down:case De.right:k=(k+1)%E;break;case De.up:case De.left:k=(k-1+E)%E;break;case De.tab:v(),A=!1;break;case De.enter:case De.space:if(k===0)m(null,0);else{const R=(l.value||[])[k-1];R.value&&m(R.value,k)}break;default:A=!1;break}A&&C.preventDefault(),s.value=k,(P=(I=o.value)==null?void 0:I.querySelector(`.${r.e("list-item")}:nth-child(${k+1})`))==null||P.focus()}}}});const jTe=["disabled"],qTe=["tabindex","aria-checked"],XTe=["tabindex","aria-checked","onClick"],ZTe=["aria-label"];function JTe(e,t,n,r,a,i){const o=Ie("el-checkbox"),s=Ie("el-checkbox-group"),l=Ie("el-scrollbar"),u=Ie("arrow-up"),c=Ie("arrow-down"),d=Ie("el-icon"),f=Ie("el-tooltip");return L(),ve(f,{ref:"tooltipRef",offset:0,placement:e.placement,"show-arrow":!1,trigger:"click",role:"dialog",teleported:"",effect:"light",pure:"",loop:"","popper-class":e.filterClassName,persistent:"","append-to":e.appendTo,onShow:e.handleShowTooltip,onHide:e.handleHideTooltip},{content:G(()=>[e.multiple?(L(),K("div",{key:0,ref:"rootRef",tabindex:"-1",class:B(e.ns.e("multiple"))},[j("div",{class:B(e.ns.e("content"))},[V(l,{"wrap-class":e.ns.e("wrap")},{default:G(()=>[V(s,{modelValue:e.filteredValue,"onUpdate:modelValue":t[0]||(t[0]=h=>e.filteredValue=h),class:B(e.ns.e("checkbox-group"))},{default:G(()=>[(L(!0),K(ze,null,Lt(e.filters,h=>(L(),ve(o,{key:h.value,value:h.value},{default:G(()=>[Le(ce(h.text),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue","class"])]),_:1},8,["wrap-class"])],2),j("div",{class:B(e.ns.e("bottom"))},[j("button",{class:B(e.ns.is("disabled",e.filteredValue.length===0)),disabled:e.filteredValue.length===0,type:"button",onClick:t[1]||(t[1]=(...h)=>e.handleConfirm&&e.handleConfirm(...h))},ce(e.t("el.table.confirmFilter")),11,jTe),j("button",{type:"button",onClick:t[2]||(t[2]=(...h)=>e.handleReset&&e.handleReset(...h))},ce(e.t("el.table.resetFilter")),1)],2)],2)):(L(),K("ul",{key:1,ref:"rootRef",tabindex:"-1",role:"radiogroup",class:B(e.ns.e("list")),onKeydown:t[4]||(t[4]=(...h)=>e.handleKeydown&&e.handleKeydown(...h))},[j("li",{role:"radio",class:B([e.ns.e("list-item"),e.ns.is("active",e.isPropAbsent(e.filterValue))]),tabindex:e.checkedIndex===0?0:-1,"aria-checked":e.isPropAbsent(e.filterValue),onClick:t[3]||(t[3]=h=>e.handleSelect(null,0))},ce(e.t("el.table.clearFilter")),11,qTe),(L(!0),K(ze,null,Lt(e.filters,(h,v)=>(L(),K("li",{key:h.value,role:"radio",class:B([e.ns.e("list-item"),e.ns.is("active",e.isActive(h))]),tabindex:e.checkedIndex===v+1?0:-1,"aria-checked":e.isActive(h),onClick:p=>e.handleSelect(h.value,v+1)},ce(h.text),11,XTe))),128))],34))]),default:G(()=>{var h;return[j("button",{type:"button",class:B(`${e.ns.namespace.value}-table__column-filter-trigger`),"aria-label":e.t("el.table.filterLabel",{column:((h=e.column)==null?void 0:h.label)||""})},[V(d,null,{default:G(()=>[he(e.$slots,"filter-icon",{},()=>{var v;return[(v=e.column)!=null&&v.filterOpened?(L(),ve(u,{key:0})):(L(),ve(c,{key:1}))]})]),_:3})],10,ZTe)]}),_:3},8,["placement","popper-class","append-to","onShow","onHide"])}var QTe=Gr(YTe,[["render",JTe]]);function HM(e){const t=Tt();dy(()=>{n.value.addObserver(t)}),St(()=>{r(n.value),a(n.value)}),is(()=>{r(n.value),a(n.value)}),il(()=>{n.value.removeObserver(t)});const n=M(()=>{const i=e.layout;if(!i)throw new Error("Can not find table layout.");return i}),r=i=>{var u;const o=((u=e.vnode.el)==null?void 0:u.querySelectorAll("colgroup > col"))||[];if(!o.length)return;const s=i.getFlattenColumns(),l={};s.forEach(c=>{l[c.id]=c});for(let c=0,d=o.length;c{var l,u;const o=((l=e.vnode.el)==null?void 0:l.querySelectorAll("colgroup > col[name=gutter]"))||[];for(let c=0,d=o.length;c{p.stopPropagation()},i=(p,g)=>{!g.filters&&g.sortable?v(p,g,!1):g.filterable&&!g.sortable&&a(p),r==null||r.emit("header-click",g,p)},o=(p,g)=>{r==null||r.emit("header-contextmenu",g,p)},s=H(null),l=H(!1),u=H(),c=(p,g)=>{var m,b,_;if(cn&&!(g.children&&g.children.length>0)&&s.value&&e.border&&s.value.id===g.id){l.value=!0;const w=r;t("set-drag-visible",!0);const S=(m=w==null?void 0:w.vnode.el)==null?void 0:m.getBoundingClientRect().left,x=(_=(b=n==null?void 0:n.vnode)==null?void 0:b.el)==null?void 0:_.querySelector(`th.${g.id}`),C=x.getBoundingClientRect(),T=C.left-S+30;go(x,"noclick"),u.value={startMouseLeft:p.clientX,startLeft:C.right-S,startColumnLeft:C.left-S,tableLeft:S};const E=w==null?void 0:w.refs.resizeProxy;E.style.left=`${u.value.startLeft}px`,document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};const k=I=>{const P=I.clientX-u.value.startMouseLeft,R=u.value.startLeft+P;E.style.left=`${Math.max(T,R)}px`},A=()=>{if(l.value){const{startColumnLeft:I,startLeft:P}=u.value;g.width=g.realWidth=Number.parseInt(E.style.left,10)-I,w==null||w.emit("header-dragend",g.width,P-I,g,p),requestAnimationFrame(()=>{e.store.scheduleLayout(!1,!0)}),document.body.style.cursor="",l.value=!1,s.value=null,u.value=void 0,t("set-drag-visible",!1)}document.removeEventListener("mousemove",k),document.removeEventListener("mouseup",A),document.onselectstart=null,document.ondragstart=null,setTimeout(()=>{Ha(x,"noclick")},0)};document.addEventListener("mousemove",k),document.addEventListener("mouseup",A)}},d=(p,g)=>{var E;if(!e.border||g.children&&g.children.length>0)return;const m=p.target,b=ki(m)?m.closest("th"):null;if(!b)return;const _=Fs(b,"is-sortable");if(_){const k=l.value?"col-resize":"";b.style.cursor=k;const A=b.querySelector(".caret-wrapper");A&&(A.style.cursor=k)}if(!g.resizable||l.value){s.value=null;return}const w=b.getBoundingClientRect(),S=((E=b.parentNode)==null?void 0:E.lastElementChild)===b,x=e.allowDragLastColumn||!S,C=w.width>12&&w.right-p.clientX<8&&x,T=C?"col-resize":"";document.body.style.cursor=T,s.value=C?g:null,_&&(b.style.cursor=T)},f=()=>{!cn||l.value||(document.body.style.cursor="")},h=({order:p,sortOrders:g})=>{if(p==="")return g[0];const m=g.indexOf(p||null);return g[m>g.length-2?0:m+1]},v=(p,g,m)=>{var E;p.stopPropagation();const b=g.order===m?null:m||h(g),_=(E=p.target)==null?void 0:E.closest("th");if(_&&Fs(_,"noclick")){Ha(_,"noclick");return}if(!g.sortable)return;const w=p.currentTarget;if(["ascending","descending"].some(k=>Fs(w,k)&&!g.sortOrders.includes(k)))return;const S=e.store.states;let x=S.sortProp.value,C;const T=S.sortingColumn.value;(T!==g||T===g&&Rw(T.order))&&(T&&(T.order=null),S.sortingColumn.value=g,x=g.property??null),b?C=g.order=b:C=g.order=null,S.sortProp.value=x,S.sortOrder.value=C,r==null||r.store.commit("changeSortCondition")};return{handleHeaderClick:i,handleHeaderContextMenu:o,handleMouseDown:c,handleMouseMove:d,handleMouseOut:f,handleSortClick:v,handleFilterClick:a}}function t2e(e){const t=Ge(cs),n=Ee("table");return{getHeaderRowStyle:s=>{const l=t==null?void 0:t.props.headerRowStyle;return et(l)?l.call(null,{rowIndex:s}):l},getHeaderRowClass:s=>{const l=[],u=t==null?void 0:t.props.headerRowClassName;return qe(u)?l.push(u):et(u)&&l.push(u.call(null,{rowIndex:s})),l.join(" ")},getHeaderCellStyle:(s,l,u,c)=>{let d=(t==null?void 0:t.props.headerCellStyle)??{};et(d)&&(d=d.call(null,{rowIndex:s,columnIndex:l,row:u,column:c}));const f=FM(l,c.fixed,e.store,u);return _v(f,"left"),_v(f,"right"),Object.assign({},d,f)},getHeaderCellClass:(s,l,u,c)=>{const d=BM(n.b(),l,c.fixed,e.store,u),f=[c.id,c.order,c.headerAlign,c.className,c.labelClassName,...d];c.children||f.push("is-leaf"),c.sortable&&f.push("is-sortable");const h=t==null?void 0:t.props.headerCellClassName;return qe(h)?f.push(h):et(h)&&f.push(h.call(null,{rowIndex:s,columnIndex:l,row:u,column:c})),f.push(n.e("cell")),f.filter(v=>!!v).join(" ")}}}var XN=ye({name:"ElTableHeader",components:{ElCheckbox:Qs},props:{fixed:{type:String,default:""},store:{required:!0,type:Object},border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})},appendFilterPanelTo:{type:String},allowDragLastColumn:{type:Boolean}},setup(e,{emit:t}){const n=Tt(),r=Ge(cs),a=Ee("table"),i=H({}),{onColumnsChange:o,onScrollableChange:s}=HM(r),l=(r==null?void 0:r.props.tableLayout)==="auto",u=Qt(new Map),c=H();let d;const f=()=>{d=setTimeout(()=>{u.size>0&&(u.forEach((I,P)=>{const R=c.value.querySelector(`.${P.replace(/\s/g,".")}`);R&&(I.width=R.getBoundingClientRect().width||I.width)}),u.clear())})};_e(u,f),yn(()=>{d&&(clearTimeout(d),d=void 0)}),St(async()=>{await Ue(),await Ue();const{prop:I,order:P}=e.defaultSort;r==null||r.store.commit("sort",{prop:I,order:P,init:!0}),f()});const{handleHeaderClick:h,handleHeaderContextMenu:v,handleMouseDown:p,handleMouseMove:g,handleMouseOut:m,handleSortClick:b,handleFilterClick:_}=e2e(e,t),{getHeaderRowStyle:w,getHeaderRowClass:S,getHeaderCellStyle:x,getHeaderCellClass:C}=t2e(e),{isGroup:T,toggleAllSelection:E,columnRows:k}=KTe(e),{t:A}=Yt();return n.state={onColumnsChange:o,onScrollableChange:s},n.filterPanels=i,{ns:a,t:A,filterPanels:i,onColumnsChange:o,onScrollableChange:s,columnRows:k,getHeaderRowClass:S,getHeaderRowStyle:w,getHeaderCellClass:C,getHeaderCellStyle:x,handleHeaderClick:h,handleHeaderContextMenu:v,handleMouseDown:p,handleMouseMove:g,handleMouseOut:m,handleSortClick:b,handleFilterClick:_,isGroup:T,toggleAllSelection:E,saveIndexSelection:u,isTableLayoutAuto:l,theadRef:c,updateFixedColumnStyle:f}},render(){const{ns:e,t,isGroup:n,columnRows:r,getHeaderCellStyle:a,getHeaderCellClass:i,getHeaderRowClass:o,getHeaderRowStyle:s,handleHeaderClick:l,handleHeaderContextMenu:u,handleMouseDown:c,handleMouseMove:d,handleSortClick:f,handleMouseOut:h,store:v,$parent:p,saveIndexSelection:g,isTableLayoutAuto:m}=this;let b=1;return ot("thead",{ref:"theadRef",class:e.is("group",n)},r.map((_,w)=>ot("tr",{class:o(w),key:w,style:s(w)},_.map((S,x)=>{S.rowSpan>b&&(b=S.rowSpan);const C=i(w,x,_,S);return m&&S.fixed&&g.set(C,S),ot("th",{class:C,colspan:S.colSpan,key:`${S.id}-thead`,rowspan:S.rowSpan,scope:S.colSpan>1?"colgroup":"col",ariaSort:S.sortable?S.order:void 0,style:a(w,x,_,S),onClick:T=>{var E;(E=T.currentTarget)!=null&&E.classList.contains("noclick")||l(T,S)},onContextmenu:T=>u(T,S),onMousedown:T=>c(T,S),onMousemove:T=>d(T,S),onMouseout:h},[ot("div",{class:["cell",S.filteredValue&&S.filteredValue.length>0?"highlight":""]},[S.renderHeader?S.renderHeader({column:S,$index:x,store:v,_self:p}):S.label,S.sortable&&ot("button",{type:"button",class:"caret-wrapper","aria-label":t("el.table.sortLabel",{column:S.label||""}),onClick:T=>f(T,S)},[ot("i",{onClick:T=>f(T,S,"ascending"),class:"sort-caret ascending"}),ot("i",{onClick:T=>f(T,S,"descending"),class:"sort-caret descending"})]),S.filterable&&ot(QTe,{store:v,placement:S.filterPlacement||"bottom-start",appendTo:p==null?void 0:p.appendFilterPanelTo,column:S,upDataColumn:(T,E)=>{S[T]=E}},{"filter-icon":()=>S.renderFilterIcon?S.renderFilterIcon({filterOpened:S.filterOpened}):null})])])}))))}});function n2e(e){const t=Ge(cs),n=H(""),r=H(ot("div")),a=(v,p,g)=>{var S,x;const m=t,b=zx(v);let _=null;const w=(S=m==null?void 0:m.vnode.el)==null?void 0:S.dataset.prefix;b&&(_=YN({columns:((x=e.store)==null?void 0:x.states.columns.value)??[]},b,w),_&&(m==null||m.emit(`cell-${g}`,p,_,b,v))),m==null||m.emit(`row-${g}`,p,_,v)},i=(v,p)=>{a(v,p,"dblclick")},o=(v,p)=>{var g;(g=e.store)==null||g.commit("setCurrentRow",p),a(v,p,"click")},s=(v,p)=>{a(v,p,"contextmenu")},l=Xs(v=>{var p;(p=e.store)==null||p.commit("setHoverRow",v)},30),u=Xs(()=>{var v;(v=e.store)==null||v.commit("setHoverRow",null)},30),c=v=>{const p=window.getComputedStyle(v,null);return{left:Number.parseInt(p.paddingLeft,10)||0,right:Number.parseInt(p.paddingRight,10)||0,top:Number.parseInt(p.paddingTop,10)||0,bottom:Number.parseInt(p.paddingBottom,10)||0}},d=(v,p,g)=>{var b;let m=(b=p==null?void 0:p.target)==null?void 0:b.parentNode;for(;v>1&&(m=m==null?void 0:m.nextSibling,!(!m||m.nodeName!=="TR"));)g(m,"hover-row hover-fixed-row"),v--};return{handleDoubleClick:i,handleClick:o,handleContextMenu:s,handleMouseEnter:l,handleMouseLeave:u,handleCellMouseEnter:(v,p,g)=>{var N,D,F;if(!t)return;const m=t,b=zx(v),_=(N=m==null?void 0:m.vnode.el)==null?void 0:N.dataset.prefix;let w=null;if(b){if(w=YN({columns:((D=e.store)==null?void 0:D.states.columns.value)??[]},b,_),!w)return;b.rowSpan>1&&d(b.rowSpan,v,go);const W=m.hoverState={cell:b,column:w,row:p};m==null||m.emit("cell-mouse-enter",W.row,W.column,W.cell,v)}if(!g){(dr==null?void 0:dr.trigger)===b&&(dr==null||dr());return}const S=v.target.querySelector(".cell");if(!(Fs(S,`${_}-tooltip`)&&S.childNodes.length&&((F=S.textContent)!=null&&F.trim())))return;const x=document.createRange();x.setStart(S,0),x.setEnd(S,S.childNodes.length);const{width:C,height:T}=x.getBoundingClientRect(),{width:E,height:k}=S.getBoundingClientRect(),{top:A,left:I,right:P,bottom:R}=c(S),O=I+P,$=A+R;Gs(C+O,E)||Gs(T+$,k)||Gs(S.scrollWidth,E)?NTe(g,((b==null?void 0:b.innerText)||(b==null?void 0:b.textContent))??"",p,w,b,m):(dr==null?void 0:dr.trigger)===b&&(dr==null||dr())},handleCellMouseLeave:v=>{const p=zx(v);if(!p)return;p.rowSpan>1&&d(p.rowSpan,v,Ha);const g=t==null?void 0:t.hoverState;t==null||t.emit("cell-mouse-leave",g==null?void 0:g.row,g==null?void 0:g.column,g==null?void 0:g.cell,v)},tooltipContent:n,tooltipTrigger:r}}function r2e(e){const t=Ge(cs),n=Ee("table");return{getRowStyle:(u,c)=>{const d=t==null?void 0:t.props.rowStyle;return et(d)?d.call(null,{row:u,rowIndex:c}):d||null},getRowClass:(u,c,d)=>{var v;const f=[n.e("row")];t!=null&&t.props.highlightCurrentRow&&u===((v=e.store)==null?void 0:v.states.currentRow.value)&&f.push("current-row"),e.stripe&&d%2===1&&f.push(n.em("row","striped"));const h=t==null?void 0:t.props.rowClassName;return qe(h)?f.push(h):et(h)&&f.push(h.call(null,{row:u,rowIndex:c})),f},getCellStyle:(u,c,d,f)=>{const h=t==null?void 0:t.props.cellStyle;let v=h??{};et(h)&&(v=h.call(null,{rowIndex:u,columnIndex:c,row:d,column:f}));const p=FM(c,e==null?void 0:e.fixed,e.store);return _v(p,"left"),_v(p,"right"),Object.assign({},v,p)},getCellClass:(u,c,d,f,h)=>{const v=BM(n.b(),c,e==null?void 0:e.fixed,e.store,void 0,h),p=[f.id,f.align,f.className,...v],g=t==null?void 0:t.props.cellClassName;return qe(g)?p.push(g):et(g)&&p.push(g.call(null,{rowIndex:u,columnIndex:c,row:d,column:f})),p.push(n.e("cell")),p.filter(m=>!!m).join(" ")},getSpan:(u,c,d,f)=>{let h=1,v=1;const p=t==null?void 0:t.props.spanMethod;if(et(p)){const g=p({row:u,column:c,rowIndex:d,columnIndex:f});Me(g)?(h=g[0],v=g[1]):yt(g)&&(h=g.rowspan,v=g.colspan)}return{rowspan:h,colspan:v}},getColspanRealWidth:(u,c,d)=>{if(c<1)return u[d].realWidth;const f=u.map(({realWidth:h,width:v})=>h||v).slice(d,d+c);return Number(f.reduce((h,v)=>Number(h)+Number(v),-1))}}}const a2e=["colspan","rowspan"];var i2e=ye({name:"TableTdWrapper",__name:"td-wrapper",props:{colspan:{type:Number,default:1},rowspan:{type:Number,default:1}},setup(e){return(t,n)=>(L(),K("td",{colspan:e.colspan,rowspan:e.rowspan},[he(t.$slots,"default")],8,a2e))}}),o2e=i2e;function s2e(e){const t=Ge(cs),n=Ee("table"),{handleDoubleClick:r,handleClick:a,handleContextMenu:i,handleMouseEnter:o,handleMouseLeave:s,handleCellMouseEnter:l,handleCellMouseLeave:u,tooltipContent:c,tooltipTrigger:d}=n2e(e),{getRowStyle:f,getRowClass:h,getCellStyle:v,getCellClass:p,getSpan:g,getColspanRealWidth:m}=r2e(e);let b=-1;const _=M(()=>{var T;return(T=e.store)==null?void 0:T.states.columns.value.findIndex(({type:E})=>E==="default")}),w=(T,E)=>{var A;const k=(A=t==null?void 0:t.props)==null?void 0:A.rowKey;return k?Cr(T,k):E},S=(T,E,k,A=!1)=>{const{tooltipEffect:I,tooltipOptions:P,store:R}=e,{indent:O,columns:$}=R.states,N=[];let D=!0;return k&&(N.push(n.em("row",`level-${k.level}`)),D=!!k.display),E===0&&(b=-1),e.stripe&&D&&b++,N.push(...h(T,E,b)),ot("tr",{style:[D?null:{display:"none"},f(T,E)],class:N,key:w(T,E),onDblclick:F=>r(F,T),onClick:F=>a(F,T),onContextmenu:F=>i(F,T),onMouseenter:()=>o(E),onMouseleave:s},$.value.map((F,W)=>{const{rowspan:z,colspan:Y}=g(T,F,E,W);if(!z||!Y)return null;const q=Object.assign({},F);q.realWidth=m($.value,Y,W);const re={store:R,_self:e.context||t,column:q,row:T,$index:E,cellIndex:W,expanded:A};W===_.value&&k&&(re.treeNode={indent:k.level&&k.level*O.value,level:k.level},En(k.expanded)&&(re.treeNode.expanded=k.expanded,"loading"in k&&(re.treeNode.loading=k.loading),"noLazyChildren"in k&&(re.treeNode.noLazyChildren=k.noLazyChildren)));const ee=`${w(T,E)},${W}`,se=q.columnKey||q.rawColumnKey||"",ne=F.showOverflowTooltip&&aW({effect:I},P,F.showOverflowTooltip);return ot(o2e,{style:v(E,W,T,F),class:p(E,W,T,F,Y-1),key:`${se}${ee}`,rowspan:z,colspan:Y,onMouseenter:de=>l(de,T,ne),onMouseleave:u},{default:()=>x(W,F,re)})}))},x=(T,E,k)=>E.renderCell(k);return{wrappedRowRender:(T,E)=>{const k=e.store,{isRowExpanded:A,assertRowKey:I}=k,{treeData:P,lazyTreeNodeMap:R,childrenColumnName:O,rowKey:$}=k.states,N=k.states.columns.value;if(N.some(({type:D})=>D==="expand")){const D=A(T),F=S(T,E,void 0,D),W=t==null?void 0:t.renderExpanded;if(!W)return console.error("[Element Error]renderExpanded is required."),F;const z=[[F]];return(t.props.preserveExpandedContent||D)&&z[0].push(ot("tr",{key:`expanded-row__${F.key}`,style:{display:D?"":"none"}},[ot("td",{colspan:N.length,class:`${n.e("cell")} ${n.e("expanded-cell")}`},[W({row:T,$index:E,store:k,expanded:D})])])),z}else if(Object.keys(P.value).length){I();const D=Cr(T,$.value);let F=P.value[D],W=null;F&&(W={expanded:F.expanded,level:F.level,display:!0,noLazyChildren:void 0,loading:void 0},En(F.lazy)&&(W&&En(F.loaded)&&F.loaded&&(W.noLazyChildren=!(F.children&&F.children.length)),W.loading=F.loading));const z=[S(T,E,W??void 0)];if(F){let Y=0;const q=(re,ee)=>{re&&re.length&&ee&&re.forEach(se=>{const ne={display:ee.display&&ee.expanded,level:ee.level+1,expanded:!1,noLazyChildren:!1,loading:!1},de=Cr(se,$.value);if(Bi(de))throw new Error("For nested data item, row-key is required.");F={...P.value[de]},F&&(ne.expanded=F.expanded,F.level=F.level||ne.level,F.display=!!(F.expanded&&ne.display),En(F.lazy)&&(En(F.loaded)&&F.loaded&&(ne.noLazyChildren=!(F.children&&F.children.length)),ne.loading=F.loading)),Y++,z.push(S(se,E+Y,ne)),F&&q(R.value[de]||se[O.value],F)})};F.display=!0,q(R.value[D]||T[O.value],F)}return z}else return S(T,E,void 0)},tooltipContent:c,tooltipTrigger:d}}const l2e={store:{required:!0,type:Object},stripe:Boolean,tooltipEffect:String,tooltipOptions:{type:Object},context:{default:()=>({}),type:Object},rowClassName:[String,Function],rowStyle:[Object,Function],fixed:{type:String,default:""},highlight:Boolean};var u2e=ye({name:"ElTableBody",props:l2e,setup(e){var c;const t=Tt(),n=Ge(cs),r=Ee("table"),{wrappedRowRender:a,tooltipContent:i,tooltipTrigger:o}=s2e(e),{onColumnsChange:s,onScrollableChange:l}=HM(n),u=[];return _e((c=e.store)==null?void 0:c.states.hoverRow,(d,f)=>{var m,b;const h=t==null?void 0:t.vnode.el,v=Array.from((h==null?void 0:h.children)||[]).filter(_=>_==null?void 0:_.classList.contains(`${r.e("row")}`));let p=d;const g=(m=v[p])==null?void 0:m.childNodes;if(g!=null&&g.length){let _=0;Array.from(g).reduce((w,S,x)=>{var C,T;return((C=g[x])==null?void 0:C.colSpan)>1&&(_=(T=g[x])==null?void 0:T.colSpan),S.nodeName!=="TD"&&_===0&&w.push(x),_>0&&_--,w},[]).forEach(w=>{var S;for(p=d;p>0;){const x=(S=v[p-1])==null?void 0:S.childNodes;if(x[w]&&x[w].nodeName==="TD"&&x[w].rowSpan>1){go(x[w],"hover-cell"),u.push(x[w]);break}p--}})}else u.forEach(_=>Ha(_,"hover-cell")),u.length=0;!((b=e.store)!=null&&b.states.isComplex.value)||!cn||Pi(()=>{const _=v[f],w=v[d];_&&!_.classList.contains("hover-fixed-row")&&Ha(_,"hover-row"),w&&go(w,"hover-row")})}),il(()=>{dr==null||dr()}),{ns:r,onColumnsChange:s,onScrollableChange:l,wrappedRowRender:a,tooltipContent:i,tooltipTrigger:o}},render(){const{wrappedRowRender:e,store:t}=this;return ot("tbody",{tabIndex:-1},[((t==null?void 0:t.states.data.value)||[]).reduce((n,r)=>n.concat(e(r,n.length)),[])])}});function c2e(){var t;const e=(t=Ge(cs))==null?void 0:t.store;return{leftFixedLeafCount:M(()=>(e==null?void 0:e.states.fixedLeafColumnsLength.value)??0),rightFixedLeafCount:M(()=>(e==null?void 0:e.states.rightFixedColumns.value.length)??0),columnsCount:M(()=>(e==null?void 0:e.states.columns.value.length)??0),leftFixedCount:M(()=>(e==null?void 0:e.states.fixedColumns.value.length)??0),rightFixedCount:M(()=>(e==null?void 0:e.states.rightFixedColumns.value.length)??0),columns:M(()=>(e==null?void 0:e.states.columns.value)??[])}}function d2e(e){const{columns:t}=c2e(),n=Ee("table");return{getCellClasses:(i,o)=>{const s=i[o],l=[n.e("cell"),s.id,s.align,s.labelClassName,...BM(n.b(),o,s.fixed,e.store)];return s.className&&l.push(s.className),s.children||l.push(n.is("leaf")),l},getCellStyles:(i,o)=>{const s=FM(o,i.fixed,e.store);return _v(s,"left"),_v(s,"right"),s},columns:t}}var ZN=ye({name:"ElTableFooter",props:{fixed:{type:String,default:""},store:{required:!0,type:Object},summaryMethod:Function,sumText:String,border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e){const t=Ge(cs),n=Ee("table"),{getCellClasses:r,getCellStyles:a,columns:i}=d2e(e),{onScrollableChange:o,onColumnsChange:s}=HM(t);return{ns:n,onScrollableChange:o,onColumnsChange:s,getCellClasses:r,getCellStyles:a,columns:i}},render(){const{columns:e,getCellStyles:t,getCellClasses:n,summaryMethod:r,sumText:a}=this,i=this.store.states.data.value;let o=[];return r?o=r({columns:e,data:i}):e.forEach((s,l)=>{if(l===0){o[l]=a;return}const u=i.map(h=>Number(h[s.property])),c=[];let d=!0;u.forEach(h=>{if(!Number.isNaN(+h)){d=!1;const v=`${h}`.split(".")[1];c.push(v?v.length:0)}});const f=Math.max.apply(null,c);d?o[l]="":o[l]=u.reduce((h,v)=>{const p=Number(v);return Number.isNaN(+p)?h:Number.parseFloat((h+v).toFixed(Math.min(f,20)))},0)}),ot(ot("tfoot",[ot("tr",{},[...e.map((s,l)=>ot("td",{key:l,colspan:s.colSpan,rowspan:s.rowSpan,class:n(e,l),style:t(s,l)},[ot("div",{class:["cell",s.labelClassName]},[o[l]])]))])]))}});function f2e(e){return{setCurrentRow:f=>{e.commit("setCurrentRow",f)},getSelectionRows:()=>e.getSelectionRows(),getHalfSelectionRows:()=>e.getHalfSelectionRows(),toggleRowSelection:(f,h,v=!0)=>{e.toggleRowSelection(f,h,!1,v),e.updateAllSelected()},clearSelection:()=>{e.clearSelection()},clearFilter:f=>{e.clearFilter(f)},toggleAllSelection:()=>{e.commit("toggleAllSelection")},toggleRowExpansion:(f,h)=>{e.toggleRowExpansionAdapter(f,h)},clearSort:()=>{e.clearSort()},sort:(f,h)=>{e.commit("sort",{prop:f,order:h})},updateKeyChildren:(f,h)=>{e.updateKeyChildren(f,h)}}}function h2e(e,t,n,r){const a=H(!1),i=H(null),o=H(!1),s=O=>{o.value=O},l=H({width:null,height:null,headerHeight:null}),u=H(!1),c={display:"inline-block",verticalAlign:"middle"},d=H(),f=H(0),h=H(0),v=H(0),p=H(0),g=H(0);_e(()=>e.height,O=>{t.setHeight(O??null)},{immediate:!0}),_e(()=>e.maxHeight,O=>{t.setMaxHeight(O??null)},{immediate:!0}),_e(()=>[e.currentRowKey,n.states.rowKey],([O,$])=>{!y($)||!y(O)||n.setCurrentRowKey(`${O}`)},{immediate:!0}),_e(()=>e.data,O=>{r.store.commit("setData",O)},{immediate:!0,deep:!0}),Ua(()=>{e.expandRowKeys&&n.setExpandRowKeysAdapter(e.expandRowKeys)});const m=()=>{r.store.commit("setHoverRow",null),r.hoverState&&(r.hoverState=null)},b=(O,$)=>{const{pixelX:N,pixelY:D}=$;Math.abs(N)>=Math.abs(D)&&(r.refs.bodyWrapper.scrollLeft+=$.pixelX/5)},_=M(()=>e.height||e.maxHeight||n.states.fixedColumns.value.length>0||n.states.rightFixedColumns.value.length>0),w=M(()=>({width:t.bodyWidth.value?`${t.bodyWidth.value}px`:""})),S=()=>{_.value&&t.updateElsHeight(),t.updateColumnsWidth(),!(typeof window>"u")&&requestAnimationFrame(E)};St(async()=>{await Ue(),n.updateColumns(),k(),requestAnimationFrame(S);const O=r.vnode.el,$=r.refs.headerWrapper;e.flexible&&O&&O.parentElement&&(O.parentElement.style.minWidth="0"),l.value={width:d.value=O.offsetWidth,height:O.offsetHeight,headerHeight:e.showHeader&&$?$.offsetHeight:null},n.states.columns.value.forEach(N=>{N.filteredValue&&N.filteredValue.length&&r.store.commit("filterChange",{column:N,values:N.filteredValue,silent:!0})}),r.$ready=!0});const x=(O,$)=>{if(!O)return;const N=Array.from(O.classList).filter(D=>!D.startsWith("is-scrolling-"));N.push(t.scrollX.value?$:"is-scrolling-none"),O.className=N.join(" ")},C=O=>{const{tableWrapper:$}=r.refs;x($,O)},T=O=>{const{tableWrapper:$}=r.refs;return!!($&&$.classList.contains(O))},E=function(){if(!r.refs.scrollBarRef)return;if(!t.scrollX.value){const z="is-scrolling-none";T(z)||C(z);return}const O=r.refs.scrollBarRef.wrapRef;if(!O)return;const{scrollLeft:$,offsetWidth:N,scrollWidth:D}=O,{headerWrapper:F,footerWrapper:W}=r.refs;F&&(F.scrollLeft=$),W&&(W.scrollLeft=$),$>=D-N-1?C("is-scrolling-right"):C($===0?"is-scrolling-left":"is-scrolling-middle")},k=()=>{r.refs.scrollBarRef&&(r.refs.scrollBarRef.wrapRef&&gn(r.refs.scrollBarRef.wrapRef,"scroll",E,{passive:!0}),e.fit?Kn(r.vnode.el,A):gn(window,"resize",A),Kn(r.refs.tableInnerWrapper,()=>{var O,$;A(),($=(O=r.refs)==null?void 0:O.scrollBarRef)==null||$.update()}))},A=()=>{var q,re,ee,se;const O=r.vnode.el;if(!r.$ready||!O)return;let $=!1;const{width:N,height:D,headerHeight:F}=l.value,W=d.value=O.offsetWidth;N!==W&&($=!0);const z=O.offsetHeight;(e.height||_.value)&&D!==z&&($=!0);const Y=e.tableLayout==="fixed"?r.refs.headerWrapper:(q=r.refs.tableHeaderRef)==null?void 0:q.$el;e.showHeader&&(Y==null?void 0:Y.offsetHeight)!==F&&($=!0),f.value=((re=r.refs.tableWrapper)==null?void 0:re.scrollHeight)||0,v.value=(Y==null?void 0:Y.scrollHeight)||0,p.value=((ee=r.refs.footerWrapper)==null?void 0:ee.offsetHeight)||0,g.value=((se=r.refs.appendWrapper)==null?void 0:se.offsetHeight)||0,h.value=f.value-v.value-p.value-g.value,$&&(l.value={width:W,height:z,headerHeight:e.showHeader&&(Y==null?void 0:Y.offsetHeight)||0},S())},I=Rr(),P=M(()=>{const{bodyWidth:O,scrollY:$,gutterWidth:N}=t;return O.value?`${O.value-($.value?N:0)}px`:""}),R=M(()=>e.maxHeight?"fixed":e.tableLayout);return{isHidden:a,renderExpanded:i,setDragVisible:s,isGroup:u,handleMouseLeave:m,handleHeaderFooterMousewheel:b,tableSize:I,emptyBlockStyle:M(()=>{if(e.data&&e.data.length)return;let O="100%";e.height&&h.value&&(O=`${h.value}px`);const $=d.value;return{width:$?`${$}px`:"",height:O}}),resizeProxyVisible:o,bodyWidth:P,resizeState:l,doLayout:S,tableBodyStyles:w,tableLayout:R,scrollbarViewStyle:c,scrollbarStyle:M(()=>e.height?{height:"100%"}:e.maxHeight?Number.isNaN(Number(e.maxHeight))?{maxHeight:`calc(${e.maxHeight} - ${v.value+p.value}px)`}:{maxHeight:`${+e.maxHeight-v.value-p.value}px`}:{})}}function v2e(e){let t;const n=()=>{const r=e.vnode.el.querySelector(".hidden-columns"),a={childList:!0,subtree:!0},i=e.store.states.updateOrderFns;t=new MutationObserver(()=>{i.forEach(o=>o())}),t.observe(r,a)};St(()=>{n()}),il(()=>{t==null||t.disconnect()})}function qb(e){const t=e.tableLayout==="auto";let n=e.columns||[];t&&n.every(({width:a})=>qt(a))&&(n=[]);const r=a=>{const i={key:`${e.tableLayout}_${a.id}`,style:{},name:void 0};return t?i.style={width:`${a.width}px`}:i.name=a.id,i};return ot("colgroup",{},n.map(a=>ot("col",r(a))))}qb.props=["columns","tableLayout"];const p2e=()=>{const e=H(),t=(i,o)=>{const s=e.value;s&&s.scrollTo(i,o)},n=(i,o)=>{const s=e.value;s&&Je(o)&&["Top","Left"].includes(i)&&s[`setScroll${i}`](o)};return{scrollBarRef:e,scrollTo:t,setScrollTop:i=>n("Top",i),setScrollLeft:i=>n("Left",i)}},g2e=["data-prefix"],m2e={ref:"hiddenColumns",class:"hidden-columns"};var y2e=ye({name:"ElTable",__name:"table",props:CTe,emits:["select","select-all","selection-change","cell-mouse-enter","cell-mouse-leave","cell-dblclick","cell-contextmenu","cell-click","row-dblclick","row-click","row-contextmenu","header-click","header-contextmenu","sort-change","filter-change","current-change","header-dragend","expand-change","scroll"],setup(e,{expose:t}){const n=e,{t:r}=Yt(),a=Ee("table"),i=cu("table"),o=Tt();Ft(cs,o);const s=WTe(o,n);o.store=s;const l=new UTe({store:o.store,table:o,fit:n.fit,showHeader:n.showHeader});o.layout=l;const u=M(()=>(s.states.data.value||[]).length===0),{setCurrentRow:c,getSelectionRows:d,getHalfSelectionRows:f,toggleRowSelection:h,clearSelection:v,clearFilter:p,toggleAllSelection:g,toggleRowExpansion:m,clearSort:b,sort:_,updateKeyChildren:w}=f2e(s),{isHidden:S,renderExpanded:x,setDragVisible:C,isGroup:T,handleMouseLeave:E,handleHeaderFooterMousewheel:k,tableSize:A,emptyBlockStyle:I,resizeProxyVisible:P,bodyWidth:R,resizeState:O,doLayout:$,tableBodyStyles:N,tableLayout:D,scrollbarViewStyle:F,scrollbarStyle:W}=h2e(n,l,s,o),{scrollBarRef:z,scrollTo:Y,setScrollLeft:q,setScrollTop:re}=p2e(),ee=Xs($,50),se=kTe(a.namespace.value),ne=o;o.tableId=se,o.state={isGroup:T,resizeState:O,doLayout:$,debouncedUpdateLayout:ee};const de=M(()=>n.sumText??r("el.table.sumText")),le=M(()=>n.emptyText??r("el.table.emptyText")),J=M(()=>{var te;return n.tooltipEffect??((te=i.value)==null?void 0:te.tooltipEffect)}),Z=M(()=>{var te;return n.tooltipOptions??((te=i.value)==null?void 0:te.tooltipOptions)}),U=M(()=>YU(s.states.originColumns.value)[0]);return v2e(o),yn(()=>{ee.cancel()}),t({ns:a,layout:l,store:s,columns:U,handleHeaderFooterMousewheel:k,handleMouseLeave:E,tableId:se,tableSize:A,isHidden:S,isEmpty:u,renderExpanded:x,resizeProxyVisible:P,resizeState:O,isGroup:T,bodyWidth:R,tableBodyStyles:N,emptyBlockStyle:I,debouncedUpdateLayout:ee,setCurrentRow:c,getSelectionRows:d,getHalfSelectionRows:f,toggleRowSelection:h,clearSelection:v,clearFilter:p,toggleAllSelection:g,toggleRowExpansion:m,clearSort:b,doLayout:$,sort:_,updateKeyChildren:w,t:r,setDragVisible:C,context:ne,computedSumText:de,computedEmptyText:le,computedTooltipEffect:J,computedTooltipOptions:Z,tableLayout:D,scrollbarViewStyle:F,scrollbarStyle:W,scrollBarRef:z,scrollTo:Y,setScrollLeft:q,setScrollTop:re,allowDragLastColumn:n.allowDragLastColumn}),(te,Q)=>(L(),K("div",{ref:"tableWrapper",class:B([{[y(a).m("fit")]:e.fit,[y(a).m("striped")]:e.stripe,[y(a).m("border")]:e.border||y(T),[y(a).m("hidden")]:y(S),[y(a).m("group")]:y(T),[y(a).m("fluid-height")]:e.maxHeight,[y(a).m("scrollable-x")]:y(l).scrollX.value,[y(a).m("scrollable-y")]:y(l).scrollY.value,[y(a).m("enable-row-hover")]:!y(s).states.isComplex.value,[y(a).m("enable-row-transition")]:(y(s).states.data.value||[]).length!==0&&(y(s).states.data.value||[]).length<100,"has-footer":e.showSummary},y(a).m(y(A)),e.className,y(a).b(),y(a).m(`layout-${y(D)}`)]),style:tt(e.style),"data-prefix":y(a).namespace.value,onMouseleave:Q[1]||(Q[1]=(...ue)=>y(E)&&y(E)(...ue))},[j("div",{ref:"tableInnerWrapper",class:B(y(a).e("inner-wrapper"))},[j("div",m2e,[he(te.$slots,"default")],512),e.showHeader&&y(D)==="fixed"?gt((L(),K("div",{key:0,ref:"headerWrapper",class:B(y(a).e("header-wrapper"))},[j("table",{ref:"tableHeader",class:B(y(a).e("header")),style:tt(y(N)),border:"0",cellpadding:"0",cellspacing:"0"},[V(y(qb),{columns:y(s).states.columns.value,"table-layout":y(D)},null,8,["columns","table-layout"]),V(y(XN),{ref:"tableHeaderRef",border:e.border,"default-sort":e.defaultSort,store:y(s),"append-filter-panel-to":e.appendFilterPanelTo,"allow-drag-last-column":e.allowDragLastColumn,onSetDragVisible:y(C)},null,8,["border","default-sort","store","append-filter-panel-to","allow-drag-last-column","onSetDragVisible"])],6)],2)),[[y(hN),y(k)]]):fe("v-if",!0),j("div",{ref:"bodyWrapper",class:B(y(a).e("body-wrapper"))},[V(y(ts),{ref_key:"scrollBarRef",ref:z,"view-style":y(F),"wrap-style":y(W),always:e.scrollbarAlwaysOn,tabindex:e.scrollbarTabindex,native:e.nativeScrollbar,onScroll:Q[0]||(Q[0]=ue=>te.$emit("scroll",ue))},{default:G(()=>[j("table",{ref:"tableBody",class:B(y(a).e("body")),cellspacing:"0",cellpadding:"0",border:"0",style:tt({width:y(R),tableLayout:y(D)})},[V(y(qb),{columns:y(s).states.columns.value,"table-layout":y(D)},null,8,["columns","table-layout"]),e.showHeader&&y(D)==="auto"?(L(),ve(y(XN),{key:0,ref:"tableHeaderRef",class:B(y(a).e("body-header")),border:e.border,"default-sort":e.defaultSort,store:y(s),"append-filter-panel-to":e.appendFilterPanelTo,onSetDragVisible:y(C)},null,8,["class","border","default-sort","store","append-filter-panel-to","onSetDragVisible"])):fe("v-if",!0),V(y(u2e),{context:y(ne),highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"tooltip-effect":J.value,"tooltip-options":Z.value,"row-style":e.rowStyle,store:y(s),stripe:e.stripe},null,8,["context","highlight","row-class-name","tooltip-effect","tooltip-options","row-style","store","stripe"]),e.showSummary&&y(D)==="auto"?(L(),ve(y(ZN),{key:1,class:B(y(a).e("body-footer")),border:e.border,"default-sort":e.defaultSort,store:y(s),"sum-text":de.value,"summary-method":e.summaryMethod},null,8,["class","border","default-sort","store","sum-text","summary-method"])):fe("v-if",!0)],6),u.value?(L(),K("div",{key:0,ref:"emptyBlock",style:tt(y(I)),class:B(y(a).e("empty-block"))},[j("span",{class:B(y(a).e("empty-text"))},[he(te.$slots,"empty",{},()=>[Le(ce(le.value),1)])],2)],6)):fe("v-if",!0),te.$slots.append?(L(),K("div",{key:1,ref:"appendWrapper",class:B(y(a).e("append-wrapper"))},[he(te.$slots,"append")],2)):fe("v-if",!0)]),_:3},8,["view-style","wrap-style","always","tabindex","native"])],2),e.showSummary&&y(D)==="fixed"?gt((L(),K("div",{key:1,ref:"footerWrapper",class:B(y(a).e("footer-wrapper"))},[j("table",{class:B(y(a).e("footer")),cellspacing:"0",cellpadding:"0",border:"0",style:tt(y(N))},[V(y(qb),{columns:y(s).states.columns.value,"table-layout":y(D)},null,8,["columns","table-layout"]),V(y(ZN),{border:e.border,"default-sort":e.defaultSort,store:y(s),"sum-text":de.value,"summary-method":e.summaryMethod},null,8,["border","default-sort","store","sum-text","summary-method"])],6)],2)),[[ln,!u.value],[y(hN),y(k)]]):fe("v-if",!0),e.border||y(T)?(L(),K("div",{key:2,class:B(y(a).e("border-left-patch"))},null,2)):fe("v-if",!0)],2),gt(j("div",{ref:"resizeProxy",class:B(y(a).e("column-resize-proxy"))},null,2),[[ln,y(P)]])],46,g2e))}}),b2e=y2e;const _2e={type:{type:String,default:"default"},label:String,className:String,labelClassName:String,property:String,prop:String,width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},renderHeader:Function,sortable:{type:[Boolean,String],default:!1},sortMethod:Function,sortBy:[String,Function,Array],resizable:{type:Boolean,default:!0},columnKey:String,align:String,headerAlign:String,showOverflowTooltip:{type:[Boolean,Object],default:void 0},tooltipFormatter:Function,fixed:[Boolean,String],formatter:Function,selectable:Function,reserveSelection:Boolean,filterMethod:Function,filteredValue:Array,filters:Array,filterPlacement:String,filterMultiple:{type:Boolean,default:!0},filterClassName:String,index:[Number,Function],sortOrders:{type:Array,default:()=>["ascending","descending",null],validator:e=>e.every(t=>["ascending","descending",null].includes(t))}},w2e={selection:"table-column--selection",expand:"table__expand-column"},S2e={default:{order:""},selection:{width:48,minWidth:48,realWidth:48,order:""},expand:{width:48,minWidth:48,realWidth:48,order:""},index:{width:48,minWidth:48,realWidth:48,order:""}},x2e=e=>w2e[e]||"",C2e={selection:{renderHeader({store:e}){function t(){return e.states.data.value&&e.states.data.value.length===0}return ot(Qs,{disabled:t(),size:e.states.tableSize.value,indeterminate:e.states.selection.value.length>0&&!e.states.isAllSelected.value,"onUpdate:modelValue":e.toggleAllSelection??void 0,modelValue:e.states.isAllSelected.value,ariaLabel:e.t("el.table.selectAllLabel")})},renderCell({row:e,column:t,store:n,$index:r}){return ot(Qs,{disabled:t.selectable?!t.selectable.call(null,e,r):!1,size:n.states.tableSize.value,onChange:()=>{n.commit("rowSelectedChanged",e)},onClick:a=>a.stopPropagation(),modelValue:n.isSelected(e),indeterminate:n.getRowIndeterminate(e),ariaLabel:n.t("el.table.selectRowLabel")})},sortable:!1,resizable:!1},index:{renderHeader({column:e}){return e.label||"#"},renderCell({column:e,$index:t}){let n=t+1;const r=e.index;return Je(r)?n=t+r:et(r)&&(n=r(t)),ot("div",{},[n])},sortable:!1},expand:{renderHeader({column:e}){return e.label||""},renderCell({column:e,row:t,store:n,expanded:r,$index:a}){var u,c;const{ns:i}=n,o=[i.e("expand-icon")];!e.renderExpand&&r&&o.push(i.em("expand-icon","expanded"));const s=function(d){d.stopPropagation(),n.toggleRowExpansion(t)},l=((c=(u=n.states.rowExpandable).value)==null?void 0:c.call(u,t,a))??!0;return l||o.push(i.is("disabled")),ot("button",{type:"button",disabled:!l,"aria-label":n.t(r?"el.table.collapseRowLabel":"el.table.expandRowLabel"),"aria-expanded":r,class:o,onClick:s},{default:()=>e.renderExpand?[e.renderExpand({expanded:r,expandable:l})]:[ot(Ze,null,{default:()=>[ot(Wa)]})]})},sortable:!1,resizable:!1}};function T2e({row:e,column:t,$index:n}){var i;const r=t.property,a=r&&ic(e,r).value;return t&&t.formatter?t.formatter(e,t,a,n):((i=a==null?void 0:a.toString)==null?void 0:i.call(a))||""}function E2e({row:e,treeNode:t,store:n},r=!1){const{ns:a}=n;if(!t)return r?[ot("span",{class:a.e("placeholder")})]:null;const i=[],o=function(s){s.stopPropagation(),!t.loading&&n.loadOrToggle(e)};if(t.indent&&i.push(ot("span",{class:a.e("indent"),style:{"padding-left":`${t.indent}px`}})),En(t.expanded)&&!t.noLazyChildren){const s=[a.e("expand-icon"),t.expanded?a.em("expand-icon","expanded"):""];let l=Wa;t.loading&&(l=es),i.push(ot("button",{type:"button","aria-label":n.t(t.expanded?"el.table.collapseRowLabel":"el.table.expandRowLabel"),"aria-expanded":t.expanded,class:s,onClick:o},{default:()=>[ot(Ze,{class:a.is("loading",t.loading)},{default:()=>[ot(l)]})]}))}else i.push(ot("span",{class:a.e("placeholder")}));return i}function JN(e,t){return e.reduce((n,r)=>(n[r]=r,n),t)}function k2e(e,t){const n=Tt();return{registerComplexWatchers:()=>{const i=["fixed"],o={realWidth:"width",realMinWidth:"minWidth"},s=JN(i,o);Object.keys(s).forEach(l=>{const u=o[l];un(t,u)&&_e(()=>t[u],c=>{let d=c;u==="width"&&l==="realWidth"&&(d=$M(c)),u==="minWidth"&&l==="realMinWidth"&&(d=FU(c)),n.columnConfig.value[u]=d,n.columnConfig.value[l]=d;const f=u==="fixed";e.value.store.scheduleLayout(f)})})},registerNormalWatchers:()=>{const i=["label","filters","filterMultiple","filteredValue","sortable","index","formatter","className","labelClassName","filterClassName","showOverflowTooltip","tooltipFormatter","resizable"],o=["showOverflowTooltip"],s={property:"prop",align:"realAlign",headerAlign:"realHeaderAlign"},l=JN(i,s);Object.keys(l).forEach(c=>{const d=s[c];un(t,d)&&_e(()=>t[d],f=>{n.columnConfig.value[c]=f,(c==="filters"||c==="filterMethod")&&(n.columnConfig.value.filterable=!!(n.columnConfig.value.filters||n.columnConfig.value.filterMethod))})}),o.forEach(c=>{un(e.value.props,c)&&_e(()=>e.value.props[c],d=>{n.columnConfig.value.type!=="selection"&&qt(t[c])&&(n.columnConfig.value[c]=d)})});const u=cu("table");u.value&&un(u.value,"showOverflowTooltip")&&_e(()=>{var c;return(c=u.value)==null?void 0:c.showOverflowTooltip},c=>{n.columnConfig.value.type!=="selection"&&(!qt(t.showOverflowTooltip)||!qt(e.value.props.showOverflowTooltip)||(n.columnConfig.value.showOverflowTooltip=c))})}}}function A2e(e,t,n){const r=Tt(),a=H(""),i=H(!1),o=H(),s=H(),l=Ee("table");Ua(()=>{o.value=e.align?`is-${e.align}`:null,o.value}),Ua(()=>{s.value=e.headerAlign?`is-${e.headerAlign}`:o.value,s.value});const u=M(()=>{let w=r.vnode.vParent||r.parent;for(;w&&!w.tableId&&!w.columnId;)w=w.vnode.vParent||w.parent;return w}),c=M(()=>{const{store:w}=r.parent;if(!w)return!1;const{treeData:S}=w.states,x=S.value;return x&&Object.keys(x).length>0}),d=H($M(e.width)),f=H(FU(e.minWidth)),h=w=>(d.value&&(w.width=d.value),f.value&&(w.minWidth=f.value),!d.value&&f.value&&(w.width=void 0),w.minWidth||(w.minWidth=80),w.realWidth=Number(qt(w.width)?w.minWidth:w.width),w),v=w=>{const S=w.type,x=C2e[S]||{};Object.keys(x).forEach(T=>{const E=x[T];T!=="className"&&!qt(E)&&(w[T]=E)});const C=x2e(S);if(C){const T=`${y(l.namespace)}-${C}`;w.className=w.className?`${w.className} ${T}`:T}return w},p=w=>{Me(w)?w.forEach(x=>S(x)):S(w);function S(x){var C;((C=x==null?void 0:x.type)==null?void 0:C.name)==="ElTableColumn"&&(x.vParent=r)}};return{columnId:a,realAlign:o,isSubColumn:i,realHeaderAlign:s,columnOrTableParent:u,setColumnWidth:h,setColumnForcedProps:v,setColumnRenders:w=>{e.renderHeader?wn("TableColumn","Comparing to render-header, scoped-slot header is easier to use. We recommend users to use scoped-slot header."):w.type!=="selection"&&(w.renderHeader=x=>{if(r.columnConfig.value.label,t.header){const C=t.header(x);if(WU(C))return ot(ze,C)}return Le(w.label)}),t["filter-icon"]&&(w.renderFilterIcon=x=>he(t,"filter-icon",x)),t.expand&&(w.renderExpand=x=>he(t,"expand",x));let S=w.renderCell;return w.type==="expand"?(w.renderCell=x=>ot("div",{class:"cell"},[S(x)]),n.value.renderExpanded=x=>t.default?t.default(x):t.default):(S=S||T2e,w.renderCell=x=>{let C=null;if(t.default){const I=t.default(x);C=I.some(P=>P.type!==Tr)?I:S(x)}else C=S(x);const{columns:T}=n.value.store.states,E=T.value.findIndex(I=>I.type==="default"),k=E2e(x,c.value&&x.cellIndex===E),A={class:"cell",style:{}};return w.showOverflowTooltip&&(A.class=`${A.class} ${y(l.namespace)}-tooltip`,A.style={width:`${(x.column.realWidth||Number(x.column.width))-1}px`}),p(C),ot("div",A,[k,C])}),w},getPropsData:(...w)=>w.reduce((S,x)=>(Me(x)&&x.forEach(C=>{S[C]=e[C]}),S),{}),getColumnElIndex:(w,S)=>Array.prototype.indexOf.call(w,S),updateColumnOrder:()=>{n.value.store.commit("updateColumnOrder",r.columnConfig.value)}}}var I2e=ye({name:"ElTableColumn",__name:"index",props:_2e,setup(e){const t=e,n=pr(),r=Tt(),a=cu("table"),i=H({}),o=M(()=>{let x=r.parent;for(;x&&!x.tableId;)x=x.parent;return x}),{registerNormalWatchers:s,registerComplexWatchers:l}=k2e(o,t),{columnId:u,isSubColumn:c,realHeaderAlign:d,columnOrTableParent:f,setColumnWidth:h,setColumnForcedProps:v,setColumnRenders:p,getPropsData:g,getColumnElIndex:m,realAlign:b,updateColumnOrder:_}=A2e(t,n,o),w=f.value;u.value=ATe("tableId"in w?w.tableId:w.columnId),dy(()=>{var I,P;c.value=o.value!==w;const x=t.type||"default",C=t.sortable===""?!0:t.sortable,T=x==="selection"?!1:qt(t.showOverflowTooltip)?w.props.showOverflowTooltip??((I=a.value)==null?void 0:I.showOverflowTooltip):t.showOverflowTooltip,E=qt(t.tooltipFormatter)?w.props.tooltipFormatter??((P=a.value)==null?void 0:P.tooltipFormatter):t.tooltipFormatter,k={...S2e[x],id:u.value,type:x,property:t.prop||t.property,align:b,headerAlign:d,showOverflowTooltip:T,tooltipFormatter:E,filterable:t.filters||t.filterMethod,filteredValue:[],filterPlacement:"",filterClassName:"",isColumnGroup:!1,isSubColumn:!1,filterOpened:!1,sortable:C,index:t.index,rawColumnKey:r.vnode.key};let A=g(["columnKey","label","className","labelClassName","type","renderHeader","formatter","fixed","resizable"],["sortMethod","sortBy","sortOrders"],["selectable","reserveSelection"],["filterMethod","filters","filterMultiple","filterOpened","filteredValue","filterPlacement","filterClassName"]);A=PTe(k,A),A=DTe(p,h,v)(A),i.value=A,s(),l()}),St(()=>{var E,k;const x=f.value,C=c.value?(E=x.vnode.el)==null?void 0:E.children:(k=x.refs.hiddenColumns)==null?void 0:k.children,T=()=>m(C||[],r.vnode.el);i.value.getColumnIndex=T,T()>-1&&o.value.store.commit("insertColumn",i.value,c.value?"columnConfig"in x&&x.columnConfig.value:null,_)}),yn(()=>{const x=i.value.getColumnIndex;(x?x():-1)>-1&&o.value.store.commit("removeColumn",i.value,c.value?"columnConfig"in w&&w.columnConfig.value:null,_)}),r.columnId=u.value,r.columnConfig=i;const S=()=>{var x,C;try{const T=(x=n.default)==null?void 0:x.call(n,{row:{},column:{},$index:-1}),E=[];if(Me(T))for(const k of T)((C=k.type)==null?void 0:C.name)==="ElTableColumn"||k.shapeFlag&2?E.push(k):k.type===ze&&Me(k.children)&&k.children.forEach(A=>{(A==null?void 0:A.patchFlag)!==1024&&!qe(A==null?void 0:A.children)&&E.push(A)});return ot("div",E)}catch{return ot("div",[])}};return(x,C)=>(L(),ve(S))}}),M2e=I2e,P2e=M2e,jU=P2e;const L2e=xt(b2e,{TableColumn:jU}),D2e=rr(jU),VE={asc:"desc",desc:"asc"},Tm=Symbol("placeholder"),qU=String,Ry={type:oe(Array),required:!0},WM={type:oe(Array)},XU={...WM,required:!0},R2e=String,QN={type:oe(Array),default:()=>sr([])},Ed={type:Number,required:!0},ZU={type:oe([String,Number,Symbol]),default:"id"},eV={type:oe(Object)},Rd=Oe({class:String,columns:Ry,columnsStyles:{type:oe(Object),required:!0},depth:Number,expandColumnKey:R2e,estimatedRowHeight:{...Zd.estimatedRowHeight,default:void 0},isScrolling:Boolean,onRowExpand:{type:oe(Function)},onRowHover:{type:oe(Function)},onRowHeightChange:{type:oe(Function)},rowData:{type:oe(Object),required:!0},rowEventHandlers:{type:oe(Object)},rowIndex:{type:Number,required:!0},rowKey:ZU,style:{type:oe(Object)}}),Hx={type:Number,required:!0},GM=Oe({class:String,columns:Ry,fixedHeaderData:{type:oe(Array)},headerData:{type:oe(Array),required:!0},headerHeight:{type:oe([Number,Array]),default:50},rowWidth:Hx,rowHeight:{type:Number,default:50},height:Hx,width:Hx}),Xb=Oe({columns:Ry,data:XU,fixedData:WM,estimatedRowHeight:Rd.estimatedRowHeight,width:Ed,height:Ed,headerWidth:Ed,headerHeight:GM.headerHeight,bodyWidth:Ed,rowHeight:Ed,cache:d9.cache,useIsScrolling:Boolean,scrollbarAlwaysOn:Zd.scrollbarAlwaysOn,scrollbarStartGap:Zd.scrollbarStartGap,scrollbarEndGap:Zd.scrollbarEndGap,class:qU,style:eV,containerStyle:eV,getRowHeight:{type:oe(Function),required:!0},rowKey:Rd.rowKey,onRowsRendered:{type:oe(Function)},onScroll:{type:oe(Function)}}),O2e=Oe({cache:Xb.cache,estimatedRowHeight:Rd.estimatedRowHeight,rowKey:ZU,headerClass:{type:oe([String,Function])},headerProps:{type:oe([Object,Function])},headerCellProps:{type:oe([Object,Function])},headerHeight:GM.headerHeight,footerHeight:{type:Number,default:0},rowClass:{type:oe([String,Function])},rowProps:{type:oe([Object,Function])},rowHeight:{type:Number,default:50},cellProps:{type:oe([Object,Function])},columns:Ry,data:XU,dataGetter:{type:oe(Function)},fixedData:WM,expandColumnKey:Rd.expandColumnKey,expandedRowKeys:QN,defaultExpandedRowKeys:QN,class:qU,fixed:Boolean,style:{type:oe(Object)},width:Ed,height:Ed,maxHeight:Number,useIsScrolling:Boolean,indentSize:{type:Number,default:12},iconSize:{type:Number,default:12},hScrollbarSize:Zd.hScrollbarSize,vScrollbarSize:Zd.vScrollbarSize,scrollbarAlwaysOn:v9.alwaysOn,sortBy:{type:oe(Object),default:()=>({})},sortState:{type:oe(Object),default:void 0},onColumnSort:{type:oe(Function)},onExpandedRowsChange:{type:oe(Function)},onEndReached:{type:oe(Function)},onRowExpand:Rd.onRowExpand,onScroll:Xb.onScroll,onRowsRendered:Xb.onRowsRendered,rowEventHandlers:Rd.rowEventHandlers}),N2e=(e,t,n)=>{const r={flexGrow:0,flexShrink:0,...n?{}:{flexGrow:e.flexGrow??0,flexShrink:e.flexShrink??1}},a={...e.style??{},...r,flexBasis:"auto",width:e.width};return t||(e.maxWidth&&(a.maxWidth=e.maxWidth),e.minWidth&&(a.minWidth=e.minWidth)),a};function V2e(e,t,n){const r=M(()=>y(t).map((g,m)=>({...g,key:g.key??g.dataKey??m}))),a=M(()=>y(r).filter(g=>!g.hidden)),i=M(()=>y(a).filter(g=>g.fixed==="left"||g.fixed===!0)),o=M(()=>y(a).filter(g=>g.fixed==="right")),s=M(()=>y(a).filter(g=>!g.fixed)),l=M(()=>{const g=[];return y(i).forEach(m=>{g.push({...m,placeholderSign:Tm})}),y(s).forEach(m=>{g.push(m)}),y(o).forEach(m=>{g.push({...m,placeholderSign:Tm})}),g}),u=M(()=>y(i).length||y(o).length),c=M(()=>y(r).reduce((g,m)=>(g[m.key]=N2e(m,y(n),e.fixed),g),{})),d=M(()=>y(a).reduce((g,m)=>g+m.width,0)),f=g=>y(r).find(m=>m.key===g),h=g=>y(c)[g],v=(g,m)=>{g.width=m};function p(g){var S;const{key:m}=g.currentTarget.dataset;if(!m)return;const{sortState:b,sortBy:_}=e;let w="asc";yt(b)?w=VE[b[m]]:w=VE[_.order],(S=e.onColumnSort)==null||S.call(e,{column:f(m),key:m,order:w})}return{columns:r,columnsStyles:c,columnsTotalWidth:d,fixedColumnsOnLeft:i,fixedColumnsOnRight:o,hasFixedColumns:u,mainColumns:l,normalColumns:s,visibleColumns:a,getColumn:f,getColumnStyle:h,updateColumnWidth:v,onColumnSorted:p}}const $2e=(e,{mainTableRef:t,leftTableRef:n,rightTableRef:r,onMaybeEndReached:a})=>{const i=H({scrollLeft:0,scrollTop:0});function o(h){var p,g,m;const{scrollTop:v}=h;(p=t.value)==null||p.scrollTo(h),(g=n.value)==null||g.scrollToTop(v),(m=r.value)==null||m.scrollToTop(v)}function s(h){i.value=h,o(h)}function l(h){i.value.scrollTop=h,o(y(i))}function u(h){var v,p;i.value.scrollLeft=h,(p=(v=t.value)==null?void 0:v.scrollTo)==null||p.call(v,y(i))}function c(h){var v;s(h),(v=e.onScroll)==null||v.call(e,h)}function d({scrollTop:h}){const{scrollTop:v}=y(i);h!==v&&l(h)}function f(h,v="auto"){var p;(p=t.value)==null||p.scrollToRow(h,v)}return _e(()=>y(i).scrollTop,(h,v)=>{h>v&&a()}),{scrollPos:i,scrollTo:s,scrollToLeft:u,scrollToTop:l,scrollToRow:f,onScroll:c,onVerticalScroll:d}},B2e=(e,{mainTableRef:t,leftTableRef:n,rightTableRef:r,tableInstance:a,ns:i,isScrolling:o})=>{const s=Tt(),{emit:l}=s,u=Ut(!1),c=H(e.defaultExpandedRowKeys||[]),d=H(-1),f=Ut(null),h=H({}),v=H({}),p=Ut({}),g=Ut({}),m=Ut({}),b=M(()=>Je(e.estimatedRowHeight));function _(k){var A;(A=e.onRowsRendered)==null||A.call(e,k),k.rowCacheEnd>y(d)&&(d.value=k.rowCacheEnd)}function w({hovered:k,rowKey:A}){o.value||a.vnode.el.querySelectorAll(`[rowkey="${String(A)}"]`).forEach(I=>{k?I.classList.add(i.is("hovered")):I.classList.remove(i.is("hovered"))})}function S({expanded:k,rowData:A,rowIndex:I,rowKey:P}){var $,N;const R=[...y(c)],O=R.indexOf(P);k?O===-1&&R.push(P):O>-1&&R.splice(O,1),c.value=R,l("update:expandedRowKeys",R),($=e.onRowExpand)==null||$.call(e,{expanded:k,rowData:A,rowIndex:I,rowKey:P}),(N=e.onExpandedRowsChange)==null||N.call(e,R),a.vnode.el.querySelector(`.${i.is("hovered")}[rowkey="${String(P)}"]`)&&Ue(()=>w({hovered:!0,rowKey:P}))}const x=Xs(()=>{var k,A,I,P;u.value=!0,h.value={...y(h),...y(v)},C(y(f),!1),v.value={},f.value=null,(k=t.value)==null||k.forceUpdate(),(A=n.value)==null||A.forceUpdate(),(I=r.value)==null||I.forceUpdate(),(P=s.proxy)==null||P.$forceUpdate(),u.value=!1},0);function C(k,A=!1){y(b)&&[t,n,r].forEach(I=>{const P=y(I);P&&P.resetAfterRowIndex(k,A)})}function T(k,A,I){const P=y(f);(P===null||P>I)&&(f.value=I),v.value[k]=A}function E({rowKey:k,height:A,rowIndex:I},P){P?P==="right"?m.value[k]=A:p.value[k]=A:g.value[k]=A;const R=Math.max(...[p,m,g].map(O=>O.value[k]||0));y(h)[k]!==R&&(T(k,R,I),x())}return{expandedRowKeys:c,lastRenderedRowIndex:d,isDynamic:b,isResetting:u,rowHeights:h,resetAfterIndex:C,onRowExpanded:S,onRowHovered:w,onRowsRendered:_,onRowHeightChange:E}},F2e=(e,{expandedRowKeys:t,lastRenderedRowIndex:n,resetAfterIndex:r})=>{const a=H({}),i=M(()=>{const s={},{data:l,rowKey:u}=e,c=y(t);if(!c||!c.length)return l;const d=[],f=new Set;c.forEach(v=>f.add(v));let h=l.slice();for(h.forEach(v=>s[v[u]]=0);h.length>0;){const v=h.shift();d.push(v),f.has(v[u])&&Me(v.children)&&v.children.length>0&&(h=[...v.children,...h],v.children.forEach(p=>s[p[u]]=s[v[u]]+1))}return a.value=s,d}),o=M(()=>{const{data:s,expandColumnKey:l}=e;return l?y(i):s});return _e(o,(s,l)=>{s!==l&&(n.value=-1,r(0,!0))}),{data:o,depthMap:a}},z2e=(e,t)=>e+t,Zb=e=>Me(e)?e.reduce(z2e,0):e,yf=(e,t,n={})=>et(e)?e(t):e??n,qu=e=>(["width","maxWidth","minWidth","height"].forEach(t=>{e[t]=ur(e[t])}),e),JU=e=>Vn(e)?t=>ot(e,t):e,H2e=(e,{columnsTotalWidth:t,rowsHeight:n,fixedColumnsOnLeft:r,fixedColumnsOnRight:a})=>{const i=M(()=>{const{fixed:p,width:g,vScrollbarSize:m}=e,b=g-m;return p?Math.max(Math.round(y(t)),b):b}),o=M(()=>{const{height:p=0,maxHeight:g=0,footerHeight:m,hScrollbarSize:b}=e;if(g>0){const _=y(f),w=y(n),S=y(d)+_+w+b;return Math.min(S,g-m)}return p-m}),s=M(()=>{const{maxHeight:p}=e,g=y(o);if(Je(p)&&p>0)return g;const m=y(n)+y(d)+y(f);return Math.min(g,m)}),l=p=>p.width,u=M(()=>Zb(y(r).map(l))),c=M(()=>Zb(y(a).map(l))),d=M(()=>Zb(e.headerHeight)),f=M(()=>{var p;return(((p=e.fixedData)==null?void 0:p.length)||0)*e.rowHeight}),h=M(()=>y(o)-y(d)-y(f)),v=M(()=>{const{style:p={},height:g,width:m}=e;return qu({...p,height:g,width:m})});return{bodyWidth:i,fixedTableHeight:s,mainTableHeight:o,leftTableWidth:u,rightTableWidth:c,windowHeight:h,footerHeight:M(()=>qu({height:e.footerHeight})),emptyStyle:M(()=>({top:ur(y(d)),bottom:ur(e.footerHeight),width:ur(e.width)})),rootStyle:v,headerHeight:d}};function W2e(e){const t=H(),n=H(),r=H(),{columns:a,columnsStyles:i,columnsTotalWidth:o,fixedColumnsOnLeft:s,fixedColumnsOnRight:l,hasFixedColumns:u,mainColumns:c,onColumnSorted:d}=V2e(e,xn(e,"columns"),xn(e,"fixed")),{scrollTo:f,scrollToLeft:h,scrollToTop:v,scrollToRow:p,onScroll:g,onVerticalScroll:m,scrollPos:b}=$2e(e,{mainTableRef:t,leftTableRef:n,rightTableRef:r,onMaybeEndReached:te}),_=Ee("table-v2"),w=Tt(),S=Ut(!1),{expandedRowKeys:x,lastRenderedRowIndex:C,isDynamic:T,isResetting:E,rowHeights:k,resetAfterIndex:A,onRowExpanded:I,onRowHeightChange:P,onRowHovered:R,onRowsRendered:O}=B2e(e,{mainTableRef:t,leftTableRef:n,rightTableRef:r,tableInstance:w,ns:_,isScrolling:S}),{data:$,depthMap:N}=F2e(e,{expandedRowKeys:x,lastRenderedRowIndex:C,resetAfterIndex:A}),D=M(()=>{const{estimatedRowHeight:Q,rowHeight:ue}=e,pe=y($);return Je(Q)?Object.values(y(k)).reduce((me,Pe)=>me+Pe,0):pe.length*ue}),{bodyWidth:F,fixedTableHeight:W,mainTableHeight:z,leftTableWidth:Y,rightTableWidth:q,windowHeight:re,footerHeight:ee,emptyStyle:se,rootStyle:ne,headerHeight:de}=H2e(e,{columnsTotalWidth:o,fixedColumnsOnLeft:s,fixedColumnsOnRight:l,rowsHeight:D}),le=H(),J=M(()=>{const Q=y($).length===0;return Me(e.fixedData)?e.fixedData.length===0&&Q:Q});function Z(Q){const{estimatedRowHeight:ue,rowHeight:pe,rowKey:me}=e;return ue?y(k)[y($)[Q][me]]||ue:pe}const U=H(!1);function te(){const{onEndReached:Q}=e;if(!Q)return;const{scrollTop:ue}=y(b),pe=y(D),me=pe-(ue+y(re))+e.hScrollbarSize;!U.value&&y(C)>=0&&pe<=ue+y(z)-y(de)?(U.value=!0,Q(me)):U.value=!1}return _e(()=>y(D),()=>U.value=!1),_e(()=>e.expandedRowKeys,Q=>x.value=Q,{deep:!0}),{columns:a,containerRef:le,mainTableRef:t,leftTableRef:n,rightTableRef:r,isDynamic:T,isResetting:E,isScrolling:S,hasFixedColumns:u,columnsStyles:i,columnsTotalWidth:o,data:$,expandedRowKeys:x,depthMap:N,fixedColumnsOnLeft:s,fixedColumnsOnRight:l,mainColumns:c,bodyWidth:F,emptyStyle:se,rootStyle:ne,footerHeight:ee,mainTableHeight:z,fixedTableHeight:W,leftTableWidth:Y,rightTableWidth:q,showEmpty:J,getRowHeight:Z,onColumnSorted:d,onRowHovered:R,onRowExpanded:I,onRowsRendered:O,onRowHeightChange:P,scrollTo:f,scrollToLeft:h,scrollToTop:v,scrollToRow:p,onScroll:g,onVerticalScroll:m}}const UM=Symbol("tableV2"),QU="tableV2GridScrollLeft",G2e=ye({name:"ElTableV2Header",props:GM,setup(e,{slots:t,expose:n}){const r=Ee("table-v2"),a=Ge(QU),i=H(),o=M(()=>qu({width:e.width,height:e.height})),s=M(()=>qu({width:e.rowWidth,height:e.height})),l=M(()=>jr(y(e.headerHeight))),u=f=>{const h=y(i);Ue(()=>{h!=null&&h.scroll&&h.scroll({left:f})})},c=()=>{const f=r.e("fixed-header-row"),{columns:h,fixedHeaderData:v,rowHeight:p}=e;return v==null?void 0:v.map((g,m)=>{var _;const b=qu({height:p,width:"100%"});return(_=t.fixed)==null?void 0:_.call(t,{class:f,columns:h,rowData:g,rowIndex:-(m+1),style:b})})},d=()=>{const f=r.e("dynamic-header-row"),{columns:h}=e;return y(l).map((v,p)=>{var m;const g=qu({width:"100%",height:v});return(m=t.dynamic)==null?void 0:m.call(t,{class:f,columns:h,headerIndex:p,style:g})})};return is(()=>{a!=null&&a.value&&u(a.value)}),n({scrollToLeft:u}),()=>{if(!(e.height<=0))return V("div",{ref:i,class:e.class,style:y(o),role:"rowgroup"},[V("div",{style:y(s),class:r.e("header")},[d(),c()])])}}}),U2e="ElTableV2Grid",K2e=e=>{const t=H(),n=H(),r=H(0),a=M(()=>{const{data:g,rowHeight:m,estimatedRowHeight:b}=e;if(!b)return g.length*m}),i=M(()=>{const{fixedData:g,rowHeight:m}=e;return((g==null?void 0:g.length)||0)*m}),o=M(()=>Zb(e.headerHeight)),s=M(()=>{const{height:g}=e;return Math.max(0,g-y(o)-y(i))}),l=M(()=>y(o)+y(i)>0),u=({data:g,rowIndex:m})=>g[m][e.rowKey];function c({rowCacheStart:g,rowCacheEnd:m,rowVisibleStart:b,rowVisibleEnd:_}){var w;(w=e.onRowsRendered)==null||w.call(e,{rowCacheStart:g,rowCacheEnd:m,rowVisibleStart:b,rowVisibleEnd:_})}function d(g,m){var b;(b=n.value)==null||b.resetAfterRowIndex(g,m)}function f(g,m){const b=y(t),_=y(n);yt(g)?(b==null||b.scrollToLeft(g.scrollLeft),r.value=g.scrollLeft,_==null||_.scrollTo(g)):(b==null||b.scrollToLeft(g),r.value=g,_==null||_.scrollTo({scrollLeft:g,scrollTop:m}))}function h(g){var m;(m=y(n))==null||m.scrollTo({scrollTop:g})}function v(g,m){const b=y(n);if(!b)return;const _=r.value;b.scrollToItem(g,0,m),_&&f({scrollLeft:_})}function p(){var g,m;(g=y(n))==null||g.$forceUpdate(),(m=y(t))==null||m.$forceUpdate()}return _e(()=>e.bodyWidth,()=>{var g;Je(e.estimatedRowHeight)&&((g=n.value)==null||g.resetAfter({columnIndex:0},!1))}),{bodyRef:n,forceUpdate:p,fixedRowHeight:i,gridHeight:s,hasHeader:l,headerHeight:o,headerRef:t,totalHeight:a,itemKey:u,onItemRendered:c,resetAfterRowIndex:d,scrollTo:f,scrollToTop:h,scrollToRow:v,scrollLeft:r}},KM=ye({name:U2e,props:Xb,setup(e,{slots:t,expose:n}){const{ns:r}=Ge(UM),{bodyRef:a,fixedRowHeight:i,gridHeight:o,hasHeader:s,headerRef:l,headerHeight:u,totalHeight:c,forceUpdate:d,itemKey:f,onItemRendered:h,resetAfterRowIndex:v,scrollTo:p,scrollToTop:g,scrollToRow:m,scrollLeft:b}=K2e(e);Ft(QU,b),cy(async()=>{var S;await Ue();const w=(S=a.value)==null?void 0:S.states.scrollTop;w&&g(Math.round(w)+1)}),n({forceUpdate:d,totalHeight:c,scrollTo:p,scrollToTop:g,scrollToRow:m,resetAfterRowIndex:v});const _=()=>e.bodyWidth;return()=>{const{cache:w,columns:S,data:x,fixedData:C,useIsScrolling:T,scrollbarAlwaysOn:E,scrollbarEndGap:k,scrollbarStartGap:A,style:I,rowHeight:P,bodyWidth:R,estimatedRowHeight:O,headerWidth:$,height:N,width:D,getRowHeight:F,onScroll:W}=e,z=Je(O),Y=z?Ume:zme,q=y(u);return V("div",{role:"table",class:[r.e("table"),e.class],style:I},[V(Y,{ref:a,data:x,useIsScrolling:T,itemKey:f,columnCache:0,columnWidth:z?_:R,totalColumn:1,totalRow:x.length,rowCache:w,rowHeight:z?F:P,width:D,height:y(o),class:r.e("body"),role:"rowgroup",scrollbarStartGap:A,scrollbarEndGap:k,scrollbarAlwaysOn:E,onScroll:W,onItemRendered:h,perfMode:!1},{default:re=>{var se;const ee=x[re.rowIndex];return(se=t.row)==null?void 0:se.call(t,{...re,columns:S,rowData:ee})}}),y(s)&&V(G2e,{ref:l,class:r.e("header-wrapper"),columns:S,headerData:x,headerHeight:e.headerHeight,fixedHeaderData:C,rowWidth:$,rowHeight:P,width:D,height:Math.min(q+y(i),N)},{dynamic:t.header,fixed:t.row})])}}});function Y2e(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Vn(e)}const j2e=(e,{slots:t})=>{const{mainTableRef:n,...r}=e;return V(KM,Mt({ref:n},r),Y2e(t)?t:{default:()=>[t]})};function q2e(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Vn(e)}const X2e=(e,{slots:t})=>{if(!e.columns.length)return;const{leftTableRef:n,...r}=e;return V(KM,Mt({ref:n},r),q2e(t)?t:{default:()=>[t]})};function Z2e(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Vn(e)}const J2e=(e,{slots:t})=>{if(!e.columns.length)return;const{rightTableRef:n,...r}=e;return V(KM,Mt({ref:n},r),Z2e(t)?t:{default:()=>[t]})},Q2e=e=>{const{isScrolling:t}=Ge(UM),n=H(!1),r=H(),a=M(()=>Je(e.estimatedRowHeight)&&e.rowIndex>=0),i=(l=!1)=>{const u=y(r);if(!u)return;const{columns:c,onRowHeightChange:d,rowKey:f,rowIndex:h,style:v}=e,{height:p}=u.getBoundingClientRect();n.value=!0,Ue(()=>{if(l||p!==Number.parseInt(v.height)){const g=c[0],m=(g==null?void 0:g.placeholderSign)===Tm;d==null||d({rowKey:f,height:p,rowIndex:h},g&&!m&&g.fixed)}})},o=M(()=>{const{rowData:l,rowIndex:u,rowKey:c,onRowHover:d}=e,f=e.rowEventHandlers||{},h={};return Object.entries(f).forEach(([v,p])=>{et(p)&&(h[v]=g=>{p({event:g,rowData:l,rowIndex:u,rowKey:c})})}),d&&[{name:"onMouseleave",hovered:!1},{name:"onMouseenter",hovered:!0}].forEach(({name:v,hovered:p})=>{const g=h[v];h[v]=m=>{d({event:m,hovered:p,rowData:l,rowIndex:u,rowKey:c}),g==null||g(m)}}),h}),s=l=>{const{onRowExpand:u,rowData:c,rowIndex:d,rowKey:f}=e;u==null||u({expanded:l,rowData:c,rowIndex:d,rowKey:f})};return St(()=>{y(a)&&i(!0)}),{isScrolling:t,measurable:a,measured:n,rowRef:r,eventHandlers:o,onExpand:s}},eEe=ye({name:"ElTableV2TableRow",props:Rd,setup(e,{expose:t,slots:n,attrs:r}){const{eventHandlers:a,isScrolling:i,measurable:o,measured:s,rowRef:l,onExpand:u}=Q2e(e);return t({onExpand:u}),()=>{const{columns:c,columnsStyles:d,expandColumnKey:f,depth:h,rowData:v,rowIndex:p,style:g}=e;let m=c.map((b,_)=>{const w=Me(v.children)&&v.children.length>0&&b.key===f;return n.cell({column:b,columns:c,columnIndex:_,depth:h,style:d[b.key],rowData:v,rowIndex:p,isScrolling:y(i),expandIconProps:w?{rowData:v,rowIndex:p,onExpand:u}:void 0})});if(n.row&&(m=n.row({cells:m.map(b=>Me(b)&&b.length===1?b[0]:b),style:g,columns:c,depth:h,rowData:v,rowIndex:p,isScrolling:y(i)})),y(o)){const{height:b,..._}=g||{},w=y(s);return V("div",Mt({ref:l,class:e.class,style:w?g:_,role:"row"},r,y(a)),[m])}return V("div",Mt(r,{ref:l,class:e.class,style:g,role:"row"},y(a)),[m])}}});function tEe(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Vn(e)}const nEe=(e,{slots:t})=>{const{columns:n,columnsStyles:r,depthMap:a,expandColumnKey:i,expandedRowKeys:o,estimatedRowHeight:s,hasFixedColumns:l,rowData:u,rowIndex:c,style:d,isScrolling:f,rowProps:h,rowClass:v,rowKey:p,rowEventHandlers:g,ns:m,onRowHovered:b,onRowExpanded:_}=e,w=yf(v,{columns:n,rowData:u,rowIndex:c},""),S=yf(h,{columns:n,rowData:u,rowIndex:c}),x=u[p],C=a[x]||0,T=!!i,E=c<0,k=[m.e("row"),w,m.is("expanded",T&&o.includes(x)),m.is("fixed",!C&&E),m.is("customized",!!t.row),{[m.e(`row-depth-${C}`)]:T&&c>=0}],A=l?b:void 0,I={...S,columns:n,columnsStyles:r,class:k,depth:C,expandColumnKey:i,estimatedRowHeight:E?void 0:s,isScrolling:f,rowIndex:c,rowData:u,rowKey:x,rowEventHandlers:g,style:d};return V(eEe,Mt(I,{onRowExpand:_,onMouseenter:O=>{A==null||A({hovered:!0,rowKey:x,event:O,rowData:u,rowIndex:c})},onMouseleave:O=>{A==null||A({hovered:!1,rowKey:x,event:O,rowData:u,rowIndex:c})},rowkey:x}),tEe(t)?t:{default:()=>[t]})},YM=(e,{slots:t})=>{var o;const{cellData:n,style:r}=e,a=((o=n==null?void 0:n.toString)==null?void 0:o.call(n))||"",i=he(t,"default",e,()=>[a]);return V("div",{class:e.class,title:a,style:r},[i])};YM.displayName="ElTableV2Cell";YM.inheritAttrs=!1;const e7=e=>{const{expanded:t,expandable:n,onExpand:r,style:a,size:i,ariaLabel:o}=e;return V("button",Mt({onClick:n?()=>r(!t):void 0,ariaLabel:o,ariaExpanded:t,class:e.class},{type:"button"}),[V(Ze,{size:i,style:a},{default:()=>[V(Wa,null,null)]})])};e7.inheritAttrs=!1;const $E=({columns:e,column:t,columnIndex:n,depth:r,expandIconProps:a,isScrolling:i,rowData:o,rowIndex:s,style:l,expandedRowKeys:u,ns:c,t:d,cellProps:f,expandColumnKey:h,indentSize:v,iconSize:p,rowKey:g},{slots:m})=>{const b=qu(l);if(t.placeholderSign===Tm)return V("div",{class:c.em("row-cell","placeholder"),style:b},null);const{cellRenderer:_,dataKey:w,dataGetter:S}=t,x=et(S)?S({columns:e,column:t,columnIndex:n,rowData:o,rowIndex:s}):_r(o,w??""),C=yf(f,{cellData:x,columns:e,column:t,columnIndex:n,rowIndex:s,rowData:o}),T={class:c.e("cell-text"),columns:e,column:t,columnIndex:n,cellData:x,isScrolling:i,rowData:o,rowIndex:s},E=JU(_),k=E?E(T):he(m,"default",T,()=>[V(YM,T,null)]),A=[c.e("row-cell"),t.class,t.align==="center"&&c.is("align-center"),t.align==="right"&&c.is("align-right")],I=s>=0&&h&&t.key===h,P=s>=0&&u.includes(o[g]);let R;const O=`margin-inline-start: ${r*v}px;`;return I&&(yt(a)?R=V(e7,Mt(a,{class:[c.e("expand-icon"),c.is("expanded",P)],size:p,expanded:P,ariaLabel:d(P?"el.table.collapseRowLabel":"el.table.expandRowLabel"),style:O,expandable:!0}),null):R=V("div",{style:[O,`width: ${p}px; height: ${p}px;`].join(" ")},null)),V("div",Mt({class:A,style:b},C,{role:"cell"}),[R,k])};$E.inheritAttrs=!1;const rEe=Oe({class:String,columns:Ry,columnsStyles:{type:oe(Object),required:!0},headerIndex:Number,style:{type:oe(Object)}}),aEe=ye({name:"ElTableV2HeaderRow",props:rEe,setup(e,{slots:t}){return()=>{const{columns:n,columnsStyles:r,headerIndex:a,style:i}=e;let o=n.map((s,l)=>t.cell({columns:n,column:s,columnIndex:l,headerIndex:a,style:r[s.key]}));return t.header&&(o=t.header({cells:o.map(s=>Me(s)&&s.length===1?s[0]:s),columns:n,headerIndex:a})),V("div",{class:e.class,style:i,role:"row"},[o])}}});function iEe(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Vn(e)}const oEe=({columns:e,columnsStyles:t,headerIndex:n,style:r,headerClass:a,headerProps:i,ns:o},{slots:s})=>{const l={columns:e,headerIndex:n},u=[o.e("header-row"),yf(a,l,""),o.is("customized",!!s.header)];return V(aEe,{...yf(i,l),columnsStyles:t,class:u,columns:e,headerIndex:n,style:r},iEe(s)?s:{default:()=>[s]})},jM=(e,{slots:t})=>he(t,"default",e,()=>{var n,r;return[V("div",{class:e.class,title:(n=e.column)==null?void 0:n.title},[(r=e.column)==null?void 0:r.title])]});jM.displayName="ElTableV2HeaderCell";jM.inheritAttrs=!1;const sEe=e=>{const{sortOrder:t}=e;return V("button",{type:"button","aria-label":e.ariaLabel,class:e.class},[V(Ze,{size:14},{default:()=>[V(t==="asc"?lfe:ofe,null,null)]})])},tV=(e,{slots:t})=>{const{column:n,ns:r,t:a,style:i,onColumnSorted:o}=e,s=qu(i);if(n.placeholderSign===Tm)return V("div",{class:r.em("header-row-cell","placeholder"),style:s},null);const{headerCellRenderer:l,headerClass:u,sortable:c}=n,d={...e,class:r.e("header-cell-text")},f=JU(l),h=f?f(d):he(t,"default",d,()=>[V(jM,d,null)]),{sortBy:v,sortState:p,headerCellProps:g}=e;let m,b,_;if(p){const S=p[n.key];m=!!VE[S],b=m?S:"asc"}else m=n.key===v.key,b=m?v.order:"asc";b==="asc"?_="ascending":b==="desc"?_="descending":_=void 0;const w=[r.e("header-cell"),yf(u,e,""),n.align==="center"&&r.is("align-center"),n.align==="right"&&r.is("align-right"),c&&r.is("sortable")];return V("div",Mt({...yf(g,e),onClick:n.sortable?o:void 0,ariaSort:c?_:void 0,class:w,style:s,"data-key":n.key},{role:"columnheader"}),[h,c&&V(sEe,{class:[r.e("sort-icon"),m&&r.is("sorting")],sortOrder:b,ariaLabel:a("el.table.sortLabel",{column:n.title||""})},null)])},t7=(e,{slots:t})=>{var n;return V("div",{class:e.class,style:e.style},[(n=t.default)==null?void 0:n.call(t)])};t7.displayName="ElTableV2Footer";const n7=(e,{slots:t})=>{const n=he(t,"default",{},()=>[V(EU,null,null)]);return V("div",{class:e.class,style:e.style},[n])};n7.displayName="ElTableV2Empty";const r7=(e,{slots:t})=>{var n;return V("div",{class:e.class,style:e.style},[(n=t.default)==null?void 0:n.call(t)])};r7.displayName="ElTableV2Overlay";function Tp(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Vn(e)}const lEe=ye({name:"ElTableV2",props:O2e,slots:Object,setup(e,{slots:t,expose:n}){const r=Ee("table-v2"),{t:a}=Yt(),{columnsStyles:i,fixedColumnsOnLeft:o,fixedColumnsOnRight:s,mainColumns:l,mainTableHeight:u,fixedTableHeight:c,leftTableWidth:d,rightTableWidth:f,data:h,depthMap:v,expandedRowKeys:p,hasFixedColumns:g,mainTableRef:m,leftTableRef:b,rightTableRef:_,isDynamic:w,isResetting:S,isScrolling:x,bodyWidth:C,emptyStyle:T,rootStyle:E,footerHeight:k,showEmpty:A,scrollTo:I,scrollToLeft:P,scrollToTop:R,scrollToRow:O,getRowHeight:$,onColumnSorted:N,onRowHeightChange:D,onRowHovered:F,onRowExpanded:W,onRowsRendered:z,onScroll:Y,onVerticalScroll:q}=W2e(e);return n({scrollTo:I,scrollToLeft:P,scrollToTop:R,scrollToRow:O}),Ft(UM,{ns:r,isResetting:S,isScrolling:x}),()=>{const{cache:re,cellProps:ee,estimatedRowHeight:se,expandColumnKey:ne,fixedData:de,headerHeight:le,headerClass:J,headerProps:Z,headerCellProps:U,sortBy:te,sortState:Q,rowHeight:ue,rowClass:pe,rowEventHandlers:me,rowKey:Pe,rowProps:Ne,scrollbarAlwaysOn:ie,indentSize:ae,iconSize:ge,useIsScrolling:be,vScrollbarSize:$e,width:Re}=e,Se=y(h),Ae={cache:re,class:r.e("main"),columns:y(l),data:Se,fixedData:de,estimatedRowHeight:se,bodyWidth:y(C),headerHeight:le,headerWidth:y(C),height:y(u),mainTableRef:m,rowKey:Pe,rowHeight:ue,scrollbarAlwaysOn:ie,scrollbarStartGap:2,scrollbarEndGap:$e,useIsScrolling:be,width:Re,getRowHeight:$,onRowsRendered:z,onScroll:Y},nt=y(d),at=y(c),zt={cache:re,class:r.e("left"),columns:y(o),data:Se,fixedData:de,estimatedRowHeight:se,leftTableRef:b,rowHeight:ue,bodyWidth:nt,headerWidth:nt,headerHeight:le,height:at,rowKey:Pe,scrollbarAlwaysOn:ie,scrollbarStartGap:2,scrollbarEndGap:$e,useIsScrolling:be,width:nt,getRowHeight:$,onScroll:q},on=y(f),Bt={cache:re,class:r.e("right"),columns:y(s),data:Se,fixedData:de,estimatedRowHeight:se,rightTableRef:_,rowHeight:ue,bodyWidth:on,headerWidth:on,headerHeight:le,height:at,rowKey:Pe,scrollbarAlwaysOn:ie,scrollbarStartGap:2,scrollbarEndGap:$e,width:on,style:`${r.cssVarName("table-scrollbar-size")}: ${$e}px`,useIsScrolling:be,getRowHeight:$,onScroll:q},it=y(i),At={ns:r,depthMap:y(v),columnsStyles:it,expandColumnKey:ne,expandedRowKeys:y(p),estimatedRowHeight:se,hasFixedColumns:y(g),rowProps:Ne,rowClass:pe,rowKey:Pe,rowEventHandlers:me,onRowHovered:F,onRowExpanded:W,onRowHeightChange:D},xe={cellProps:ee,expandColumnKey:ne,indentSize:ae,iconSize:ge,rowKey:Pe,expandedRowKeys:y(p),ns:r,t:a},rt={ns:r,headerClass:J,headerProps:Z,columnsStyles:it},Te={ns:r,t:a,sortBy:te,sortState:Q,headerCellProps:U,onColumnSorted:N},Qe={row:ft=>V(nEe,Mt(ft,At),{row:t.row,cell:vt=>{let kt;return t.cell?V($E,Mt(vt,xe,{style:it[vt.column.key]}),Tp(kt=t.cell(vt))?kt:{default:()=>[kt]}):V($E,Mt(vt,xe,{style:it[vt.column.key]}),null)}}),header:ft=>V(oEe,Mt(ft,rt),{header:t.header,cell:vt=>{let kt;return t["header-cell"]?V(tV,Mt(vt,Te,{style:it[vt.column.key]}),Tp(kt=t["header-cell"](vt))?kt:{default:()=>[kt]}):V(tV,Mt(vt,Te,{style:it[vt.column.key]}),null)}})},jt=[e.class,r.b(),r.e("root"),r.is("dynamic",y(w))],Xe={class:r.e("footer"),style:y(k)};return V("div",{class:jt,style:y(E)},[V(j2e,Ae,Tp(Qe)?Qe:{default:()=>[Qe]}),V(X2e,zt,Tp(Qe)?Qe:{default:()=>[Qe]}),V(J2e,Bt,Tp(Qe)?Qe:{default:()=>[Qe]}),t.footer&&V(t7,Xe,{default:t.footer}),y(A)&&V(n7,{class:r.e("empty"),style:y(T)},{default:t.empty}),t.overlay&&V(r7,{class:r.e("overlay")},{default:t.overlay})])}}}),uEe=Oe({disableWidth:Boolean,disableHeight:Boolean,onResize:{type:oe(Function)}}),cEe=e=>{const t=H(),n=H(0),r=H(0);let a;return St(()=>{a=Kn(t,([i])=>{const{width:o,height:s}=i.contentRect,{paddingLeft:l,paddingRight:u,paddingTop:c,paddingBottom:d}=getComputedStyle(i.target),f=Number.parseInt(l)||0,h=Number.parseInt(u)||0,v=Number.parseInt(c)||0,p=Number.parseInt(d)||0;n.value=o-f-h,r.value=s-v-p}).stop}),yn(()=>{a==null||a()}),_e([n,r],([i,o])=>{var s;(s=e.onResize)==null||s.call(e,{width:i,height:o})}),{sizer:t,width:n,height:r}},dEe=ye({name:"ElAutoResizer",props:uEe,setup(e,{slots:t}){const n=Ee("auto-resizer"),{height:r,width:a,sizer:i}=cEe(e),o={width:"100%",height:"100%"};return()=>{var s;return V("div",{ref:i,class:n.b(),style:o},[(s=t.default)==null?void 0:s.call(t,{height:r.value,width:a.value})])}}}),fEe=xt(lEe),hEe=xt(dEe),nS=Symbol("tabsRootContextKey"),vEe=Oe({tabs:{type:oe(Array),default:()=>sr([])},tabRefs:{type:oe(Object),default:()=>sr({})}}),nV="ElTabBar";var pEe=ye({name:nV,__name:"tab-bar",props:vEe,setup(e,{expose:t}){const n=e,r=Ge(nS);r||nr(nV,"");const a=Ee("tabs"),i=H(),o=H(),s=M(()=>{var h;return qt(r.props.defaultValue)||!!((h=o.value)!=null&&h.transform)}),l=()=>{let h=0,v=0;const p=["top","bottom"].includes(r.props.tabPosition)?"width":"height",g=p==="width"?"x":"y",m=g==="x"?"left":"top";return n.tabs.every(b=>{if(qt(b.paneName))return!1;const _=n.tabRefs[b.paneName];if(!_)return!1;if(!b.active)return!0;h=_[`offset${yx(m)}`],v=_[`client${yx(p)}`];const w=window.getComputedStyle(_);return p==="width"&&(v-=Number.parseFloat(w.paddingLeft)+Number.parseFloat(w.paddingRight),h+=Number.parseFloat(w.paddingLeft)),!1}),{[p]:`${v}px`,transform:`translate${yx(g)}(${h}px)`}},u=()=>o.value=l(),c=[],d=()=>{c.forEach(h=>h.stop()),c.length=0,Object.values(n.tabRefs).forEach(h=>{c.push(Kn(h,u))})};_e(()=>n.tabs,async()=>{await Ue(),u(),d()},{immediate:!0});const f=Kn(i,()=>u());return yn(()=>{c.forEach(h=>h.stop()),c.length=0,f.stop()}),t({ref:i,update:u}),(h,v)=>s.value?(L(),K("div",{key:0,ref_key:"barRef",ref:i,class:B([y(a).e("active-bar"),y(a).is(y(r).props.tabPosition)]),style:tt(o.value)},null,6)):fe("v-if",!0)}}),gEe=pEe;const mEe=5,yEe=({scrollable:e,navOffset:t,navSize:n,navContainerSize:r,isHorizontal:a})=>{const i=H(!1),o=M(()=>Math.max(n.value-r.value,0));let s,l;const u=f=>{if(!e.value||f.touches.length!==1)return;const{clientX:h,clientY:v}=n_(f);s={startX:h,startY:v,startOffset:t.value},l=void 0},c=f=>{if(!s||!e.value)return;if(f.touches.length!==1){d();return}const{clientX:h,clientY:v}=n_(f),p=s.startX-h,g=s.startY-v,m=a.value?p:g,b=a.value?g:p,_=Math.abs(m),w=Math.abs(b);if(rW(l)){if(Math.max(_,w)<=mEe)return;l=_>w}if(!l)return;const S=Ei(s.startOffset+m,0,o.value);o.value<=0||S===t.value||!f.cancelable||(f.preventDefault(),i.value=!0,t.value=S)},d=()=>{s=void 0,l=void 0,i.value=!1};return{isTouchScrolling:i,handleTouchStart:u,handleTouchMove:c,handleTouchEnd:d}},bEe=Oe({panes:{type:oe(Array),default:()=>sr([])},currentName:{type:[String,Number],default:""},editable:Boolean,type:{type:String,values:["card","border-card",""],default:""},stretch:Boolean,tabindex:{type:[String,Number],default:void 0}}),_Ee={tabClick:(e,t,n)=>n instanceof Event,tabRemove:(e,t)=>t instanceof Event},rV="ElTabNav",wEe=ye({name:rV,props:bEe,emits:_Ee,setup(e,{expose:t,emit:n}){const r=Ge(nS);r||nr(rV,"");const a=Ee("tabs"),i=_le(),o=xle(),s=H(),l=H(),u=H(),c=H({}),d=H(),f=H(!1),h=H(0),v=H(!1),p=H(!0),g=H(!1),m=Ut(),b=M(()=>["top","bottom"].includes(r.props.tabPosition)),_=M(()=>b.value?"width":"height"),w=M(()=>{const se=_.value==="width"?"X":"Y";return{transition:g.value||P.value?"none":void 0,transform:`translate${se}(-${h.value}px)`}}),{width:S,height:x}=Y2(s),{width:C,height:T}=Y2(l,{width:0,height:0},{box:"border-box"}),E=M(()=>b.value?S.value:x.value),k=M(()=>b.value?C.value:T.value),{onWheel:A}=g9({atStartEdge:M(()=>h.value<=0),atEndEdge:M(()=>k.value-h.value<=E.value),layout:M(()=>b.value?"horizontal":"vertical")},se=>{h.value=Ei(h.value+se,0,k.value-E.value)}),I=se=>{g.value=!0,A(se),Pi(()=>{g.value=!1})},{isTouchScrolling:P,handleTouchStart:R,handleTouchMove:O,handleTouchEnd:$}=yEe({scrollable:f,navOffset:h,navSize:k,navContainerSize:E,isHorizontal:b}),N=()=>{if(!s.value)return;const se=s.value.getBoundingClientRect()[_.value],ne=h.value;ne&&(h.value=ne>se?ne-se:0)},D=()=>{if(!s.value||!l.value)return;const se=l.value.getBoundingClientRect()[_.value],ne=s.value.getBoundingClientRect()[_.value],de=h.value;Gs(se-de,ne)&&(h.value=se-de>ne*2?de+ne:se-ne)},F=async()=>{const se=l.value;if(!f.value||!u.value||!s.value||!se)return;await Ue();const ne=c.value[e.currentName];if(!ne)return;const de=s.value,le=ne.getBoundingClientRect(),J=de.getBoundingClientRect(),Z=J.left+1,U=J.right-1,te=se.getBoundingClientRect(),Q=b.value?te.width-J.width:te.height-J.height,ue=h.value;let pe=ue;b.value?(le.leftU&&(pe=ue+le.right-U)):(le.topJ.bottom&&(pe=ue+(le.bottom-J.bottom))),pe=Math.max(pe,0),h.value=Math.min(pe,Q)},W=()=>{var le;if(!l.value||!s.value)return;e.stretch&&((le=d.value)==null||le.update());const se=l.value.getBoundingClientRect()[_.value],ne=s.value.getBoundingClientRect()[_.value],de=h.value;ne0&&(h.value=0))},z=se=>{const ne=Mn(se);let de=0;switch(ne){case De.left:case De.up:de=-1;break;case De.right:case De.down:de=1;break;default:return}const le=Array.from(se.currentTarget.querySelectorAll("[role=tab]:not(.is-disabled)"));let J=le.indexOf(se.target)+de;J<0?J=le.length-1:J>=le.length&&(J=0),le[J].focus({preventScroll:!0}),le[J].click(),Y()},Y=()=>{p.value&&(v.value=!0)},q=()=>v.value=!1,re=(se,ne)=>{c.value[ne]=se},ee=async()=>{var se;await Ue(),(se=c.value[e.currentName])==null||se.focus({preventScroll:!0})};return _e(i,se=>{se==="hidden"?p.value=!1:se==="visible"&&setTimeout(()=>p.value=!0,50)}),_e(o,se=>{se?setTimeout(()=>p.value=!0,50):p.value=!1}),Kn(u,()=>{Pi(W)}),St(()=>setTimeout(()=>F(),0)),is(()=>W()),t({scrollToActiveTab:F,removeFocus:q,focusActiveTab:ee,tabListRef:l,tabBarRef:d,scheduleRender:()=>$b(m)}),()=>{const se=f.value?[V("span",{class:[a.e("nav-prev"),a.is("disabled",!f.value.prev)],onClick:N},[V(Ze,null,{default:()=>[V(Yl,null,null)]})]),V("span",{class:[a.e("nav-next"),a.is("disabled",!f.value.next)],onClick:D},[V(Ze,null,{default:()=>[V(Wa,null,null)]})])]:null,ne=e.panes.map((de,le)=>{var me,Pe;const J=de.uid,Z=de.props.disabled,U=de.props.name??de.index??`${le}`,te=!Z&&(de.isClosable||de.props.closable!==!1&&e.editable);de.index=`${le}`;const Q=te?V(Ze,{class:"is-icon-close",onClick:Ne=>n("tabRemove",de,Ne)},{default:()=>[V(To,null,null)]}):null,ue=((Pe=(me=de.slots).label)==null?void 0:Pe.call(me))||de.props.label,pe=!Z&&de.active?e.tabindex??r.props.tabindex:-1;return V("div",{ref:Ne=>re(Ne,U),class:[a.e("item"),a.is(r.props.tabPosition),a.is("active",de.active),a.is("disabled",Z),a.is("closable",te),a.is("focus",v.value)],id:`tab-${U}`,key:`tab-${J}`,"aria-controls":`pane-${U}`,role:"tab","aria-selected":de.active,tabindex:pe,onFocus:()=>Y(),onBlur:()=>q(),onClick:Ne=>{q(),n("tabClick",de,U,Ne)},onKeydown:Ne=>{const ie=Mn(Ne);te&&(ie===De.delete||ie===De.backspace)&&n("tabRemove",de,Ne)}},[ue,Q])});return m.value,V("div",{ref:u,class:[a.e("nav-wrap"),a.is("scrollable",!!f.value),a.is(r.props.tabPosition)]},[se,V("div",{class:a.e("nav-scroll"),ref:s},[e.panes.length>0?V("div",{class:[a.e("nav"),a.is(r.props.tabPosition),a.is("stretch",e.stretch&&["top","bottom"].includes(r.props.tabPosition))],ref:l,style:w.value,role:"tablist",onKeydown:z,onWheel:I,onTouchstart:R,onTouchmove:O,onTouchend:$,onTouchcancel:$},[e.type?null:V(gEe,{ref:d,tabs:[...e.panes],tabRefs:c.value},null),ne]):null])])}}}),SEe=Oe({type:{type:String,values:["card","border-card",""],default:""},closable:Boolean,addable:Boolean,modelValue:{type:[String,Number]},defaultValue:{type:[String,Number]},editable:Boolean,tabPosition:{type:String,values:["top","right","bottom","left"],default:"top"},beforeLeave:{type:oe(Function),default:()=>!0},stretch:Boolean,tabindex:{type:[String,Number],default:0}}),Wx=e=>qe(e)||Je(e),xEe={[mt]:e=>Wx(e),tabClick:(e,t)=>t instanceof Event,tabChange:e=>Wx(e),edit:(e,t)=>["remove","add"].includes(t),tabRemove:e=>Wx(e),tabAdd:()=>!0},CEe=ye({name:"ElTabs",props:SEe,emits:xEe,setup(e,{emit:t,slots:n,expose:r}){const a=Ee("tabs"),i=M(()=>["left","right"].includes(e.tabPosition)),{children:o,addChild:s,removeChild:l,ChildrenSorter:u}=Uw(Tt(),"ElTabPane"),c=H(),d=H((qt(e.modelValue)?e.defaultValue:e.modelValue)??"0"),f=async(b,_=!1)=>{var w,S,x,C;if(!(d.value===b||qt(b)))try{let T;if(e.beforeLeave){const E=e.beforeLeave(b,d.value);T=E instanceof Promise?await E:E}else T=!0;if(T!==!1){const E=(w=o.value.find(k=>k.paneName===d.value))==null?void 0:w.isFocusInsidePane();d.value=b,_&&(t(mt,b),t("tabChange",b)),(x=(S=c.value)==null?void 0:S.removeFocus)==null||x.call(S),E&&((C=c.value)==null||C.focusActiveTab())}}catch{}},h=(b,_,w)=>{b.props.disabled||(t("tabClick",b,w),f(_,!0))},v=(b,_)=>{b.props.disabled||qt(b.props.name)||(_.stopPropagation(),t("edit",b.props.name,"remove"),t("tabRemove",b.props.name))},p=()=>{t("edit",void 0,"add"),t("tabAdd")},g=b=>{const _=Mn(b);[De.enter,De.numpadEnter].includes(_)&&p()},m=b=>{const _=b.el.firstChild,w=["bottom","right"].includes(e.tabPosition)?b.children[0].el:b.children[1].el;_!==w&&_.before(w)};return _e(()=>e.modelValue,b=>f(b)),_e(d,async()=>{var b;await Ue(),(b=c.value)==null||b.scrollToActiveTab()}),Ft(nS,{props:e,currentName:d,registerPane:s,unregisterPane:l,nav$:c}),r({currentName:d,get tabNavRef(){return my(c.value,["scheduleRender"])}}),()=>{const b=n["add-icon"],_=e.editable||e.addable?V("div",{class:[a.e("new-tab"),i.value&&a.e("new-tab-vertical")],tabindex:e.tabindex,onClick:p,onKeydown:g},[b?he(n,"add-icon"):V(Ze,{class:a.is("icon-plus")},{default:()=>[V(iG,null,null)]})]):null,w=()=>V(wEe,{ref:c,currentName:d.value,editable:e.editable,type:e.type,panes:o.value,stretch:e.stretch,onTabClick:h,onTabRemove:v},null),S=V("div",{class:[a.e("header"),i.value&&a.e("header-vertical"),a.is(e.tabPosition)]},[V(u,null,{default:w,$stable:!0}),_]),x=V("div",{class:a.e("content")},[he(n,"default")]);return V("div",{class:[a.b(),a.m(e.tabPosition),{[a.m("card")]:e.type==="card",[a.m("border-card")]:e.type==="border-card"}],onVnodeMounted:m,onVnodeUpdated:m},[x,S])}}}),TEe=Oe({label:{type:String,default:""},name:{type:[String,Number]},closable:{type:Boolean,default:void 0},disabled:Boolean,lazy:Boolean}),EEe=["id","aria-hidden","aria-labelledby"],aV="ElTabPane";var kEe=ye({name:aV,__name:"tab-pane",props:TEe,setup(e){const t=e,n=Tt(),r=pr(),a=Ge(nS);a||nr(aV,"usage: ");const i=Ee("tab-pane"),o=H(),s=H(),l=M(()=>t.closable??a.props.closable),u=M(()=>a.currentName.value===(t.name??s.value)),c=H(u.value),d=M(()=>t.name??s.value),f=M(()=>!t.lazy||c.value||u.value),h=()=>{var p;return(p=o.value)==null?void 0:p.contains(document.activeElement)};_e(u,p=>{p&&(c.value=!0)});const v=Qt({uid:n.uid,getVnode:()=>n.vnode,slots:r,props:t,paneName:d,active:u,index:s,isClosable:l,isFocusInsidePane:h});return a.registerPane(v),yn(()=>{a.unregisterPane(v)}),dI(()=>{var p;r.label&&((p=a.nav$.value)==null||p.scheduleRender())}),(p,g)=>f.value?gt((L(),K("div",{key:0,id:`pane-${d.value}`,ref_key:"paneRef",ref:o,class:B(y(i).b()),role:"tabpanel","aria-hidden":!u.value,"aria-labelledby":`tab-${d.value}`},[he(p.$slots,"default")],10,EEe)),[[ln,u.value]]):fe("v-if",!0)}}),a7=kEe;const AEe=xt(CEe,{TabPane:a7}),IEe=rr(a7),MEe=Oe({type:{type:String,values:["primary","success","info","warning","danger",""],default:""},size:{type:String,values:ss,default:""},truncated:Boolean,lineClamp:{type:[String,Number]},tag:{type:String,default:"span"}});var PEe=ye({name:"ElText",__name:"text",props:MEe,setup(e){const t=e,n=iu(),r=H(),a=Rr(),i=Ee("text"),o=M(()=>[i.b(),i.m(t.type),i.m(a.value),i.is("truncated",t.truncated),i.is("line-clamp",!qt(t.lineClamp))]),s=async()=>{var c,d,f,h,v,p,g;if(await Ue(),n.title)return;let l=!1;const u=((c=r.value)==null?void 0:c.textContent)||"";if(t.truncated){const m=(d=r.value)==null?void 0:d.offsetWidth,b=(f=r.value)==null?void 0:f.scrollWidth;m&&b&&b>m&&(l=!0)}else if(!qt(t.lineClamp)){const m=(h=r.value)==null?void 0:h.offsetHeight,b=(v=r.value)==null?void 0:v.scrollHeight;m&&b&&b>m&&(l=!0)}l?(p=r.value)==null||p.setAttribute("title",u):(g=r.value)==null||g.removeAttribute("title")};return St(s),is(s),(l,u)=>(L(),ve(Et(e.tag),{ref_key:"textRef",ref:r,class:B(o.value),style:tt({"-webkit-line-clamp":e.lineClamp})},{default:G(()=>[he(l.$slots,"default")]),_:3},8,["class","style"]))}}),LEe=PEe;const qM=xt(LEe),i7="09:00",o7="18:00",s7="00:30",DEe=Oe({format:{type:String,default:"HH:mm"},modelValue:{type:oe(String)},disabled:{type:Boolean,default:void 0},editable:{type:Boolean,default:!0},effect:{type:oe(String),default:"light"},clearable:{type:Boolean,default:!0},size:$r,placeholder:String,start:{type:String,default:i7},end:{type:String,default:o7},step:{type:String,default:s7},minTime:{type:oe(String)},maxTime:{type:oe(String)},includeEndTime:Boolean,name:String,prefixIcon:{type:oe([String,Object]),default:()=>aG},clearIcon:{type:oe([String,Object]),default:()=>ul},popperClass:{type:String,default:""},popperStyle:{type:oe([String,Object])},...Rf}),Jd=e=>{const t=(e||"").split(":");if(t.length>=2){let n=Number.parseInt(t[0],10);const r=Number.parseInt(t[1],10);if(Number.isNaN(n)||Number.isNaN(r))return null;const a=e.toUpperCase();return a.includes("AM")&&n===12?n=0:a.includes("PM")&&n!==12&&(n+=12),{hours:n,minutes:r}}return null},REe=e=>!!e&&e.hours>=0&&e.minutes>=0&&!Number.isNaN(e.hours)&&!Number.isNaN(e.minutes),Gx=(e,t)=>{const n=Jd(e);if(!n)return-1;const r=Jd(t);if(!r)return-1;const a=n.minutes+n.hours*60,i=r.minutes+r.hours*60;return a===i?0:a>i?1:-1},iV=e=>`${e}`.padStart(2,"0"),Jb=e=>`${iV(e.hours)}:${iV(e.minutes)}`,OEe=(e,t)=>{const n=Jd(e);if(!n)return"";const r=Jd(t);if(!r)return"";const a={hours:n.hours,minutes:n.minutes};return a.minutes+=r.minutes,a.hours+=r.hours,a.hours+=Math.floor(a.minutes/60),a.minutes=a.minutes%60,Jb(a)};var NEe=ye({name:"ElTimeSelect",__name:"time-select",props:DEe,emits:[Vt,"blur","focus","clear",mt],setup(e,{expose:t}){_t.extend(gM);const{Option:n}=bc,r=e,a=Ee("input"),i=H(),o=ar(),{lang:s}=Yt(),l=(b,_,w,S=!0)=>{const x=Jd(b);return!REe(x)||!S&&x.hours===0&&x.minutes===0?(wn("ElTimeSelect",`invalid ${_}, fallback to default ${_} (${w}).`),w):Jb(x)},u=M(()=>r.modelValue),c=M(()=>l(r.start,"start",i7)),d=M(()=>l(r.end,"end",o7)),f=M(()=>{const b=Jd(r.minTime||"");return b?Jb(b):null}),h=M(()=>{const b=Jd(r.maxTime||"");return b?Jb(b):null}),v=M(()=>l(r.step,"step",s7,!1)),p=M(()=>{var S;const b=[],_=(x,C)=>{b.push({value:x,rawValue:C,disabled:Gx(C,f.value||"-1:-1")<=0||Gx(C,h.value||"100:100")>=0})};let w=c.value;for(;Gx(w,d.value)<=0;)_(_t(w,"HH:mm").locale(s.value).format(r.format),w),w=OEe(w,v.value);return r.includeEndTime&&((S=b[b.length-1])==null?void 0:S.rawValue)!==d.value&&_(_t(d.value,"HH:mm").locale(s.value).format(r.format),d.value),b});return t({blur:()=>{var b,_;(_=(b=i.value)==null?void 0:b.blur)==null||_.call(b)},focus:()=>{var b,_;(_=(b=i.value)==null?void 0:b.focus)==null||_.call(b)}}),(b,_)=>(L(),ve(y(bc),{ref_key:"select",ref:i,name:e.name,"model-value":u.value,disabled:y(o),clearable:e.clearable,"clear-icon":e.clearIcon,size:e.size,effect:e.effect,placeholder:e.placeholder,"default-first-option":"",filterable:e.editable,"empty-values":e.emptyValues,"value-on-clear":e.valueOnClear,"popper-class":e.popperClass,"popper-style":e.popperStyle,"onUpdate:modelValue":_[0]||(_[0]=w=>b.$emit(y("update:modelValue"),w)),onChange:_[1]||(_[1]=w=>b.$emit(y("change"),w)),onBlur:_[2]||(_[2]=w=>b.$emit("blur",w)),onFocus:_[3]||(_[3]=w=>b.$emit("focus",w)),onClear:_[4]||(_[4]=()=>b.$emit("clear"))},{prefix:G(()=>[e.prefixIcon?(L(),ve(y(Ze),{key:0,class:B(y(a).e("prefix-icon"))},{default:G(()=>[(L(),ve(Et(e.prefixIcon)))]),_:1},8,["class"])):fe("v-if",!0)]),default:G(()=>[(L(!0),K(ze,null,Lt(p.value,w=>(L(),ve(y(n),{key:w.value,label:w.value,value:w.value,disabled:w.disabled},null,8,["label","value","disabled"]))),128))]),_:1},8,["name","model-value","disabled","clearable","clear-icon","size","effect","placeholder","filterable","empty-values","value-on-clear","popper-class","popper-style"]))}}),VEe=NEe;const $Ee=xt(VEe),l7="timeline",BEe=Oe({mode:{type:String,values:["start","alternate","alternate-reverse","end"],default:"start"},reverse:Boolean}),FEe=ye({name:"ElTimeline",props:BEe,setup(e,{slots:t}){const n=Ee("timeline");Ft(l7,{props:e,slots:t});const r=M(()=>[n.b(),n.is(e.mode)]);return()=>{var i;const a=Fi(((i=t.default)==null?void 0:i.call(t))??[]);return ot("ul",{class:r.value},e.reverse?a.reverse():a)}}}),zEe=Oe({timestamp:{type:String,default:""},hideTimestamp:Boolean,center:Boolean,placement:{type:String,values:["top","bottom"],default:"bottom"},type:{type:String,values:["primary","success","warning","danger","info"],default:""},color:{type:String,default:""},size:{type:String,values:["normal","large"],default:"normal"},icon:{type:An},hollow:Boolean});var HEe=ye({name:"ElTimelineItem",__name:"timeline-item",props:zEe,setup(e){const t=e,{props:n}=Ge(l7),r=Ee("timeline-item"),a=M(()=>[r.e("node"),r.em("node",t.size||""),r.em("node",t.type||""),r.is("hollow",t.hollow)]),i=M(()=>[r.b(),{[r.e("center")]:t.center},r.is(n.mode)]);return(o,s)=>(L(),K("li",{class:B(i.value)},[j("div",{class:B(y(r).e("tail"))},null,2),o.$slots.dot?fe("v-if",!0):(L(),K("div",{key:0,class:B(a.value),style:tt({backgroundColor:e.color})},[e.icon?(L(),ve(y(Ze),{key:0,class:B(y(r).e("icon"))},{default:G(()=>[(L(),ve(Et(e.icon)))]),_:1},8,["class"])):fe("v-if",!0)],6)),o.$slots.dot?(L(),K("div",{key:1,class:B(y(r).e("dot"))},[he(o.$slots,"dot")],2)):fe("v-if",!0),j("div",{class:B(y(r).e("wrapper"))},[!e.hideTimestamp&&e.placement==="top"?(L(),K("div",{key:0,class:B([y(r).e("timestamp"),y(r).is("top")])},ce(e.timestamp),3)):fe("v-if",!0),j("div",{class:B(y(r).e("content"))},[he(o.$slots,"default")],2),!e.hideTimestamp&&e.placement==="bottom"?(L(),K("div",{key:1,class:B([y(r).e("timestamp"),y(r).is("bottom")])},ce(e.timestamp),3)):fe("v-if",!0)],2)],2))}}),u7=HEe;const WEe=xt(FEe,{TimelineItem:u7}),GEe=rr(u7),c7="left-check-change",d7="right-check-change",Eh=Oe({data:{type:oe(Array),default:()=>[]},titles:{type:oe(Array),default:()=>[]},buttonTexts:{type:oe(Array),default:()=>[]},filterPlaceholder:String,filterMethod:{type:oe(Function)},leftDefaultChecked:{type:oe(Array),default:()=>[]},rightDefaultChecked:{type:oe(Array),default:()=>[]},renderContent:{type:oe(Function)},modelValue:{type:oe(Array),default:()=>[]},format:{type:oe(Object),default:()=>({})},filterable:Boolean,props:{type:oe(Object),default:()=>sr({label:"label",key:"key",disabled:"disabled"})},targetOrder:{type:String,values:["original","push","unshift"],default:"original"},validateEvent:{type:Boolean,default:!0}}),BE=(e,t)=>[e,t].every(Me)||Me(e)&&wr(t),UEe={[Vt]:(e,t,n)=>[e,n].every(Me)&&["left","right"].includes(t),[mt]:e=>Me(e),[c7]:BE,[d7]:BE},Oy=e=>{const t={label:"label",key:"key",disabled:"disabled"};return M(()=>({...t,...e.props}))},KEe=(e,t)=>({onSourceCheckedChange:(a,i)=>{e.leftChecked=a,i&&t(c7,a,i)},onTargetCheckedChange:(a,i)=>{e.rightChecked=a,i&&t(d7,a,i)}}),YEe=e=>{const t=Oy(e),n=M(()=>e.data.reduce((r,a)=>(r[a[t.value.key]]=a,r),{}));return{sourceData:M(()=>e.data.filter(r=>!e.modelValue.includes(r[t.value.key]))),targetData:M(()=>e.targetOrder==="original"?e.data.filter(r=>e.modelValue.includes(r[t.value.key])):e.modelValue.reduce((r,a)=>{const i=n.value[a];return i&&r.push(i),r},[]))}},jEe=(e,t,n)=>{const r=Oy(e),a=(s,l,u)=>{n(mt,s),n(Vt,s,l,u)};return{addToLeft:()=>{const s=e.modelValue.slice();t.rightChecked.forEach(l=>{const u=s.indexOf(l);u>-1&&s.splice(u,1)}),a(s,"left",t.rightChecked)},addToRight:()=>{let s=e.modelValue.slice();const l=e.data.filter(u=>{const c=u[r.value.key];return t.leftChecked.includes(c)&&!e.modelValue.includes(c)}).map(u=>u[r.value.key]);s=e.targetOrder==="unshift"?l.concat(s):s.concat(l),e.targetOrder==="original"&&(s=e.data.filter(u=>s.includes(u[r.value.key])).map(u=>u[r.value.key])),a(s,"right",t.leftChecked)}}},FE="checked-change",qEe=Oe({data:Eh.data,optionRender:{type:oe(Function)},placeholder:String,title:String,filterable:Boolean,format:Eh.format,filterMethod:Eh.filterMethod,defaultChecked:Eh.leftDefaultChecked,props:Eh.props}),XEe={[FE]:BE},ZEe=(e,t,n)=>{const r=Oy(e),a=M(()=>e.data.filter(c=>et(e.filterMethod)?e.filterMethod(t.query,c):String(c[r.value.label]||c[r.value.key]).toLowerCase().includes(t.query.toLowerCase()))),i=M(()=>a.value.filter(c=>!c[r.value.disabled])),o=M(()=>{const c=t.checked.length,d=e.data.length,{noChecked:f,hasChecked:h}=e.format;return f&&h?c>0?h.replace(/\${checked}/g,c.toString()).replace(/\${total}/g,d.toString()):f.replace(/\${total}/g,d.toString()):`${c}/${d}`}),s=M(()=>{const c=t.checked.length;return c>0&&c{const c=i.value.map(d=>d[r.value.key]);t.allChecked=c.length>0&&c.every(d=>t.checked.includes(d))},u=c=>{t.checked=c?i.value.map(d=>d[r.value.key]):[]};return _e(()=>t.checked,(c,d)=>{l(),t.checkChangeByUser?n(FE,c,c.concat(d).filter(f=>!c.includes(f)||!d.includes(f))):(n(FE,c),t.checkChangeByUser=!0)}),_e(i,()=>{l()}),_e(()=>e.data,()=>{const c=[],d=a.value.map(f=>f[r.value.key]);t.checked.forEach(f=>{d.includes(f)&&c.push(f)}),t.checkChangeByUser=!1,t.checked=c}),_e(()=>e.defaultChecked,(c,d)=>{if(d&&c.length===d.length&&c.every(v=>d.includes(v)))return;const f=[],h=i.value.map(v=>v[r.value.key]);c.forEach(v=>{h.includes(v)&&f.push(v)}),t.checkChangeByUser=!1,t.checked=f},{immediate:!0}),{filteredData:a,checkableData:i,checkedSummary:o,isIndeterminate:s,updateAllChecked:l,handleAllCheckedChange:u}};var JEe=ye({name:"ElTransferPanel",__name:"transfer-panel",props:qEe,emits:XEe,setup(e,{expose:t,emit:n}){const r=e,a=n,i=pr(),o=({option:w})=>w,{t:s}=Yt(),l=Ee("transfer"),u=Qt({checked:[],allChecked:!1,query:"",checkChangeByUser:!0}),c=Oy(r),{filteredData:d,checkedSummary:f,isIndeterminate:h,handleAllCheckedChange:v}=ZEe(r,u,a),p=M(()=>!oi(u.query)&&oi(d.value)),g=M(()=>!oi(i.default()[0].children)),{checked:m,allChecked:b,query:_}=Jr(u);return t({query:_}),(w,S)=>(L(),K("div",{class:B(y(l).b("panel"))},[j("p",{class:B(y(l).be("panel","header"))},[V(y(Qs),{modelValue:y(b),"onUpdate:modelValue":S[0]||(S[0]=x=>Hn(b)?b.value=x:null),indeterminate:y(h),"validate-event":!1,onChange:y(v)},{default:G(()=>[j("span",{class:B(y(l).be("panel","header-title"))},ce(e.title),3),j("span",{class:B(y(l).be("panel","header-count"))},ce(y(f)),3)]),_:1},8,["modelValue","indeterminate","onChange"])],2),j("div",{class:B([y(l).be("panel","body"),y(l).is("with-footer",g.value)])},[e.filterable?(L(),ve(y(va),{key:0,modelValue:y(_),"onUpdate:modelValue":S[1]||(S[1]=x=>Hn(_)?_.value=x:null),class:B(y(l).be("panel","filter")),size:"default",placeholder:e.placeholder,"prefix-icon":y(efe),clearable:"","validate-event":!1},null,8,["modelValue","class","placeholder","prefix-icon"])):fe("v-if",!0),gt(V(y(SM),{modelValue:y(m),"onUpdate:modelValue":S[2]||(S[2]=x=>Hn(m)?m.value=x:null),"validate-event":!1,class:B([y(l).is("filterable",e.filterable),y(l).be("panel","list")])},{default:G(()=>[(L(!0),K(ze,null,Lt(y(d),x=>(L(),ve(y(Qs),{key:x[y(c).key],class:B(y(l).be("panel","item")),value:x[y(c).key],disabled:x[y(c).disabled],"validate-event":!1},{default:G(()=>{var C;return[V(o,{option:(C=e.optionRender)==null?void 0:C.call(e,x)},null,8,["option"])]}),_:2},1032,["class","value","disabled"]))),128))]),_:1},8,["modelValue","class"]),[[ln,!p.value&&!y(oi)(e.data)]]),gt(j("div",{class:B(y(l).be("panel","empty"))},[he(w.$slots,"empty",{},()=>[Le(ce(p.value?y(s)("el.transfer.noMatch"):y(s)("el.transfer.noData")),1)])],2),[[ln,p.value||y(oi)(e.data)]])],2),g.value?(L(),K("p",{key:0,class:B(y(l).be("panel","footer"))},[he(w.$slots,"default")],2)):fe("v-if",!0)],2))}}),oV=JEe;const QEe={key:0},eke={key:0};var tke=ye({name:"ElTransfer",__name:"transfer",props:Eh,emits:UEe,setup(e,{expose:t,emit:n}){const r=e,a=n,i=pr(),{t:o}=Yt(),s=Ee("transfer"),{formItem:l}=ea(),u=Qt({leftChecked:[],rightChecked:[]}),c=Oy(r),{sourceData:d,targetData:f}=YEe(r),{onSourceCheckedChange:h,onTargetCheckedChange:v}=KEe(u,a),{addToLeft:p,addToRight:g}=jEe(r,u,a),m=H(),b=H(),_=E=>{switch(E){case"left":m.value.query="";break;case"right":b.value.query="";break}},w=M(()=>r.buttonTexts.length===2),S=M(()=>r.titles[0]||o("el.transfer.titles.0")),x=M(()=>r.titles[1]||o("el.transfer.titles.1")),C=M(()=>r.filterPlaceholder||o("el.transfer.filterPlaceholder"));_e(()=>r.modelValue,()=>{var E;r.validateEvent&&((E=l==null?void 0:l.validate)==null||E.call(l,"change").catch(It))});const T=M(()=>E=>{var A;if(r.renderContent)return r.renderContent(ot,E);const k=(((A=i.default)==null?void 0:A.call(i,{option:E}))||[]).filter(I=>I.type!==Tr);return k.length?k:ot("span",E[c.value.label]||E[c.value.key])});return t({clearQuery:_,leftPanel:m,rightPanel:b}),(E,k)=>(L(),K("div",{class:B(y(s).b())},[V(oV,{ref_key:"leftPanel",ref:m,data:y(d),"option-render":T.value,placeholder:C.value,title:S.value,filterable:e.filterable,format:e.format,"filter-method":e.filterMethod,"default-checked":e.leftDefaultChecked,props:r.props,onCheckedChange:y(h)},{empty:G(()=>[he(E.$slots,"left-empty")]),default:G(()=>[he(E.$slots,"left-footer")]),_:3},8,["data","option-render","placeholder","title","filterable","format","filter-method","default-checked","props","onCheckedChange"]),j("div",{class:B(y(s).e("buttons"))},[V(y(Xr),{type:"primary",class:B([y(s).e("button"),y(s).is("with-texts",w.value)]),disabled:y(oi)(u.rightChecked),onClick:y(p)},{default:G(()=>[V(y(Ze),null,{default:G(()=>[V(y(Yl))]),_:1}),y(qt)(e.buttonTexts[0])?fe("v-if",!0):(L(),K("span",QEe,ce(e.buttonTexts[0]),1))]),_:1},8,["class","disabled","onClick"]),V(y(Xr),{type:"primary",class:B([y(s).e("button"),y(s).is("with-texts",w.value)]),disabled:y(oi)(u.leftChecked),onClick:y(g)},{default:G(()=>[y(qt)(e.buttonTexts[1])?fe("v-if",!0):(L(),K("span",eke,ce(e.buttonTexts[1]),1)),V(y(Ze),null,{default:G(()=>[V(y(Wa))]),_:1})]),_:1},8,["class","disabled","onClick"])],2),V(oV,{ref_key:"rightPanel",ref:b,data:y(f),"option-render":T.value,placeholder:C.value,filterable:e.filterable,format:e.format,"filter-method":e.filterMethod,title:x.value,"default-checked":e.rightDefaultChecked,props:r.props,onCheckedChange:y(v)},{empty:G(()=>[he(E.$slots,"right-empty")]),default:G(()=>[he(E.$slots,"right-footer")]),_:3},8,["data","option-render","placeholder","filterable","format","filter-method","title","default-checked","props","onCheckedChange"])],2))}}),nke=tke;const rke=xt(nke),XM="RootTree",f7="NodeInstance",sV="TreeNodeMap",h7=Oe({data:{type:oe(Array),default:()=>[]},emptyText:{type:String},renderAfterExpand:{type:Boolean,default:!0},nodeKey:String,checkStrictly:Boolean,defaultExpandAll:Boolean,expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkOnClickLeaf:{type:Boolean,default:!0},checkDescendants:Boolean,autoExpandParent:{type:Boolean,default:!0},defaultCheckedKeys:{type:Array},defaultExpandedKeys:{type:Array},currentNodeKey:{type:[String,Number]},renderContent:{type:oe(Function)},showCheckbox:Boolean,draggable:Boolean,allowDrag:{type:oe(Function)},allowDrop:{type:oe(Function)},props:{type:Object,default:()=>({children:"children",label:"label",disabled:"disabled"})},lazy:Boolean,highlightCurrent:Boolean,load:{type:Function},filterNodeMethod:{type:Function},accordion:Boolean,indent:{type:Number,default:18},icon:{type:An}}),ake={"check-change":(e,t,n)=>e&&En(t)&&En(n),"current-change":(e,t)=>!0,"node-click":(e,t,n,r)=>e&&t&&r instanceof Event,"node-contextmenu":(e,t,n,r)=>e instanceof Event&&t&&n,"node-collapse":(e,t,n)=>e&&t,"node-expand":(e,t,n)=>e&&t,check:(e,t)=>e&&t,"node-drag-start":(e,t)=>e&&t,"node-drag-end":(e,t,n,r)=>e&&r,"node-drop":(e,t,n,r)=>e&&t&&r,"node-drag-leave":(e,t,n)=>e&&t&&n,"node-drag-enter":(e,t,n)=>e&&t&&n,"node-drag-over":(e,t,n)=>e&&t&&n},v7="$treeNodeId",lV=function(e,t){!t||t.$treeNodeId||Object.defineProperty(t,v7,{value:e.id,enumerable:!1,configurable:!1,writable:!1})},ZM=(e,t)=>t==null?void 0:t[e||"$treeNodeId"],zE=(e,t,n)=>{const r=e.value.currentNode;n();const a=e.value.currentNode;r!==a&&t("current-change",a?a.data:null,a)},p7=e=>{let t=!0,n=!0,r=!0,a=!0;for(let i=0,o=e.length;i{n.canFocus=t,HE(n.childNodes,t)})};let ike=0;var WE=class Qb{constructor(t){this.isLeafByUser=void 0,this.isLeaf=void 0,this.isEffectivelyChecked=!1,this.id=ike++,this.text=null,this.checked=!1,this.indeterminate=!1,this.data=null,this.expanded=!1,this.parent=null,this.visible=!0,this.isCurrent=!1,this.canFocus=!1;for(const n in t)un(t,n)&&(this[n]=t[n]);this.level=0,this.loaded=!1,this.childNodes=[],this.loading=!1,this.parent&&(this.level=this.parent.level+1)}initialize(){var i;const t=this.store;if(!t)throw new Error("[Node]store is required!");t.registerNode(this);const n=t.props;if(n&&typeof n.isLeaf<"u"){const o=I0(this,"isLeaf");En(o)&&(this.isLeafByUser=o)}if(t.lazy!==!0&&this.data?(this.setData(this.data),t.defaultExpandAll&&(this.expanded=!0,this.canFocus=!0)):this.level>0&&t.lazy&&t.defaultExpandAll&&!this.isLeafByUser&&this.expand(),Me(this.data)||lV(this,this.data),!this.data)return;const r=t.defaultExpandedKeys,a=t.key;a&&!wr(this.key)&&r&&r.includes(this.key)&&this.expand(null,t.autoExpandParent),a&&t.currentNodeKey!==void 0&&this.key===t.currentNodeKey&&(t.currentNode&&(t.currentNode.isCurrent=!1),t.currentNode=this,t.currentNode.isCurrent=!0),t.lazy&&t._initDefaultCheckedNode(this),this.updateLeafState(),(this.level===1||((i=this.parent)==null?void 0:i.expanded)===!0)&&(this.canFocus=!0)}setData(t){Me(t)||lV(this,t),this.data=t,this.childNodes=[];let n;this.level===0&&Me(this.data)?n=this.data:n=I0(this,"children")||[];for(let r=0,a=n.length;r-1)return t.childNodes[n+1]}return null}get previousSibling(){const t=this.parent;if(t){const n=t.childNodes.indexOf(this);if(n>-1)return n>0?t.childNodes[n-1]:null}return null}contains(t,n=!0){return(this.childNodes||[]).some(r=>r===t||n&&r.contains(t))}remove(){const t=this.parent;t&&t.removeChild(this)}insertChild(t,n,r){if(!t)throw new Error("InsertChild error: child is required.");if(!(t instanceof Qb)){if(!r){const a=this.getChildren(!0);a!=null&&a.includes(t.data)||(qt(n)||n<0?a==null||a.push(t.data):a==null||a.splice(n,0,t.data))}Object.assign(t,{parent:this,store:this.store}),t=Qt(new Qb(t)),t instanceof Qb&&t.initialize()}t.level=this.level+1,qt(n)||n<0?this.childNodes.push(t):this.childNodes.splice(n,0,t),this.updateLeafState()}insertBefore(t,n){let r;n&&(r=this.childNodes.indexOf(n)),this.insertChild(t,r)}insertAfter(t,n){let r;n&&(r=this.childNodes.indexOf(n),r!==-1&&(r+=1)),this.insertChild(t,r)}removeChild(t){const n=this.getChildren()||[],r=n.indexOf(t.data);r>-1&&n.splice(r,1);const a=this.childNodes.indexOf(t);a>-1&&(this.store&&this.store.deregisterNode(t),t.parent=null,this.childNodes.splice(a,1)),this.updateLeafState()}removeChildByData(t){const n=this.childNodes.find(r=>r.data===t);n&&this.removeChild(n)}expand(t,n){const r=()=>{if(n){let a=this.parent;for(;a&&a.level>0;)a.expanded=!0,a=a.parent}this.expanded=!0,t&&t(),HE(this.childNodes,!0)};this.shouldLoadData()?this.loadData(a=>{Me(a)&&(this.store.checkStrictly||(this.checked?this.setChecked(!0,!0):ug(this)),r())}):r()}doCreateChildren(t,n={}){t.forEach(r=>{this.insertChild(Object.assign({data:r},n),void 0,!0)})}collapse(){this.expanded=!1,HE(this.childNodes,!1)}shouldLoadData(){return!!(this.store.lazy===!0&&this.store.load&&!this.loaded)}updateLeafState(){if(this.store.lazy===!0&&this.loaded!==!0&&typeof this.isLeafByUser<"u"){this.isLeaf=this.isLeafByUser,this.isEffectivelyChecked=this.isLeaf&&this.disabled;return}const t=this.childNodes;if(!this.store.lazy||this.store.lazy===!0&&this.loaded===!0){this.isLeaf=!t||t.length===0,this.isEffectivelyChecked=this.isLeaf&&this.disabled;return}this.isLeaf=!1}setChecked(t,n,r,a){if(this.indeterminate=t==="half",this.checked=t===!0,this.isEffectivelyChecked=!this.childNodes.length&&(this.disabled||this.checked),this.store.checkStrictly&&!n)return;if(!(this.shouldLoadData()&&!this.store.checkDescendants)){const o=()=>{if(n){const s=this.childNodes;for(let d=0,f=s.length;d{o(),ug(this)},{checked:t!==!1});return}else o()}const i=this.parent;!i||i.level===0||!r&&!this.store.checkStrictly&&ug(i)}getChildren(t=!1){if(this.level===0)return this.data;const n=this.data;if(!n)return null;const r=this.store.props;let a="children";return r&&(a=r.children||"children"),qt(n[a])&&(n[a]=null),t&&!n[a]&&(n[a]=[]),n[a]}updateChildren(){const t=this.getChildren()||[],n=this.childNodes.map(i=>i.data),r={},a=[];t.forEach((i,o)=>{const s=i[v7];s&&n.some(l=>(l==null?void 0:l.$treeNodeId)===s)?r[s]={index:o,data:i}:a.push({index:o,data:i})}),this.store.lazy||n.forEach(i=>{r[i==null?void 0:i.$treeNodeId]||this.removeChildByData(i)}),a.forEach(({index:i,data:o})=>{this.insertChild({data:o},i)}),this.updateLeafState()}loadData(t,n={}){if(this.store.lazy===!0&&this.store.load&&!this.loaded&&(!this.loading||Object.keys(n).length)){this.loading=!0;const r=i=>{this.childNodes=[],this.doCreateChildren(i,n),this.loaded=!0,this.loading=!1,this.updateLeafState(),t&&t.call(this,i)},a=()=>{this.loading=!1};this.store.load(this,r,a)}else t&&t.call(this)}eachNode(t){const n=[this];for(;n.length;){const r=n.shift();n.unshift(...r.childNodes),t(r)}}reInitChecked(){this.store.checkStrictly||ug(this)}},oke=class{constructor(e){this.lazy=!1,this.checkStrictly=!1,this.autoExpandParent=!1,this.defaultExpandAll=!1,this.checkDescendants=!1,this.currentNode=null,this.currentNodeKey=null;for(const t in e)un(e,t)&&(this[t]=e[t]);this.nodesMap={}}initialize(){if(this.root=new WE({data:this.data,store:this}),this.root.initialize(),this.lazy&&this.load){const e=this.load;e(this.root,t=>{this.root.doCreateChildren(t),this._initDefaultCheckedNodes()},It)}else this._initDefaultCheckedNodes()}filter(e){const t=this.filterNodeMethod,n=this.lazy,r=async function(a){const i=a.root?a.root.childNodes:a.childNodes;for(const[o,s]of i.entries())s.visible=!!(t!=null&&t.call(s,e,s.data,s)),o%80===0&&o>0&&await Ue(),await r(s);if(!a.visible&&i.length){let o=!0;o=!i.some(s=>s.visible),a.root?a.root.visible=o===!1:a.visible=o===!1}e&&a.visible&&!a.isLeaf&&(!n||a.loaded)&&a.expand()};r(this)}setData(e){e!==this.root.data?(this.nodesMap={},this.root.setData(e),this._initDefaultCheckedNodes(),this.setCurrentNodeKey(this.currentNodeKey)):this.root.updateChildren()}getNode(e){if(e instanceof WE)return e;const t=yt(e)?ZM(this.key,e):e;return this.nodesMap[t]||null}insertBefore(e,t){var r;const n=this.getNode(t);(r=n.parent)==null||r.insertBefore({data:e},n)}insertAfter(e,t){var r;const n=this.getNode(t);(r=n.parent)==null||r.insertAfter({data:e},n)}remove(e){const t=this.getNode(e);t&&t.parent&&(t===this.currentNode&&(this.currentNode=null),t.parent.removeChild(t))}append(e,t){const n=Bi(t)?this.root:this.getNode(t);n&&n.insertChild({data:e})}_initDefaultCheckedNodes(){const e=this.defaultCheckedKeys||[],t=this.nodesMap;e.forEach(n=>{const r=t[n];r&&r.setChecked(!0,!this.checkStrictly)})}_initDefaultCheckedNode(e){const t=this.defaultCheckedKeys||[];!wr(e.key)&&t.includes(e.key)&&e.setChecked(!0,!this.checkStrictly)}setDefaultCheckedKey(e){e!==this.defaultCheckedKeys&&(this.defaultCheckedKeys=e,this._initDefaultCheckedNodes())}registerNode(e){const t=this.key;if(!(!e||!e.data))if(!t)this.nodesMap[e.id]=e;else{const n=e.key;wr(n)||(this.nodesMap[n]=e)}}deregisterNode(e){!this.key||!e||!e.data||(e.childNodes.forEach(t=>{this.deregisterNode(t)}),delete this.nodesMap[e.key])}getCheckedNodes(e=!1,t=!1){const n=[],r=function(a){(a.root?a.root.childNodes:a.childNodes).forEach(i=>{(i.checked||t&&i.indeterminate)&&(!e||e&&i.isLeaf)&&n.push(i.data),r(i)})};return r(this),n}getCheckedKeys(e=!1){return this.getCheckedNodes(e).map(t=>(t||{})[this.key])}getHalfCheckedNodes(){const e=[],t=function(n){(n.root?n.root.childNodes:n.childNodes).forEach(r=>{r.indeterminate&&e.push(r.data),t(r)})};return t(this),e}getHalfCheckedKeys(){return this.getHalfCheckedNodes().map(e=>(e||{})[this.key])}_getAllNodes(){const e=[],t=this.nodesMap;for(const n in t)un(t,n)&&e.push(t[n]);return e}updateChildren(e,t){const n=this.nodesMap[e];if(!n)return;const r=n.childNodes;for(let a=r.length-1;a>=0;a--){const i=r[a];this.remove(i.data)}for(let a=0,i=t.length;as.level-l.level),a=Object.create(null),i=Object.keys(n);r.forEach(s=>s.setChecked(!1,!1));const o=s=>{s.childNodes.forEach(l=>{var u;a[l.data[e]]=!0,(u=l.childNodes)!=null&&u.length&&o(l)})};for(let s=0,l=r.length;s{h.isLeaf||h.setChecked(!1,!1,!0),d(h)}),f.reInitChecked()};d(u)}}}setCheckedNodes(e,t=!1){const n=this.key,r={};e.forEach(a=>{r[(a||{})[n]]=!0}),this._setCheckedKeys(n,t,r)}setCheckedKeys(e,t=!1){this.defaultCheckedKeys=e;const n=this.key,r={};e.forEach(a=>{r[a]=!0}),this._setCheckedKeys(n,t,r)}setDefaultExpandedKeys(e){e=e||[],this.defaultExpandedKeys=e,e.forEach(t=>{const n=this.getNode(t);n&&n.expand(null,this.autoExpandParent)})}setChecked(e,t,n){const r=this.getNode(e);r&&r.setChecked(!!t,n)}getCurrentNode(){return this.currentNode}setCurrentNode(e){const t=this.currentNode;t&&(t.isCurrent=!1),this.currentNode=e,this.currentNode.isCurrent=!0}setUserCurrentNode(e,t=!0){var a;const n=e[this.key],r=this.nodesMap[n];this.setCurrentNode(r),t&&this.currentNode&&this.currentNode.level>1&&((a=this.currentNode.parent)==null||a.expand(null,!0))}setCurrentNodeKey(e,t=!0){var r;if(this.currentNodeKey=e,Bi(e)){this.currentNode&&(this.currentNode.isCurrent=!1),this.currentNode=null;return}const n=this.getNode(e);n&&(this.setCurrentNode(n),t&&this.currentNode&&this.currentNode.level>1&&((r=this.currentNode.parent)==null||r.expand(null,!0)))}};function g7(e){const t=Ge(sV,null);let n={treeNodeExpand:r=>{var a;e.node!==r&&((a=e.node)==null||a.collapse())},children:new Set};return t&&t.children.add(n),yn(()=>{t&&t.children.delete(n),n=null}),Ft(sV,n),{broadcastExpanded:r=>{if(e.accordion)for(const a of n.children)a.treeNodeExpand(r)}}}const m7=Symbol("dragEvents");function ske({props:e,ctx:t,el$:n,dropIndicator$:r,store:a}){const i=Ee("tree"),o=H({showDropIndicator:!1,draggingNode:null,dropNode:null,allowDrop:!0,dropType:null});return Ft(m7,{treeNodeDragStart:({event:c,treeNode:d})=>{if(c.dataTransfer){if(et(e.allowDrag)&&!e.allowDrag(d.node))return c.preventDefault(),!1;c.dataTransfer.effectAllowed="move";try{c.dataTransfer.setData("text/plain","")}catch{}o.value.draggingNode=d,t.emit("node-drag-start",d.node,c)}},treeNodeDragOver:({event:c,treeNode:d})=>{if(!c.dataTransfer)return;const f=d,h=o.value.dropNode;h&&h.node.id!==f.node.id&&Ha(h.$el,i.is("drop-inner"));const v=o.value.draggingNode;if(!v||!f)return;let p=!0,g=!0,m=!0,b=!0;et(e.allowDrop)&&(p=e.allowDrop(v.node,f.node,"prev"),b=g=e.allowDrop(v.node,f.node,"inner"),m=e.allowDrop(v.node,f.node,"next")),c.dataTransfer.dropEffect=g||p||m?"move":"none",(p||g||m)&&(h==null?void 0:h.node.id)!==f.node.id&&(h&&t.emit("node-drag-leave",v.node,h.node,c),t.emit("node-drag-enter",v.node,f.node,c)),p||g||m?o.value.dropNode=f:o.value.dropNode=null,f.node.nextSibling===v.node&&(m=!1),f.node.previousSibling===v.node&&(p=!1),f.node.contains(v.node,!1)&&(g=!1),(v.node===f.node||v.node.contains(f.node))&&(p=!1,g=!1,m=!1);const _=f.$el,w=_.querySelector(`.${i.be("node","content")}`).getBoundingClientRect(),S=n.value.getBoundingClientRect(),x=n.value.scrollTop;let C;const T=p?g?.25:m?.45:1:Number.NEGATIVE_INFINITY,E=m?g?.75:p?.55:0:Number.POSITIVE_INFINITY;let k=-9999;const A=c.clientY-w.top;Aw.height*E?C="after":g?C="inner":C="none";const I=_.querySelector(`.${i.be("node","expand-icon")}`).getBoundingClientRect(),P=r.value;C==="before"?k=I.top-S.top+x:C==="after"&&(k=I.bottom-S.top+x),P.style.top=`${k}px`,P.style.left=`${I.right-S.left}px`,C==="inner"?go(_,i.is("drop-inner")):Ha(_,i.is("drop-inner")),o.value.showDropIndicator=C==="before"||C==="after",o.value.allowDrop=o.value.showDropIndicator||b,o.value.dropType=C,t.emit("node-drag-over",v.node,f.node,c)},treeNodeDragEnd:c=>{var v,p;const{draggingNode:d,dropType:f,dropNode:h}=o.value;if(c.preventDefault(),c.dataTransfer&&(c.dataTransfer.dropEffect="move"),d!=null&&d.node.data&&h){const g={data:d.node.data};f!=="none"&&d.node.remove(),f==="before"?(v=h.node.parent)==null||v.insertBefore(g,h.node):f==="after"?(p=h.node.parent)==null||p.insertAfter(g,h.node):f==="inner"&&h.node.insertChild(g),f!=="none"&&(a.value.registerNode(g),a.value.key&&d.node.eachNode(m=>{var b;(b=a.value.nodesMap[m.data[a.value.key]])==null||b.setChecked(m.checked,!a.value.checkStrictly)})),Ha(h.$el,i.is("drop-inner")),t.emit("node-drag-end",d.node,h.node,f,c),f!=="none"&&t.emit("node-drop",d.node,h.node,f,c)}d&&!h&&t.emit("node-drag-end",d.node,null,f,c),o.value.showDropIndicator=!1,o.value.draggingNode=null,o.value.dropNode=null,o.value.allowDrop=!0}}),{dragState:o}}var lke=ye({name:"ElTreeNodeContent",props:{node:{type:Object,required:!0},renderContent:Function},setup(e){const t=Ee("tree"),n=Ge(f7),r=Ge(XM);return()=>{const a=e.node,{data:i,store:o}=a;return e.renderContent?e.renderContent(ot,{_self:n,node:a,data:i,store:o}):he(r.ctx.slots,"default",{node:a,data:i},()=>[ot(qM,{tag:"span",truncated:!0,class:t.be("node","label")},()=>[a.label])])}}}),uke=lke,cke=ye({name:"ElTreeNode",components:{ElCollapseTransition:Qw,ElCheckbox:Qs,NodeContent:uke,ElIcon:Ze,Loading:es},props:{node:{type:WE,default:()=>({})},props:{type:Object,default:()=>({})},accordion:Boolean,renderContent:Function,renderAfterExpand:Boolean,showCheckbox:Boolean},emits:["node-expand"],setup(e,t){const n=Ee("tree"),{broadcastExpanded:r}=g7(e),a=Ge(XM),i=H(!1),o=H(!1),s=H(),l=H(),u=H(),c=Ge(m7),d=Tt();Ft(f7,d),a||wn("Tree","Can not find node's tree."),e.node.expanded&&(i.value=!0,o.value=!0);const f=a.props.props.children||"children";_e(()=>{var k;const E=(k=e.node.data)==null?void 0:k[f];return E&&[...E]},()=>{e.node.updateChildren()}),_e(()=>e.node.indeterminate,E=>{p(e.node.checked,E)}),_e(()=>e.node.checked,E=>{p(E,e.node.indeterminate)}),_e(()=>e.node.childNodes.length,()=>e.node.reInitChecked()),_e(()=>e.node.expanded,E=>{Ue(()=>i.value=E),E&&(o.value=!0)});const h=E=>a.props.nodeKey?ZM(a.props.nodeKey,E.data):E.id,v=E=>{const k=e.props.class;if(!k)return{};let A;if(et(k)){const{data:I}=E;A=k(I,E)}else A=k;return qe(A)?{[A]:!0}:A},p=(E,k)=>{(s.value!==E||l.value!==k)&&a.ctx.emit("check-change",e.node.data,E,k),s.value=E,l.value=k},g=E=>{zE(a.store,a.ctx.emit,()=>{var k;if((k=a==null?void 0:a.props)!=null&&k.nodeKey){const A=h(e.node);a.store.value.setCurrentNodeKey(A)}else a.store.value.setCurrentNode(e.node)}),a.currentNode.value=e.node,a.props.expandOnClickNode&&b(),(a.props.checkOnClickNode||e.node.isLeaf&&a.props.checkOnClickLeaf&&e.showCheckbox)&&!e.node.disabled&&_(!e.node.checked),a.ctx.emit("node-click",e.node.data,e.node,d,E)},m=E=>{var k;(k=a.instance.vnode.props)!=null&&k.onNodeContextmenu&&(E.stopPropagation(),E.preventDefault()),a.ctx.emit("node-contextmenu",E,e.node.data,e.node,d)},b=()=>{e.node.isLeaf||(i.value?(a.ctx.emit("node-collapse",e.node.data,e.node,d),e.node.collapse()):e.node.expand(()=>{t.emit("node-expand",e.node.data,e.node,d)}))},_=E=>{const k=a==null?void 0:a.props.checkStrictly,A=e.node.childNodes;!k&&A.length&&(E=A.some(I=>!I.isEffectivelyChecked)),e.node.setChecked(E,!k),Ue(()=>{const I=a.store.value;a.ctx.emit("check",e.node.data,{checkedNodes:I.getCheckedNodes(),checkedKeys:I.getCheckedKeys(),halfCheckedNodes:I.getHalfCheckedNodes(),halfCheckedKeys:I.getHalfCheckedKeys()})})};return{ns:n,node$:u,tree:a,expanded:i,childNodeRendered:o,oldChecked:s,oldIndeterminate:l,getNodeKey:h,getNodeClass:v,handleSelectChange:p,handleClick:g,handleContextMenu:m,handleExpandIconClick:b,handleCheckChange:_,handleChildNodeExpand:(E,k,A)=>{r(k),a.ctx.emit("node-expand",E,k,A)},handleDragStart:E=>{a.props.draggable&&c.treeNodeDragStart({event:E,treeNode:e})},handleDragOver:E=>{E.preventDefault(),a.props.draggable&&c.treeNodeDragOver({event:E,treeNode:{$el:u.value,node:e.node}})},handleDrop:E=>{E.preventDefault()},handleDragEnd:E=>{a.props.draggable&&c.treeNodeDragEnd(E)},CaretRight:rG}}});const dke=["aria-expanded","aria-disabled","aria-checked","draggable","data-key"],fke=["aria-expanded"];function hke(e,t,n,r,a,i){const o=Ie("el-icon"),s=Ie("el-checkbox"),l=Ie("loading"),u=Ie("node-content"),c=Ie("el-tree-node"),d=Ie("el-collapse-transition");return gt((L(),K("div",{ref:"node$",class:B([e.ns.b("node"),e.ns.is("expanded",e.expanded),e.ns.is("current",e.node.isCurrent),e.ns.is("hidden",!e.node.visible),e.ns.is("focusable",!e.node.disabled),e.ns.is("checked",!e.node.disabled&&e.node.checked),e.getNodeClass(e.node)]),role:"treeitem",tabindex:"-1","aria-expanded":e.expanded,"aria-disabled":e.node.disabled,"aria-checked":e.node.checked,draggable:e.tree.props.draggable,"data-key":e.getNodeKey(e.node),onClick:t[2]||(t[2]=ut((...f)=>e.handleClick&&e.handleClick(...f),["stop"])),onContextmenu:t[3]||(t[3]=(...f)=>e.handleContextMenu&&e.handleContextMenu(...f)),onDragstart:t[4]||(t[4]=ut((...f)=>e.handleDragStart&&e.handleDragStart(...f),["stop"])),onDragover:t[5]||(t[5]=ut((...f)=>e.handleDragOver&&e.handleDragOver(...f),["stop"])),onDragend:t[6]||(t[6]=ut((...f)=>e.handleDragEnd&&e.handleDragEnd(...f),["stop"])),onDrop:t[7]||(t[7]=ut((...f)=>e.handleDrop&&e.handleDrop(...f),["stop"]))},[j("div",{class:B(e.ns.be("node","content")),style:tt({paddingLeft:(e.node.level-1)*e.tree.props.indent+"px"})},[e.tree.props.icon||e.CaretRight?(L(),ve(o,{key:0,class:B([e.ns.be("node","expand-icon"),e.ns.is("leaf",e.node.isLeaf),{expanded:!e.node.isLeaf&&e.expanded}]),onClick:ut(e.handleExpandIconClick,["stop"])},{default:G(()=>[(L(),ve(Et(e.tree.props.icon||e.CaretRight)))]),_:1},8,["class","onClick"])):fe("v-if",!0),e.showCheckbox?(L(),ve(s,{key:1,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:!!e.node.disabled,onClick:t[0]||(t[0]=ut(()=>{},["stop"])),onChange:e.handleCheckChange},null,8,["model-value","indeterminate","disabled","onChange"])):fe("v-if",!0),e.node.loading?(L(),ve(o,{key:2,class:B([e.ns.be("node","loading-icon"),e.ns.is("loading")])},{default:G(()=>[V(l)]),_:1},8,["class"])):fe("v-if",!0),V(u,{node:e.node,"render-content":e.renderContent},null,8,["node","render-content"])],6),V(d,null,{default:G(()=>[!e.renderAfterExpand||e.childNodeRendered?gt((L(),K("div",{key:0,class:B(e.ns.be("node","children")),role:"group","aria-expanded":e.expanded,onClick:t[1]||(t[1]=ut(()=>{},["stop"]))},[(L(!0),K(ze,null,Lt(e.node.childNodes,f=>(L(),ve(c,{key:e.getNodeKey(f),"render-content":e.renderContent,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,node:f,accordion:e.accordion,props:e.props,onNodeExpand:e.handleChildNodeExpand},null,8,["render-content","render-after-expand","show-checkbox","node","accordion","props","onNodeExpand"]))),128))],10,fke)),[[ln,e.expanded]]):fe("v-if",!0)]),_:1})],42,dke)),[[ln,e.node.visible]])}var vke=Gr(cke,[["render",hke]]);function pke({el$:e},t){const n=Ee("tree");St(()=>{i()}),is(()=>{var o;(o=e.value)==null||o.querySelectorAll("input[type=checkbox]").forEach(s=>{s.setAttribute("tabindex","-1")})});function r(o,s){var u,c;const l=t.value.getNode(o[s].dataset.key);return l.canFocus&&l.visible&&(((u=l.parent)==null?void 0:u.expanded)||((c=l.parent)==null?void 0:c.level)===0)}gn(e,"keydown",o=>{const s=o.target;if(!s.className.includes(n.b("node")))return;const l=Mn(o),u=Array.from(e.value.querySelectorAll(`.${n.is("focusable")}[role=treeitem]`)),c=u.indexOf(s);let d;if([De.up,De.down].includes(l)){if(o.preventDefault(),l===De.up){d=c===-1?0:c!==0?c-1:u.length-1;const h=d;for(;!r(u,d);){if(d--,d===h){d=-1;break}d<0&&(d=u.length-1)}}else{d=c===-1?0:c=u.length&&(d=0)}}d!==-1&&u[d].focus()}[De.left,De.right].includes(l)&&(o.preventDefault(),s.click());const f=s.querySelector('[type="checkbox"]');[De.enter,De.numpadEnter,De.space].includes(l)&&f&&(o.preventDefault(),f.click())});const i=()=>{var l;if(!e.value)return;const o=Array.from(e.value.querySelectorAll(`.${n.is("focusable")}[role=treeitem]`));Array.from(e.value.querySelectorAll("input[type=checkbox]")).forEach(u=>{u.setAttribute("tabindex","-1")});const s=e.value.querySelectorAll(`.${n.is("checked")}[role=treeitem]`);if(s.length){s[0].setAttribute("tabindex","0");return}(l=o[0])==null||l.setAttribute("tabindex","0")}}var gke=ye({name:"ElTree",components:{ElTreeNode:vke},props:h7,emits:ake,setup(e,t){const{t:n}=Yt(),r=Ee("tree"),a=H(new oke({key:e.nodeKey,data:e.data,lazy:e.lazy,props:e.props,load:e.load,currentNodeKey:e.currentNodeKey,checkStrictly:e.checkStrictly,checkDescendants:e.checkDescendants,defaultCheckedKeys:e.defaultCheckedKeys,defaultExpandedKeys:e.defaultExpandedKeys,autoExpandParent:e.autoExpandParent,defaultExpandAll:e.defaultExpandAll,filterNodeMethod:e.filterNodeMethod}));a.value.initialize();const i=H(a.value.root),o=H(null),s=H(null),l=H(null),{broadcastExpanded:u}=g7(e),{dragState:c}=ske({props:e,ctx:t,el$:s,dropIndicator$:l,store:a});pke({el$:s},a);const d=Tt(),f=M(()=>{let W=d==null?void 0:d.parent;for(;W;){if(W.type.name==="ElTreeSelect")return!0;W=W.parent}return!1}),h=M(()=>{const{childNodes:W}=i.value;return(!W||W.length===0||W.every(({visible:z})=>!z))&&!f.value});_e(()=>e.currentNodeKey,W=>{a.value.setCurrentNodeKey(W??null)}),_e(()=>e.defaultCheckedKeys,(W,z)=>{or(W,z)||a.value.setDefaultCheckedKey(W??[])}),_e(()=>e.defaultExpandedKeys,W=>{a.value.setDefaultExpandedKeys(W??[])}),_e(()=>e.data,W=>{a.value.setData(W)},{deep:!0}),_e(()=>e.checkStrictly,W=>{a.value.checkStrictly=W});const v=W=>{if(!e.filterNodeMethod)throw new Error("[Tree] filterNodeMethod is required when filter");a.value.filter(W)},p=W=>e.nodeKey?ZM(e.nodeKey,W.data):W.id,g=W=>{if(!e.nodeKey)throw new Error(`[Tree] nodeKey is required in ${W}`)},m=W=>{g("getNodePath");const z=a.value.getNode(W);if(!z)return[];const Y=[z.data];let q=z.parent;for(;q&&q!==i.value;)Y.push(q.data),q=q.parent;return Y.reverse()},b=(W,z)=>a.value.getCheckedNodes(W,z),_=W=>a.value.getCheckedKeys(W),w=()=>{const W=a.value.getCurrentNode();return W?W.data:null},S=()=>{g("getCurrentKey");const W=w();return W?W[e.nodeKey]:null},x=(W,z)=>{g("setCheckedNodes"),a.value.setCheckedNodes(W,z)},C=(W,z)=>{g("setCheckedKeys"),a.value.setCheckedKeys(W,z)},T=(W,z,Y=!1)=>{a.value.setChecked(W,z,Y)},E=()=>a.value.getHalfCheckedNodes(),k=()=>a.value.getHalfCheckedKeys(),A=(W,z=!0)=>{g("setCurrentNode"),zE(a,t.emit,()=>{u(W),a.value.setUserCurrentNode(W,z)})},I=(W=null,z=!0)=>{g("setCurrentKey"),zE(a,t.emit,()=>{u(),a.value.setCurrentNodeKey(W,z)})},P=W=>a.value.getNode(W),R=W=>{a.value.remove(W)},O=(W,z)=>{a.value.append(W,z)},$=(W,z)=>{a.value.insertBefore(W,z)},N=(W,z)=>{a.value.insertAfter(W,z)},D=(W,z,Y)=>{u(z),t.emit("node-expand",W,z,Y)},F=(W,z)=>{g("updateKeyChildren"),a.value.updateChildren(W,z)};return Ft(XM,{ctx:t,props:e,store:a,root:i,currentNode:o,instance:d}),Ft(Js,void 0),{ns:r,store:a,root:i,currentNode:o,dragState:c,el$:s,dropIndicator$:l,isEmpty:h,filter:v,getNodeKey:p,getNodePath:m,getCheckedNodes:b,getCheckedKeys:_,getCurrentNode:w,getCurrentKey:S,setCheckedNodes:x,setCheckedKeys:C,setChecked:T,getHalfCheckedNodes:E,getHalfCheckedKeys:k,setCurrentNode:A,setCurrentKey:I,t:n,getNode:P,remove:R,append:O,insertBefore:$,insertAfter:N,handleNodeExpand:D,updateKeyChildren:F}}});function mke(e,t,n,r,a,i){const o=Ie("el-tree-node");return L(),K("div",{ref:"el$",class:B([e.ns.b(),e.ns.is("dragging",!!e.dragState.draggingNode),e.ns.is("drop-not-allow",!e.dragState.allowDrop),e.ns.is("drop-inner",e.dragState.dropType==="inner"),{[e.ns.m("highlight-current")]:e.highlightCurrent}]),role:"tree"},[(L(!0),K(ze,null,Lt(e.root.childNodes,s=>(L(),ve(o,{key:e.getNodeKey(s),node:s,props:e.props,accordion:e.accordion,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,"render-content":e.renderContent,onNodeExpand:e.handleNodeExpand},null,8,["node","props","accordion","render-after-expand","show-checkbox","render-content","onNodeExpand"]))),128)),e.isEmpty?(L(),K("div",{key:0,class:B(e.ns.e("empty-block"))},[he(e.$slots,"empty",{},()=>[j("span",{class:B(e.ns.e("empty-text"))},ce(e.emptyText??e.t("el.tree.emptyText")),3)])],2)):fe("v-if",!0),gt(j("div",{ref:"dropIndicator$",class:B(e.ns.e("drop-indicator"))},null,2),[[ln,e.dragState.showDropIndicator]])],2)}var yke=Gr(gke,[["render",mke]]);const JM=xt(yke),bke=(e,{attrs:t,emit:n},{select:r,tree:a,key:i})=>{const o=Ee("tree-select");_e(()=>e.data,()=>{e.filterable&&Ue(()=>{var l,u;(u=a.value)==null||u.filter((l=r.value)==null?void 0:l.states.inputValue)})},{flush:"post"});const s=l=>{var c,d;const u=l.at(-1);if(u.expanded&&u.childNodes.at(-1))s([u.childNodes.at(-1)]);else{(d=(c=a.value.el$)==null?void 0:c.querySelector(`[data-key="${l.at(-1).key}"]`))==null||d.focus({preventScroll:!0});return}};return St(()=>{gn(()=>{var l;return(l=r.value)==null?void 0:l.$el},"keydown",async l=>{const u=Mn(l),{dropdownMenuVisible:c}=r.value;[De.down,De.up].includes(u)&&c&&(await Ue(),setTimeout(()=>{var d,f,h;if(De.up===u){const v=a.value.store.root.childNodes;s(v);return}(h=(f=(d=r.value.optionsArray[r.value.states.hoveringIndex].$el)==null?void 0:d.parentNode)==null?void 0:f.parentNode)==null||h.focus({preventScroll:!0})}))},{capture:!0})}),{...Ul(Jr(e),Object.keys(bc.props)),...t,class:M(()=>t.class),style:M(()=>t.style),"onUpdate:modelValue":l=>n(mt,l),valueKey:i,popperClass:M(()=>{const l=[o.e("popper")];return e.popperClass&&l.push(e.popperClass),l.join(" ")}),filterMethod:(l="")=>{var u;e.filterMethod?e.filterMethod(l):e.remoteMethod?e.remoteMethod(l):(u=a.value)==null||u.filter(l)}}},_ke=ye({extends:j1,setup(e,t){const n=j1.setup(e,t);delete n.selectOptionClick;const r=Tt().proxy;return Ue(()=>{n.select.states.cachedOptions.get(r.value)||n.select.onOptionCreate(r)}),_e(()=>t.attrs.visible,a=>{Ue(()=>{n.states.visible=a})},{immediate:!0}),n},methods:{selectOptionClick(){this.$el.parentElement.click()}}});function GE(e){return e||e===0}function QM(e){return Me(e)&&e.length}function Qf(e){return Me(e)?e:GE(e)?[e]:[]}function e1(e,t,n,r,a){for(let i=0;i{_e([()=>e.modelValue,i],()=>{e.showCheckbox&&Ue(()=>{const v=i.value;v&&!or(v.getCheckedKeys(),Qf(e.modelValue))&&v.setCheckedKeys(Qf(e.modelValue))})},{immediate:!0,deep:!0});const s=M(()=>({value:o.value,label:"label",children:"children",disabled:"disabled",isLeaf:"isLeaf",...e.props})),l=(v,p)=>{var m;const g=s.value[v];return et(g)?g(p,(m=i.value)==null?void 0:m.getNode(l("value",p))):p[g]},u=Qf(e.modelValue).map(v=>e1(e.data||[],p=>l("value",p)===v,p=>l("children",p),(p,g,m,b)=>b&&l("value",b))).filter(v=>GE(v)),c=M(()=>{if(!e.renderAfterExpand&&!e.lazy)return[];const v=[];return t1(e.data.concat(e.cacheData),p=>{const g=l("value",p);v.push({value:g,currentLabel:l("label",p),isDisabled:l("disabled",p)})},p=>l("children",p)),v}),d=()=>{var v;return(v=i.value)==null?void 0:v.getCheckedKeys().filter(p=>{var m;const g=(m=i.value)==null?void 0:m.getNode(p);return!wr(g)&&oi(g.childNodes)})},f=v=>{or(e.modelValue,v)||r(Vt,v)};function h(v){r(mt,v),f(v)}return{...Ul(Jr(e),Object.keys(JM.props)),...t,nodeKey:o,expandOnClickNode:M(()=>!e.checkStrictly&&e.expandOnClickNode),defaultExpandedKeys:M(()=>e.defaultExpandedKeys?e.defaultExpandedKeys.concat(u):u),renderContent:(v,{node:p,data:g,store:m})=>v(_ke,{value:l("value",g),label:l("label",g),disabled:l("disabled",g),visible:p.visible},e.renderContent?()=>e.renderContent(v,{node:p,data:g,store:m}):n.default?()=>n.default({node:p,data:g,store:m}):void 0),filterNodeMethod:(v,p,g)=>e.filterNodeMethod?e.filterNodeMethod(v,p,g):v?new RegExp($I(v),"i").test(l("label",p)||""):!0,onNodeClick:(v,p,g)=>{var m,b,_;if((m=t.onNodeClick)==null||m.call(t,v,p,g),!(e.showCheckbox&&e.checkOnClickNode))if(!e.showCheckbox&&(e.checkStrictly||p.isLeaf)){if(!l("disabled",v)){const w=(b=a.value)==null?void 0:b.states.options.get(l("value",v));(_=a.value)==null||_.handleOptionSelect(w)}}else e.expandOnClickNode&&g.proxy.handleExpandIconClick()},onCheck:(v,p)=>{var S;if(!e.showCheckbox)return;const g=l("value",v),m={};t1([i.value.store.root],x=>m[x.key]=x,x=>x.childNodes);const b=p.checkedKeys,_=e.multiple?Qf(e.modelValue).filter(x=>!(x in m)&&!b.includes(x)):[],w=_.concat(b);if(e.checkStrictly)h(e.multiple?w:w.includes(g)?g:void 0);else if(e.multiple){const x=d();h(_.concat(x))}else{const x=e1([v],E=>!QM(l("children",E))&&!l("disabled",E),E=>l("children",E)),C=x?l("value",x):void 0,T=GE(e.modelValue)&&!!e1([v],E=>l("value",E)===e.modelValue,E=>l("children",E));h(C===e.modelValue||T?void 0:C)}Ue(()=>{var C;const x=Qf(e.modelValue);i.value.setCheckedKeys(x),(C=t.onCheck)==null||C.call(t,v,{checkedKeys:i.value.getCheckedKeys(),checkedNodes:i.value.getCheckedNodes(),halfCheckedKeys:i.value.getHalfCheckedKeys(),halfCheckedNodes:i.value.getHalfCheckedNodes()})}),(S=a.value)==null||S.focus()},onNodeExpand:(v,p,g)=>{var m;(m=t.onNodeExpand)==null||m.call(t,v,p,g),Ue(()=>{if(!e.checkStrictly&&e.lazy&&e.multiple&&p.checked){const b={},_=i.value.getCheckedKeys();t1([i.value.store.root],x=>b[x.key]=x,x=>x.childNodes);const w=Qf(e.modelValue).filter(x=>!(x in b)&&!_.includes(x)),S=d();h(w.concat(S))}})},cacheOptions:c}};var Ske=ye({props:{data:{type:Array,default:()=>[]}},setup(e){const t=Ge(Py);return _e(()=>e.data,()=>{var r;e.data.forEach(a=>{t.states.cachedOptions.has(a.value)||t.states.cachedOptions.set(a.value,a)});const n=((r=t.selectRef)==null?void 0:r.querySelectorAll("input"))||[];cn&&!Array.from(n).includes(document.activeElement)&&t.setSelected()},{flush:"post",immediate:!0}),()=>{}}}),xke=ye({name:"ElTreeSelect",inheritAttrs:!1,props:{...n9,...h7,cacheData:{type:Array,default:()=>[]}},setup(e,t){const{slots:n,expose:r,emit:a,attrs:i}=t,o={...i,onChange:void 0},s=H(),l=H(),u=M(()=>e.nodeKey||e.valueKey||"value"),c=bke(e,{attrs:i,emit:a},{select:s,tree:l,key:u}),{cacheOptions:d,...f}=wke(e,{attrs:o,slots:n,emit:a},{select:s,tree:l,key:u}),h=Qt({});return r(h),St(()=>{Object.assign(h,{...Ul(l.value,["filter","updateKeyChildren","getCheckedNodes","setCheckedNodes","getCheckedKeys","setCheckedKeys","setChecked","getHalfCheckedNodes","getHalfCheckedKeys","getCurrentKey","getCurrentNode","setCurrentKey","setCurrentNode","getNode","remove","append","insertBefore","insertAfter"]),...Ul(s.value,["focus","blur","selectedLabel"]),treeRef:l.value,selectRef:s.value})}),()=>ot(bc,Qt({...c,ref:v=>s.value=v}),{...n,default:()=>[ot(Ske,{data:d.value}),ot(JM,Qt({...f,ref:v=>l.value=v}))]})}}),Cke=xke;const Tke=xt(Cke),eP=Symbol(),Eke={key:-1,level:-1,data:{}},y7={type:Number,default:26},kke=Oe({data:{type:oe(Array),default:()=>sr([])},emptyText:{type:String},height:{type:Number,default:200},props:{type:oe(Object),default:()=>sr({children:"children",label:"label",disabled:"disabled",value:"id",class:""})},highlightCurrent:Boolean,showCheckbox:Boolean,defaultCheckedKeys:{type:oe(Array),default:()=>sr([])},checkStrictly:Boolean,defaultExpandedKeys:{type:oe(Array),default:()=>sr([])},indent:{type:Number,default:16},itemSize:y7,icon:{type:An},expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkOnClickLeaf:{type:Boolean,default:!0},currentNodeKey:{type:oe([String,Number])},accordion:Boolean,filterMethod:{type:oe(Function)},perfMode:{type:Boolean,default:!0},scrollbarAlwaysOn:Boolean}),Ake=Oe({node:{type:oe(Object),default:()=>sr(Eke)},expanded:Boolean,checked:Boolean,indeterminate:Boolean,showCheckbox:Boolean,disabled:Boolean,current:Boolean,hiddenExpandIcon:Boolean,itemSize:y7}),Ike=Oe({node:{type:oe(Object),required:!0}}),b7="node-click",_7="node-drop",w7="node-expand",S7="node-collapse",x7="current-change",C7="check",T7="check-change",E7="node-contextmenu",Mke={[b7]:(e,t,n)=>e&&t&&n,[_7]:(e,t,n)=>e&&t&&n,[w7]:(e,t)=>e&&t,[S7]:(e,t)=>e&&t,[x7]:(e,t)=>e&&t,[C7]:(e,t)=>e&&t,[T7]:(e,t)=>e&&En(t),[E7]:(e,t,n)=>e&&t&&n},Pke={click:(e,t)=>!!(e&&t),drop:(e,t)=>!!(e&&t),toggle:e=>!!e,check:(e,t)=>e&&En(t)};function Lke(e,t){const n=H(new Set),r=H(new Set),{emit:a}=Tt();_e([()=>t.value,()=>e.defaultCheckedKeys],()=>Ue(()=>{b(e.defaultCheckedKeys)}),{immediate:!0});const i=(_=!1)=>{if(!t.value||!e.showCheckbox||e.checkStrictly&&!_)return;const{levelTreeNodeMap:w,maxLevel:S}=t.value,x=n.value,C=new Set;for(let T=S;T>=1;--T){const E=w.get(T);E&&E.forEach(k=>{const A=k.children;let I=!k.isLeaf||k.disabled||x.has(k.key);if(A){let P=!0,R=!1;for(const O of A){const $=O.key;if(O.isEffectivelyChecked||(I=!1),x.has($))R=!0;else if(C.has($)){P=!1,R=!0;break}else P=!1}P?x.add(k.key):R?(C.add(k.key),x.delete(k.key)):(x.delete(k.key),C.delete(k.key))}k.isEffectivelyChecked=I})}r.value=C},o=_=>n.value.has(_.key),s=_=>r.value.has(_.key),l=(_,w,S=!0,x=!0,C=!1)=>{const T=n.value,E=_.children;(!e.checkStrictly||C)&&S&&(E!=null&&E.length)&&(w=E.some(A=>!A.isEffectivelyChecked));const k=(A,I)=>{T[I?"add":"delete"](A.key);const P=A.children;(!e.checkStrictly||C)&&P&&P.forEach(R=>{(!R.disabled||R.children)&&k(R,I)})};k(_,w),x&&i(),S&&u(_,w)},u=(_,w)=>{const{checkedNodes:S,checkedKeys:x}=v(),{halfCheckedNodes:C,halfCheckedKeys:T}=p();a(C7,_.data,{checkedKeys:x,checkedNodes:S,halfCheckedKeys:T,halfCheckedNodes:C}),a(T7,_.data,w)};function c(_=!1){return v(_).checkedKeys}function d(_=!1){return v(_).checkedNodes}function f(){return p().halfCheckedKeys}function h(){return p().halfCheckedNodes}function v(_=!1){const w=[],S=[];if(t!=null&&t.value&&e.showCheckbox){const{treeNodeMap:x}=t.value;n.value.forEach(C=>{const T=x.get(C);T&&(!_||_&&T.isLeaf)&&(S.push(C),w.push(T.data))})}return{checkedKeys:S,checkedNodes:w}}function p(){const _=[],w=[];if(t!=null&&t.value&&e.showCheckbox){const{treeNodeMap:S}=t.value;r.value.forEach(x=>{const C=S.get(x);C&&(w.push(x),_.push(C.data))})}return{halfCheckedNodes:_,halfCheckedKeys:w}}function g(_){n.value.clear(),r.value.clear(),Ue(()=>{b(_)})}function m(_,w,S){if(t!=null&&t.value&&e.showCheckbox){const x=t.value.treeNodeMap.get(_);x&&l(x,w,!1,void 0,S)}}function b(_){if(t!=null&&t.value){const{treeNodeMap:w}=t.value;if(e.showCheckbox&&w&&(_==null?void 0:_.length)>0){for(const S of _){const x=w.get(S);x&&!o(x)&&l(x,!0,!1,!1)}i()}}}return{updateCheckedKeys:i,toggleCheckbox:l,isChecked:o,isIndeterminate:s,getCheckedKeys:c,getCheckedNodes:d,getHalfCheckedKeys:f,getHalfCheckedNodes:h,setChecked:m,setCheckedKeys:g}}function Dke(e,t){const n=H(new Set([])),r=H(new Set([])),a=M(()=>et(e.filterMethod));function i(s){var p;if(!a.value)return;const l=new Set,u=r.value,c=n.value,d=[],f=((p=t.value)==null?void 0:p.treeNodes)||[],h=e.filterMethod;c.clear();function v(g){g.forEach(m=>{d.push(m),h!=null&&h(s,m.data,m)?d.forEach(_=>{l.add(_.key),_.expanded=!0}):(m.expanded=!1,m.isLeaf&&c.add(m.key));const b=m.children;if(b&&v(b),!m.isLeaf){if(!l.has(m.key))c.add(m.key);else if(b){let _=!0;for(const w of b)if(!c.has(w.key)){_=!1;break}_?u.add(m.key):u.delete(m.key)}}d.pop()})}return v(f),l}function o(s){return r.value.has(s.key)}return{hiddenExpandIconKeySet:r,hiddenNodeKeySet:n,doFilter:i,isForceHiddenExpandIcon:o}}function Rke(e,t){const n=H(new Set),r=H(),a=Ut(),i=H(),{isIndeterminate:o,isChecked:s,toggleCheckbox:l,getCheckedKeys:u,getCheckedNodes:c,getHalfCheckedKeys:d,getHalfCheckedNodes:f,setChecked:h,setCheckedKeys:v}=Lke(e,a),{doFilter:p,hiddenNodeKeySet:g,isForceHiddenExpandIcon:m}=Dke(e,a),b=M(()=>{var Z;return((Z=e.props)==null?void 0:Z.value)||"id"}),_=M(()=>{var Z;return((Z=e.props)==null?void 0:Z.children)||"children"}),w=M(()=>{var Z;return((Z=e.props)==null?void 0:Z.disabled)||"disabled"}),S=M(()=>{var Z;return((Z=e.props)==null?void 0:Z.label)||"label"}),x=M(()=>{var pe;const Z=n.value,U=g.value,te=[],Q=((pe=a.value)==null?void 0:pe.treeNodes)||[],ue=[];for(let me=Q.length-1;me>=0;--me)ue.push(Q[me]);for(;ue.length;){const me=ue.pop();if(!U.has(me.key)&&(te.push(me),me.children&&Z.has(me.key)))for(let Pe=me.children.length-1;Pe>=0;--Pe)ue.push(me.children[Pe])}return te}),C=M(()=>x.value.length>0);function T(Z){const U=new Map,te=new Map;let Q=1;function ue(me,Pe=1,Ne=void 0){var ae;const ie=[];for(const ge of me){const be=A(ge),$e={level:Pe,key:be,data:ge};$e.label=P(ge),$e.parent=Ne;const Re=k(ge);$e.disabled=I(ge),$e.isLeaf=!Re||Re.length===0,$e.expanded=n.value.has(be),Re&&Re.length&&($e.children=ue(Re,Pe+1,$e)),ie.push($e),U.set(be,$e),te.has(Pe)||te.set(Pe,[]),(ae=te.get(Pe))==null||ae.push($e)}return Pe>Q&&(Q=Pe),ie}const pe=ue(Z);return{treeNodeMap:U,levelTreeNodeMap:te,maxLevel:Q,treeNodes:pe}}function E(Z){const U=p(Z);U&&(n.value=U)}function k(Z){return Z[_.value]}function A(Z){return Z?Z[b.value]:""}function I(Z){return Z[w.value]}function P(Z){return Z[S.value]}function R(Z){n.value.has(Z.key)?z(Z):W(Z)}function O(Z){const U=new Set,te=a.value.treeNodeMap;n.value.forEach(Q=>{const ue=te.get(Q);ue&&(ue.expanded=!1)}),Z.forEach(Q=>{let ue=te.get(Q);for(;ue&&!U.has(ue.key);)U.add(ue.key),ue.expanded=!0,ue=ue.parent}),n.value=U}function $(Z,U){D(Z),t(b7,Z.data,Z,U),e.expandOnClickNode&&R(Z),e.showCheckbox&&(e.checkOnClickNode||Z.isLeaf&&e.checkOnClickLeaf)&&!Z.disabled&&l(Z,!s(Z),!0)}function N(Z,U){t(_7,Z.data,Z,U)}function D(Z){q(Z)||(r.value=Z.key,t(x7,Z.data,Z))}function F(Z,U){l(Z,U)}function W(Z){const U=n.value;if(a.value&&e.accordion){const{treeNodeMap:Q}=a.value;U.forEach(ue=>{const pe=Q.get(ue);Z&&Z.level===(pe==null?void 0:pe.level)&&(U.delete(ue),pe.expanded=!1)})}U.add(Z.key);const te=de(Z.key);te&&(te.expanded=!0,t(w7,te.data,te))}function z(Z){n.value.delete(Z.key);const U=de(Z.key);U&&(U.expanded=!1,t(S7,U.data,U))}function Y(Z){return!!Z.disabled}function q(Z){const U=r.value;return U!==void 0&&U===Z.key}function re(){var Z,U;if(r.value!==void 0)return(U=(Z=a.value)==null?void 0:Z.treeNodeMap.get(r.value))==null?void 0:U.data}function ee(){return r.value}function se(Z){r.value=Z}function ne(Z){a.value=T(Z)}function de(Z){var te;const U=yt(Z)?A(Z):Z;return(te=a.value)==null?void 0:te.treeNodeMap.get(U)}function le(Z,U="auto"){const te=de(Z);te&&i.value&&i.value.scrollToItem(x.value.indexOf(te),U)}function J(Z){var U;(U=i.value)==null||U.scrollTo(Z)}return _e(()=>e.currentNodeKey,Z=>{r.value=Z},{immediate:!0}),_e(()=>e.defaultExpandedKeys,Z=>{O(Z||[])}),_e(()=>e.data,Z=>{ne(Z),O(e.defaultExpandedKeys||[])},{immediate:!0}),{tree:a,flattenTree:x,isNotEmpty:C,listRef:i,getKey:A,getChildren:k,toggleExpand:R,toggleCheckbox:l,isChecked:s,isIndeterminate:o,isDisabled:Y,isCurrent:q,isForceHiddenExpandIcon:m,handleNodeClick:$,handleNodeDrop:N,handleNodeCheck:F,getCurrentNode:re,getCurrentKey:ee,setCurrentKey:se,getCheckedKeys:u,getCheckedNodes:c,getHalfCheckedKeys:d,getHalfCheckedNodes:f,setChecked:h,setCheckedKeys:v,filter:E,setData:ne,getNode:de,expandNode:W,collapseNode:z,setExpandedKeys:O,scrollToNode:le,scrollTo:J}}var Oke=ye({name:"ElTreeNodeContent",props:Ike,setup(e){const t=Ge(eP),n=Ee("tree");return()=>{const r=e.node,{data:a}=r;return t!=null&&t.ctx.slots.default?t.ctx.slots.default({node:r,data:a}):ot(qM,{tag:"span",truncated:!0,class:n.be("node","label")},()=>[r==null?void 0:r.label])}}});const Nke=["aria-expanded","aria-disabled","aria-checked","data-key"];var Vke=ye({name:"ElTreeNode",__name:"tree-node",props:Ake,emits:Pke,setup(e,{emit:t}){const n=e,r=t,a=Ge(eP),i=Ee("tree"),o=M(()=>(a==null?void 0:a.props.indent)??16),s=M(()=>(a==null?void 0:a.props.icon)??rG),l=v=>{var m;const p=(m=a==null?void 0:a.props.props)==null?void 0:m.class;if(!p)return{};let g;if(et(p)){const{data:b}=v;g=p(b,v)}else g=p;return qe(g)?{[g]:!0}:g},u=v=>{r("click",n.node,v)},c=v=>{r("drop",n.node,v)},d=()=>{r("toggle",n.node)},f=v=>{r("check",n.node,v)},h=v=>{var p,g,m,b;(m=(g=(p=a==null?void 0:a.instance)==null?void 0:p.vnode)==null?void 0:g.props)!=null&&m.onNodeContextmenu&&(v.stopPropagation(),v.preventDefault()),a==null||a.ctx.emit(E7,v,(b=n.node)==null?void 0:b.data,n.node)};return(v,p)=>{var g,m,b;return L(),K("div",{ref:"node$",class:B([y(i).b("node"),y(i).is("expanded",e.expanded),y(i).is("current",e.current),y(i).is("focusable",!e.disabled),y(i).is("checked",!e.disabled&&e.checked),l(e.node)]),role:"treeitem",tabindex:"-1","aria-expanded":e.expanded,"aria-disabled":e.disabled,"aria-checked":e.checked,"data-key":(g=e.node)==null?void 0:g.key,onClick:ut(u,["stop"]),onContextmenu:h,onDragover:p[1]||(p[1]=ut(()=>{},["prevent"])),onDragenter:p[2]||(p[2]=ut(()=>{},["prevent"])),onDrop:ut(c,["stop"])},[j("div",{class:B(y(i).be("node","content")),style:tt({paddingLeft:`${(e.node.level-1)*o.value}px`,height:e.itemSize+"px"})},[s.value?(L(),ve(y(Ze),{key:0,class:B([y(i).is("leaf",!!((m=e.node)!=null&&m.isLeaf)),y(i).is("hidden",e.hiddenExpandIcon),{expanded:!((b=e.node)!=null&&b.isLeaf)&&e.expanded},y(i).be("node","expand-icon")]),onClick:ut(d,["stop"])},{default:G(()=>[(L(),ve(Et(s.value)))]),_:1},8,["class"])):fe("v-if",!0),e.showCheckbox?(L(),ve(y(Qs),{key:1,"model-value":e.checked,indeterminate:e.indeterminate,disabled:e.disabled,onChange:f,onClick:p[0]||(p[0]=ut(()=>{},["stop"]))},null,8,["model-value","indeterminate","disabled"])):fe("v-if",!0),V(y(Oke),{node:{...e.node,expanded:e.expanded}},null,8,["node"])],6)],42,Nke)}}}),$ke=Vke,Bke=ye({name:"ElTreeV2",__name:"tree",props:kke,emits:Mke,setup(e,{expose:t,emit:n}){const r=e,a=n,i=pr(),o=M(()=>r.itemSize);Ft(eP,{ctx:{emit:a,slots:i},props:r,instance:Tt()}),Ft(Js,void 0);const{t:s}=Yt(),l=Ee("tree"),{flattenTree:u,isNotEmpty:c,listRef:d,toggleExpand:f,isIndeterminate:h,isChecked:v,isDisabled:p,isCurrent:g,isForceHiddenExpandIcon:m,handleNodeClick:b,handleNodeDrop:_,handleNodeCheck:w,toggleCheckbox:S,getCurrentNode:x,getCurrentKey:C,setCurrentKey:T,getCheckedKeys:E,getCheckedNodes:k,getHalfCheckedKeys:A,getHalfCheckedNodes:I,setChecked:P,setCheckedKeys:R,filter:O,setData:$,getNode:N,expandNode:D,collapseNode:F,setExpandedKeys:W,scrollToNode:z,scrollTo:Y}=Rke(r,a);return t({toggleCheckbox:S,getCurrentNode:x,getCurrentKey:C,setCurrentKey:T,getCheckedKeys:E,getCheckedNodes:k,getHalfCheckedKeys:A,getHalfCheckedNodes:I,setChecked:P,setCheckedKeys:R,filter:O,setData:$,getNode:N,expandNode:D,collapseNode:F,setExpandedKeys:W,scrollToNode:z,scrollTo:Y}),(q,re)=>(L(),K("div",{class:B([y(l).b(),{[y(l).m("highlight-current")]:e.highlightCurrent}]),role:"tree"},[y(c)?(L(),ve(y(Zw),{key:0,ref_key:"listRef",ref:d,"class-name":y(l).b("virtual-list"),data:y(u),total:y(u).length,height:e.height,"item-size":o.value,"perf-mode":e.perfMode,"scrollbar-always-on":e.scrollbarAlwaysOn},{default:G(({data:ee,index:se,style:ne})=>[(L(),ve($ke,{key:ee[se].key,style:tt(ne),node:ee[se],expanded:ee[se].expanded,"show-checkbox":e.showCheckbox,checked:y(v)(ee[se]),indeterminate:y(h)(ee[se]),"item-size":o.value,disabled:y(p)(ee[se]),current:y(g)(ee[se]),"hidden-expand-icon":y(m)(ee[se]),onClick:y(b),onToggle:y(f),onCheck:y(w),onDrop:y(_)},null,8,["style","node","expanded","show-checkbox","checked","indeterminate","item-size","disabled","current","hidden-expand-icon","onClick","onToggle","onCheck","onDrop"]))]),_:1},8,["class-name","data","total","height","item-size","perf-mode","scrollbar-always-on"])):(L(),K("div",{key:1,class:B(y(l).e("empty-block"))},[he(q.$slots,"empty",{},()=>[j("span",{class:B(y(l).e("empty-text"))},ce(e.emptyText??y(s)("el.tree.emptyText")),3)])],2))],2))}}),Fke=Bke;const zke=xt(Fke),Hke="ElUpload";var Wke=class extends Error{constructor(e,t,n,r){super(e),this.name="UploadAjaxError",this.status=t,this.method=n,this.url=r}};function uV(e,t,n){let r;return n.response?r=`${n.response.error||n.response}`:n.responseText?r=`${n.responseText}`:r=`fail to ${t.method} ${e} ${n.status}`,new Wke(r,n.status,t.method,e)}function Gke(e){const t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch{return t}}const Uke=e=>{typeof XMLHttpRequest>"u"&&nr(Hke,"XMLHttpRequest is undefined");const t=new XMLHttpRequest,n=e.action;t.upload&&t.upload.addEventListener("progress",i=>{const o=i;o.percent=i.total>0?i.loaded/i.total*100:0,e.onProgress(o)});const r=new FormData;if(e.data)for(const[i,o]of Object.entries(e.data))Me(o)?o.length===2&&o[0]instanceof Blob&&qe(o[1])?r.append(i,o[0],o[1]):o.forEach(s=>{r.append(i,s)}):r.append(i,o);r.append(e.filename,e.file,e.file.name),t.addEventListener("error",()=>{e.onError(uV(n,e,t))}),t.addEventListener("load",()=>{if(t.status<200||t.status>=300)return e.onError(uV(n,e,t));e.onSuccess(Gke(t))}),t.open(e.method,n,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);const a=e.headers||{};if(a instanceof Headers)a.forEach((i,o)=>t.setRequestHeader(o,i));else for(const[i,o]of Object.entries(a))wr(o)||t.setRequestHeader(i,String(o));return t.send(r),t},k7=["text","picture","picture-card"];let Kke=1;const UE=()=>Date.now()+Kke++,A7=Oe({action:{type:String,default:"#"},headers:{type:oe(Object)},method:{type:String,default:"post"},data:{type:oe([Object,Function,Promise]),default:()=>sr({})},multiple:Boolean,name:{type:String,default:"file"},drag:Boolean,withCredentials:Boolean,showFileList:{type:Boolean,default:!0},accept:{type:String,default:""},fileList:{type:oe(Array),default:()=>sr([])},autoUpload:{type:Boolean,default:!0},listType:{type:String,values:k7,default:"text"},httpRequest:{type:oe(Function),default:Uke},disabled:{type:Boolean,default:void 0},limit:Number,directory:Boolean}),Yke=Oe({...A7,beforeUpload:{type:oe(Function),default:It},beforeRemove:{type:oe(Function)},onRemove:{type:oe(Function),default:It},onChange:{type:oe(Function),default:It},onPreview:{type:oe(Function),default:It},onSuccess:{type:oe(Function),default:It},onProgress:{type:oe(Function),default:It},onError:{type:oe(Function),default:It},onExceed:{type:oe(Function),default:It},crossorigin:{type:oe(String)}}),I7=Symbol("uploadContextKey"),jke=Oe({files:{type:oe(Array),default:()=>sr([])},disabled:{type:Boolean,default:void 0},handlePreview:{type:oe(Function),default:It},listType:{type:String,values:k7,default:"text"},crossorigin:{type:oe(String)}}),qke={remove:e=>!!e},Xke=Oe({...A7,beforeUpload:{type:oe(Function),default:It},onRemove:{type:oe(Function),default:It},onStart:{type:oe(Function),default:It},onSuccess:{type:oe(Function),default:It},onProgress:{type:oe(Function),default:It},onError:{type:oe(Function),default:It},onExceed:{type:oe(Function),default:It}}),Zke=Oe({disabled:{type:Boolean,default:void 0},directory:Boolean}),Jke={file:e=>Me(e)},Qke=["tabindex","aria-disabled","onKeydown"],eAe=["src","crossorigin"],tAe=["onClick"],nAe=["title"],rAe=["onClick"],aAe=["onClick"];var iAe=ye({name:"ElUploadList",__name:"upload-list",props:jke,emits:qke,setup(e,{emit:t}){const n=e,r=t,{t:a}=Yt(),i=Ee("upload"),o=Ee("icon"),s=Ee("list"),l=ar(),u=H(!1),c=M(()=>[i.b("list"),i.bm("list",n.listType),i.is("disabled",l.value)]),d=f=>{r("remove",f)};return(f,h)=>(L(),ve(dH,{tag:"ul",class:B(c.value),name:y(s).b()},{default:G(()=>[(L(!0),K(ze,null,Lt(e.files,(v,p)=>(L(),K("li",{key:v.uid||v.name,class:B([y(i).be("list","item"),y(i).is(v.status),{focusing:u.value}]),tabindex:y(l)?void 0:0,"aria-disabled":y(l),role:"button",onKeydown:Yn(g=>!y(l)&&d(v),["delete"]),onFocus:h[0]||(h[0]=g=>u.value=!0),onBlur:h[1]||(h[1]=g=>u.value=!1),onClick:h[2]||(h[2]=g=>u.value=!1)},[he(f.$slots,"default",{file:v,index:p},()=>[e.listType==="picture"||v.status!=="uploading"&&e.listType==="picture-card"?(L(),K("img",{key:0,class:B(y(i).be("list","item-thumbnail")),src:v.url,crossorigin:e.crossorigin,alt:""},null,10,eAe)):fe("v-if",!0),v.status==="uploading"||e.listType!=="picture-card"?(L(),K("div",{key:1,class:B(y(i).be("list","item-info"))},[j("a",{class:B(y(i).be("list","item-name")),onClick:ut(g=>e.handlePreview(v),["prevent"])},[V(y(Ze),{class:B(y(o).m("document"))},{default:G(()=>[V(y(xde))]),_:1},8,["class"]),j("span",{class:B(y(i).be("list","item-file-name")),title:v.name},ce(v.name),11,nAe)],10,tAe),v.status==="uploading"?(L(),ve(y(RU),{key:0,type:e.listType==="picture-card"?"circle":"line","stroke-width":e.listType==="picture-card"?6:2,percentage:Number(v.percentage),style:tt(e.listType==="picture-card"?"":"margin-top: 0.5rem")},null,8,["type","stroke-width","percentage","style"])):fe("v-if",!0)],2)):fe("v-if",!0),j("label",{class:B(y(i).be("list","item-status-label"))},[e.listType==="text"?(L(),ve(y(Ze),{key:0,class:B([y(o).m("upload-success"),y(o).m("circle-check")])},{default:G(()=>[V(y(rM))]),_:1},8,["class"])):["picture-card","picture"].includes(e.listType)?(L(),ve(y(Ze),{key:1,class:B([y(o).m("upload-success"),y(o).m("check")])},{default:G(()=>[V(y(mv))]),_:1},8,["class"])):fe("v-if",!0)],2),y(l)?fe("v-if",!0):(L(),ve(y(Ze),{key:2,class:B(y(o).m("close")),"aria-label":y(a)("el.upload.delete"),role:"button",tabindex:"0",onClick:g=>d(v),onKeydown:Yn(ut(g=>d(v),["prevent"]),["enter","space"])},{default:G(()=>[V(y(To))]),_:1},8,["class","aria-label","onClick","onKeydown"])),y(l)?fe("v-if",!0):(L(),K("i",{key:3,class:B(y(o).m("close-tip"))},ce(y(a)("el.upload.deleteTip")),3)),e.listType==="picture-card"?(L(),K("span",{key:4,class:B(y(i).be("list","item-actions"))},[j("span",{class:B(y(i).be("list","item-preview")),onClick:g=>e.handlePreview(v)},[V(y(Ze),{class:B(y(o).m("zoom-in"))},{default:G(()=>[V(y(sG))]),_:1},8,["class"])],10,rAe),y(l)?fe("v-if",!0):(L(),K("span",{key:0,class:B(y(i).be("list","item-delete")),onClick:g=>d(v)},[V(y(Ze),{class:B(y(o).m("delete"))},{default:G(()=>[V(y(wde))]),_:1},8,["class"])],10,aAe))],2)):fe("v-if",!0)])],42,Qke))),128)),he(f.$slots,"append")]),_:3},8,["class","name"]))}}),cV=iAe;const dV="ElUploadDrag";var oAe=ye({name:dV,__name:"upload-dragger",props:Zke,emits:Jke,setup(e,{emit:t}){const n=e,r=t;Ge(I7)||nr(dV,"usage: ");const a=Ee("upload"),i=H(!1),o=ar(),s=f=>new Promise((h,v)=>f.file(h,v)),l=async f=>{try{if(f.isFile){const h=await s(f);return h.isDirectory=!1,[h]}if(f.isDirectory){const h=f.createReader(),v=()=>new Promise((b,_)=>h.readEntries(b,_)),p=[];let g=await v();for(;g.length>0;)p.push(...g),g=await v();const m=p.map(b=>l(b).catch(()=>[]));return $1(await Promise.all(m))}}catch{return[]}return[]},u=async f=>{if(o.value)return;i.value=!1,f.stopPropagation();const h=Array.from(f.dataTransfer.files),v=f.dataTransfer.items||[];if(n.directory){const p=Array.from(v).map(g=>{var m;return(m=g==null?void 0:g.webkitGetAsEntry)==null?void 0:m.call(g)}).filter(g=>g);r("file",$1(await Promise.all(p.map(l))));return}h.forEach((p,g)=>{var b,_;const m=(_=(b=v[g])==null?void 0:b.webkitGetAsEntry)==null?void 0:_.call(b);m&&(p.isDirectory=m.isDirectory)}),r("file",h)},c=()=>{o.value||(i.value=!0)},d=f=>{f.currentTarget.contains(f.relatedTarget)||(i.value=!1)};return(f,h)=>(L(),K("div",{class:B([y(a).b("dragger"),y(a).is("dragover",i.value)]),onDrop:ut(u,["prevent"]),onDragover:ut(c,["prevent"]),onDragleave:ut(d,["prevent"])},[he(f.$slots,"default")],34))}}),sAe=oAe;const lAe=["tabindex","aria-disabled","onKeydown"],uAe=["name","disabled","multiple","accept","webkitdirectory"];var cAe=ye({name:"ElUploadContent",inheritAttrs:!1,__name:"upload-content",props:Xke,setup(e,{expose:t}){const n=e,r=Ee("upload"),a=ar(),i=Ut({}),o=Ut(),s=p=>{if(p.length===0)return;const{autoUpload:g,limit:m,fileList:b,multiple:_,onStart:w,onExceed:S}=n;if(m&&b.length+p.length>m){S(p,b);return}_||(p=p.slice(0,1));for(const x of p){const C=x;C.uid=UE(),w(C),g&&l(C)}},l=async p=>{if(o.value.value="",!n.beforeUpload)return c(p);let g,m={};try{const _=n.data,w=n.beforeUpload(p);m=Qg(n.data)?Ps(n.data):n.data,g=await w,Qg(n.data)&&or(_,m)&&(m=Ps(n.data))}catch{g=!1}if(g===!1){n.onRemove(p);return}let b=p;g instanceof Blob&&(g instanceof File?b=g:b=new File([g],p.name,{type:p.type})),c(Object.assign(b,{uid:p.uid}),m)},u=async(p,g)=>et(p)?p(g):p,c=async(p,g)=>{const{headers:m,data:b,method:_,withCredentials:w,name:S,action:x,onProgress:C,onSuccess:T,onError:E,httpRequest:k}=n;try{g=await u(g??b,p)}catch{n.onRemove(p);return}const{uid:A}=p,I={headers:m||{},withCredentials:w,file:p,data:g,method:_,filename:S,action:x,onProgress:R=>{C(R,p)},onSuccess:R=>{T(R,p),delete i.value[A]},onError:R=>{E(R,p),delete i.value[A]}},P=k(I);i.value[A]=P,P instanceof Promise&&P.then(I.onSuccess,I.onError)},d=p=>{const g=p.target.files;g&&s(Array.from(g))},f=()=>{a.value||(o.value.value="",o.value.click())},h=()=>{f()};return t({abort:p=>{oW(i.value).filter(p?([g])=>String(p.uid)===g:()=>!0).forEach(([g,m])=>{m instanceof XMLHttpRequest&&m.abort(),delete i.value[g]})},upload:l}),(p,g)=>(L(),K("div",{class:B([y(r).b(),y(r).m(e.listType),y(r).is("drag",e.drag),y(r).is("disabled",y(a))]),tabindex:y(a)?void 0:0,"aria-disabled":y(a),role:"button",onClick:f,onKeydown:Yn(ut(h,["self"]),["enter","space"])},[e.drag?(L(),ve(sAe,{key:0,disabled:y(a),directory:e.directory,onFile:s},{default:G(()=>[he(p.$slots,"default")]),_:3},8,["disabled","directory"])):he(p.$slots,"default",{key:1}),j("input",{ref_key:"inputRef",ref:o,class:B(y(r).e("input")),name:e.name,disabled:y(a),multiple:e.multiple,accept:e.accept,webkitdirectory:e.directory||void 0,type:"file",onChange:d,onClick:g[0]||(g[0]=ut(()=>{},["stop"]))},null,42,uAe)],42,lAe))}}),fV=cAe;const hV="ElUpload",vV=e=>{var t;(t=e.url)!=null&&t.startsWith("blob:")&&URL.revokeObjectURL(e.url)},dAe=(e,t)=>{const n=Sle(e,"fileList",void 0,{passive:!0}),r=v=>n.value.find(p=>p.uid===v.uid);function a(v){var p;(p=t.value)==null||p.abort(v)}function i(v=["ready","uploading","success","fail"]){n.value=n.value.filter(p=>!v.includes(p.status))}function o(v){n.value=n.value.filter(p=>p.uid!==v.uid)}const s=v=>{Ue(()=>e.onChange(v,n.value))},l=(v,p)=>{const g=r(p);g&&(console.error(v),g.status="fail",o(g),e.onError(v,g,n.value),s(g))},u=(v,p)=>{const g=r(p);g&&(e.onProgress(v,g,n.value),g.status="uploading",g.percentage=Math.round(v.percent))},c=(v,p)=>{const g=r(p);g&&(g.status="success",g.response=v,e.onSuccess(v,g,n.value),s(g))},d=v=>{wr(v.uid)&&(v.uid=UE());const p={name:v.name,percentage:0,status:"ready",size:v.size,raw:v,uid:v.uid};if(e.listType==="picture-card"||e.listType==="picture")try{p.url=URL.createObjectURL(v)}catch(g){wn(hV,g.message),e.onError(g,p,n.value)}n.value=[...n.value,p],s(p)},f=async v=>{const p=v instanceof File?r(v):v;p||nr(hV,"file to be removed not found");const g=m=>{a(m),o(m),e.onRemove(m,n.value),vV(m)};e.beforeRemove?await e.beforeRemove(p,n.value)!==!1&&g(p):g(p)};function h(){n.value.filter(({status:v})=>v==="ready").forEach(({raw:v})=>{var p;return v&&((p=t.value)==null?void 0:p.upload(v))})}return _e(()=>e.listType,v=>{v!=="picture-card"&&v!=="picture"||(n.value=n.value.map(p=>{const{raw:g,url:m}=p;if(!m&&g)try{p.url=URL.createObjectURL(g)}catch(b){e.onError(b,p,n.value)}return p}))}),_e(n,v=>{for(const p of v)p.uid||(p.uid=UE()),p.status||(p.status="success")},{immediate:!0,deep:!0}),{uploadFiles:n,abort:a,clearFiles:i,handleError:l,handleProgress:u,handleStart:d,handleSuccess:c,handleRemove:f,submit:h,revokeFileObjectURL:vV}};var fAe=ye({name:"ElUpload",__name:"upload",props:Yke,setup(e,{expose:t}){const n=e,r=ar(),a=Ut(),{abort:i,submit:o,clearFiles:s,uploadFiles:l,handleStart:u,handleError:c,handleRemove:d,handleSuccess:f,handleProgress:h,revokeFileObjectURL:v}=dAe(n,a),p=M(()=>n.listType==="picture-card"),g=M(()=>({...n,fileList:l.value,onStart:u,onProgress:h,onSuccess:f,onError:c,onRemove:d}));return yn(()=>{l.value.forEach(v)}),Ft(I7,{accept:xn(n,"accept")}),t({abort:i,submit:o,clearFiles:s,handleStart:u,handleRemove:d}),(m,b)=>(L(),K("div",null,[p.value&&e.showFileList?(L(),ve(cV,{key:0,disabled:y(r),"list-type":e.listType,files:y(l),crossorigin:e.crossorigin,"handle-preview":e.onPreview,onRemove:y(d)},ui({append:G(()=>[V(fV,Mt({ref_key:"uploadRef",ref:a},g.value),{default:G(()=>[m.$slots.trigger?he(m.$slots,"trigger",{key:0}):fe("v-if",!0),!m.$slots.trigger&&m.$slots.default?he(m.$slots,"default",{key:1}):fe("v-if",!0)]),_:3},16)]),_:2},[m.$slots.file?{name:"default",fn:G(({file:_,index:w})=>[he(m.$slots,"file",{file:_,index:w})]),key:"0"}:void 0]),1032,["disabled","list-type","files","crossorigin","handle-preview","onRemove"])):fe("v-if",!0),!p.value||p.value&&!e.showFileList?(L(),ve(fV,Mt({key:1,ref_key:"uploadRef",ref:a},g.value),{default:G(()=>[m.$slots.trigger?he(m.$slots,"trigger",{key:0}):fe("v-if",!0),!m.$slots.trigger&&m.$slots.default?he(m.$slots,"default",{key:1}):fe("v-if",!0)]),_:3},16)):fe("v-if",!0),m.$slots.trigger?he(m.$slots,"default",{key:2}):fe("v-if",!0),he(m.$slots,"tip"),!p.value&&e.showFileList?(L(),ve(cV,{key:3,disabled:y(r),"list-type":e.listType,files:y(l),crossorigin:e.crossorigin,"handle-preview":e.onPreview,onRemove:y(d)},ui({_:2},[m.$slots.file?{name:"default",fn:G(({file:_,index:w})=>[he(m.$slots,"file",{file:_,index:w})]),key:"0"}:void 0]),1032,["disabled","list-type","files","crossorigin","handle-preview","onRemove"])):fe("v-if",!0)]))}}),hAe=fAe;const vAe=xt(hAe),pAe=Oe({zIndex:{type:Number,default:9},rotate:{type:Number,default:-22},width:Number,height:Number,image:String,content:{type:oe([String,Array]),default:"Element Plus"},font:{type:oe(Object)},gap:{type:oe(Array),default:()=>[100,100]},offset:{type:oe(Array)}});function gAe(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}function mAe(e){return Object.keys(e).map(t=>`${gAe(t)}: ${e[t]};`).join(" ")}function yAe(){return window.devicePixelRatio||1}const bAe=(e,t)=>{let n=!1;return e.removedNodes.length&&t&&(n=Array.from(e.removedNodes).includes(t)),e.type==="attributes"&&e.target===t&&(n=!0),n},_Ae={left:[0,.5],start:[0,.5],center:[.5,0],right:[1,-.5],end:[1,-.5]};function Ux(e,t,n=1){const r=document.createElement("canvas"),a=r.getContext("2d"),i=e*n,o=t*n;return r.setAttribute("width",`${i}px`),r.setAttribute("height",`${o}px`),a.save(),[a,r,i,o]}function wAe(){function e(t,n,r,a,i,o,s,l,u){const[c,d,f,h]=Ux(a,i,r);let v=0;if(t instanceof HTMLImageElement)c.drawImage(t,0,0,f,h);else{const{color:Y,fontSize:q,fontStyle:re,fontWeight:ee,fontFamily:se,textAlign:ne,textBaseline:de}=o,le=Number(q)*r;c.font=`${re} normal ${ee} ${le}px/${i}px ${se}`,c.fillStyle=Y,c.textAlign=ne,c.textBaseline=de;const J=Me(t)?t:[t];if(de!=="top"&&J[0]){const Z=c.measureText(J[0]);c.textBaseline="top";const U=c.measureText(J[0]);v=Z.actualBoundingBoxAscent-U.actualBoundingBoxAscent}J==null||J.forEach((Z,U)=>{const[te,Q]=_Ae[ne];c.fillText(Z??"",f*te+u*Q,U*(le+o.fontGap*r))})}const p=Math.PI/180*Number(n),g=Math.max(a,i),[m,b,_]=Ux(g,g,r);m.translate(_/2,_/2),m.rotate(p),f>0&&h>0&&m.drawImage(d,-f/2,-h/2);function w(Y,q){return[Y*Math.cos(p)-q*Math.sin(p),Y*Math.sin(p)+q*Math.cos(p)]}let S=0,x=0,C=0,T=0;const E=f/2,k=h/2;[[0-E,0-k],[0+E,0-k],[0+E,0+k],[0-E,0+k]].forEach(([Y,q])=>{const[re,ee]=w(Y,q);S=Math.min(S,re),x=Math.max(x,re),C=Math.min(C,ee),T=Math.max(T,ee)});const A=S+_/2,I=C+_/2,P=x-S,R=T-C,O=s*r,$=l*r,N=(P+O)*2,D=R+$,[F,W]=Ux(N,D);function z(Y=0,q=0){F.drawImage(b,A,I,P,R,Y,q+v,P,R)}return z(),z(P+O,-R/2-$/2),z(P+O,+R/2+$/2),[W.toDataURL(),N/r,D/r]}return e}var SAe=ye({name:"ElWatermark",__name:"watermark",props:pAe,setup(e){const t={position:"relative"},n=e,r=M(()=>{var A;return((A=n.font)==null?void 0:A.fontGap)??3}),a=M(()=>{var A;return((A=n.font)==null?void 0:A.color)??"rgba(0,0,0,.15)"}),i=M(()=>{var A;return((A=n.font)==null?void 0:A.fontSize)??16}),o=M(()=>{var A;return((A=n.font)==null?void 0:A.fontWeight)??"normal"}),s=M(()=>{var A;return((A=n.font)==null?void 0:A.fontStyle)??"normal"}),l=M(()=>{var A;return((A=n.font)==null?void 0:A.fontFamily)??"sans-serif"}),u=M(()=>{var A;return((A=n.font)==null?void 0:A.textAlign)??"center"}),c=M(()=>{var A;return((A=n.font)==null?void 0:A.textBaseline)??"hanging"}),d=M(()=>n.gap[0]),f=M(()=>n.gap[1]),h=M(()=>d.value/2),v=M(()=>f.value/2),p=M(()=>{var A;return((A=n.offset)==null?void 0:A[0])??h.value}),g=M(()=>{var A;return((A=n.offset)==null?void 0:A[1])??v.value}),m=()=>{const A={zIndex:n.zIndex,position:"absolute",left:0,top:0,width:"100%",height:"100%",pointerEvents:"none",backgroundRepeat:"repeat"};let I=p.value-h.value,P=g.value-v.value;return I>0&&(A.left=`${I}px`,A.width=`calc(100% - ${I}px)`,I=0),P>0&&(A.top=`${P}px`,A.height=`calc(100% - ${P}px)`,P=0),A.backgroundPosition=`${I}px ${P}px`,A},b=Ut(null),_=Ut(),w=H(!1),S=()=>{_.value&&(_.value.remove(),_.value=void 0)},x=(A,I)=>{var P;b.value&&_.value&&(w.value=!0,_.value.setAttribute("style",mAe({...m(),backgroundImage:`url('${A}')`,backgroundSize:`${Math.floor(I)}px`})),(P=b.value)==null||P.append(_.value),setTimeout(()=>{w.value=!1}))},C=A=>{let I=120,P=64,R=0;const{image:O,content:$,width:N,height:D,rotate:F}=n;if(!O&&A.measureText){A.font=`${Number(i.value)}px ${l.value}`;const W=Me($)?$:[$];let z=0,Y=0;W.forEach(re=>{const{width:ee,fontBoundingBoxAscent:se,fontBoundingBoxDescent:ne,actualBoundingBoxAscent:de,actualBoundingBoxDescent:le}=A.measureText(re),J=qt(se)?de+le:se+ne;ee>z&&(z=Math.ceil(ee)),J>Y&&(Y=Math.ceil(J))}),I=z,P=Y*W.length+(W.length-1)*r.value;const q=Math.PI/180*Number(F);R=Math.ceil(Math.abs(Math.sin(q)*P)/2),I+=R}return[N??I,D??P,R]},T=wAe(),E=()=>{const A=document.createElement("canvas").getContext("2d"),I=n.image,P=n.content,R=n.rotate;if(A){_.value||(_.value=document.createElement("div"));const O=yAe(),[$,N,D]=C(A),F=W=>{const[z,Y]=T(W||"",R,O,$,N,{color:a.value,fontSize:i.value,fontStyle:s.value,fontWeight:o.value,fontFamily:l.value,fontGap:r.value,textAlign:u.value,textBaseline:c.value},d.value,f.value,D);x(z,Y)};if(I){const W=new Image;W.onload=()=>{F(W)},W.onerror=()=>{F(P)},W.crossOrigin="anonymous",W.referrerPolicy="no-referrer",W.src=I}else F(P)}};return St(()=>{E()}),_e(()=>n,()=>{E()},{deep:!0,flush:"post"}),yn(()=>{S()}),_y(b,A=>{w.value||A.forEach(I=>{bAe(I,_.value)&&(S(),E())})},{attributes:!0,subtree:!0,childList:!0}),(A,I)=>(L(),K("div",{ref_key:"containerRef",ref:b,style:tt([t])},[he(A.$slots,"default")],4))}}),xAe=SAe;const CAe=xt(xAe),TAe=["absolute","fixed"],EAe=["top-start","top-end","top","bottom-start","bottom-end","bottom","left-start","left-end","left","right-start","right-end","right"],tP=Oe({placement:{type:oe(String),values:EAe,default:"bottom"},reference:{type:oe(Object),default:null},strategy:{type:oe(String),values:TAe,default:"absolute"},offset:{type:Number,default:10},showArrow:Boolean,zIndex:{type:Number,default:2001}}),kAe={close:()=>!0},AAe=Oe({modelValue:Boolean,current:{type:Number},showArrow:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeIcon:{type:An},placement:tP.placement,contentStyle:{type:oe([Object])},mask:{type:oe([Boolean,Object]),default:!0},gap:{type:oe(Object),default:()=>({offset:6,radius:2})},zIndex:{type:Number},scrollIntoViewOptions:{type:oe([Boolean,Object]),default:()=>({block:"center"})},type:{type:oe(String)},appendTo:{type:oe([String,Object]),default:"body"},closeOnPressEscape:{type:Boolean,default:!0},targetAreaClickable:{type:Boolean,default:!0}}),IAe={[mt]:e=>En(e),"update:current":e=>Je(e),close:e=>Je(e),finish:()=>!0,change:e=>Je(e)},MAe=Oe({target:{type:oe([String,Object,Function])},title:String,description:String,showClose:{type:Boolean,default:void 0},closeIcon:{type:An},showArrow:{type:Boolean,default:void 0},placement:tP.placement,mask:{type:oe([Boolean,Object]),default:void 0},contentStyle:{type:oe([Object])},prevButtonProps:{type:oe(Object)},nextButtonProps:{type:oe(Object)},scrollIntoViewOptions:{type:oe([Boolean,Object]),default:void 0},type:{type:oe(String)}}),PAe={close:()=>!0},LAe=(e,t,n,r,a)=>{const i=H(null),o=()=>{let c;return qe(e.value)?c=document.querySelector(e.value):et(e.value)?c=e.value():c=e.value,c},s=()=>{const c=o();if(!c||!t.value){i.value=null;return}DAe(c)||c.scrollIntoView(a.value);const{left:d,top:f,width:h,height:v}=c.getBoundingClientRect();i.value={left:d,top:f,width:h,height:v,radius:0}};St(()=>{_e([t,e],()=>{s()},{immediate:!0}),window.addEventListener("resize",s)}),yn(()=>{window.removeEventListener("resize",s)});const l=c=>(Me(n.value.offset)?n.value.offset[c]:n.value.offset)??6,u=M(()=>{var h;if(!i.value)return i.value;const c=l(0),d=l(1),f=((h=n.value)==null?void 0:h.radius)||2;return{left:i.value.left-c,top:i.value.top-d,width:i.value.width+c*2,height:i.value.height+d*2,radius:f}});return{mergedPosInfo:u,triggerTarget:M(()=>{const c=o();return!r.value||!c||!window.DOMRect?c||void 0:{getBoundingClientRect(){var d,f,h,v;return window.DOMRect.fromRect({width:((d=u.value)==null?void 0:d.width)||0,height:((f=u.value)==null?void 0:f.height)||0,x:((h=u.value)==null?void 0:h.left)||0,y:((v=u.value)==null?void 0:v.top)||0})}}})}},rS=Symbol("ElTour");function DAe(e){const t=window.innerWidth||document.documentElement.clientWidth,n=window.innerHeight||document.documentElement.clientHeight,{top:r,right:a,bottom:i,left:o}=e.getBoundingClientRect();return r>=0&&o>=0&&a<=t&&i<=n}const RAe=(e,t,n,r,a,i,o,s)=>{const l=H(),u=H(),c=H({}),d={x:l,y:u,placement:r,strategy:a,middlewareData:c},f=M(()=>{const m=[Rce(y(i)),Nce(),Oce(),OAe()];return y(s)&&y(n)&&m.push(Vce({element:y(n)})),m}),h=async()=>{if(!cn)return;const m=y(e),b=y(t);if(!m||!b)return;const _=await $ce(m,b,{placement:y(r),strategy:y(a),middleware:y(f)});dm(d).forEach(w=>{d[w].value=_[w]})},v=M(()=>{if(!y(e))return{position:"fixed",top:"50%",left:"50%",transform:"translate3d(-50%, -50%, 0)",maxWidth:"100vw",zIndex:y(o)};const{overflow:m}=y(c);return{position:y(a),zIndex:y(o),top:y(u)!=null?`${y(u)}px`:"",left:y(l)!=null?`${y(l)}px`:"",maxWidth:m!=null&&m.maxWidth?`${m==null?void 0:m.maxWidth}px`:""}}),p=M(()=>{if(!y(s))return{};const{arrow:m}=y(c);return{left:(m==null?void 0:m.x)!=null?`${m==null?void 0:m.x}px`:"",top:(m==null?void 0:m.y)!=null?`${m==null?void 0:m.y}px`:""}});let g;return St(()=>{const m=y(e),b=y(t);m&&b&&(g=Lce(m,b,h)),Ua(()=>{h()})}),yn(()=>{g&&g()}),{update:h,contentStyle:v,arrowStyle:p}},OAe=()=>({name:"overflow",async fn(e){const t=await Dce(e);let n=0;return t.left>0&&(n=t.left),t.right>0&&(n=t.right),{data:{maxWidth:e.rects.floating.width-n}}}}),NAe=Oe({zIndex:{type:Number,default:1001},visible:Boolean,fill:{type:String,default:"rgba(0,0,0,0.5)"},pos:{type:oe(Object)},targetAreaClickable:{type:Boolean,default:!0}}),VAe={style:{width:"100%",height:"100%"}},$Ae=["d"];var BAe=ye({name:"ElTourMask",inheritAttrs:!1,__name:"mask",props:NAe,setup(e){const t=e,{ns:n}=Ge(rS),r=M(()=>{var c;return((c=t.pos)==null?void 0:c.radius)??2}),a=M(()=>{const c=r.value,d=`a${c},${c} 0 0 1`;return{topRight:`${d} ${c},${c}`,bottomRight:`${d} ${-c},${c}`,bottomLeft:`${d} ${-c},${-c}`,topLeft:`${d} ${c},${-c}`}}),{width:i,height:o}=NI(),s=M(()=>{const c=i.value,d=o.value,f=a.value,h=`M${c},0 L0,0 L0,${d} L${c},${d} L${c},0 Z`,v=r.value;return t.pos?`${h} M${t.pos.left+v},${t.pos.top} h${t.pos.width-v*2} ${f.topRight} v${t.pos.height-v*2} ${f.bottomRight} h${-t.pos.width+v*2} ${f.bottomLeft} v${-t.pos.height+v*2} ${f.topLeft} z`:h}),l=M(()=>({position:"fixed",left:0,right:0,top:0,bottom:0,zIndex:t.zIndex,pointerEvents:t.pos&&t.targetAreaClickable?"none":"auto"})),u=M(()=>({fill:t.fill,pointerEvents:"auto",cursor:"auto"}));return Bw(xn(t,"visible"),{ns:n}),(c,d)=>e.visible?(L(),K("div",Mt({key:0,class:y(n).e("mask"),style:l.value},c.$attrs),[(L(),K("svg",VAe,[j("path",{class:B(y(n).e("hollow")),style:tt(u.value),d:s.value},null,14,$Ae)]))],16)):fe("v-if",!0)}}),FAe=BAe;const zAe=["data-side"];var HAe=ye({name:"ElTourContent",__name:"content",props:tP,emits:kAe,setup(e,{emit:t}){const n=e,r=t,a=H(n.placement),i=H(n.strategy),o=H(null),s=H(null);_e(()=>n.placement,()=>{a.value=n.placement});const{contentStyle:l,arrowStyle:u}=RAe(xn(n,"reference"),o,s,a,i,xn(n,"offset"),xn(n,"zIndex"),xn(n,"showArrow")),c=M(()=>a.value.split("-")[0]),{ns:d}=Ge(rS),f=()=>{r("close")},h=v=>{v.detail.focusReason==="pointer"&&v.preventDefault()};return(v,p)=>(L(),K("div",{ref_key:"contentRef",ref:o,style:tt(y(l)),class:B(y(d).e("content")),"data-side":c.value,tabindex:"-1"},[V(y(Uv),{loop:"",trapped:"","focus-start-el":"container","focus-trap-el":o.value||void 0,onReleaseRequested:f,onFocusoutPrevented:h},{default:G(()=>[he(v.$slots,"default")]),_:3},8,["focus-trap-el"]),e.showArrow?(L(),K("span",{key:0,ref_key:"arrowRef",ref:s,style:tt(y(u)),class:B(y(d).e("arrow"))},null,6)):fe("v-if",!0)],14,zAe))}}),WAe=HAe,GAe=ye({name:"ElTourSteps",props:{current:{type:Number,default:0}},emits:["update-total"],setup(e,{slots:t,emit:n}){let r=0;return()=>{var l,u;const a=(l=t.default)==null?void 0:l.call(t),i=[];let o=0;function s(c){Me(c)&&c.forEach(d=>{var f;((f=(d==null?void 0:d.type)||{})==null?void 0:f.name)==="ElTourStep"&&(i.push(d),o+=1)})}return a.length&&s(Fi((u=a[0])==null?void 0:u.children)),r!==o&&(r=o,n("update-total",o)),i.length?i[e.current]:null}}}),UAe=ye({name:"ElTour",inheritAttrs:!1,__name:"tour",props:AAe,emits:IAe,setup(e,{emit:t}){const n=e,r=t,a=Ee("tour"),i=H(0),o=H(),s=M(()=>!qt(n.current)),l=H(n.current??0),u=M({get(){return qt(n.current)?l.value:n.current},set(I){(s.value?n.current:l.value)!==I&&(s.value||(l.value=I),r("update:current",I))}}),c=M(()=>{var I;return(I=o.value)==null?void 0:I.target}),d=M(()=>[a.b(),_.value==="primary"?a.m("primary"):""]),f=M(()=>{var I;return((I=o.value)==null?void 0:I.placement)||n.placement}),h=M(()=>{var I;return((I=o.value)==null?void 0:I.contentStyle)??n.contentStyle}),v=M(()=>{var I;return((I=o.value)==null?void 0:I.mask)??n.mask}),p=M(()=>!!v.value&&n.modelValue),g=M(()=>En(v.value)?void 0:v.value),m=M(()=>{var I;return!!c.value&&(((I=o.value)==null?void 0:I.showArrow)??n.showArrow)}),b=M(()=>{var I;return((I=o.value)==null?void 0:I.scrollIntoViewOptions)??n.scrollIntoViewOptions}),_=M(()=>{var I;return((I=o.value)==null?void 0:I.type)??n.type}),{nextZIndex:w}=Cy(),S=w(),x=M(()=>n.zIndex??S),{mergedPosInfo:C,triggerTarget:T}=LAe(c,xn(n,"modelValue"),xn(n,"gap"),v,b);_e(()=>n.current,I=>!qt(I)&&(l.value=I)),_e(u,(I,P)=>{!n.modelValue||I===P||r(Vt,I)},{flush:"post"}),_e(()=>n.modelValue,I=>{!I&&u.value!==0&&(u.value=0)});const E=()=>{n.closeOnPressEscape&&(r(mt,!1),r("close",u.value))},k=I=>{i.value=I},A=pr();return Ft(rS,{currentStep:o,current:u,total:i,showClose:xn(n,"showClose"),closeIcon:xn(n,"closeIcon"),mergedType:_,ns:a,slots:A,updateModelValue(I){r(mt,I)},onClose(){r("close",u.value)},onFinish(){r("finish")}}),(I,P)=>{var R,O;return L(),K(ze,null,[(L(),ve(Bv,{to:e.appendTo},[j("div",Mt({class:d.value},I.$attrs),[V(FAe,{visible:p.value,fill:(R=g.value)==null?void 0:R.color,style:tt((O=g.value)==null?void 0:O.style),pos:y(C),"z-index":x.value,"target-area-clickable":e.targetAreaClickable},null,8,["visible","fill","style","pos","z-index","target-area-clickable"]),e.modelValue?(L(),ve(WAe,{key:u.value,reference:y(T),placement:f.value,"show-arrow":m.value,"z-index":x.value,style:tt(h.value),onClose:E},{default:G(()=>[V(y(GAe),{current:u.value,onUpdateTotal:k},{default:G(()=>[he(I.$slots,"default")]),_:3},8,["current"])]),_:3},8,["reference","placement","show-arrow","z-index","style"])):fe("v-if",!0)],16)],8,["to"])),fe(" just for IDE "),fe("v-if",!0)],64)}}}),KAe=UAe;const YAe=["aria-label"];var jAe=ye({name:"ElTourStep",__name:"step",props:MAe,emits:PAe,setup(e,{emit:t}){const n=e,r=t,{Close:a}=lG,{t:i}=Yt(),{currentStep:o,current:s,total:l,showClose:u,closeIcon:c,mergedType:d,ns:f,slots:h,updateModelValue:v,onClose:p,onFinish:g}=Ge(rS);_e(n,E=>{o.value=E},{immediate:!0});const m=M(()=>n.showClose??u.value),b=M(()=>n.closeIcon??c.value??a),_=E=>{if(E)return my(E,["children","onClick"])},w=()=>{var E,k;s.value-=1,(E=n.prevButtonProps)!=null&&E.onClick&&((k=n.prevButtonProps)==null||k.onClick())},S=()=>{var E;s.value>=l.value-1?x():s.value+=1,(E=n.nextButtonProps)!=null&&E.onClick&&n.nextButtonProps.onClick()},x=()=>{C(),g()},C=()=>{v(!1),p(),r("close")},T=E=>{var k;if(!((k=E.target)!=null&&k.isContentEditable))switch(Mn(E)){case De.left:E.preventDefault(),s.value>0&&w();break;case De.right:E.preventDefault(),S();break}};return St(()=>{window.addEventListener("keydown",T)}),yn(()=>{window.removeEventListener("keydown",T)}),(E,k)=>(L(),K(ze,null,[m.value?(L(),K("button",{key:0,"aria-label":y(i)("el.tour.close"),class:B(y(f).e("closebtn")),type:"button",onClick:C},[V(y(Ze),{class:B(y(f).e("close"))},{default:G(()=>[(L(),ve(Et(b.value)))]),_:1},8,["class"])],10,YAe)):fe("v-if",!0),j("header",{class:B([y(f).e("header"),{"show-close":y(u)}])},[he(E.$slots,"header",{},()=>[j("span",{role:"heading",class:B(y(f).e("title"))},ce(e.title),3)])],2),j("div",{class:B(y(f).e("body"))},[he(E.$slots,"default",{},()=>[j("span",null,ce(e.description),1)])],2),j("footer",{class:B(y(f).e("footer"))},[j("div",{class:B(y(f).b("indicators"))},[y(h).indicators?(L(),ve(Et(y(h).indicators),{key:0,current:y(s),total:y(l)},null,8,["current","total"])):(L(!0),K(ze,{key:1},Lt(y(l),(A,I)=>(L(),K("span",{key:A,class:B([y(f).b("indicator"),y(f).is("active",I===y(s))])},null,2))),128))],2),j("div",{class:B(y(f).b("buttons"))},[y(s)>0?(L(),ve(y(Xr),Mt({key:0,size:"small",type:y(d)},_(e.prevButtonProps),{onClick:w}),{default:G(()=>{var A;return[Le(ce(((A=e.prevButtonProps)==null?void 0:A.children)??y(i)("el.tour.previous")),1)]}),_:1},16,["type"])):fe("v-if",!0),y(s)<=y(l)-1?(L(),ve(y(Xr),Mt({key:1,size:"small",type:y(d)==="primary"?"default":"primary"},_(e.nextButtonProps),{onClick:S}),{default:G(()=>{var A;return[Le(ce(((A=e.nextButtonProps)==null?void 0:A.children)??(y(s)===y(l)-1?y(i)("el.tour.finish"):y(i)("el.tour.next"))),1)]}),_:1},16,["type"])):fe("v-if",!0)],2)],2)],64))}}),M7=jAe;const qAe=xt(KAe,{TourStep:M7}),XAe=rr(M7),ZAe=Oe({container:{type:oe([String,Object])},offset:{type:Number,default:0},bound:{type:Number,default:15},duration:{type:Number,default:300},marker:{type:Boolean,default:!0},type:{type:oe(String),default:"default"},direction:{type:oe(String),default:"vertical"},selectScrollTop:Boolean}),JAe={change:e=>qe(e),click:(e,t)=>e instanceof MouseEvent&&(qe(t)||qt(t))},M0=e=>{if(!cn||e==="")return null;if(qe(e))try{return document.querySelector(e)}catch{return null}return e};function QAe(e){let t=0;const n=(...r)=>{t&&Zo(t),t=Pi(()=>{e(...r),t=0})};return n.cancel=()=>{Zo(t),t=0},n}const P7=Symbol("anchor");var eIe=ye({name:"ElAnchor",__name:"anchor",props:ZAe,emits:JAe,setup(e,{expose:t,emit:n}){const r=e,a=n,i=pr(),o=H(""),s=H({}),l=H(null),u=H(null),c=H(),d={};let f=!1,h=0;const v=Ee("anchor"),p=M(()=>[v.b(),r.type==="underline"?v.m("underline"):"",v.m(r.direction)]),g=I=>{d[I.href]=I.el},m=I=>{delete d[I]},b=I=>{o.value!==I&&(o.value=I,a(Vt,I))};let _=null,w="";const S=I=>{if(!c.value)return;const P=M0(I);if(!P)return;if(_){if(w===I)return;_()}w=I,f=!0;const R=nO(P,c.value),O=LE(P,R),$=R.scrollHeight-R.clientHeight,N=Math.min(O-r.offset,$);_=Rle(c.value,h,N,r.duration,()=>{setTimeout(()=>{f=!1,w=""},20)})},x=I=>{I&&(b(I),S(I))},C=(I,P)=>{a("click",I,P),x(P)},T=QAe(()=>{c.value&&(h=rO(c.value));const I=E();f||qt(I)||b(I)}),E=()=>{if(!c.value)return;const I=rO(c.value),P=[];for(const R of Object.keys(d)){const O=M0(R);if(!O)continue;const $=LE(O,nO(O,c.value));P.push({top:$-r.offset-r.bound,href:R})}P.sort((R,O)=>R.top-O.top);for(let R=0;RI))return O.href}},k=()=>{const I=M0(r.container);!I||yy(I)?c.value=window:c.value=I};gn(c,"scroll",T);const A=()=>{Ue(()=>{if(!l.value||!u.value||!o.value){s.value={};return}const I=d[o.value];if(!I){s.value={};return}const P=l.value.getBoundingClientRect(),R=u.value.getBoundingClientRect(),O=I.getBoundingClientRect();r.direction==="horizontal"?s.value={left:`${O.left-P.left}px`,width:`${O.width}px`,opacity:1}:s.value={top:`${O.top-P.top+(O.height-R.height)/2}px`,opacity:1}})};return _e(o,A),_e(()=>{var I;return(I=i.default)==null?void 0:I.call(i)},A),St(()=>{k();const I=decodeURIComponent(window.location.hash);M0(I)?x(I):T()}),_e(()=>r.container,()=>{k()}),Ft(P7,{ns:v,direction:r.direction,currentAnchor:o,addLink:g,removeLink:m,handleClick:C}),t({scrollTo:x}),(I,P)=>(L(),K("div",{ref_key:"anchorRef",ref:l,class:B(p.value)},[e.marker?(L(),K("div",{key:0,ref_key:"markerRef",ref:u,class:B(y(v).e("marker")),style:tt(s.value)},null,6)):fe("v-if",!0),j("div",{class:B(y(v).e("list"))},[he(I.$slots,"default")],2)],2))}}),tIe=eIe;const nIe=Oe({title:String,href:String}),rIe=["href"];var aIe=ye({name:"ElAnchorLink",__name:"anchor-link",props:nIe,setup(e){const t=e,n=H(null),{ns:r,direction:a,currentAnchor:i,addLink:o,removeLink:s,handleClick:l}=Ge(P7),u=M(()=>[r.e("link"),r.is("active",i.value===t.href)]),c=d=>{l(d,t.href)};return _e(()=>t.href,(d,f)=>{Ue(()=>{f&&s(f),d&&o({href:d,el:n.value})})}),St(()=>{const{href:d}=t;d&&o({href:d,el:n.value})}),yn(()=>{const{href:d}=t;d&&s(d)}),(d,f)=>(L(),K("div",{class:B(y(r).e("item"))},[j("a",{ref_key:"linkRef",ref:n,class:B(u.value),href:e.href,onClick:c},[he(d.$slots,"default",{},()=>[Le(ce(e.title),1)])],10,rIe),d.$slots["sub-link"]&&y(a)==="vertical"?(L(),K("div",{key:0,class:B(y(r).e("list"))},[he(d.$slots,"sub-link")],2)):fe("v-if",!0)],2))}}),L7=aIe;const iIe=xt(tIe,{AnchorLink:L7}),oIe=rr(L7),D7={label:"label",value:"value",disabled:"disabled"},sIe=Oe({direction:{type:oe(String),default:"horizontal"},options:{type:oe(Array),default:()=>[]},modelValue:{type:[String,Number,Boolean],default:void 0},props:{type:oe(Object),default:()=>D7},block:Boolean,size:$r,disabled:{type:Boolean,default:void 0},validateEvent:{type:Boolean,default:!0},id:String,name:String,...ja(["ariaLabel"])}),lIe={[mt]:e=>qe(e)||Je(e)||En(e),[Vt]:e=>qe(e)||Je(e)||En(e)},uIe=["id","aria-label","aria-labelledby"],cIe=["name","disabled","checked","onChange"];var dIe=ye({name:"ElSegmented",__name:"segmented",props:sIe,emits:lIe,setup(e,{emit:t}){const n=e,r=t,a=Ee("segmented"),i=ba(),o=Rr(),s=ar(),{formItem:l}=ea(),{inputId:u,isLabeledByFormItem:c}=Di(n,{formItemContext:l}),d=H(null),f=vle(),h=Qt({isInit:!1,width:0,height:0,translateX:0,translateY:0,focusVisible:!1}),v=(A,I)=>{const P=g(I);r(mt,P),r(Vt,P),A.target.checked=P===n.modelValue},p=M(()=>({...D7,...n.props})),g=A=>yt(A)?A[p.value.value]:A,m=A=>yt(A)?A[p.value.label]:A,b=A=>!!(s.value||yt(A)&&A[p.value.disabled]),_=A=>n.modelValue===g(A),w=A=>n.options.find(I=>g(I)===A),S=A=>[a.e("item"),a.is("selected",_(A)),a.is("disabled",b(A))],x=()=>{if(!d.value)return;const A=d.value.querySelector(".is-selected"),I=d.value.querySelector(".is-selected input");if(!A||!I){h.width=0,h.height=0,h.translateX=0,h.translateY=0,h.focusVisible=!1;return}h.isInit=!0,n.direction==="vertical"?(h.height=A.offsetHeight,h.translateY=A.offsetTop):(h.width=A.offsetWidth,h.translateX=A.offsetLeft);try{h.focusVisible=I.matches(":focus-visible")}catch{}},C=M(()=>[a.b(),a.m(o.value),a.is("block",n.block)]),T=M(()=>({width:n.direction==="vertical"?"100%":`${h.width}px`,height:n.direction==="vertical"?`${h.height}px`:"100%",transform:n.direction==="vertical"?`translateY(${h.translateY}px)`:`translateX(${h.translateX}px)`,display:h.isInit?"block":"none"})),E=M(()=>[a.e("item-selected"),a.is("disabled",b(w(n.modelValue))),a.is("focus-visible",h.focusVisible)]),k=M(()=>n.name||i.value);return Kn(d,x),_e(f,x),_e(()=>n.options,x,{deep:!0,flush:"post"}),_e(()=>n.modelValue,()=>{var A;x(),n.validateEvent&&((A=l==null?void 0:l.validate)==null||A.call(l,"change").catch(It))},{flush:"post"}),(A,I)=>e.options.length?(L(),K("div",{key:0,id:y(u),ref_key:"segmentedRef",ref:d,class:B(C.value),role:"radiogroup","aria-label":y(c)?void 0:e.ariaLabel||"segmented","aria-labelledby":y(c)?y(l).labelId:void 0},[j("div",{class:B([y(a).e("group"),y(a).m(e.direction)])},[j("div",{style:tt(T.value),class:B(E.value)},null,6),(L(!0),K(ze,null,Lt(e.options,(P,R)=>(L(),K("label",{key:R,class:B(S(P))},[j("input",{class:B(y(a).e("item-input")),type:"radio",name:k.value,disabled:b(P),checked:_(P),onChange:O=>v(O,P)},null,42,cIe),j("div",{class:B(y(a).e("item-label"))},[he(A.$slots,"default",{item:P},()=>[Le(ce(m(P)),1)])],2)],2))),128))],2)],10,uIe)):fe("v-if",!0)}}),fIe=dIe;const hIe=xt(fIe),vIe=(e,t)=>{const n=e.toLowerCase();return(t.label||t.value||"").toLowerCase().includes(n)},pIe=(e,t,n)=>{const{selectionEnd:r}=e;if(r===null)return;const a=e.value,i=jr(t);let o=-1,s;for(let l=r-1;l>=0;--l){const u=a[l];if(o===-1&&(u===n||u===` +`||u==="\r")){o=l;continue}if(i.includes(u)){const c=o===-1?r:o;s={pattern:a.slice(l+1,c),start:l+1,end:c,prefix:u,prefixIndex:l,splitIndex:o,selectionEnd:r};break}}return s},gIe=(e,t={debug:!1,useSelectionEnd:!1})=>{const n=e.selectionStart!==null?e.selectionStart:0,r=e.selectionEnd!==null?e.selectionEnd:0,a=t.useSelectionEnd?r:n,i=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"];if(t.debug){const f=document.querySelector("#input-textarea-caret-position-mirror-div");f!=null&&f.parentNode&&f.parentNode.removeChild(f)}const o=document.createElement("div");o.id="input-textarea-caret-position-mirror-div",document.body.appendChild(o);const s=o.style,l=window.getComputedStyle(e),u=e.nodeName==="INPUT";s.whiteSpace=u?"nowrap":"pre-wrap",u||(s.wordWrap="break-word"),s.position="absolute",t.debug||(s.visibility="hidden"),i.forEach(f=>{if(u&&f==="lineHeight")if(l.boxSizing==="border-box"){const h=Number.parseInt(l.height),v=Number.parseInt(l.paddingTop)+Number.parseInt(l.paddingBottom)+Number.parseInt(l.borderTopWidth)+Number.parseInt(l.borderBottomWidth),p=v+Number.parseInt(l.lineHeight);h>p?s.lineHeight=`${h-v}px`:h===p?s.lineHeight=l.lineHeight:s.lineHeight="0"}else s.lineHeight=l.height;else s[f]=l[f]}),$w()?e.scrollHeight>Number.parseInt(l.height)&&(s.overflowY="scroll"):s.overflow="hidden",o.textContent=e.value.slice(0,Math.max(0,a)),u&&o.textContent&&(o.textContent=o.textContent.replace(/\s/g," "));const c=document.createElement("span");c.textContent=e.value.slice(Math.max(0,a))||".",c.style.position="relative",c.style.left=`${-e.scrollLeft}px`,c.style.top=`${-e.scrollTop}px`,o.appendChild(c);const d={top:c.offsetTop+Number.parseInt(l.borderTopWidth),left:c.offsetLeft+Number.parseInt(l.borderLeftWidth),height:Number.parseInt(l.fontSize)*1.5};return t.debug?c.style.backgroundColor="#aaa":document.body.removeChild(o),d.left>=e.clientWidth&&(d.left=e.clientWidth),d},mIe=Oe({...cM,options:{type:oe(Array),default:()=>[]},prefix:{type:oe([String,Array]),default:"@",validator:e=>qe(e)?e.length===1:e.every(t=>qe(t)&&t.length===1)},split:{type:String,default:" ",validator:e=>e.length===1},filterOption:{type:oe([Boolean,Function]),default:()=>vIe,validator:e=>e===!1?!0:et(e)},placement:{type:oe(String),default:"bottom"},showArrow:Boolean,offset:{type:Number,default:0},whole:Boolean,checkIsWhole:{type:oe(Function)},modelValue:String,loading:Boolean,popperClass:Tn.popperClass,popperStyle:Tn.popperStyle,popperOptions:{type:oe(Object),default:()=>({})},props:{type:oe(Object),default:()=>R7}}),yIe={[mt]:e=>qe(e),"whole-remove":(e,t)=>qe(e)&&qe(t),input:e=>qe(e),search:(e,t)=>qe(e)&&qe(t),select:(e,t)=>yt(e)&&qe(t),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent},R7={value:"value",label:"label",disabled:"disabled"},bIe=Oe({options:{type:oe(Array),default:()=>[]},loading:Boolean,disabled:Boolean,contentId:String,ariaLabel:String}),_Ie={select:e=>qe(e.value)},wIe=["id","aria-disabled","aria-selected","onMousemove","onClick"];var SIe=ye({name:"ElMentionDropdown",__name:"mention-dropdown",props:bIe,emits:_Ie,setup(e,{expose:t,emit:n}){const r=e,a=n,i=Ee("mention"),{t:o}=Yt(),s=H(-1),l=H(),u=H(),c=H(),d=(w,S)=>[i.be("dropdown","item"),i.is("hovering",s.value===S),i.is("disabled",w.disabled||r.disabled)],f=w=>{w.disabled||r.disabled||a("select",w)},h=w=>{s.value=w},v=M(()=>r.disabled||r.options.every(w=>w.disabled)),p=M(()=>r.options[s.value]),g=()=>{!p.value||p.value.disabled||r.disabled||a("select",p.value)},m=w=>{const{options:S}=r;if(S.length===0||v.value)return;w==="next"?(s.value++,s.value===S.length&&(s.value=0)):w==="prev"&&(s.value--,s.value<0&&(s.value=S.length-1));const x=S[s.value];if(x.disabled){m(w);return}Ue(()=>b(x))},b=w=>{var T,E,k,A;const{options:S}=r,x=S.findIndex(I=>I.value===w.value),C=(T=u.value)==null?void 0:T[x];if(C){const I=(k=(E=c.value)==null?void 0:E.querySelector)==null?void 0:k.call(E,`.${i.be("dropdown","wrap")}`);I&&zI(I,C)}(A=l.value)==null||A.handleScroll()};return _e(()=>r.options,()=>{v.value||r.options.length===0?s.value=-1:s.value=r.options.findIndex(w=>!w.disabled)},{immediate:!0}),t({hoveringIndex:s,navigateOptions:m,selectHoverOption:g,hoverOption:p}),(w,S)=>(L(),K("div",{ref_key:"dropdownRef",ref:c,class:B(y(i).b("dropdown"))},[w.$slots.header?(L(),K("div",{key:0,class:B(y(i).be("dropdown","header"))},[he(w.$slots,"header")],2)):fe("v-if",!0),gt(V(y(ts),{id:e.contentId,ref_key:"scrollbarRef",ref:l,tag:"ul","wrap-class":y(i).be("dropdown","wrap"),"view-class":y(i).be("dropdown","list"),role:"listbox","aria-label":e.ariaLabel,"aria-orientation":"vertical"},{default:G(()=>[(L(!0),K(ze,null,Lt(e.options,(x,C)=>(L(),K("li",{id:`${e.contentId}-${C}`,ref_for:!0,ref_key:"optionRefs",ref:u,key:C,class:B(d(x,C)),role:"option","aria-disabled":x.disabled||e.disabled||void 0,"aria-selected":s.value===C,onMousemove:T=>h(C),onClick:ut(T=>f(x),["stop"])},[he(w.$slots,"label",{item:x,index:C},()=>[j("span",null,ce(x.label??x.value),1)])],42,wIe))),128))]),_:3},8,["id","wrap-class","view-class","aria-label"]),[[ln,e.options.length>0&&!e.loading]]),e.loading?(L(),K("div",{key:1,class:B(y(i).be("dropdown","loading"))},[he(w.$slots,"loading",{},()=>[Le(ce(y(o)("el.mention.loading")),1)])],2)):fe("v-if",!0),w.$slots.footer?(L(),K("div",{key:2,class:B(y(i).be("dropdown","footer"))},[he(w.$slots,"footer")],2)):fe("v-if",!0)],2))}}),xIe=SIe,CIe=ye({name:"ElMention",inheritAttrs:!1,__name:"mention",props:mIe,emits:yIe,setup(e,{expose:t,emit:n}){const r=e,a=n,i=M(()=>{const N=va.props??[];return Ul(r,Me(N)?N:Object.keys(N))}),o=Ee("mention"),s=ar(),l=ba(),u=H(),c=H(),d=H(),f=H(!1),h=H(),v=H(),p=M(()=>r.showArrow?r.placement:`${r.placement}-start`),g=M(()=>r.showArrow?["bottom","top"]:["bottom-start","top-start"]),m=M(()=>({...R7,...r.props})),b=N=>{const D={label:N[m.value.label],value:N[m.value.value],disabled:N[m.value.disabled]};return{...N,...D}},_=M(()=>r.options.map(b)),w=M(()=>{const{filterOption:N}=r;return!v.value||!N?_.value:_.value.filter(D=>N(v.value.pattern,D))}),S=M(()=>f.value&&(!!w.value.length||r.loading)),x=M(()=>{var N;return`${l.value}-${(N=d.value)==null?void 0:N.hoveringIndex}`}),C=N=>{a(mt,N),a(Mr,N),R()},T=N=>{var F,W,z,Y;if((F=u.value)!=null&&F.isComposing)return;const D=Mn(N);switch(D){case De.left:case De.right:R();break;case De.up:case De.down:if(!f.value)return;N.preventDefault(),(W=d.value)==null||W.navigateOptions(D===De.up?"prev":"next");break;case De.enter:case De.numpadEnter:if(!f.value){r.type!=="textarea"&&R();return}N.preventDefault(),(z=d.value)!=null&&z.hoverOption?(Y=d.value)==null||Y.selectHoverOption():f.value=!1;break;case De.esc:if(!f.value)return;N.preventDefault(),f.value=!1;break;case De.backspace:if(r.whole&&v.value){const{splitIndex:q,selectionEnd:re,pattern:ee,prefixIndex:se,prefix:ne}=v.value,de=P();if(!de)return;const le=de.value,J=_.value.find(Z=>Z.value===ee);if((et(r.checkIsWhole)?r.checkIsWhole(ee,ne):J)&&q!==-1&&q+1===re){N.preventDefault();const Z=le.slice(0,se)+le.slice(q+1);a(mt,Z),a(Mr,Z),a("whole-remove",ee,ne);const U=se;Ue(()=>{de.selectionStart=U,de.selectionEnd=U,$()})}}}},{wrapperRef:E}=uu(u,{disabled:s,afterFocus(){R()},beforeBlur(N){var D;return(D=c.value)==null?void 0:D.isFocusInsideContent(N)},afterBlur(){f.value=!1}}),k=()=>{R()},A=N=>r.options.find(D=>N.value===D[m.value.value]),I=N=>{if(!v.value)return;const D=P();if(!D)return;const F=D.value,{split:W}=r,z=F.slice(v.value.end),Y=z.startsWith(W),q=`${N.value}${Y?"":W}`,re=F.slice(0,v.value.start)+q+z;a(mt,re),a(Mr,re),a("select",A(N),v.value.prefix);const ee=v.value.start+q.length+(Y?1:0);Ue(()=>{D.selectionStart=ee,D.selectionEnd=ee,D.focus(),$()})},P=()=>{var N,D;return r.type==="textarea"?(N=u.value)==null?void 0:N.textarea:(D=u.value)==null?void 0:D.input},R=()=>{setTimeout(()=>{O(),$(),Ue(()=>{var N;return(N=c.value)==null?void 0:N.updatePopper()})},0)},O=()=>{const N=P();if(!N)return;const D=gIe(N),F=N.getBoundingClientRect(),W=E.value.getBoundingClientRect();h.value={position:"absolute",width:0,height:`${D.height}px`,left:`${D.left+F.left-W.left}px`,top:`${D.top+F.top-W.top}px`}},$=()=>{const N=P();if(document.activeElement!==N){f.value=!1;return}const{prefix:D,split:F}=r;if(v.value=pIe(N,D,F),v.value&&v.value.splitIndex===-1){f.value=!0,a("search",v.value.pattern,v.value.prefix);return}f.value=!1};return t({input:u,tooltip:c,dropdownVisible:S}),(N,D)=>(L(),K("div",{ref_key:"wrapperRef",ref:E,class:B(y(o).b())},[V(y(va),Mt(Mt(i.value,N.$attrs),{ref_key:"elInputRef",ref:u,"model-value":e.modelValue,disabled:y(s),role:S.value?"combobox":void 0,"aria-activedescendant":S.value?x.value||"":void 0,"aria-controls":S.value?y(l):void 0,"aria-expanded":S.value||void 0,"aria-label":e.ariaLabel,"aria-autocomplete":S.value?"none":void 0,"aria-haspopup":S.value?"listbox":void 0,onInput:C,onKeydown:T,onMousedown:k}),ui({_:2},[Lt(N.$slots,(F,W)=>({name:W,fn:G(z=>[he(N.$slots,W,Dl(Rl(z)))])}))]),1040,["model-value","disabled","role","aria-activedescendant","aria-controls","aria-expanded","aria-label","aria-autocomplete","aria-haspopup"]),V(y(ua),{ref_key:"tooltipRef",ref:c,visible:S.value,"popper-class":[y(o).e("popper"),e.popperClass],"popper-style":e.popperStyle,"popper-options":e.popperOptions,placement:p.value,"fallback-placements":g.value,effect:"light",pure:"",offset:e.offset,"show-arrow":e.showArrow},{default:G(()=>[j("div",{style:tt(h.value)},null,4)]),content:G(()=>[V(xIe,{ref_key:"dropdownRef",ref:d,options:w.value,disabled:y(s),loading:e.loading,"content-id":y(l),"aria-label":e.ariaLabel,onSelect:I,onClick:D[0]||(D[0]=ut(F=>{var W;return(W=u.value)==null?void 0:W.focus()},["stop"]))},ui({_:2},[Lt(N.$slots,(F,W)=>({name:W,fn:G(z=>[he(N.$slots,W,Dl(Rl(z)))])}))]),1032,["options","disabled","loading","content-id","aria-label"])]),_:3},8,["visible","popper-class","popper-style","popper-options","placement","fallback-placements","offset","show-arrow"])],2))}}),TIe=CIe;const EIe=xt(TIe),kIe=Oe({layout:{type:String,default:"horizontal",values:["horizontal","vertical"]},lazy:Boolean}),AIe={resizeStart:(e,t)=>!0,resize:(e,t)=>!0,resizeEnd:(e,t)=>!0,collapse:(e,t,n)=>!0},IIe=Oe({min:{type:[String,Number]},max:{type:[String,Number]},size:{type:[String,Number]},resizable:{type:Boolean,default:!0},collapsible:Boolean}),MIe={"update:size":e=>typeof e=="number"||typeof e=="string"};function PIe(e){const t=H(),{width:n,height:r}=Y2(t);return{containerEl:t,containerSize:M(()=>e.value==="horizontal"?n.value:r.value)}}function nP(e){return Number(e.slice(0,-1))/100}function rP(e){return Number(e.slice(0,-2))}function aP(e){return qe(e)&&e.endsWith("%")}function iP(e){return qe(e)&&e.endsWith("px")}function LIe(e,t){const n=M(()=>e.value.map(o=>o.size)),r=M(()=>e.value.length),a=H([]);_e([n,r,t],()=>{var u;let o=[],s=0;for(let c=0;cc+(d||0),0);if(l>1||!s){const c=1/l;o=o.map(d=>d===void 0?0:d*c)}else{const c=(1-l)/s;o=o.map(d=>d===void 0?c:d)}a.value=o});const i=o=>o*t.value;return{percentSizes:a,pxSizes:M(()=>a.value.map(i))}}function DIe(e,t,n,r){const a=g=>g*t.value||0;function i(g,m){return aP(g)?a(nP(g)):iP(g)?rP(g):g??m}const o=H(0),s=H(null);let l=[],u=It;const c=M(()=>e.value.map(g=>[g.min,g.max]));_e(r,()=>{if(o.value){const g=new MouseEvent("mouseup",{bubbles:!0});window.dispatchEvent(g)}});const d=g=>{o.value=0,s.value={index:g,confirmed:!1},l=n.value},f=(g,m)=>{var A;let b=null;if((!s.value||!s.value.confirmed)&&m!==0){if(m>0)b=g,s.value={index:g,confirmed:!0};else for(let I=g;I>=0;I-=1)if(l[I]>0){b=I,s.value={index:I,confirmed:!0};break}}const _=b??((A=s.value)==null?void 0:A.index)??g,w=[...l],S=_+1,x=i(c.value[_][0],0),C=i(c.value[S][0],0),T=i(c.value[_][1],t.value||0),E=i(c.value[S][1],t.value||0);let k=m;w[_]+kT&&(k=T-w[_]),w[S]-k>E&&(k=w[S]-E),w[_]+=k,w[S]-=k,o.value=k,u=()=>{e.value.forEach((I,P)=>{I.size=w[P]}),u=It},r.value||u()},h=()=>{r.value&&u(),o.value=0,s.value=null,l=[]},v=[];return{lazyOffset:o,onMoveStart:d,onMoving:f,onMoveEnd:h,movingIndex:s,onCollapse:(g,m)=>{v.length||v.push(...n.value.map((C,T)=>{var E;return C<=0?i((E=c.value[T])==null?void 0:E[0],0):C}));const b=n.value,_=m==="start"?g:g+1,w=m==="start"?g+1:g,S=b[_],x=b[w];if(S!==0&&x!==0)b[_]=0,b[w]+=S,v[g]=S;else{const C=S+x,T=Ei(v[g],0,C),E=C-T;b[w]=T,b[_]=E}e.value.forEach((C,T)=>{C.size=b[T]})}}}const O7=Symbol("splitterRootContextKey");var RIe=ye({name:"ElSplitter",__name:"splitter",props:kIe,emits:AIe,setup(e,{emit:t}){const n=Ee("splitter"),r=t,a=e,i=xn(a,"layout"),o=xn(a,"lazy"),{containerEl:s,containerSize:l}=PIe(i),{removeChild:u,children:c,addChild:d,ChildrenSorter:f}=Uw(Tt(),"ElSplitterPanel");_e(c,()=>{g.value=null,c.value.forEach((k,A)=>{k.setIndex(A)})});const{percentSizes:h,pxSizes:v}=LIe(c,l),{lazyOffset:p,movingIndex:g,onMoveStart:m,onMoving:b,onMoveEnd:_,onCollapse:w}=DIe(c,l,v,o),S=M(()=>({[n.cssVarBlockName("bar-offset")]:o.value?`${p.value}px`:void 0}));return Ft(O7,Qt({panels:c,percentSizes:h,pxSizes:v,layout:i,lazy:o,movingIndex:g,containerSize:l,onMoveStart:k=>{m(k),r("resizeStart",k,v.value)},onMoving:(k,A)=>{b(k,A),o.value||r("resize",k,v.value)},onMoveEnd:async k=>{_(),await Ue(),r("resizeEnd",k,v.value)},onCollapse:(k,A)=>{w(k,A),r("collapse",k,A,v.value)},registerPanel:d,unregisterPanel:u})),(k,A)=>(L(),K("div",{ref_key:"containerEl",ref:s,class:B([y(n).b(),y(n).e(i.value)]),style:tt(S.value)},[he(k.$slots,"default"),V(y(f)),fe(" Prevent iframe touch events from breaking "),y(g)?(L(),K("div",{key:0,class:B([y(n).e("mask"),y(n).e(`mask-${i.value}`)])},null,2)):fe("v-if",!0)],6))}}),OIe=RIe;function NIe(e){return e&&yt(e)?e:{start:!!e,end:!!e}}function pV(e,t,n,r){return!!(e!=null&&e.collapsible.end&&t>0||n!=null&&n.collapsible.start&&r===0&&t>0)}var VIe=ye({name:"ElSplitterBar",__name:"split-bar",props:{index:{type:Number,required:!0},layout:{type:String,values:["horizontal","vertical"],default:"horizontal"},resizable:{type:Boolean,default:!0},lazy:Boolean,startCollapsible:Boolean,endCollapsible:Boolean},emits:["moveStart","moving","moveEnd","collapse"],setup(e,{emit:t}){const n=Ee("splitter-bar"),r=e,a=t,i=M(()=>r.layout==="horizontal"),o=M(()=>i.value?{width:0}:{height:0}),s=M(()=>({width:i.value?"16px":"100%",height:i.value?"100%":"16px",cursor:r.resizable?i.value?"ew-resize":"ns-resize":"auto",touchAction:"none"})),l=M(()=>{const b=n.e("dragger");return{[`${b}-horizontal`]:i.value,[`${b}-vertical`]:!i.value,[`${b}-active`]:!!u.value}}),u=H(null),c=b=>{r.resizable&&(u.value=[b.pageX,b.pageY],a("moveStart",r.index),window.addEventListener("mouseup",v),window.addEventListener("mousemove",f))},d=b=>{if(r.resizable&&b.touches.length===1){b.preventDefault();const _=b.touches[0];u.value=[_.pageX,_.pageY],a("moveStart",r.index),window.addEventListener("touchend",p),window.addEventListener("touchmove",h)}},f=b=>{const{pageX:_,pageY:w}=b,S=_-u.value[0],x=w-u.value[1],C=i.value?S:x;a("moving",r.index,C)},h=b=>{if(b.touches.length===1){b.preventDefault();const _=b.touches[0],w=_.pageX-u.value[0],S=_.pageY-u.value[1],x=i.value?w:S;a("moving",r.index,x)}},v=()=>{u.value=null,window.removeEventListener("mouseup",v),window.removeEventListener("mousemove",f),a("moveEnd",r.index)},p=()=>{u.value=null,window.removeEventListener("touchend",p),window.removeEventListener("touchmove",h),a("moveEnd",r.index)},g=M(()=>i.value?Yl:Kw),m=M(()=>i.value?Wa:ll);return(b,_)=>(L(),K("div",{class:B([y(n).b()]),style:tt(o.value)},[e.startCollapsible?(L(),K("div",{key:0,class:B([y(n).e("collapse-icon"),y(n).e(`${e.layout}-collapse-icon-start`)]),onClick:_[0]||(_[0]=w=>a("collapse",e.index,"start"))},[he(b.$slots,"start-collapsible",{},()=>[(L(),ve(Et(g.value),{style:{width:"12px",height:"12px"}}))])],2)):fe("v-if",!0),j("div",{class:B([y(n).e("dragger"),l.value,y(n).is("disabled",!e.resizable),y(n).is("lazy",e.resizable&&e.lazy)]),style:tt(s.value),onMousedown:c,onTouchstart:d},null,38),e.endCollapsible?(L(),K("div",{key:1,class:B([y(n).e("collapse-icon"),y(n).e(`${e.layout}-collapse-icon-end`)]),onClick:_[1]||(_[1]=w=>a("collapse",e.index,"end"))},[he(b.$slots,"end-collapsible",{},()=>[(L(),ve(Et(m.value),{style:{width:"12px",height:"12px"}}))])],2)):fe("v-if",!0)],6))}}),$Ie=VIe;const gV="ElSplitterPanel";var BIe=ye({name:gV,__name:"split-panel",props:IIe,emits:MIe,setup(e,{expose:t,emit:n}){const r=Ee("splitter-panel"),a=e,i=n,o=Ge(O7);o||nr(gV,"usage: ");const{panels:s,layout:l,lazy:u,containerSize:c,pxSizes:d}=Jr(o),{registerPanel:f,unregisterPanel:h,onCollapse:v,onMoveEnd:p,onMoveStart:g,onMoving:m}=o,b=H(),_=Tt(),w=_.uid,S=H(0),x=M(()=>s.value[S.value]),C=D=>{S.value=D},T=M(()=>x.value?d.value[S.value]??0:0),E=M(()=>x.value?d.value[S.value+1]??0:0),k=M(()=>x.value?s.value[S.value+1]:null),A=M(()=>{var D;return k.value?a.resizable&&((D=k.value)==null?void 0:D.resizable)&&(T.value!==0||!a.min)&&(E.value!==0||!k.value.min):!1}),I=M(()=>x.value?S.value!==s.value.length-1:!1),P=M(()=>pV(x.value,T.value,k.value,E.value)),R=M(()=>pV(k.value,E.value,x.value,T.value));function O(D){return aP(D)?nP(D)*c.value||0:iP(D)?rP(D):D??0}let $=!1;_e(()=>a.size,()=>{if(!$&&x.value){if(!c.value){x.value.size=a.size;return}const D=O(a.size),F=O(a.max),W=O(a.min),z=Math.min(Math.max(D,W||0),F||D);z!==D&&i("update:size",z),x.value.size=z}}),_e(()=>{var D;return(D=x.value)==null?void 0:D.size},D=>{D!==a.size&&($=!0,i("update:size",D),Ue(()=>$=!1))}),_e(()=>a.resizable,D=>{x.value&&(x.value.resizable=D)});const N=Qt({uid:w,getVnode:()=>_.vnode,setIndex:C,...a,collapsible:M(()=>NIe(a.collapsible))});return f(N),yn(()=>h(N)),t({splitterPanelRef:b}),(D,F)=>(L(),K(ze,null,[j("div",Mt({ref_key:"panelEl",ref:b,class:[y(r).b()],style:{flexBasis:`${T.value}px`}},D.$attrs),[he(D.$slots,"default")],16),I.value?(L(),ve($Ie,{key:0,index:S.value,layout:y(l),lazy:y(u),resizable:A.value,"start-collapsible":P.value,"end-collapsible":R.value,onMoveStart:y(g),onMoving:y(m),onMoveEnd:y(p),onCollapse:y(v)},{"start-collapsible":G(()=>[he(D.$slots,"start-collapsible")]),"end-collapsible":G(()=>[he(D.$slots,"end-collapsible")]),_:3},8,["index","layout","lazy","resizable","start-collapsible","end-collapsible","onMoveStart","onMoving","onMoveEnd","onCollapse"])):fe("v-if",!0)],64))}}),N7=BIe;const FIe=xt(OIe,{SplitPanel:N7}),zIe=rr(N7),Fo="ElInfiniteScroll",HIe={delay:{type:Number,default:200},distance:{type:Number,default:0},disabled:{type:Boolean,default:!1},immediate:{type:Boolean,default:!0}},oP=(e,t)=>Object.entries(HIe).reduce((n,[r,a])=>{const{type:i,default:o}=a,s=e.getAttribute(`infinite-scroll-${r}`);let l=t[s]??s??o;return l=l==="false"?!1:l,l=i(l),n[r]=Number.isNaN(l)?o:l,n},{}),V7=e=>{const{observer:t}=e[Fo];t&&(t.disconnect(),delete e[Fo].observer)},WIe=(e,t)=>{const{container:n,containerEl:r,instance:a,observer:i,lastScrollTop:o}=e[Fo],{disabled:s,distance:l}=oP(e,a),{clientHeight:u,scrollHeight:c,scrollTop:d}=r,f=d-o;if(e[Fo].lastScrollTop=d,i||s||f<0)return;let h=!1;if(n===e)h=c-(u+d)<=l;else{const{clientTop:v,scrollHeight:p}=e,g=LE(e,r);h=d+u>=g+v+p-l}h&&t.call(a)};function Kx(e,t){const{containerEl:n,instance:r}=e[Fo],{disabled:a}=oP(e,r);a||n.clientHeight===0||(n.scrollHeight<=n.clientHeight?t.call(r):V7(e))}const GIe={async mounted(e,t){const{instance:n,value:r}=t;Bs({scope:Fo,from:"the directive v-infinite-scroll",replacement:"the el-scrollbar infinite scroll",version:"3.0.0",ref:"https://element-plus.org/en-US/component/scrollbar#infinite-scroll"},!0),et(r)||nr(Fo,"'v-infinite-scroll' binding value must be a function"),await Ue();const{delay:a,immediate:i}=oP(e,n),o=FI(e,!0),s=o===window?document.documentElement:o,l=Ku(WIe.bind(null,e,r),a);if(o){if(e[Fo]={instance:n,container:o,containerEl:s,delay:a,cb:r,onScroll:l,lastScrollTop:s.scrollTop},i){const u=new MutationObserver(Ku(Kx.bind(null,e,r),50));e[Fo].observer=u,u.observe(e,{childList:!0,subtree:!0}),Kx(e,r)}o.addEventListener("scroll",l)}},unmounted(e){if(!e.ElInfiniteScroll)return;const{container:t,onScroll:n}=e[Fo];t==null||t.removeEventListener("scroll",n),V7(e)},async updated(e){if(!e.ElInfiniteScroll)await Ue();else{const{containerEl:t,cb:n,observer:r}=e[Fo];t.clientHeight&&r&&Kx(e,n)}}},KE=GIe;KE.install=e=>{e.directive("InfiniteScroll",KE)};const UIe=KE;function KIe(e,t){let n;const r=H(!1),a=Qt({...e,originalPosition:"",originalOverflow:"",visible:!1});function i(f){a.text=f}function o(){const f=a.parent,h=d.ns;if(!f.vLoadingAddClassList){let v=f.getAttribute("loading-number");v=Number.parseInt(v)-1,v?f.setAttribute("loading-number",v.toString()):(Ha(f,h.bm("parent","relative")),f.removeAttribute("loading-number")),Ha(f,h.bm("parent","hidden"))}s(),c.unmount()}function s(){var f,h;(h=(f=d.$el)==null?void 0:f.parentNode)==null||h.removeChild(d.$el)}function l(){var f;e.beforeClose&&!e.beforeClose()||(r.value=!0,clearTimeout(n),n=setTimeout(u,400),a.visible=!1,(f=e.closed)==null||f.call(e))}function u(){if(!r.value)return;const f=a.parent;r.value=!1,f.vLoadingAddClassList=void 0,o()}const c=bH(ye({name:"ElLoading",setup(f,{expose:h}){const{ns:v,zIndex:p}=Xw("loading");return h({ns:v,zIndex:p}),()=>{const g=a.spinner||a.svg,m=ot("svg",{class:"circular",viewBox:a.svgViewBox?a.svgViewBox:"0 0 50 50",...g?{innerHTML:g}:{}},[ot("circle",{class:"path",cx:"25",cy:"25",r:"20",fill:"none"})]),b=a.text?ot("p",{class:v.b("text")},[a.text]):void 0;return ot(ya,{name:v.b("fade"),onAfterLeave:u},{default:G(()=>[gt(V("div",{style:{backgroundColor:a.background||""},class:[v.b("mask"),a.customClass,v.is("fullscreen",a.fullscreen)]},[ot("div",{class:v.b("spinner")},[m,b])]),[[ln,a.visible]])])})}}}));Object.assign(c._context,t??{});const d=c.mount(document.createElement("div"));return{...Jr(a),setText:i,removeElLoadingChild:s,close:l,handleAfterLeave:u,vm:d,get $el(){return d.$el}}}let P0;const Xh=function(e={},t){if(!cn)return;const n=YIe(e);if(n.fullscreen&&P0)return P0;const r=KIe({...n,closed:()=>{var i;(i=n.closed)==null||i.call(n),n.fullscreen&&(P0=void 0)}},t??Xh._context);jIe(n,n.parent,r),mV(n,n.parent,r),n.parent.vLoadingAddClassList=()=>mV(n,n.parent,r);let a=n.parent.getAttribute("loading-number");return a?a=`${Number.parseInt(a)+1}`:a="1",n.parent.setAttribute("loading-number",a),n.parent.appendChild(r.$el),Ue(()=>r.visible.value=n.visible),n.fullscreen&&(P0=r),r},YIe=e=>{let t;return qe(e.target)?t=document.querySelector(e.target)??document.body:t=e.target||document.body,{parent:t===document.body||e.body?document.body:t,background:e.background||"",svg:e.svg||"",svgViewBox:e.svgViewBox||"",spinner:e.spinner||!1,text:e.text||"",fullscreen:t===document.body&&(e.fullscreen??!0),lock:e.lock??!1,customClass:e.customClass||"",visible:e.visible??!0,beforeClose:e.beforeClose,closed:e.closed,target:t}},jIe=async(e,t,n)=>{const{nextZIndex:r}=n.vm.zIndex||n.vm._.exposed.zIndex,a={};if(e.fullscreen)n.originalPosition.value=Il(document.body,"position"),n.originalOverflow.value=Il(document.body,"overflow"),a.zIndex=r();else if(e.parent===document.body){n.originalPosition.value=Il(document.body,"position"),await Ue();for(const i of["top","left"]){const o=i==="top"?"scrollTop":"scrollLeft";a[i]=`${e.target.getBoundingClientRect()[i]+document.body[o]+document.documentElement[o]-Number.parseInt(Il(document.body,`margin-${i}`),10)}px`}for(const i of["height","width"])a[i]=`${e.target.getBoundingClientRect()[i]}px`}else n.originalPosition.value=Il(t,"position");for(const[i,o]of Object.entries(a))n.$el.style[i]=o},mV=(e,t,n)=>{const r=n.vm.ns||n.vm._.exposed.ns;["absolute","fixed","sticky"].includes(n.originalPosition.value)?Ha(t,r.bm("parent","relative")):go(t,r.bm("parent","relative")),e.fullscreen&&e.lock?go(t,r.bm("parent","hidden")):Ha(t,r.bm("parent","hidden"))};Xh._context=null;const cg=Symbol("ElLoading"),pd=e=>`element-loading-${ru(e)}`,yV=(e,t)=>{const n=t.instance,r=u=>yt(t.value)?t.value[u]:void 0,a=u=>H(qe(u)&&(n==null?void 0:n[u])||u),i=u=>a(r(u)||e.getAttribute(pd(u))),o=r("fullscreen")??t.modifiers.fullscreen,s={text:i("text"),svg:i("svg"),svgViewBox:i("svgViewBox"),spinner:i("spinner"),background:i("background"),customClass:i("customClass"),fullscreen:o,target:r("target")??(o?void 0:e),body:r("body")??t.modifiers.body,lock:r("lock")??t.modifiers.lock},l=Xh(s);l._context=Og._context,e[cg]={options:s,instance:l}},qIe=(e,t)=>{for(const n of Object.keys(e))Hn(e[n])&&(e[n].value=t[n])},Og={mounted(e,t){t.value&&yV(e,t)},updated(e,t){const n=e[cg];if(!t.value){n==null||n.instance.close(),e[cg]=null;return}n?qIe(n.options,yt(t.value)?t.value:{text:e.getAttribute(pd("text")),svg:e.getAttribute(pd("svg")),svgViewBox:e.getAttribute(pd("svgViewBox")),spinner:e.getAttribute(pd("spinner")),background:e.getAttribute(pd("background")),customClass:e.getAttribute(pd("customClass"))}):yV(e,t)},unmounted(e){var t;(t=e[cg])==null||t.instance.close(),e[cg]=null}};Og._context=null;const XIe={install(e){Xh._context=e._context,Og._context=e._context,e.directive("loading",Og),e.config.globalProperties.$loading=Xh},directive:Og,service:Xh},$7=["primary","success","info","warning","error"],B7=["top","top-left","top-right","bottom","bottom-left","bottom-right"],Ra=sr({customClass:"",dangerouslyUseHTMLString:!1,duration:3e3,icon:void 0,id:"",message:"",onClose:void 0,showClose:!1,type:"info",plain:!1,offset:16,placement:void 0,zIndex:0,grouping:!1,repeatNum:1,appendTo:cn?document.body:void 0}),ZIe=Oe({customClass:{type:String,default:Ra.customClass},dangerouslyUseHTMLString:{type:Boolean,default:Ra.dangerouslyUseHTMLString},duration:{type:Number,default:Ra.duration},icon:{type:An,default:Ra.icon},id:{type:String,default:Ra.id},message:{type:oe([String,Object,Function]),default:Ra.message},onClose:{type:oe(Function),default:Ra.onClose},showClose:{type:Boolean,default:Ra.showClose},type:{type:String,values:$7,default:Ra.type},plain:{type:Boolean,default:Ra.plain},offset:{type:Number,default:Ra.offset},placement:{type:String,values:B7,default:Ra.placement},zIndex:{type:Number,default:Ra.zIndex},grouping:{type:Boolean,default:Ra.grouping},repeatNum:{type:Number,default:Ra.repeatNum}}),JIe={destroy:()=>!0},Yo=yw({}),QIe=e=>(Yo[e]||(Yo[e]=yw([])),Yo[e]),eMe=(e,t)=>{const n=Yo[t]||[],r=n.findIndex(o=>o.id===e),a=n[r];let i;return r>0&&(i=n[r-1]),{current:a,prev:i}},tMe=(e,t)=>{const{prev:n}=eMe(e,t);return n?n.vm.exposed.bottom.value:0},nMe=(e,t,n)=>(Yo[n]||[]).findIndex(r=>r.id===e)>0?16:t,rMe=["id"],aMe=["innerHTML"];var iMe=ye({name:"ElMessage",__name:"message",props:ZIe,emits:JIe,setup(e,{expose:t,emit:n}){const{Close:r}=iM,a=e,i=n,o=H(!1),{ns:s,zIndex:l}=Xw("message"),{currentZIndex:u,nextZIndex:c}=l,d=H(),f=H(!1),h=H(0);let v;const p=M(()=>a.type?a.type==="error"?"danger":a.type:"info"),g=M(()=>{const P=a.type;return{[s.bm("icon",P)]:P&&mc[P]}}),m=M(()=>a.icon||mc[a.type]||""),b=M(()=>a.placement||"top"),_=M(()=>tMe(a.id,b.value)),w=M(()=>Math.max(nMe(a.id,a.offset,b.value)+_.value,a.offset)),S=M(()=>h.value+w.value),x=M(()=>b.value.includes("left")?s.is("left"):b.value.includes("right")?s.is("right"):s.is("center")),C=M(()=>b.value.startsWith("top")?"top":"bottom"),T=M(()=>({[C.value]:`${w.value}px`,zIndex:u.value}));function E(){a.duration!==0&&({stop:v}=cv(()=>{A()},a.duration))}function k(){v==null||v()}function A(){f.value=!1,Ue(()=>{var P;o.value||((P=a.onClose)==null||P.call(a),i("destroy"))})}function I(P){Mn(P)===De.esc&&A()}return St(()=>{E(),c(),f.value=!0}),_e(()=>a.repeatNum,()=>{k(),E()}),gn(document,"keydown",I),Kn(d,()=>{h.value=d.value.getBoundingClientRect().height}),t({visible:f,bottom:S,close:A}),(P,R)=>(L(),ve(ya,{name:y(s).b("fade"),onBeforeEnter:R[0]||(R[0]=O=>o.value=!0),onBeforeLeave:e.onClose,onAfterLeave:R[1]||(R[1]=O=>P.$emit("destroy")),persisted:""},{default:G(()=>[gt(j("div",{id:e.id,ref_key:"messageRef",ref:d,class:B([y(s).b(),{[y(s).m(e.type)]:e.type},y(s).is("closable",e.showClose),y(s).is("plain",e.plain),y(s).is("bottom",C.value==="bottom"),x.value,e.customClass]),style:tt(T.value),role:"alert",onMouseenter:k,onMouseleave:E},[e.repeatNum>1?(L(),ve(y(EG),{key:0,value:e.repeatNum,type:p.value,class:B(y(s).e("badge"))},null,8,["value","type","class"])):fe("v-if",!0),m.value?(L(),ve(y(Ze),{key:1,class:B([y(s).e("icon"),g.value])},{default:G(()=>[(L(),ve(Et(m.value)))]),_:1},8,["class"])):fe("v-if",!0),!e.dangerouslyUseHTMLString||P.$slots.default?(L(),K("p",{key:2,class:B(y(s).e("content"))},[he(P.$slots,"default",{},()=>[Le(ce(e.message),1)])],2)):(L(),K(ze,{key:3},[fe(" Caution here, message could've been compromised, never use user's input as message "),j("p",{class:B(y(s).e("content")),innerHTML:e.message},null,10,aMe)],2112)),e.showClose?(L(),ve(y(Ze),{key:4,class:B(y(s).e("closeBtn")),onClick:ut(A,["stop"])},{default:G(()=>[V(y(r))]),_:1},8,["class"])):fe("v-if",!0)],46,rMe),[[ln,f.value]])]),_:3},8,["name","onBeforeLeave"]))}}),oMe=iMe;let sMe=1;const lMe=e=>{if(!e.appendTo)e.appendTo=document.body;else if(qe(e.appendTo)){let t=document.querySelector(e.appendTo);ki(t)||(wn("ElMessage","the appendTo option is not an HTMLElement. Falling back to document.body."),t=document.body),e.appendTo=t}},uMe=e=>{!e.placement&&qe(Na.placement)&&Na.placement&&(e.placement=Na.placement),e.placement||(e.placement="top"),B7.includes(e.placement)||(wn("ElMessage",`Invalid placement: ${e.placement}. Falling back to 'top'.`),e.placement="top")},F7=e=>{const t=!e||qe(e)||Vn(e)||et(e)?{message:e}:e,n={...Ra,...t};return lMe(n),uMe(n),En(Na.grouping)&&!n.grouping&&(n.grouping=Na.grouping),Je(Na.duration)&&n.duration===3e3&&(n.duration=Na.duration),Je(Na.offset)&&n.offset===16&&(n.offset=Na.offset),En(Na.showClose)&&!n.showClose&&(n.showClose=Na.showClose),En(Na.plain)&&!n.plain&&(n.plain=Na.plain),n},cMe=e=>{const t=Yo[e.props.placement||"top"],n=t.indexOf(e);if(n===-1)return;t.splice(n,1);const{handler:r}=e;r.close()},dMe=({appendTo:e,...t},n)=>{const r=`message_${sMe++}`,a=t.onClose,i=document.createElement("div"),o={...t,id:r,onClose:()=>{a==null||a(),cMe(u)},onDestroy:()=>{hc(null,i)}},s=V(oMe,o,et(o.message)||Vn(o.message)?{default:et(o.message)?o.message:()=>o.message}:null);s.appContext=n||bf._context,hc(s,i),e.appendChild(i.firstElementChild);const l=s.component,u={id:r,vnode:s,vm:l,handler:{close:()=>{l.exposed.close()}},props:s.component.props};return u},bf=(e={},t)=>{if(!cn)return{close:()=>{}};const n=F7(e),r=QIe(n.placement||"top");if(n.grouping&&r.length){const i=r.find(({vnode:o})=>{var s;return((s=o.props)==null?void 0:s.message)===n.message});if(i)return i.props.repeatNum+=1,i.props.type=n.type,i.handler}if(Je(Na.max)&&r.length>=Na.max)return{close:()=>{}};const a=dMe(n,t);return r.push(a),a.handler};$7.forEach(e=>{bf[e]=(t={},n)=>bf({...F7(t),type:e},n)});function fMe(e){for(const t in Yo)if(un(Yo,t)){const n=[...Yo[t]];for(const r of n)(!e||e===r.props.type)&&r.handler.close()}}function hMe(e){Yo[e]&&[...Yo[e]].forEach(t=>t.handler.close())}bf.closeAll=fMe;bf.closeAllByPlacement=hMe;bf._context=null;const Rn=nG(bf,"$message");var vMe=ye({name:"ElMessageBox",directives:{TrapFocus:Gpe},components:{ElButton:Xr,ElFocusTrap:Uv,ElInput:va,ElOverlay:PM,ElIcon:Ze,...iM},inheritAttrs:!1,props:{buttonSize:{type:String,validator:$U},modal:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},closeOnHashChange:{type:Boolean,default:!0},center:Boolean,draggable:Boolean,overflow:Boolean,roundButton:Boolean,container:{type:String,default:"body"},boxType:{type:String,default:""}},emits:["vanish","action"],setup(e,{emit:t}){const{locale:n,zIndex:r,ns:a,size:i}=Xw("message-box",M(()=>e.buttonSize)),{t:o}=n,{nextZIndex:s}=r,l=H(!1),u=Qt({autofocus:!0,beforeClose:null,callback:null,cancelButtonText:"",cancelButtonClass:"",confirmButtonText:"",confirmButtonClass:"",cancelButtonType:"",confirmButtonType:"primary",customClass:"",customStyle:{},dangerouslyUseHTMLString:!1,distinguishCancelAndClose:!1,icon:"",closeIcon:"",inputPattern:null,inputPlaceholder:"",inputType:"text",inputValue:"",inputValidator:void 0,inputErrorMessage:"",message:"",modalFade:!0,modalClass:"",showCancelButton:!1,showConfirmButton:!0,type:"",title:void 0,showInput:!1,action:"",confirmButtonLoading:!1,cancelButtonLoading:!1,confirmButtonLoadingIcon:$s(es),cancelButtonLoadingIcon:$s(es),confirmButtonDisabled:!1,editorErrorMessage:"",validateError:!1,zIndex:s()}),c=M(()=>{const O=u.type;return{[a.bm("icon",O)]:O&&mc[O]}}),d=ba(),f=ba(),h=M(()=>{const O=u.type;return u.icon||O&&mc[O]||""}),v=M(()=>!!u.message),p=H(),g=H(),m=H(),b=H(),_=H(),w=M(()=>u.confirmButtonClass);_e(()=>u.inputValue,async O=>{await Ue(),e.boxType==="prompt"&&O&&A()},{immediate:!0}),_e(()=>l.value,O=>{var $;O&&(e.boxType!=="prompt"&&(u.autofocus?m.value=(($=_.value)==null?void 0:$.$el)??p.value:m.value=p.value),u.zIndex=s()),e.boxType==="prompt"&&(O?Ue().then(()=>{b.value&&b.value.$el&&(u.autofocus?m.value=I()??p.value:m.value=p.value)}):(u.editorErrorMessage="",u.validateError=!1))});const{isDragging:S}=yW(p,g,M(()=>e.draggable),M(()=>e.overflow));St(async()=>{await Ue(),e.closeOnHashChange&&window.addEventListener("hashchange",x)}),yn(()=>{e.closeOnHashChange&&window.removeEventListener("hashchange",x)});function x(){l.value&&(l.value=!1,Ue(()=>{u.action&&t("action",u.action)}))}const C=()=>{e.closeOnClickModal&&k(u.distinguishCancelAndClose?"close":"cancel")},T=XI(C),E=O=>{var $;if(u.inputType!=="textarea"&&!(($=b.value)!=null&&$.isComposing))return O.preventDefault(),k("confirm")},k=O=>{var $;e.boxType==="prompt"&&O==="confirm"&&!A()||(u.action=O,u.beforeClose?($=u.beforeClose)==null||$.call(u,O,u,x):x())},A=()=>{if(e.boxType==="prompt"){const O=u.inputPattern;if(O&&!O.test(u.inputValue||""))return u.editorErrorMessage=u.inputErrorMessage||o("el.messagebox.error"),u.validateError=!0,!1;const $=u.inputValidator;if(et($)){const N=$(u.inputValue);if(N===!1)return u.editorErrorMessage=u.inputErrorMessage||o("el.messagebox.error"),u.validateError=!0,!1;if(qe(N))return u.editorErrorMessage=N,u.validateError=!0,!1}}return u.editorErrorMessage="",u.validateError=!1,!0},I=()=>{var $;const O=($=b.value)==null?void 0:$.$refs;return(O==null?void 0:O.input)??(O==null?void 0:O.textarea)},P=()=>{k("close")},R=()=>{e.closeOnPressEscape&&P()};return e.lockScroll&&Bw(l,{ns:a}),{...Jr(u),ns:a,overlayEvent:T,visible:l,hasMessage:v,typeClass:c,contentId:d,inputId:f,btnSize:i,iconComponent:h,confirmButtonClasses:w,rootRef:p,focusStartRef:m,headerRef:g,inputRef:b,isDragging:S,confirmRef:_,doClose:x,handleClose:P,onCloseRequested:R,handleWrapperClick:C,handleInputEnter:E,handleAction:k,t:o}}});const pMe=["aria-label","aria-describedby"],gMe=["aria-label"],mMe=["id"];function yMe(e,t,n,r,a,i){const o=Ie("el-icon"),s=Ie("el-input"),l=Ie("el-button"),u=Ie("el-focus-trap"),c=Ie("el-overlay");return L(),ve(ya,{name:"fade-in-linear",onAfterLeave:t[11]||(t[11]=d=>e.$emit("vanish")),persisted:""},{default:G(()=>[gt(V(c,{"z-index":e.zIndex,"overlay-class":[e.ns.is("message-box"),e.modalClass],mask:e.modal},{default:G(()=>[j("div",{role:"dialog","aria-label":e.title,"aria-modal":"true","aria-describedby":e.showInput?void 0:e.contentId,class:B(`${e.ns.namespace.value}-overlay-message-box`),onClick:t[8]||(t[8]=(...d)=>e.overlayEvent.onClick&&e.overlayEvent.onClick(...d)),onMousedown:t[9]||(t[9]=(...d)=>e.overlayEvent.onMousedown&&e.overlayEvent.onMousedown(...d)),onMouseup:t[10]||(t[10]=(...d)=>e.overlayEvent.onMouseup&&e.overlayEvent.onMouseup(...d))},[V(u,{loop:"",trapped:e.visible,"focus-trap-el":e.rootRef,"focus-start-el":e.focusStartRef,onReleaseRequested:e.onCloseRequested},{default:G(()=>[j("div",{ref:"rootRef",class:B([e.ns.b(),e.customClass,e.ns.is("draggable",e.draggable),e.ns.is("dragging",e.isDragging),{[e.ns.m("center")]:e.center}]),style:tt(e.customStyle),tabindex:"-1",onClick:t[7]||(t[7]=ut(()=>{},["stop"]))},[e.title!==null&&e.title!==void 0?(L(),K("div",{key:0,ref:"headerRef",class:B([e.ns.e("header"),{"show-close":e.showClose}])},[j("div",{class:B(e.ns.e("title"))},[e.iconComponent&&e.center?(L(),ve(o,{key:0,class:B([e.ns.e("status"),e.typeClass])},{default:G(()=>[(L(),ve(Et(e.iconComponent)))]),_:1},8,["class"])):fe("v-if",!0),j("span",null,ce(e.title),1)],2),e.showClose?(L(),K("button",{key:0,type:"button",class:B(e.ns.e("headerbtn")),"aria-label":e.t("el.messagebox.close"),onClick:t[0]||(t[0]=d=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel")),onKeydown:t[1]||(t[1]=Yn(ut(d=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel"),["prevent"]),["enter"]))},[V(o,{class:B(e.ns.e("close"))},{default:G(()=>[(L(),ve(Et(e.closeIcon||"close")))]),_:1},8,["class"])],42,gMe)):fe("v-if",!0)],2)):fe("v-if",!0),j("div",{id:e.contentId,class:B(e.ns.e("content"))},[j("div",{class:B(e.ns.e("container"))},[e.iconComponent&&!e.center&&e.hasMessage?(L(),ve(o,{key:0,class:B([e.ns.e("status"),e.typeClass])},{default:G(()=>[(L(),ve(Et(e.iconComponent)))]),_:1},8,["class"])):fe("v-if",!0),e.hasMessage?(L(),K("div",{key:1,class:B(e.ns.e("message"))},[he(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(L(),ve(Et(e.showInput?"label":"p"),{key:1,for:e.showInput?e.inputId:void 0,innerHTML:e.message},null,8,["for","innerHTML"])):(L(),ve(Et(e.showInput?"label":"p"),{key:0,for:e.showInput?e.inputId:void 0,textContent:ce(e.message)},null,8,["for","textContent"]))])],2)):fe("v-if",!0)],2),gt(j("div",{class:B(e.ns.e("input"))},[V(s,{id:e.inputId,ref:"inputRef",modelValue:e.inputValue,"onUpdate:modelValue":t[2]||(t[2]=d=>e.inputValue=d),type:e.inputType,placeholder:e.inputPlaceholder,"aria-invalid":e.validateError,class:B({invalid:e.validateError}),onKeydown:Yn(e.handleInputEnter,["enter"])},null,8,["id","modelValue","type","placeholder","aria-invalid","class","onKeydown"]),j("div",{class:B(e.ns.e("errormsg")),style:tt({visibility:e.editorErrorMessage?"visible":"hidden"})},ce(e.editorErrorMessage),7)],2),[[ln,e.showInput]])],10,mMe),e.showCancelButton||e.showConfirmButton?(L(),K("div",{key:1,class:B(e.ns.e("btns"))},[e.showCancelButton?(L(),ve(l,{key:0,type:e.cancelButtonType==="text"?"":e.cancelButtonType,text:e.cancelButtonType==="text",loading:e.cancelButtonLoading,"loading-icon":e.cancelButtonLoadingIcon,class:B([e.cancelButtonClass]),round:e.roundButton,size:e.btnSize,onClick:t[3]||(t[3]=d=>e.handleAction("cancel")),onKeydown:t[4]||(t[4]=Yn(ut(d=>e.handleAction("cancel"),["prevent"]),["enter"]))},{default:G(()=>[Le(ce(e.cancelButtonText||e.t("el.messagebox.cancel")),1)]),_:1},8,["type","text","loading","loading-icon","class","round","size"])):fe("v-if",!0),gt(V(l,{ref:"confirmRef",type:e.confirmButtonType==="text"?"":e.confirmButtonType,text:e.confirmButtonType==="text",loading:e.confirmButtonLoading,"loading-icon":e.confirmButtonLoadingIcon,class:B([e.confirmButtonClasses]),round:e.roundButton,disabled:e.confirmButtonDisabled,size:e.btnSize,onClick:t[5]||(t[5]=d=>e.handleAction("confirm")),onKeydown:t[6]||(t[6]=Yn(ut(d=>e.handleAction("confirm"),["prevent"]),["enter"]))},{default:G(()=>[Le(ce(e.confirmButtonText||e.t("el.messagebox.confirm")),1)]),_:1},8,["type","text","loading","loading-icon","class","round","disabled","size"]),[[ln,e.showConfirmButton]])],2)):fe("v-if",!0)],6)]),_:3},8,["trapped","focus-trap-el","focus-start-el","onReleaseRequested"])],42,pMe)]),_:3},8,["z-index","overlay-class","mask"]),[[ln,e.visible]])]),_:3})}var bMe=Gr(vMe,[["render",yMe]]);const Em=new Map,_Me=e=>{let t=document.body;return e.appendTo&&(qe(e.appendTo)&&(t=document.querySelector(e.appendTo)),ki(e.appendTo)&&(t=e.appendTo),ki(t)||(wn("ElMessageBox","the appendTo option is not an HTMLElement. Falling back to document.body."),t=document.body)),t},Yx=(e,t)=>{var r;const n=(r=e.component)==null?void 0:r.proxy;return()=>n.handleAction(t)},wMe=(e,t,n=null)=>{const r=V(bMe,e,et(e.message)||Vn(e.message)?{default:et(e.message)?()=>e.message({confirm:Yx(r,"confirm"),cancel:Yx(r,"cancel"),close:Yx(r,"close")}):()=>e.message}:null);return r.appContext=n,hc(r,t),_Me(e).appendChild(t.firstElementChild),r.component},SMe=()=>document.createElement("div"),xMe=(e,t)=>{const n=SMe();e.onVanish=()=>{hc(null,n),Em.delete(a)},e.onAction=i=>{const o=Em.get(a);let s;e.showInput?s={value:a.inputValue,action:i}:s=i,e.callback?e.callback(s,r.proxy):i==="cancel"||i==="close"?e.distinguishCancelAndClose&&i!=="cancel"?o.reject("close"):o.reject("cancel"):o.resolve(s)};const r=wMe(e,n,t),a=r.proxy;for(const i in e)un(e,i)&&!un(a.$props,i)&&(i==="closeIcon"&&yt(e[i])?a[i]=$s(e[i]):a[i]=e[i]);return a.visible=!0,a};function Yv(e,t=null){if(!cn)return Promise.reject();let n;return qe(e)||Vn(e)?e={message:e}:n=e.callback,new Promise((r,a)=>{const i=xMe(e,t??Yv._context);Em.set(i,{options:e,callback:n,resolve:r,reject:a})})}const CMe=["alert","confirm","prompt"],TMe={alert:{closeOnPressEscape:!1,closeOnClickModal:!1},confirm:{showCancelButton:!0},prompt:{showCancelButton:!0,showInput:!0}};CMe.forEach(e=>{Yv[e]=EMe(e)});function EMe(e){return(t,n,r,a)=>{let i="";return yt(n)?(r=n,i=""):qt(n)?i="":i=n,Yv(Object.assign({title:i,message:t,type:"",...TMe[e]},r,{boxType:e}),a)}}Yv.close=()=>{Em.forEach((e,t)=>{t.doClose()}),Em.clear()};Yv._context=null;const Vu=Yv;Vu.install=e=>{Vu._context=e._context,e.config.globalProperties.$msgbox=Vu,e.config.globalProperties.$messageBox=Vu,e.config.globalProperties.$alert=Vu.alert,e.config.globalProperties.$confirm=Vu.confirm,e.config.globalProperties.$prompt=Vu.prompt};const Mc=Vu,z7=["primary","success","info","warning","error"],kMe=Oe({customClass:{type:String,default:""},dangerouslyUseHTMLString:Boolean,duration:{type:Number,default:4500},icon:{type:An},id:{type:String,default:""},message:{type:oe([String,Object,Function]),default:""},offset:{type:Number,default:0},onClick:{type:oe(Function),default:()=>{}},onClose:{type:oe(Function),required:!0},position:{type:String,values:["top-right","top-left","bottom-right","bottom-left"],default:"top-right"},showClose:{type:Boolean,default:!0},title:{type:String,default:""},type:{type:String,values:[...z7,""],default:""},zIndex:Number,closeIcon:{type:An,default:To}}),AMe={destroy:()=>!0},IMe=["id"],MMe=["textContent"],PMe={key:0},LMe=["innerHTML"];var DMe=ye({name:"ElNotification",__name:"notification",props:kMe,emits:AMe,setup(e,{expose:t}){const n=e,{ns:r,zIndex:a}=Xw("notification"),{nextZIndex:i,currentZIndex:o}=a,s=H(!1);let l;const u=M(()=>{const b=n.type;return b&&mc[n.type]?r.m(b):""}),c=M(()=>n.type&&mc[n.type]||n.icon),d=M(()=>n.position.endsWith("right")?"right":"left"),f=M(()=>n.position.startsWith("top")?"top":"bottom"),h=M(()=>({[f.value]:`${n.offset}px`,zIndex:n.zIndex??o.value}));function v(){n.duration>0&&({stop:l}=cv(()=>{s.value&&g()},n.duration))}function p(){l==null||l()}function g(){s.value=!1}function m(b){switch(Mn(b)){case De.delete:case De.backspace:p();break;case De.esc:s.value&&g();break;default:v();break}}return St(()=>{v(),i(),s.value=!0}),gn(document,"keydown",m),t({visible:s,close:g}),(b,_)=>(L(),ve(ya,{name:y(r).b("fade"),onBeforeLeave:e.onClose,onAfterLeave:_[1]||(_[1]=w=>b.$emit("destroy")),persisted:""},{default:G(()=>[gt(j("div",{id:e.id,class:B([y(r).b(),e.customClass,d.value]),style:tt(h.value),role:"alert",onMouseenter:p,onMouseleave:v,onClick:_[0]||(_[0]=(...w)=>e.onClick&&e.onClick(...w))},[c.value?(L(),ve(y(Ze),{key:0,class:B([y(r).e("icon"),u.value])},{default:G(()=>[(L(),ve(Et(c.value)))]),_:1},8,["class"])):fe("v-if",!0),j("div",{class:B(y(r).e("group"))},[j("h2",{class:B(y(r).e("title")),textContent:ce(e.title)},null,10,MMe),gt(j("div",{class:B(y(r).e("content")),style:tt(e.title?void 0:{margin:0})},[he(b.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(L(),K(ze,{key:1},[fe(" Caution here, message could've been compromised, never use user's input as message "),j("p",{innerHTML:e.message},null,8,LMe)],2112)):(L(),K("p",PMe,ce(e.message),1))])],6),[[ln,e.message]]),e.showClose?(L(),ve(y(Ze),{key:0,class:B(y(r).e("closeBtn")),onClick:ut(g,["stop"])},{default:G(()=>[(L(),ve(Et(e.closeIcon)))]),_:1},8,["class"])):fe("v-if",!0)],2)],46,IMe),[[ln,s.value]])]),_:3},8,["name","onBeforeLeave"]))}}),RMe=DMe;const wv={"top-left":[],"top-right":[],"bottom-left":[],"bottom-right":[]},u_=16;let OMe=1;const _f=function(e={},t){if(!cn)return{close:()=>{}};(qe(e)||Vn(e))&&(e={message:e});const n=e.position||"top-right";let r=e.offset||0;wv[n].forEach(({vm:c})=>{var d;r+=(((d=c.el)==null?void 0:d.offsetHeight)||0)+u_}),r+=u_;const a=`notification_${OMe++}`,i=e.onClose,o={...e,offset:r,id:a,onClose:()=>{NMe(a,n,i)}};let s=document.body;ki(e.appendTo)?s=e.appendTo:qe(e.appendTo)&&(s=document.querySelector(e.appendTo)),ki(s)||(wn("ElNotification","the appendTo option is not an HTMLElement. Falling back to document.body."),s=document.body);const l=document.createElement("div"),u=V(RMe,o,et(o.message)?o.message:Vn(o.message)?()=>o.message:null);return u.appContext=qt(t)?_f._context:t,u.props.onDestroy=()=>{hc(null,l)},hc(u,l),wv[n].push({vm:u}),s.appendChild(l.firstElementChild),{close:()=>{u.component.exposed.visible.value=!1}}};z7.forEach(e=>{_f[e]=(t={},n)=>((qe(t)||Vn(t))&&(t={message:t}),_f({...t,type:e},n))});function NMe(e,t,n){const r=wv[t],a=r.findIndex(({vm:u})=>{var c;return((c=u.component)==null?void 0:c.props.id)===e});if(a===-1)return;const{vm:i}=r[a];if(!i)return;n==null||n(i);const o=i.el.offsetHeight,s=t.split("-")[0];r.splice(a,1);const l=r.length;if(!(l<1))for(let u=a;u{t.component.exposed.visible.value=!1})}function $Me(e="top-right"){var n,r,a,i;let t=((a=(r=(n=wv[e][0])==null?void 0:n.vm.component)==null?void 0:r.props)==null?void 0:a.offset)||0;for(const{vm:o}of wv[e])o.component.props.offset=t,t+=(((i=o.el)==null?void 0:i.offsetHeight)||0)+u_}_f.closeAll=VMe;_f.updateOffsets=$Me;_f._context=null;const BMe=nG(_f,"$notify"),FMe=Oe({trigger:Ws.trigger,triggerKeys:Ws.triggerKeys,placement:Yb.placement,disabled:Ws.disabled,visible:Tn.visible,transition:Tn.transition,popperOptions:Yb.popperOptions,tabindex:Yb.tabindex,content:Tn.content,popperStyle:Tn.popperStyle,popperClass:Tn.popperClass,enterable:{...Tn.enterable,default:!0},effect:{...Tn.effect,default:"light"},teleported:Tn.teleported,appendTo:Tn.appendTo,title:String,width:{type:[String,Number],default:150},offset:{type:Number,default:void 0},showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0},showArrow:{type:Boolean,default:!0},persistent:{type:Boolean,default:!0},"onUpdate:visible":{type:Function}}),zMe={"update:visible":e=>En(e),"before-enter":()=>!0,"before-leave":()=>!0,"after-enter":()=>!0,"after-leave":()=>!0},HMe="onUpdate:visible";var WMe=ye({name:"ElPopover",__name:"popover",props:FMe,emits:zMe,setup(e,{expose:t,emit:n}){const r=e,a=n,i=M(()=>r[HMe]),o=Ee("popover"),s=H(),l=M(()=>{var m;return(m=y(s))==null?void 0:m.popperRef}),u=M(()=>[{width:ur(r.width)},r.popperStyle]),c=M(()=>[o.b(),r.popperClass,{[o.m("plain")]:!!r.content}]),d=M(()=>r.transition===`${o.namespace.value}-fade-in-linear`),f=()=>{var m;(m=s.value)==null||m.hide()},h=()=>{a("before-enter")},v=()=>{a("before-leave")},p=()=>{a("after-enter")},g=()=>{a("update:visible",!1),a("after-leave")};return t({popperRef:l,hide:f}),(m,b)=>(L(),ve(y(ua),Mt({ref_key:"tooltipRef",ref:s},m.$attrs,{trigger:e.trigger,"trigger-keys":e.triggerKeys,placement:e.placement,disabled:e.disabled,visible:e.visible,transition:e.transition,"popper-options":e.popperOptions,tabindex:e.tabindex,content:e.content,offset:e.offset,"show-after":e.showAfter,"hide-after":e.hideAfter,"auto-close":e.autoClose,"show-arrow":e.showArrow,"aria-label":e.title,effect:e.effect,enterable:e.enterable,"popper-class":c.value,"popper-style":u.value,teleported:e.teleported,"append-to":e.appendTo,persistent:e.persistent,"gpu-acceleration":d.value,"onUpdate:visible":i.value,onBeforeShow:h,onBeforeHide:v,onShow:p,onHide:g}),{content:G(()=>[e.title?(L(),K("div",{key:0,class:B(y(o).e("title")),role:"title"},ce(e.title),3)):fe("v-if",!0),he(m.$slots,"default",{hide:f},()=>[Le(ce(e.content),1)])]),default:G(()=>[m.$slots.reference?he(m.$slots,"reference",{key:0}):fe("v-if",!0)]),_:3},16,["trigger","trigger-keys","placement","disabled","visible","transition","popper-options","tabindex","content","offset","show-after","hide-after","auto-close","show-arrow","aria-label","effect","enterable","popper-class","popper-style","teleported","append-to","persistent","gpu-acceleration","onUpdate:visible"]))}}),GMe=WMe;const bV=(e,t)=>{var r;const n=(r=t.arg||t.value)==null?void 0:r.popperRef;n&&(n.triggerRef=e)};var UMe={mounted(e,t){bV(e,t)},updated(e,t){bV(e,t)}};const KMe="popover",H7=Yce(UMe,KMe),YMe=xt(GMe,{directive:H7}),jMe="2.14.2",qMe=(e=[])=>({version:jMe,install:(n,r)=>{n[_R]||(n[_R]=!0,e.forEach(a=>n.use(a)),r&&fM(r,n,!0))}});var XMe=[Xce,Ife,Vve,hEe,Wve,Gve,Xve,EG,ope,spe,Xr,DG,nme,ome,wme,Sme,Nye,B9,zye,Qs,rye,SM,Zye,f0e,h0e,Qw,X9,z0e,hpe,j0e,q0e,X0e,Z0e,J0e,F1e,uU,q1e,X1e,d_e,mU,C_e,dwe,fwe,hwe,EU,Ehe,khe,Ze,tSe,kU,va,AU,ySe,CSe,MSe,KSe,YSe,jSe,qSe,txe,Oxe,Fxe,YMe,wG,RU,$9,pye,vye,tCe,iCe,jye,ts,bc,j1,Nge,kCe,DCe,RCe,eTe,iTe,tU,sbe,fTe,hTe,xTe,L2e,D2e,fEe,AEe,IEe,Nl,qM,uge,$Ee,WEe,GEe,ua,rke,JM,Tke,zke,vAe,CAe,qAe,XAe,iIe,oIe,hIe,EIe,FIe,zIe],ZMe=[UIe,XIe,Rn,Mc,BMe,H7],sP=qMe([...XMe,...ZMe]);sP.install;sP.version;var JMe=sP;/*! Element Plus v2.14.2 */var W7={name:"zh-cn",el:{breadcrumb:{label:"面包屑"},colorpicker:{confirm:"确定",clear:"清空",defaultLabel:"颜色选择器",description:"当前颜色 {color},按 Enter 键选择新颜色",alphaLabel:"选择透明度的值",alphaDescription:"透明度 {alpha}, 当前颜色 {color}",hueLabel:"选择色相值",hueDescription:"色相 {hue}, 当前颜色 {color}",svLabel:"选择饱和度与明度的值",svDescription:"饱和度 {saturation}, 明度 {brightness}, 当前颜色 {color}",predefineDescription:"选择 {value} 作为颜色"},datepicker:{now:"此刻",today:"今天",cancel:"取消",clear:"清空",confirm:"确定",dateTablePrompt:"使用方向键与 Enter 键可选择日期",monthTablePrompt:"使用方向键与 Enter 键可选择月份",yearTablePrompt:"使用方向键与 Enter 键可选择年份",selectedDate:"已选日期",selectDate:"选择日期",selectTime:"选择时间",startDate:"开始日期",startTime:"开始时间",endDate:"结束日期",endTime:"结束时间",prevYear:"前一年",nextYear:"后一年",prevMonth:"上个月",nextMonth:"下个月",year:"年",month1:"1 月",month2:"2 月",month3:"3 月",month4:"4 月",month5:"5 月",month6:"6 月",month7:"7 月",month8:"8 月",month9:"9 月",month10:"10 月",month11:"11 月",month12:"12 月",weeks:{sun:"日",mon:"一",tue:"二",wed:"三",thu:"四",fri:"五",sat:"六"},weeksFull:{sun:"星期日",mon:"星期一",tue:"星期二",wed:"星期三",thu:"星期四",fri:"星期五",sat:"星期六"},months:{jan:"一月",feb:"二月",mar:"三月",apr:"四月",may:"五月",jun:"六月",jul:"七月",aug:"八月",sep:"九月",oct:"十月",nov:"十一月",dec:"十二月"}},inputNumber:{decrease:"减少数值",increase:"增加数值"},select:{loading:"加载中",noMatch:"无匹配数据",noData:"无数据",placeholder:"请选择"},mention:{loading:"加载中"},dropdown:{toggleDropdown:"切换下拉选项"},cascader:{noMatch:"无匹配数据",loading:"加载中",placeholder:"请选择",noData:"暂无数据"},pagination:{goto:"前往",pagesize:"条/页",total:"共 {total} 条",pageClassifier:"页",page:"页",prev:"上一页",next:"下一页",currentPage:"第 {pager} 页",prevPages:"向前 {pager} 页",nextPages:"向后 {pager} 页",deprecationWarning:"你使用了一些已被废弃的用法,请参考 el-pagination 的官方文档"},dialog:{close:"关闭此对话框"},drawer:{close:"关闭此对话框"},messagebox:{title:"提示",confirm:"确定",cancel:"取消",error:"输入的数据不合法!",close:"关闭此对话框"},upload:{deleteTip:"按 Delete 键可删除",delete:"删除",preview:"查看图片",continue:"继续上传"},slider:{defaultLabel:"滑块介于 {min} 至 {max}",defaultRangeStartLabel:"选择起始值",defaultRangeEndLabel:"选择结束值"},table:{emptyText:"暂无数据",confirmFilter:"筛选",resetFilter:"重置",clearFilter:"全部",sumText:"合计",selectAllLabel:"选择所有行",selectRowLabel:"选择当前行",expandRowLabel:"展开当前行",collapseRowLabel:"收起当前行",sortLabel:"按 {column} 排序",filterLabel:"按 {column} 过滤"},tag:{close:"关闭此标签"},tour:{next:"下一步",previous:"上一步",finish:"结束导览",close:"关闭此对话框"},tree:{emptyText:"暂无数据"},transfer:{noMatch:"无匹配数据",noData:"无数据",titles:["列表 1","列表 2"],filterPlaceholder:"请输入搜索内容",noCheckedFormat:"共 {total} 项",hasCheckedFormat:"已选 {checked}/{total} 项"},image:{error:"加载失败"},pageHeader:{title:"返回"},popconfirm:{confirmButtonText:"确定",cancelButtonText:"取消"},carousel:{leftArrow:"上一张幻灯片",rightArrow:"下一张幻灯片",indicator:"幻灯片切换至索引 {index}"},inputOTP:{groupLabel:"一次性密码输入框",defaultLabel:"请输入第 {index} 位 OTP 字符"}}};/*! Element Plus v2.14.2 */var G7={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color.",alphaLabel:"pick alpha value",alphaDescription:"alpha {alpha}, current color is {color}",hueLabel:"pick hue value",hueDescription:"hue {hue}, current color is {color}",svLabel:"pick saturation and brightness value",svDescription:"saturation {saturation}, brightness {brightness}, current color is {color}",predefineDescription:"select {value} as the color"},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},mention:{loading:"Loading"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum",selectAllLabel:"Select all rows",selectRowLabel:"Select this row",expandRowLabel:"Expand this row",collapseRowLabel:"Collapse this row",sortLabel:"Sort by {column}",filterLabel:"Filter by {column}"},tag:{close:"Close this tag"},tour:{next:"Next",previous:"Previous",finish:"Finish",close:"Close this dialog"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"},inputOTP:{groupLabel:"OTP Input",defaultLabel:"Please enter OTP character {index}"}}};/*! + * shared v9.14.4 + * (c) 2025 kazuya kawaguchi + * Released under the MIT License. + */const c_=typeof window<"u",Pc=(e,t=!1)=>t?Symbol.for(e):Symbol(e),QMe=(e,t,n)=>ePe({l:e,k:t,s:n}),ePe=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),Fr=e=>typeof e=="number"&&isFinite(e),tPe=e=>K7(e)==="[object Date]",_c=e=>K7(e)==="[object RegExp]",aS=e=>_n(e)&&Object.keys(e).length===0,Ta=Object.assign,nPe=Object.create,fr=(e=null)=>nPe(e);let _V;const Ml=()=>_V||(_V=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:fr());function wV(e){return e.replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}const rPe=Object.prototype.hasOwnProperty;function zo(e,t){return rPe.call(e,t)}const Er=Array.isArray,br=e=>typeof e=="function",Pt=e=>typeof e=="string",Nn=e=>typeof e=="boolean",Xn=e=>e!==null&&typeof e=="object",aPe=e=>Xn(e)&&br(e.then)&&br(e.catch),U7=Object.prototype.toString,K7=e=>U7.call(e),_n=e=>{if(!Xn(e))return!1;const t=Object.getPrototypeOf(e);return t===null||t.constructor===Object},iPe=e=>e==null?"":Er(e)||_n(e)&&e.toString===U7?JSON.stringify(e,null,2):String(e);function oPe(e,t=""){return e.reduce((n,r,a)=>a===0?n+r:n+t+r,"")}function iS(e){let t=e;return()=>++t}function sPe(e,t){typeof console<"u"&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}const L0=e=>!Xn(e)||Er(e);function n1(e,t){if(L0(e)||L0(t))throw new Error("Invalid value");const n=[{src:e,des:t}];for(;n.length;){const{src:r,des:a}=n.pop();Object.keys(r).forEach(i=>{i!=="__proto__"&&(Xn(r[i])&&!Xn(a[i])&&(a[i]=Array.isArray(r[i])?[]:fr()),L0(a[i])||L0(r[i])?a[i]=r[i]:n.push({src:r[i],des:a[i]}))})}}/*! + * message-compiler v9.14.4 + * (c) 2025 kazuya kawaguchi + * Released under the MIT License. + */function lPe(e,t,n){return{line:e,column:t,offset:n}}function d_(e,t,n){return{start:e,end:t}}const uPe=/\{([0-9a-zA-Z]+)\}/g;function Y7(e,...t){return t.length===1&&cPe(t[0])&&(t=t[0]),(!t||!t.hasOwnProperty)&&(t={}),e.replace(uPe,(n,r)=>t.hasOwnProperty(r)?t[r]:"")}const j7=Object.assign,SV=e=>typeof e=="string",cPe=e=>e!==null&&typeof e=="object";function q7(e,t=""){return e.reduce((n,r,a)=>a===0?n+r:n+t+r,"")}const lP={USE_MODULO_SYNTAX:1,__EXTEND_POINT__:2},dPe={[lP.USE_MODULO_SYNTAX]:"Use modulo before '{{0}}'."};function fPe(e,t,...n){const r=Y7(dPe[e],...n||[]),a={message:String(r),code:e};return t&&(a.location=t),a}const hn={EXPECTED_TOKEN:1,INVALID_TOKEN_IN_PLACEHOLDER:2,UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER:3,UNKNOWN_ESCAPE_SEQUENCE:4,INVALID_UNICODE_ESCAPE_SEQUENCE:5,UNBALANCED_CLOSING_BRACE:6,UNTERMINATED_CLOSING_BRACE:7,EMPTY_PLACEHOLDER:8,NOT_ALLOW_NEST_PLACEHOLDER:9,INVALID_LINKED_FORMAT:10,MUST_HAVE_MESSAGES_IN_PLURAL:11,UNEXPECTED_EMPTY_LINKED_MODIFIER:12,UNEXPECTED_EMPTY_LINKED_KEY:13,UNEXPECTED_LEXICAL_ANALYSIS:14,UNHANDLED_CODEGEN_NODE_TYPE:15,UNHANDLED_MINIFIER_NODE_TYPE:16,__EXTEND_POINT__:17},hPe={[hn.EXPECTED_TOKEN]:"Expected token: '{0}'",[hn.INVALID_TOKEN_IN_PLACEHOLDER]:"Invalid token in placeholder: '{0}'",[hn.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER]:"Unterminated single quote in placeholder",[hn.UNKNOWN_ESCAPE_SEQUENCE]:"Unknown escape sequence: \\{0}",[hn.INVALID_UNICODE_ESCAPE_SEQUENCE]:"Invalid unicode escape sequence: {0}",[hn.UNBALANCED_CLOSING_BRACE]:"Unbalanced closing brace",[hn.UNTERMINATED_CLOSING_BRACE]:"Unterminated closing brace",[hn.EMPTY_PLACEHOLDER]:"Empty placeholder",[hn.NOT_ALLOW_NEST_PLACEHOLDER]:"Not allowed nest placeholder",[hn.INVALID_LINKED_FORMAT]:"Invalid linked format",[hn.MUST_HAVE_MESSAGES_IN_PLURAL]:"Plural must have messages",[hn.UNEXPECTED_EMPTY_LINKED_MODIFIER]:"Unexpected empty linked modifier",[hn.UNEXPECTED_EMPTY_LINKED_KEY]:"Unexpected empty linked key",[hn.UNEXPECTED_LEXICAL_ANALYSIS]:"Unexpected lexical analysis in token: '{0}'",[hn.UNHANDLED_CODEGEN_NODE_TYPE]:"unhandled codegen node type: '{0}'",[hn.UNHANDLED_MINIFIER_NODE_TYPE]:"unhandled mimifier node type: '{0}'"};function jv(e,t,n={}){const{domain:r,messages:a,args:i}=n,o=Y7((a||hPe)[e]||"",...i||[]),s=new SyntaxError(String(o));return s.code=e,t&&(s.location=t),s.domain=r,s}function vPe(e){throw e}const gl=" ",pPe="\r",Qa=` +`,gPe="\u2028",mPe="\u2029";function yPe(e){const t=e;let n=0,r=1,a=1,i=0;const o=C=>t[C]===pPe&&t[C+1]===Qa,s=C=>t[C]===Qa,l=C=>t[C]===mPe,u=C=>t[C]===gPe,c=C=>o(C)||s(C)||l(C)||u(C),d=()=>n,f=()=>r,h=()=>a,v=()=>i,p=C=>o(C)||l(C)||u(C)?Qa:t[C],g=()=>p(n),m=()=>p(n+i);function b(){return i=0,c(n)&&(r++,a=0),o(n)&&n++,n++,a++,t[n]}function _(){return o(n+i)&&i++,i++,t[n+i]}function w(){n=0,r=1,a=1,i=0}function S(C=0){i=C}function x(){const C=n+i;for(;C!==n;)b();i=0}return{index:d,line:f,column:h,peekOffset:v,charAt:p,currentChar:g,currentPeek:m,next:b,peek:_,reset:w,resetPeek:S,skipToPeek:x}}const Su=void 0,bPe=".",xV="'",_Pe="tokenizer";function wPe(e,t={}){const n=t.location!==!1,r=yPe(e),a=()=>r.index(),i=()=>lPe(r.line(),r.column(),r.index()),o=i(),s=a(),l={currentType:14,offset:s,startLoc:o,endLoc:o,lastType:14,lastOffset:s,lastStartLoc:o,lastEndLoc:o,braceNest:0,inLinked:!1,text:""},u=()=>l,{onError:c}=t;function d(ie,ae,ge,...be){const $e=u();if(ae.column+=ge,ae.offset+=ge,c){const Re=n?d_($e.startLoc,ae):null,Se=jv(ie,Re,{domain:_Pe,args:be});c(Se)}}function f(ie,ae,ge){ie.endLoc=i(),ie.currentType=ae;const be={type:ae};return n&&(be.loc=d_(ie.startLoc,ie.endLoc)),ge!=null&&(be.value=ge),be}const h=ie=>f(ie,14);function v(ie,ae){return ie.currentChar()===ae?(ie.next(),ae):(d(hn.EXPECTED_TOKEN,i(),0,ae),"")}function p(ie){let ae="";for(;ie.currentPeek()===gl||ie.currentPeek()===Qa;)ae+=ie.currentPeek(),ie.peek();return ae}function g(ie){const ae=p(ie);return ie.skipToPeek(),ae}function m(ie){if(ie===Su)return!1;const ae=ie.charCodeAt(0);return ae>=97&&ae<=122||ae>=65&&ae<=90||ae===95}function b(ie){if(ie===Su)return!1;const ae=ie.charCodeAt(0);return ae>=48&&ae<=57}function _(ie,ae){const{currentType:ge}=ae;if(ge!==2)return!1;p(ie);const be=m(ie.currentPeek());return ie.resetPeek(),be}function w(ie,ae){const{currentType:ge}=ae;if(ge!==2)return!1;p(ie);const be=ie.currentPeek()==="-"?ie.peek():ie.currentPeek(),$e=b(be);return ie.resetPeek(),$e}function S(ie,ae){const{currentType:ge}=ae;if(ge!==2)return!1;p(ie);const be=ie.currentPeek()===xV;return ie.resetPeek(),be}function x(ie,ae){const{currentType:ge}=ae;if(ge!==8)return!1;p(ie);const be=ie.currentPeek()===".";return ie.resetPeek(),be}function C(ie,ae){const{currentType:ge}=ae;if(ge!==9)return!1;p(ie);const be=m(ie.currentPeek());return ie.resetPeek(),be}function T(ie,ae){const{currentType:ge}=ae;if(!(ge===8||ge===12))return!1;p(ie);const be=ie.currentPeek()===":";return ie.resetPeek(),be}function E(ie,ae){const{currentType:ge}=ae;if(ge!==10)return!1;const be=()=>{const Re=ie.currentPeek();return Re==="{"?m(ie.peek()):Re==="@"||Re==="%"||Re==="|"||Re===":"||Re==="."||Re===gl||!Re?!1:Re===Qa?(ie.peek(),be()):I(ie,!1)},$e=be();return ie.resetPeek(),$e}function k(ie){p(ie);const ae=ie.currentPeek()==="|";return ie.resetPeek(),ae}function A(ie){const ae=p(ie),ge=ie.currentPeek()==="%"&&ie.peek()==="{";return ie.resetPeek(),{isModulo:ge,hasSpace:ae.length>0}}function I(ie,ae=!0){const ge=($e=!1,Re="",Se=!1)=>{const Ae=ie.currentPeek();return Ae==="{"?Re==="%"?!1:$e:Ae==="@"||!Ae?Re==="%"?!0:$e:Ae==="%"?(ie.peek(),ge($e,"%",!0)):Ae==="|"?Re==="%"||Se?!0:!(Re===gl||Re===Qa):Ae===gl?(ie.peek(),ge(!0,gl,Se)):Ae===Qa?(ie.peek(),ge(!0,Qa,Se)):!0},be=ge();return ae&&ie.resetPeek(),be}function P(ie,ae){const ge=ie.currentChar();return ge===Su?Su:ae(ge)?(ie.next(),ge):null}function R(ie){const ae=ie.charCodeAt(0);return ae>=97&&ae<=122||ae>=65&&ae<=90||ae>=48&&ae<=57||ae===95||ae===36}function O(ie){return P(ie,R)}function $(ie){const ae=ie.charCodeAt(0);return ae>=97&&ae<=122||ae>=65&&ae<=90||ae>=48&&ae<=57||ae===95||ae===36||ae===45}function N(ie){return P(ie,$)}function D(ie){const ae=ie.charCodeAt(0);return ae>=48&&ae<=57}function F(ie){return P(ie,D)}function W(ie){const ae=ie.charCodeAt(0);return ae>=48&&ae<=57||ae>=65&&ae<=70||ae>=97&&ae<=102}function z(ie){return P(ie,W)}function Y(ie){let ae="",ge="";for(;ae=F(ie);)ge+=ae;return ge}function q(ie){g(ie);const ae=ie.currentChar();return ae!=="%"&&d(hn.EXPECTED_TOKEN,i(),0,ae),ie.next(),"%"}function re(ie){let ae="";for(;;){const ge=ie.currentChar();if(ge==="{"||ge==="}"||ge==="@"||ge==="|"||!ge)break;if(ge==="%")if(I(ie))ae+=ge,ie.next();else break;else if(ge===gl||ge===Qa)if(I(ie))ae+=ge,ie.next();else{if(k(ie))break;ae+=ge,ie.next()}else ae+=ge,ie.next()}return ae}function ee(ie){g(ie);let ae="",ge="";for(;ae=N(ie);)ge+=ae;return ie.currentChar()===Su&&d(hn.UNTERMINATED_CLOSING_BRACE,i(),0),ge}function se(ie){g(ie);let ae="";return ie.currentChar()==="-"?(ie.next(),ae+=`-${Y(ie)}`):ae+=Y(ie),ie.currentChar()===Su&&d(hn.UNTERMINATED_CLOSING_BRACE,i(),0),ae}function ne(ie){return ie!==xV&&ie!==Qa}function de(ie){g(ie),v(ie,"'");let ae="",ge="";for(;ae=P(ie,ne);)ae==="\\"?ge+=le(ie):ge+=ae;const be=ie.currentChar();return be===Qa||be===Su?(d(hn.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,i(),0),be===Qa&&(ie.next(),v(ie,"'")),ge):(v(ie,"'"),ge)}function le(ie){const ae=ie.currentChar();switch(ae){case"\\":case"'":return ie.next(),`\\${ae}`;case"u":return J(ie,ae,4);case"U":return J(ie,ae,6);default:return d(hn.UNKNOWN_ESCAPE_SEQUENCE,i(),0,ae),""}}function J(ie,ae,ge){v(ie,ae);let be="";for(let $e=0;$e{const be=ie.currentChar();return be==="{"||be==="%"||be==="@"||be==="|"||be==="("||be===")"||!be||be===gl?ge:(ge+=be,ie.next(),ae(ge))};return ae("")}function ue(ie){g(ie);const ae=v(ie,"|");return g(ie),ae}function pe(ie,ae){let ge=null;switch(ie.currentChar()){case"{":return ae.braceNest>=1&&d(hn.NOT_ALLOW_NEST_PLACEHOLDER,i(),0),ie.next(),ge=f(ae,2,"{"),g(ie),ae.braceNest++,ge;case"}":return ae.braceNest>0&&ae.currentType===2&&d(hn.EMPTY_PLACEHOLDER,i(),0),ie.next(),ge=f(ae,3,"}"),ae.braceNest--,ae.braceNest>0&&g(ie),ae.inLinked&&ae.braceNest===0&&(ae.inLinked=!1),ge;case"@":return ae.braceNest>0&&d(hn.UNTERMINATED_CLOSING_BRACE,i(),0),ge=me(ie,ae)||h(ae),ae.braceNest=0,ge;default:{let $e=!0,Re=!0,Se=!0;if(k(ie))return ae.braceNest>0&&d(hn.UNTERMINATED_CLOSING_BRACE,i(),0),ge=f(ae,1,ue(ie)),ae.braceNest=0,ae.inLinked=!1,ge;if(ae.braceNest>0&&(ae.currentType===5||ae.currentType===6||ae.currentType===7))return d(hn.UNTERMINATED_CLOSING_BRACE,i(),0),ae.braceNest=0,Pe(ie,ae);if($e=_(ie,ae))return ge=f(ae,5,ee(ie)),g(ie),ge;if(Re=w(ie,ae))return ge=f(ae,6,se(ie)),g(ie),ge;if(Se=S(ie,ae))return ge=f(ae,7,de(ie)),g(ie),ge;if(!$e&&!Re&&!Se)return ge=f(ae,13,U(ie)),d(hn.INVALID_TOKEN_IN_PLACEHOLDER,i(),0,ge.value),g(ie),ge;break}}return ge}function me(ie,ae){const{currentType:ge}=ae;let be=null;const $e=ie.currentChar();switch((ge===8||ge===9||ge===12||ge===10)&&($e===Qa||$e===gl)&&d(hn.INVALID_LINKED_FORMAT,i(),0),$e){case"@":return ie.next(),be=f(ae,8,"@"),ae.inLinked=!0,be;case".":return g(ie),ie.next(),f(ae,9,".");case":":return g(ie),ie.next(),f(ae,10,":");default:return k(ie)?(be=f(ae,1,ue(ie)),ae.braceNest=0,ae.inLinked=!1,be):x(ie,ae)||T(ie,ae)?(g(ie),me(ie,ae)):C(ie,ae)?(g(ie),f(ae,12,te(ie))):E(ie,ae)?(g(ie),$e==="{"?pe(ie,ae)||be:f(ae,11,Q(ie))):(ge===8&&d(hn.INVALID_LINKED_FORMAT,i(),0),ae.braceNest=0,ae.inLinked=!1,Pe(ie,ae))}}function Pe(ie,ae){let ge={type:14};if(ae.braceNest>0)return pe(ie,ae)||h(ae);if(ae.inLinked)return me(ie,ae)||h(ae);switch(ie.currentChar()){case"{":return pe(ie,ae)||h(ae);case"}":return d(hn.UNBALANCED_CLOSING_BRACE,i(),0),ie.next(),f(ae,3,"}");case"@":return me(ie,ae)||h(ae);default:{if(k(ie))return ge=f(ae,1,ue(ie)),ae.braceNest=0,ae.inLinked=!1,ge;const{isModulo:$e,hasSpace:Re}=A(ie);if($e)return Re?f(ae,0,re(ie)):f(ae,4,q(ie));if(I(ie))return f(ae,0,re(ie));break}}return ge}function Ne(){const{currentType:ie,offset:ae,startLoc:ge,endLoc:be}=l;return l.lastType=ie,l.lastOffset=ae,l.lastStartLoc=ge,l.lastEndLoc=be,l.offset=a(),l.startLoc=i(),r.currentChar()===Su?f(l,14):Pe(r,l)}return{nextToken:Ne,currentOffset:a,currentPosition:i,context:u}}const SPe="parser",xPe=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;function CPe(e,t,n){switch(e){case"\\\\":return"\\";case"\\'":return"'";default:{const r=parseInt(t||n,16);return r<=55295||r>=57344?String.fromCodePoint(r):"�"}}}function TPe(e={}){const t=e.location!==!1,{onError:n,onWarn:r}=e;function a(_,w,S,x,...C){const T=_.currentPosition();if(T.offset+=x,T.column+=x,n){const E=t?d_(S,T):null,k=jv(w,E,{domain:SPe,args:C});n(k)}}function i(_,w,S,x,...C){const T=_.currentPosition();if(T.offset+=x,T.column+=x,r){const E=t?d_(S,T):null;r(fPe(w,E,C))}}function o(_,w,S){const x={type:_};return t&&(x.start=w,x.end=w,x.loc={start:S,end:S}),x}function s(_,w,S,x){t&&(_.end=w,_.loc&&(_.loc.end=S))}function l(_,w){const S=_.context(),x=o(3,S.offset,S.startLoc);return x.value=w,s(x,_.currentOffset(),_.currentPosition()),x}function u(_,w){const S=_.context(),{lastOffset:x,lastStartLoc:C}=S,T=o(5,x,C);return T.index=parseInt(w,10),_.nextToken(),s(T,_.currentOffset(),_.currentPosition()),T}function c(_,w,S){const x=_.context(),{lastOffset:C,lastStartLoc:T}=x,E=o(4,C,T);return E.key=w,S===!0&&(E.modulo=!0),_.nextToken(),s(E,_.currentOffset(),_.currentPosition()),E}function d(_,w){const S=_.context(),{lastOffset:x,lastStartLoc:C}=S,T=o(9,x,C);return T.value=w.replace(xPe,CPe),_.nextToken(),s(T,_.currentOffset(),_.currentPosition()),T}function f(_){const w=_.nextToken(),S=_.context(),{lastOffset:x,lastStartLoc:C}=S,T=o(8,x,C);return w.type!==12?(a(_,hn.UNEXPECTED_EMPTY_LINKED_MODIFIER,S.lastStartLoc,0),T.value="",s(T,x,C),{nextConsumeToken:w,node:T}):(w.value==null&&a(_,hn.UNEXPECTED_LEXICAL_ANALYSIS,S.lastStartLoc,0,Lo(w)),T.value=w.value||"",s(T,_.currentOffset(),_.currentPosition()),{node:T})}function h(_,w){const S=_.context(),x=o(7,S.offset,S.startLoc);return x.value=w,s(x,_.currentOffset(),_.currentPosition()),x}function v(_){const w=_.context(),S=o(6,w.offset,w.startLoc);let x=_.nextToken();if(x.type===9){const C=f(_);S.modifier=C.node,x=C.nextConsumeToken||_.nextToken()}switch(x.type!==10&&a(_,hn.UNEXPECTED_LEXICAL_ANALYSIS,w.lastStartLoc,0,Lo(x)),x=_.nextToken(),x.type===2&&(x=_.nextToken()),x.type){case 11:x.value==null&&a(_,hn.UNEXPECTED_LEXICAL_ANALYSIS,w.lastStartLoc,0,Lo(x)),S.key=h(_,x.value||"");break;case 5:x.value==null&&a(_,hn.UNEXPECTED_LEXICAL_ANALYSIS,w.lastStartLoc,0,Lo(x)),S.key=c(_,x.value||"");break;case 6:x.value==null&&a(_,hn.UNEXPECTED_LEXICAL_ANALYSIS,w.lastStartLoc,0,Lo(x)),S.key=u(_,x.value||"");break;case 7:x.value==null&&a(_,hn.UNEXPECTED_LEXICAL_ANALYSIS,w.lastStartLoc,0,Lo(x)),S.key=d(_,x.value||"");break;default:{a(_,hn.UNEXPECTED_EMPTY_LINKED_KEY,w.lastStartLoc,0);const C=_.context(),T=o(7,C.offset,C.startLoc);return T.value="",s(T,C.offset,C.startLoc),S.key=T,s(S,C.offset,C.startLoc),{nextConsumeToken:x,node:S}}}return s(S,_.currentOffset(),_.currentPosition()),{node:S}}function p(_){const w=_.context(),S=w.currentType===1?_.currentOffset():w.offset,x=w.currentType===1?w.endLoc:w.startLoc,C=o(2,S,x);C.items=[];let T=null,E=null;do{const I=T||_.nextToken();switch(T=null,I.type){case 0:I.value==null&&a(_,hn.UNEXPECTED_LEXICAL_ANALYSIS,w.lastStartLoc,0,Lo(I)),C.items.push(l(_,I.value||""));break;case 6:I.value==null&&a(_,hn.UNEXPECTED_LEXICAL_ANALYSIS,w.lastStartLoc,0,Lo(I)),C.items.push(u(_,I.value||""));break;case 4:E=!0;break;case 5:I.value==null&&a(_,hn.UNEXPECTED_LEXICAL_ANALYSIS,w.lastStartLoc,0,Lo(I)),C.items.push(c(_,I.value||"",!!E)),E&&(i(_,lP.USE_MODULO_SYNTAX,w.lastStartLoc,0,Lo(I)),E=null);break;case 7:I.value==null&&a(_,hn.UNEXPECTED_LEXICAL_ANALYSIS,w.lastStartLoc,0,Lo(I)),C.items.push(d(_,I.value||""));break;case 8:{const P=v(_);C.items.push(P.node),T=P.nextConsumeToken||null;break}}}while(w.currentType!==14&&w.currentType!==1);const k=w.currentType===1?w.lastOffset:_.currentOffset(),A=w.currentType===1?w.lastEndLoc:_.currentPosition();return s(C,k,A),C}function g(_,w,S,x){const C=_.context();let T=x.items.length===0;const E=o(1,w,S);E.cases=[],E.cases.push(x);do{const k=p(_);T||(T=k.items.length===0),E.cases.push(k)}while(C.currentType!==14);return T&&a(_,hn.MUST_HAVE_MESSAGES_IN_PLURAL,S,0),s(E,_.currentOffset(),_.currentPosition()),E}function m(_){const w=_.context(),{offset:S,startLoc:x}=w,C=p(_);return w.currentType===14?C:g(_,S,x,C)}function b(_){const w=wPe(_,j7({},e)),S=w.context(),x=o(0,S.offset,S.startLoc);return t&&x.loc&&(x.loc.source=_),x.body=m(w),e.onCacheKey&&(x.cacheKey=e.onCacheKey(_)),S.currentType!==14&&a(w,hn.UNEXPECTED_LEXICAL_ANALYSIS,S.lastStartLoc,0,_[S.offset]||""),s(x,w.currentOffset(),w.currentPosition()),x}return{parse:b}}function Lo(e){if(e.type===14)return"EOF";const t=(e.value||"").replace(/\r?\n/gu,"\\n");return t.length>10?t.slice(0,9)+"…":t}function EPe(e,t={}){const n={ast:e,helpers:new Set};return{context:()=>n,helper:i=>(n.helpers.add(i),i)}}function CV(e,t){for(let n=0;nTV(n)),e}function TV(e){if(e.items.length===1){const t=e.items[0];(t.type===3||t.type===9)&&(e.static=t.value,delete t.value)}else{const t=[];for(let n=0;no;function l(p,g){o.code+=p}function u(p,g=!0){const m=g?r:"";l(a?m+" ".repeat(p):m)}function c(p=!0){const g=++o.indentLevel;p&&u(g)}function d(p=!0){const g=--o.indentLevel;p&&u(g)}function f(){u(o.indentLevel)}return{context:s,push:l,indent:c,deindent:d,newline:f,helper:p=>`_${p}`,needIndent:()=>o.needIndent}}function LPe(e,t){const{helper:n}=e;e.push(`${n("linked")}(`),Sv(e,t.key),t.modifier?(e.push(", "),Sv(e,t.modifier),e.push(", _type")):e.push(", undefined, _type"),e.push(")")}function DPe(e,t){const{helper:n,needIndent:r}=e;e.push(`${n("normalize")}([`),e.indent(r());const a=t.items.length;for(let i=0;i1){e.push(`${n("plural")}([`),e.indent(r());const a=t.cases.length;for(let i=0;i{const n=SV(t.mode)?t.mode:"normal",r=SV(t.filename)?t.filename:"message.intl";t.sourceMap;const a=t.breakLineCode!=null?t.breakLineCode:n==="arrow"?";":` +`,i=t.needIndent?t.needIndent:n!=="arrow",o=e.helpers||[],s=PPe(e,{filename:r,breakLineCode:a,needIndent:i});s.push(n==="normal"?"function __msg__ (ctx) {":"(ctx) => {"),s.indent(i),o.length>0&&(s.push(`const { ${q7(o.map(c=>`${c}: _${c}`),", ")} } = ctx`),s.newline()),s.push("return "),Sv(s,e),s.deindent(i),s.push("}"),delete e.helpers;const{code:l,map:u}=s.context();return{ast:e,code:l,map:u?u.toJSON():void 0}};function VPe(e,t={}){const n=j7({},t),r=!!n.jit,a=!!n.minify,i=n.optimize==null?!0:n.optimize,s=TPe(n).parse(e);return r?(i&&APe(s),a&&kh(s),{ast:s,code:""}):(kPe(s,n),NPe(s,n))}/*! + * core-base v9.14.4 + * (c) 2025 kazuya kawaguchi + * Released under the MIT License. + */function $Pe(){typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(Ml().__INTLIFY_PROD_DEVTOOLS__=!1),typeof __INTLIFY_JIT_COMPILATION__!="boolean"&&(Ml().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(Ml().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}function Us(e){return Xn(e)&&cP(e)===0&&(zo(e,"b")||zo(e,"body"))}const X7=["b","body"];function BPe(e){return Lc(e,X7)}const Z7=["c","cases"];function FPe(e){return Lc(e,Z7,[])}const J7=["s","static"];function zPe(e){return Lc(e,J7)}const Q7=["i","items"];function HPe(e){return Lc(e,Q7,[])}const eK=["t","type"];function cP(e){return Lc(e,eK)}const tK=["v","value"];function D0(e,t){const n=Lc(e,tK);if(n!=null)return n;throw km(t)}const nK=["m","modifier"];function WPe(e){return Lc(e,nK)}const rK=["k","key"];function GPe(e){const t=Lc(e,rK);if(t)return t;throw km(6)}function Lc(e,t,n){for(let r=0;r{o===void 0?o=s:o+=s},f[1]=()=>{o!==void 0&&(t.push(o),o=void 0)},f[2]=()=>{f[0](),a++},f[3]=()=>{if(a>0)a--,r=4,f[0]();else{if(a=0,o===void 0||(o=qPe(o),o===!1))return!1;f[1]()}};function h(){const v=e[n+1];if(r===5&&v==="'"||r===6&&v==='"')return n++,s="\\"+v,f[0](),!0}for(;r!==null;)if(n++,i=e[n],!(i==="\\"&&h())){if(l=jPe(i),d=Dc[r],u=d[l]||d.l||8,u===8||(r=u[0],u[1]!==void 0&&(c=f[u[1]],c&&(s=i,c()===!1))))return;if(r===7)return t}}const EV=new Map;function ZPe(e,t){return Xn(e)?e[t]:null}function JPe(e,t){if(!Xn(e))return null;let n=EV.get(t);if(n||(n=XPe(t),n&&EV.set(t,n)),!n)return null;const r=n.length;let a=e,i=0;for(;ie,eLe=e=>"",tLe="text",nLe=e=>e.length===0?"":oPe(e),rLe=iPe;function kV(e,t){return e=Math.abs(e),t===2?e?e>1?1:0:1:e?Math.min(e,2):0}function aLe(e){const t=Fr(e.pluralIndex)?e.pluralIndex:-1;return e.named&&(Fr(e.named.count)||Fr(e.named.n))?Fr(e.named.count)?e.named.count:Fr(e.named.n)?e.named.n:t:t}function iLe(e,t){t.count||(t.count=e),t.n||(t.n=e)}function oLe(e={}){const t=e.locale,n=aLe(e),r=Xn(e.pluralRules)&&Pt(t)&&br(e.pluralRules[t])?e.pluralRules[t]:kV,a=Xn(e.pluralRules)&&Pt(t)&&br(e.pluralRules[t])?kV:void 0,i=m=>m[r(n,m.length,a)],o=e.list||[],s=m=>o[m],l=e.named||fr();Fr(e.pluralIndex)&&iLe(n,l);const u=m=>l[m];function c(m){const b=br(e.messages)?e.messages(m):Xn(e.messages)?e.messages[m]:!1;return b||(e.parent?e.parent.message(m):eLe)}const d=m=>e.modifiers?e.modifiers[m]:QPe,f=_n(e.processor)&&br(e.processor.normalize)?e.processor.normalize:nLe,h=_n(e.processor)&&br(e.processor.interpolate)?e.processor.interpolate:rLe,v=_n(e.processor)&&Pt(e.processor.type)?e.processor.type:tLe,g={list:s,named:u,plural:i,linked:(m,...b)=>{const[_,w]=b;let S="text",x="";b.length===1?Xn(_)?(x=_.modifier||x,S=_.type||S):Pt(_)&&(x=_||x):b.length===2&&(Pt(_)&&(x=_||x),Pt(w)&&(S=w||S));const C=c(m)(g),T=S==="vnode"&&Er(C)&&x?C[0]:C;return x?d(x)(T,S):T},message:c,type:v,interpolate:h,normalize:f,values:Ta(fr(),o,l)};return g}let Am=null;function sLe(e){Am=e}function lLe(e,t,n){Am&&Am.emit("i18n:init",{timestamp:Date.now(),i18n:e,version:t,meta:n})}const uLe=cLe("function:translate");function cLe(e){return t=>Am&&Am.emit(e,t)}const dLe=lP.__EXTEND_POINT__,Hc=iS(dLe),fLe={FALLBACK_TO_TRANSLATE:Hc(),CANNOT_FORMAT_NUMBER:Hc(),FALLBACK_TO_NUMBER_FORMAT:Hc(),CANNOT_FORMAT_DATE:Hc(),FALLBACK_TO_DATE_FORMAT:Hc(),EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER:Hc(),__EXTEND_POINT__:Hc()},iK=hn.__EXTEND_POINT__,Wc=iS(iK),Ho={INVALID_ARGUMENT:iK,INVALID_DATE_ARGUMENT:Wc(),INVALID_ISO_DATE_ARGUMENT:Wc(),NOT_SUPPORT_NON_STRING_MESSAGE:Wc(),NOT_SUPPORT_LOCALE_PROMISE_VALUE:Wc(),NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:Wc(),NOT_SUPPORT_LOCALE_TYPE:Wc(),__EXTEND_POINT__:Wc()};function Ds(e){return jv(e,null,void 0)}function dP(e,t){return t.locale!=null?AV(t.locale):AV(e.locale)}let jx;function AV(e){if(Pt(e))return e;if(br(e)){if(e.resolvedOnce&&jx!=null)return jx;if(e.constructor.name==="Function"){const t=e();if(aPe(t))throw Ds(Ho.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return jx=t}else throw Ds(Ho.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw Ds(Ho.NOT_SUPPORT_LOCALE_TYPE)}function hLe(e,t,n){return[...new Set([n,...Er(t)?t:Xn(t)?Object.keys(t):Pt(t)?[t]:[n]])]}function oK(e,t,n){const r=Pt(n)?n:xv,a=e;a.__localeChainCache||(a.__localeChainCache=new Map);let i=a.__localeChainCache.get(r);if(!i){i=[];let o=[n];for(;Er(o);)o=IV(i,o,t);const s=Er(t)||!_n(t)?t:t.default?t.default:null;o=Pt(s)?[s]:s,Er(o)&&IV(i,o,!1),a.__localeChainCache.set(r,i)}return i}function IV(e,t,n){let r=!0;for(let a=0;a`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function mLe(){return{upper:(e,t)=>t==="text"&&Pt(e)?e.toUpperCase():t==="vnode"&&Xn(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,t)=>t==="text"&&Pt(e)?e.toLowerCase():t==="vnode"&&Xn(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,t)=>t==="text"&&Pt(e)?PV(e):t==="vnode"&&Xn(e)&&"__v_isVNode"in e?PV(e.children):e}}let sK;function LV(e){sK=e}let lK;function yLe(e){lK=e}let uK;function bLe(e){uK=e}let cK=null;const _Le=e=>{cK=e},wLe=()=>cK;let dK=null;const DV=e=>{dK=e},SLe=()=>dK;let RV=0;function xLe(e={}){const t=br(e.onWarn)?e.onWarn:sPe,n=Pt(e.version)?e.version:gLe,r=Pt(e.locale)||br(e.locale)?e.locale:xv,a=br(r)?xv:r,i=Er(e.fallbackLocale)||_n(e.fallbackLocale)||Pt(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:a,o=_n(e.messages)?e.messages:qx(a),s=_n(e.datetimeFormats)?e.datetimeFormats:qx(a),l=_n(e.numberFormats)?e.numberFormats:qx(a),u=Ta(fr(),e.modifiers,mLe()),c=e.pluralRules||fr(),d=br(e.missing)?e.missing:null,f=Nn(e.missingWarn)||_c(e.missingWarn)?e.missingWarn:!0,h=Nn(e.fallbackWarn)||_c(e.fallbackWarn)?e.fallbackWarn:!0,v=!!e.fallbackFormat,p=!!e.unresolving,g=br(e.postTranslation)?e.postTranslation:null,m=_n(e.processor)?e.processor:null,b=Nn(e.warnHtmlMessage)?e.warnHtmlMessage:!0,_=!!e.escapeParameter,w=br(e.messageCompiler)?e.messageCompiler:sK,S=br(e.messageResolver)?e.messageResolver:lK||ZPe,x=br(e.localeFallbacker)?e.localeFallbacker:uK||hLe,C=Xn(e.fallbackContext)?e.fallbackContext:void 0,T=e,E=Xn(T.__datetimeFormatters)?T.__datetimeFormatters:new Map,k=Xn(T.__numberFormatters)?T.__numberFormatters:new Map,A=Xn(T.__meta)?T.__meta:{};RV++;const I={version:n,cid:RV,locale:r,fallbackLocale:i,messages:o,modifiers:u,pluralRules:c,missing:d,missingWarn:f,fallbackWarn:h,fallbackFormat:v,unresolving:p,postTranslation:g,processor:m,warnHtmlMessage:b,escapeParameter:_,messageCompiler:w,messageResolver:S,localeFallbacker:x,fallbackContext:C,onWarn:t,__meta:A};return I.datetimeFormats=s,I.numberFormats=l,I.__datetimeFormatters=E,I.__numberFormatters=k,__INTLIFY_PROD_DEVTOOLS__&&lLe(I,n,A),I}const qx=e=>({[e]:fr()});function fP(e,t,n,r,a){const{missing:i,onWarn:o}=e;if(i!==null){const s=i(e,n,t,a);return Pt(s)?s:t}else return t}function Ep(e,t,n){const r=e;r.__localeChainCache=new Map,e.localeFallbacker(e,n,t)}function CLe(e,t){return e===t?!1:e.split("-")[0]===t.split("-")[0]}function TLe(e,t){const n=t.indexOf(e);if(n===-1)return!1;for(let r=n+1;rELe(n,e)}function ELe(e,t){const n=BPe(t);if(n==null)throw km(0);if(cP(n)===1){const i=FPe(n);return e.plural(i.reduce((o,s)=>[...o,OV(e,s)],[]))}else return OV(e,n)}function OV(e,t){const n=zPe(t);if(n!=null)return e.type==="text"?n:e.normalize([n]);{const r=HPe(t).reduce((a,i)=>[...a,YE(e,i)],[]);return e.normalize(r)}}function YE(e,t){const n=cP(t);switch(n){case 3:return D0(t,n);case 9:return D0(t,n);case 4:{const r=t;if(zo(r,"k")&&r.k)return e.interpolate(e.named(r.k));if(zo(r,"key")&&r.key)return e.interpolate(e.named(r.key));throw km(n)}case 5:{const r=t;if(zo(r,"i")&&Fr(r.i))return e.interpolate(e.list(r.i));if(zo(r,"index")&&Fr(r.index))return e.interpolate(e.list(r.index));throw km(n)}case 6:{const r=t,a=WPe(r),i=GPe(r);return e.linked(YE(e,i),a?YE(e,a):void 0,e.type)}case 7:return D0(t,n);case 8:return D0(t,n);default:throw new Error(`unhandled node on format message part: ${n}`)}}const fK=e=>e;let Nh=fr();function hK(e,t={}){let n=!1;const r=t.onError||vPe;return t.onError=a=>{n=!0,r(a)},{...VPe(e,t),detectError:n}}const kLe=(e,t)=>{if(!Pt(e))throw Ds(Ho.NOT_SUPPORT_NON_STRING_MESSAGE);{Nn(t.warnHtmlMessage)&&t.warnHtmlMessage;const r=(t.onCacheKey||fK)(e),a=Nh[r];if(a)return a;const{code:i,detectError:o}=hK(e,t),s=new Function(`return ${i}`)();return o?s:Nh[r]=s}};function ALe(e,t){if(__INTLIFY_JIT_COMPILATION__&&!__INTLIFY_DROP_MESSAGE_COMPILER__&&Pt(e)){Nn(t.warnHtmlMessage)&&t.warnHtmlMessage;const r=(t.onCacheKey||fK)(e),a=Nh[r];if(a)return a;const{ast:i,detectError:o}=hK(e,{...t,location:!1,jit:!0}),s=Xx(i);return o?s:Nh[r]=s}else{const n=e.cacheKey;if(n){const r=Nh[n];return r||(Nh[n]=Xx(e))}else return Xx(e)}}const NV=()=>"",co=e=>br(e);function VV(e,...t){const{fallbackFormat:n,postTranslation:r,unresolving:a,messageCompiler:i,fallbackLocale:o,messages:s}=e,[l,u]=jE(...t),c=Nn(u.missingWarn)?u.missingWarn:e.missingWarn,d=Nn(u.fallbackWarn)?u.fallbackWarn:e.fallbackWarn,f=Nn(u.escapeParameter)?u.escapeParameter:e.escapeParameter,h=!!u.resolvedMessage,v=Pt(u.default)||Nn(u.default)?Nn(u.default)?i?l:()=>l:u.default:n?i?l:()=>l:"",p=n||v!=="",g=dP(e,u);f&&ILe(u);let[m,b,_]=h?[l,g,s[g]||fr()]:vK(e,l,g,o,d,c),w=m,S=l;if(!h&&!(Pt(w)||Us(w)||co(w))&&p&&(w=v,S=w),!h&&(!(Pt(w)||Us(w)||co(w))||!Pt(b)))return a?oS:l;let x=!1;const C=()=>{x=!0},T=co(w)?w:pK(e,l,b,w,S,C);if(x)return w;const E=LLe(e,b,_,u),k=oLe(E),A=MLe(e,T,k),I=r?r(A,l):A;if(__INTLIFY_PROD_DEVTOOLS__){const P={timestamp:Date.now(),key:Pt(l)?l:co(w)?w.key:"",locale:b||(co(w)?w.locale:""),format:Pt(w)?w:co(w)?w.source:"",message:I};P.meta=Ta({},e.__meta,wLe()||{}),uLe(P)}return I}function ILe(e){Er(e.list)?e.list=e.list.map(t=>Pt(t)?wV(t):t):Xn(e.named)&&Object.keys(e.named).forEach(t=>{Pt(e.named[t])&&(e.named[t]=wV(e.named[t]))})}function vK(e,t,n,r,a,i){const{messages:o,onWarn:s,messageResolver:l,localeFallbacker:u}=e,c=u(e,r,n);let d=fr(),f,h=null;const v="translate";for(let p=0;pr;return u.locale=n,u.key=t,u}const l=o(r,PLe(e,n,a,r,s,i));return l.locale=n,l.key=t,l.source=r,l}function MLe(e,t,n){return t(n)}function jE(...e){const[t,n,r]=e,a=fr();if(!Pt(t)&&!Fr(t)&&!co(t)&&!Us(t))throw Ds(Ho.INVALID_ARGUMENT);const i=Fr(t)?String(t):(co(t),t);return Fr(n)?a.plural=n:Pt(n)?a.default=n:_n(n)&&!aS(n)?a.named=n:Er(n)&&(a.list=n),Fr(r)?a.plural=r:Pt(r)?a.default=r:_n(r)&&Ta(a,r),[i,a]}function PLe(e,t,n,r,a,i){return{locale:t,key:n,warnHtmlMessage:a,onError:o=>{throw i&&i(o),o},onCacheKey:o=>QMe(t,n,o)}}function LLe(e,t,n,r){const{modifiers:a,pluralRules:i,messageResolver:o,fallbackLocale:s,fallbackWarn:l,missingWarn:u,fallbackContext:c}=e,f={locale:t,modifiers:a,pluralRules:i,messages:h=>{let v=o(n,h);if(v==null&&c){const[,,p]=vK(c,h,t,s,l,u);v=o(p,h)}if(Pt(v)||Us(v)){let p=!1;const m=pK(e,h,t,v,h,()=>{p=!0});return p?NV:m}else return co(v)?v:NV}};return e.processor&&(f.processor=e.processor),r.list&&(f.list=r.list),r.named&&(f.named=r.named),Fr(r.plural)&&(f.pluralIndex=r.plural),f}function $V(e,...t){const{datetimeFormats:n,unresolving:r,fallbackLocale:a,onWarn:i,localeFallbacker:o}=e,{__datetimeFormatters:s}=e,[l,u,c,d]=qE(...t),f=Nn(c.missingWarn)?c.missingWarn:e.missingWarn;Nn(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn;const h=!!c.part,v=dP(e,c),p=o(e,a,v);if(!Pt(l)||l==="")return new Intl.DateTimeFormat(v,d).format(u);let g={},m,b=null;const _="datetime format";for(let x=0;x{gK.includes(l)?o[l]=n[l]:i[l]=n[l]}),Pt(r)?i.locale=r:_n(r)&&(o=r),_n(a)&&(o=a),[i.key||"",s,i,o]}function BV(e,t,n){const r=e;for(const a in n){const i=`${t}__${a}`;r.__datetimeFormatters.has(i)&&r.__datetimeFormatters.delete(i)}}function FV(e,...t){const{numberFormats:n,unresolving:r,fallbackLocale:a,onWarn:i,localeFallbacker:o}=e,{__numberFormatters:s}=e,[l,u,c,d]=XE(...t),f=Nn(c.missingWarn)?c.missingWarn:e.missingWarn;Nn(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn;const h=!!c.part,v=dP(e,c),p=o(e,a,v);if(!Pt(l)||l==="")return new Intl.NumberFormat(v,d).format(u);let g={},m,b=null;const _="number format";for(let x=0;x{mK.includes(l)?o[l]=n[l]:i[l]=n[l]}),Pt(r)?i.locale=r:_n(r)&&(o=r),_n(a)&&(o=a),[i.key||"",s,i,o]}function zV(e,t,n){const r=e;for(const a in n){const i=`${t}__${a}`;r.__numberFormatters.has(i)&&r.__numberFormatters.delete(i)}}$Pe();/*! + * vue-i18n v9.14.4 + * (c) 2025 kazuya kawaguchi + * Released under the MIT License. + */const DLe="9.14.4";function RLe(){typeof __VUE_I18N_FULL_INSTALL__!="boolean"&&(Ml().__VUE_I18N_FULL_INSTALL__=!0),typeof __VUE_I18N_LEGACY_API__!="boolean"&&(Ml().__VUE_I18N_LEGACY_API__=!0),typeof __INTLIFY_JIT_COMPILATION__!="boolean"&&(Ml().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(Ml().__INTLIFY_DROP_MESSAGE_COMPILER__=!1),typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(Ml().__INTLIFY_PROD_DEVTOOLS__=!1)}const OLe=fLe.__EXTEND_POINT__,ml=iS(OLe);ml(),ml(),ml(),ml(),ml(),ml(),ml(),ml(),ml();const yK=Ho.__EXTEND_POINT__,bi=iS(yK),oa={UNEXPECTED_RETURN_TYPE:yK,INVALID_ARGUMENT:bi(),MUST_BE_CALL_SETUP_TOP:bi(),NOT_INSTALLED:bi(),NOT_AVAILABLE_IN_LEGACY_MODE:bi(),REQUIRED_VALUE:bi(),INVALID_VALUE:bi(),CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:bi(),NOT_INSTALLED_WITH_PROVIDE:bi(),UNEXPECTED_ERROR:bi(),NOT_COMPATIBLE_LEGACY_VUE_I18N:bi(),BRIDGE_SUPPORT_VUE_2_ONLY:bi(),MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION:bi(),NOT_AVAILABLE_COMPOSITION_IN_LEGACY:bi(),__EXTEND_POINT__:bi()};function ma(e,...t){return jv(e,null,void 0)}const ZE=Pc("__translateVNode"),JE=Pc("__datetimeParts"),QE=Pc("__numberParts"),bK=Pc("__setPluralRules"),_K=Pc("__injectWithOption"),ek=Pc("__dispose");function Im(e){if(!Xn(e)||Us(e))return e;for(const t in e)if(zo(e,t))if(!t.includes("."))Xn(e[t])&&Im(e[t]);else{const n=t.split("."),r=n.length-1;let a=e,i=!1;for(let o=0;o{if("locale"in s&&"resource"in s){const{locale:l,resource:u}=s;l?(o[l]=o[l]||fr(),n1(u,o[l])):n1(u,o)}else Pt(s)&&n1(JSON.parse(s),o)}),a==null&&i)for(const s in o)zo(o,s)&&Im(o[s]);return o}function wK(e){return e.type}function SK(e,t,n){let r=Xn(t.messages)?t.messages:fr();"__i18nGlobal"in n&&(r=sS(e.locale.value,{messages:r,__i18n:n.__i18nGlobal}));const a=Object.keys(r);a.length&&a.forEach(i=>{e.mergeLocaleMessage(i,r[i])});{if(Xn(t.datetimeFormats)){const i=Object.keys(t.datetimeFormats);i.length&&i.forEach(o=>{e.mergeDateTimeFormat(o,t.datetimeFormats[o])})}if(Xn(t.numberFormats)){const i=Object.keys(t.numberFormats);i.length&&i.forEach(o=>{e.mergeNumberFormat(o,t.numberFormats[o])})}}}function HV(e){return V(Mf,null,e,0)}const WV="__INTLIFY_META__",GV=()=>[],NLe=()=>!1;let UV=0;function KV(e){return(t,n,r,a)=>e(n,r,Tt()||void 0,a)}const VLe=()=>{const e=Tt();let t=null;return e&&(t=wK(e)[WV])?{[WV]:t}:null};function hP(e={},t){const{__root:n,__injectWithOption:r}=e,a=n===void 0,i=e.flatJson,o=c_?H:Ut,s=!!e.translateExistCompatible;let l=Nn(e.inheritLocale)?e.inheritLocale:!0;const u=o(n&&l?n.locale.value:Pt(e.locale)?e.locale:xv),c=o(n&&l?n.fallbackLocale.value:Pt(e.fallbackLocale)||Er(e.fallbackLocale)||_n(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:u.value),d=o(sS(u.value,e)),f=o(_n(e.datetimeFormats)?e.datetimeFormats:{[u.value]:{}}),h=o(_n(e.numberFormats)?e.numberFormats:{[u.value]:{}});let v=n?n.missingWarn:Nn(e.missingWarn)||_c(e.missingWarn)?e.missingWarn:!0,p=n?n.fallbackWarn:Nn(e.fallbackWarn)||_c(e.fallbackWarn)?e.fallbackWarn:!0,g=n?n.fallbackRoot:Nn(e.fallbackRoot)?e.fallbackRoot:!0,m=!!e.fallbackFormat,b=br(e.missing)?e.missing:null,_=br(e.missing)?KV(e.missing):null,w=br(e.postTranslation)?e.postTranslation:null,S=n?n.warnHtmlMessage:Nn(e.warnHtmlMessage)?e.warnHtmlMessage:!0,x=!!e.escapeParameter;const C=n?n.modifiers:_n(e.modifiers)?e.modifiers:{};let T=e.pluralRules||n&&n.pluralRules,E;E=(()=>{a&&DV(null);const Se={version:DLe,locale:u.value,fallbackLocale:c.value,messages:d.value,modifiers:C,pluralRules:T,missing:_===null?void 0:_,missingWarn:v,fallbackWarn:p,fallbackFormat:m,unresolving:!0,postTranslation:w===null?void 0:w,warnHtmlMessage:S,escapeParameter:x,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:"vue"}};Se.datetimeFormats=f.value,Se.numberFormats=h.value,Se.__datetimeFormatters=_n(E)?E.__datetimeFormatters:void 0,Se.__numberFormatters=_n(E)?E.__numberFormatters:void 0;const Ae=xLe(Se);return a&&DV(Ae),Ae})(),Ep(E,u.value,c.value);function A(){return[u.value,c.value,d.value,f.value,h.value]}const I=M({get:()=>u.value,set:Se=>{u.value=Se,E.locale=u.value}}),P=M({get:()=>c.value,set:Se=>{c.value=Se,E.fallbackLocale=c.value,Ep(E,u.value,Se)}}),R=M(()=>d.value),O=M(()=>f.value),$=M(()=>h.value);function N(){return br(w)?w:null}function D(Se){w=Se,E.postTranslation=Se}function F(){return b}function W(Se){Se!==null&&(_=KV(Se)),b=Se,E.missing=_}const z=(Se,Ae,nt,at,zt,on)=>{A();let Bt;try{__INTLIFY_PROD_DEVTOOLS__,a||(E.fallbackContext=n?SLe():void 0),Bt=Se(E)}finally{__INTLIFY_PROD_DEVTOOLS__,a||(E.fallbackContext=void 0)}if(nt!=="translate exists"&&Fr(Bt)&&Bt===oS||nt==="translate exists"&&!Bt){const[it,At]=Ae();return n&&g?at(n):zt(it)}else{if(on(Bt))return Bt;throw ma(oa.UNEXPECTED_RETURN_TYPE)}};function Y(...Se){return z(Ae=>Reflect.apply(VV,null,[Ae,...Se]),()=>jE(...Se),"translate",Ae=>Reflect.apply(Ae.t,Ae,[...Se]),Ae=>Ae,Ae=>Pt(Ae))}function q(...Se){const[Ae,nt,at]=Se;if(at&&!Xn(at))throw ma(oa.INVALID_ARGUMENT);return Y(Ae,nt,Ta({resolvedMessage:!0},at||{}))}function re(...Se){return z(Ae=>Reflect.apply($V,null,[Ae,...Se]),()=>qE(...Se),"datetime format",Ae=>Reflect.apply(Ae.d,Ae,[...Se]),()=>MV,Ae=>Pt(Ae))}function ee(...Se){return z(Ae=>Reflect.apply(FV,null,[Ae,...Se]),()=>XE(...Se),"number format",Ae=>Reflect.apply(Ae.n,Ae,[...Se]),()=>MV,Ae=>Pt(Ae))}function se(Se){return Se.map(Ae=>Pt(Ae)||Fr(Ae)||Nn(Ae)?HV(String(Ae)):Ae)}const de={normalize:se,interpolate:Se=>Se,type:"vnode"};function le(...Se){return z(Ae=>{let nt;const at=Ae;try{at.processor=de,nt=Reflect.apply(VV,null,[at,...Se])}finally{at.processor=null}return nt},()=>jE(...Se),"translate",Ae=>Ae[ZE](...Se),Ae=>[HV(Ae)],Ae=>Er(Ae))}function J(...Se){return z(Ae=>Reflect.apply(FV,null,[Ae,...Se]),()=>XE(...Se),"number format",Ae=>Ae[QE](...Se),GV,Ae=>Pt(Ae)||Er(Ae))}function Z(...Se){return z(Ae=>Reflect.apply($V,null,[Ae,...Se]),()=>qE(...Se),"datetime format",Ae=>Ae[JE](...Se),GV,Ae=>Pt(Ae)||Er(Ae))}function U(Se){T=Se,E.pluralRules=T}function te(Se,Ae){return z(()=>{if(!Se)return!1;const nt=Pt(Ae)?Ae:u.value,at=pe(nt),zt=E.messageResolver(at,Se);return s?zt!=null:Us(zt)||co(zt)||Pt(zt)},()=>[Se],"translate exists",nt=>Reflect.apply(nt.te,nt,[Se,Ae]),NLe,nt=>Nn(nt))}function Q(Se){let Ae=null;const nt=oK(E,c.value,u.value);for(let at=0;at{l&&(u.value=Se,E.locale=Se,Ep(E,u.value,c.value))}),_e(n.fallbackLocale,Se=>{l&&(c.value=Se,E.fallbackLocale=Se,Ep(E,u.value,c.value))}));const Re={id:UV,locale:I,fallbackLocale:P,get inheritLocale(){return l},set inheritLocale(Se){l=Se,Se&&n&&(u.value=n.locale.value,c.value=n.fallbackLocale.value,Ep(E,u.value,c.value))},get availableLocales(){return Object.keys(d.value).sort()},messages:R,get modifiers(){return C},get pluralRules(){return T||{}},get isGlobal(){return a},get missingWarn(){return v},set missingWarn(Se){v=Se,E.missingWarn=v},get fallbackWarn(){return p},set fallbackWarn(Se){p=Se,E.fallbackWarn=p},get fallbackRoot(){return g},set fallbackRoot(Se){g=Se},get fallbackFormat(){return m},set fallbackFormat(Se){m=Se,E.fallbackFormat=m},get warnHtmlMessage(){return S},set warnHtmlMessage(Se){S=Se,E.warnHtmlMessage=Se},get escapeParameter(){return x},set escapeParameter(Se){x=Se,E.escapeParameter=Se},t:Y,getLocaleMessage:pe,setLocaleMessage:me,mergeLocaleMessage:Pe,getPostTranslationHandler:N,setPostTranslationHandler:D,getMissingHandler:F,setMissingHandler:W,[bK]:U};return Re.datetimeFormats=O,Re.numberFormats=$,Re.rt=q,Re.te=te,Re.tm=ue,Re.d=re,Re.n=ee,Re.getDateTimeFormat=Ne,Re.setDateTimeFormat=ie,Re.mergeDateTimeFormat=ae,Re.getNumberFormat=ge,Re.setNumberFormat=be,Re.mergeNumberFormat=$e,Re[_K]=r,Re[ZE]=le,Re[JE]=Z,Re[QE]=J,Re}function $Le(e){const t=Pt(e.locale)?e.locale:xv,n=Pt(e.fallbackLocale)||Er(e.fallbackLocale)||_n(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:t,r=br(e.missing)?e.missing:void 0,a=Nn(e.silentTranslationWarn)||_c(e.silentTranslationWarn)?!e.silentTranslationWarn:!0,i=Nn(e.silentFallbackWarn)||_c(e.silentFallbackWarn)?!e.silentFallbackWarn:!0,o=Nn(e.fallbackRoot)?e.fallbackRoot:!0,s=!!e.formatFallbackMessages,l=_n(e.modifiers)?e.modifiers:{},u=e.pluralizationRules,c=br(e.postTranslation)?e.postTranslation:void 0,d=Pt(e.warnHtmlInMessage)?e.warnHtmlInMessage!=="off":!0,f=!!e.escapeParameterHtml,h=Nn(e.sync)?e.sync:!0;let v=e.messages;if(_n(e.sharedMessages)){const x=e.sharedMessages;v=Object.keys(x).reduce((T,E)=>{const k=T[E]||(T[E]={});return Ta(k,x[E]),T},v||{})}const{__i18n:p,__root:g,__injectWithOption:m}=e,b=e.datetimeFormats,_=e.numberFormats,w=e.flatJson,S=e.translateExistCompatible;return{locale:t,fallbackLocale:n,messages:v,flatJson:w,datetimeFormats:b,numberFormats:_,missing:r,missingWarn:a,fallbackWarn:i,fallbackRoot:o,fallbackFormat:s,modifiers:l,pluralRules:u,postTranslation:c,warnHtmlMessage:d,escapeParameter:f,messageResolver:e.messageResolver,inheritLocale:h,translateExistCompatible:S,__i18n:p,__root:g,__injectWithOption:m}}function tk(e={},t){{const n=hP($Le(e)),{__extender:r}=e,a={id:n.id,get locale(){return n.locale.value},set locale(i){n.locale.value=i},get fallbackLocale(){return n.fallbackLocale.value},set fallbackLocale(i){n.fallbackLocale.value=i},get messages(){return n.messages.value},get datetimeFormats(){return n.datetimeFormats.value},get numberFormats(){return n.numberFormats.value},get availableLocales(){return n.availableLocales},get formatter(){return{interpolate(){return[]}}},set formatter(i){},get missing(){return n.getMissingHandler()},set missing(i){n.setMissingHandler(i)},get silentTranslationWarn(){return Nn(n.missingWarn)?!n.missingWarn:n.missingWarn},set silentTranslationWarn(i){n.missingWarn=Nn(i)?!i:i},get silentFallbackWarn(){return Nn(n.fallbackWarn)?!n.fallbackWarn:n.fallbackWarn},set silentFallbackWarn(i){n.fallbackWarn=Nn(i)?!i:i},get modifiers(){return n.modifiers},get formatFallbackMessages(){return n.fallbackFormat},set formatFallbackMessages(i){n.fallbackFormat=i},get postTranslation(){return n.getPostTranslationHandler()},set postTranslation(i){n.setPostTranslationHandler(i)},get sync(){return n.inheritLocale},set sync(i){n.inheritLocale=i},get warnHtmlInMessage(){return n.warnHtmlMessage?"warn":"off"},set warnHtmlInMessage(i){n.warnHtmlMessage=i!=="off"},get escapeParameterHtml(){return n.escapeParameter},set escapeParameterHtml(i){n.escapeParameter=i},get preserveDirectiveContent(){return!0},set preserveDirectiveContent(i){},get pluralizationRules(){return n.pluralRules||{}},__composer:n,t(...i){const[o,s,l]=i,u={};let c=null,d=null;if(!Pt(o))throw ma(oa.INVALID_ARGUMENT);const f=o;return Pt(s)?u.locale=s:Er(s)?c=s:_n(s)&&(d=s),Er(l)?c=l:_n(l)&&(d=l),Reflect.apply(n.t,n,[f,c||d||{},u])},rt(...i){return Reflect.apply(n.rt,n,[...i])},tc(...i){const[o,s,l]=i,u={plural:1};let c=null,d=null;if(!Pt(o))throw ma(oa.INVALID_ARGUMENT);const f=o;return Pt(s)?u.locale=s:Fr(s)?u.plural=s:Er(s)?c=s:_n(s)&&(d=s),Pt(l)?u.locale=l:Er(l)?c=l:_n(l)&&(d=l),Reflect.apply(n.t,n,[f,c||d||{},u])},te(i,o){return n.te(i,o)},tm(i){return n.tm(i)},getLocaleMessage(i){return n.getLocaleMessage(i)},setLocaleMessage(i,o){n.setLocaleMessage(i,o)},mergeLocaleMessage(i,o){n.mergeLocaleMessage(i,o)},d(...i){return Reflect.apply(n.d,n,[...i])},getDateTimeFormat(i){return n.getDateTimeFormat(i)},setDateTimeFormat(i,o){n.setDateTimeFormat(i,o)},mergeDateTimeFormat(i,o){n.mergeDateTimeFormat(i,o)},n(...i){return Reflect.apply(n.n,n,[...i])},getNumberFormat(i){return n.getNumberFormat(i)},setNumberFormat(i,o){n.setNumberFormat(i,o)},mergeNumberFormat(i,o){n.mergeNumberFormat(i,o)},getChoiceIndex(i,o){return-1}};return a.__extender=r,a}}const vP={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e==="parent"||e==="global",default:"parent"},i18n:{type:Object}};function BLe({slots:e},t){return t.length===1&&t[0]==="default"?(e.default?e.default():[]).reduce((r,a)=>[...r,...a.type===ze?a.children:[a]],[]):t.reduce((n,r)=>{const a=e[r];return a&&(n[r]=a()),n},fr())}function xK(e){return ze}const FLe=ye({name:"i18n-t",props:Ta({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>Fr(e)||!isNaN(e)}},vP),setup(e,t){const{slots:n,attrs:r}=t,a=e.i18n||Ur({useScope:e.scope,__useComponent:!0});return()=>{const i=Object.keys(n).filter(d=>d!=="_"),o=fr();e.locale&&(o.locale=e.locale),e.plural!==void 0&&(o.plural=Pt(e.plural)?+e.plural:e.plural);const s=BLe(t,i),l=a[ZE](e.keypath,s,o),u=Ta(fr(),r),c=Pt(e.tag)||Xn(e.tag)?e.tag:xK();return ot(c,u,l)}}}),YV=FLe;function zLe(e){return Er(e)&&!Pt(e[0])}function CK(e,t,n,r){const{slots:a,attrs:i}=t;return()=>{const o={part:!0};let s=fr();e.locale&&(o.locale=e.locale),Pt(e.format)?o.key=e.format:Xn(e.format)&&(Pt(e.format.key)&&(o.key=e.format.key),s=Object.keys(e.format).reduce((f,h)=>n.includes(h)?Ta(fr(),f,{[h]:e.format[h]}):f,fr()));const l=r(e.value,o,s);let u=[o.key];Er(l)?u=l.map((f,h)=>{const v=a[f.type],p=v?v({[f.type]:f.value,index:h,parts:l}):[f.value];return zLe(p)&&(p[0].key=`${f.type}-${h}`),p}):Pt(l)&&(u=[l]);const c=Ta(fr(),i),d=Pt(e.tag)||Xn(e.tag)?e.tag:xK();return ot(d,c,u)}}const HLe=ye({name:"i18n-n",props:Ta({value:{type:Number,required:!0},format:{type:[String,Object]}},vP),setup(e,t){const n=e.i18n||Ur({useScope:e.scope,__useComponent:!0});return CK(e,t,mK,(...r)=>n[QE](...r))}}),jV=HLe,WLe=ye({name:"i18n-d",props:Ta({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},vP),setup(e,t){const n=e.i18n||Ur({useScope:e.scope,__useComponent:!0});return CK(e,t,gK,(...r)=>n[JE](...r))}}),qV=WLe;function GLe(e,t){const n=e;if(e.mode==="composition")return n.__getInstance(t)||e.global;{const r=n.__getInstance(t);return r!=null?r.__composer:e.global.__composer}}function ULe(e){const t=o=>{const{instance:s,modifiers:l,value:u}=o;if(!s||!s.$)throw ma(oa.UNEXPECTED_ERROR);const c=GLe(e,s.$),d=XV(u);return[Reflect.apply(c.t,c,[...ZV(d)]),c]};return{created:(o,s)=>{const[l,u]=t(s);c_&&e.global===u&&(o.__i18nWatcher=_e(u.locale,()=>{s.instance&&s.instance.$forceUpdate()})),o.__composer=u,o.textContent=l},unmounted:o=>{c_&&o.__i18nWatcher&&(o.__i18nWatcher(),o.__i18nWatcher=void 0,delete o.__i18nWatcher),o.__composer&&(o.__composer=void 0,delete o.__composer)},beforeUpdate:(o,{value:s})=>{if(o.__composer){const l=o.__composer,u=XV(s);o.textContent=Reflect.apply(l.t,l,[...ZV(u)])}},getSSRProps:o=>{const[s]=t(o);return{textContent:s}}}}function XV(e){if(Pt(e))return{path:e};if(_n(e)){if(!("path"in e))throw ma(oa.REQUIRED_VALUE,"path");return e}else throw ma(oa.INVALID_VALUE)}function ZV(e){const{path:t,locale:n,args:r,choice:a,plural:i}=e,o={},s=r||{};return Pt(n)&&(o.locale=n),Fr(a)&&(o.plural=a),Fr(i)&&(o.plural=i),[t,s,o]}function KLe(e,t,...n){const r=_n(n[0])?n[0]:{},a=!!r.useI18nComponentName;(Nn(r.globalInstall)?r.globalInstall:!0)&&([a?"i18n":YV.name,"I18nT"].forEach(o=>e.component(o,YV)),[jV.name,"I18nN"].forEach(o=>e.component(o,jV)),[qV.name,"I18nD"].forEach(o=>e.component(o,qV))),e.directive("t",ULe(t))}function YLe(e,t,n){return{beforeCreate(){const r=Tt();if(!r)throw ma(oa.UNEXPECTED_ERROR);const a=this.$options;if(a.i18n){const i=a.i18n;if(a.__i18n&&(i.__i18n=a.__i18n),i.__root=t,this===this.$root)this.$i18n=JV(e,i);else{i.__injectWithOption=!0,i.__extender=n.__vueI18nExtend,this.$i18n=tk(i);const o=this.$i18n;o.__extender&&(o.__disposer=o.__extender(this.$i18n))}}else if(a.__i18n)if(this===this.$root)this.$i18n=JV(e,a);else{this.$i18n=tk({__i18n:a.__i18n,__injectWithOption:!0,__extender:n.__vueI18nExtend,__root:t});const i=this.$i18n;i.__extender&&(i.__disposer=i.__extender(this.$i18n))}else this.$i18n=e;a.__i18nGlobal&&SK(t,a,a),this.$t=(...i)=>this.$i18n.t(...i),this.$rt=(...i)=>this.$i18n.rt(...i),this.$tc=(...i)=>this.$i18n.tc(...i),this.$te=(i,o)=>this.$i18n.te(i,o),this.$d=(...i)=>this.$i18n.d(...i),this.$n=(...i)=>this.$i18n.n(...i),this.$tm=i=>this.$i18n.tm(i),n.__setInstance(r,this.$i18n)},mounted(){},unmounted(){const r=Tt();if(!r)throw ma(oa.UNEXPECTED_ERROR);const a=this.$i18n;delete this.$t,delete this.$rt,delete this.$tc,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,a.__disposer&&(a.__disposer(),delete a.__disposer,delete a.__extender),n.__deleteInstance(r),delete this.$i18n}}}function JV(e,t){e.locale=t.locale||e.locale,e.fallbackLocale=t.fallbackLocale||e.fallbackLocale,e.missing=t.missing||e.missing,e.silentTranslationWarn=t.silentTranslationWarn||e.silentFallbackWarn,e.silentFallbackWarn=t.silentFallbackWarn||e.silentFallbackWarn,e.formatFallbackMessages=t.formatFallbackMessages||e.formatFallbackMessages,e.postTranslation=t.postTranslation||e.postTranslation,e.warnHtmlInMessage=t.warnHtmlInMessage||e.warnHtmlInMessage,e.escapeParameterHtml=t.escapeParameterHtml||e.escapeParameterHtml,e.sync=t.sync||e.sync,e.__composer[bK](t.pluralizationRules||e.pluralizationRules);const n=sS(e.locale,{messages:t.messages,__i18n:t.__i18n});return Object.keys(n).forEach(r=>e.mergeLocaleMessage(r,n[r])),t.datetimeFormats&&Object.keys(t.datetimeFormats).forEach(r=>e.mergeDateTimeFormat(r,t.datetimeFormats[r])),t.numberFormats&&Object.keys(t.numberFormats).forEach(r=>e.mergeNumberFormat(r,t.numberFormats[r])),e}const jLe=Pc("global-vue-i18n");function qLe(e={},t){const n=__VUE_I18N_LEGACY_API__&&Nn(e.legacy)?e.legacy:__VUE_I18N_LEGACY_API__,r=Nn(e.globalInjection)?e.globalInjection:!0,a=__VUE_I18N_LEGACY_API__&&n?!!e.allowComposition:!0,i=new Map,[o,s]=XLe(e,n),l=Pc("");function u(f){return i.get(f)||null}function c(f,h){i.set(f,h)}function d(f){i.delete(f)}{const f={get mode(){return __VUE_I18N_LEGACY_API__&&n?"legacy":"composition"},get allowComposition(){return a},async install(h,...v){if(h.__VUE_I18N_SYMBOL__=l,h.provide(h.__VUE_I18N_SYMBOL__,f),_n(v[0])){const m=v[0];f.__composerExtend=m.__composerExtend,f.__vueI18nExtend=m.__vueI18nExtend}let p=null;!n&&r&&(p=iDe(h,f.global)),__VUE_I18N_FULL_INSTALL__&&KLe(h,f,...v),__VUE_I18N_LEGACY_API__&&n&&h.mixin(YLe(s,s.__composer,f));const g=h.unmount;h.unmount=()=>{p&&p(),f.dispose(),g()}},get global(){return s},dispose(){o.stop()},__instances:i,__getInstance:u,__setInstance:c,__deleteInstance:d};return f}}function Ur(e={}){const t=Tt();if(t==null)throw ma(oa.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw ma(oa.NOT_INSTALLED);const n=ZLe(t),r=QLe(n),a=wK(t),i=JLe(e,a);if(__VUE_I18N_LEGACY_API__&&n.mode==="legacy"&&!e.__useComponent){if(!n.allowComposition)throw ma(oa.NOT_AVAILABLE_IN_LEGACY_MODE);return rDe(t,i,r,e)}if(i==="global")return SK(r,e,a),r;if(i==="parent"){let l=eDe(n,t,e.__useComponent);return l==null&&(l=r),l}const o=n;let s=o.__getInstance(t);if(s==null){const l=Ta({},e);"__i18n"in a&&(l.__i18n=a.__i18n),r&&(l.__root=r),s=hP(l),o.__composerExtend&&(s[ek]=o.__composerExtend(s)),nDe(o,t,s),o.__setInstance(t,s)}return s}function XLe(e,t,n){const r=Xz();{const a=__VUE_I18N_LEGACY_API__&&t?r.run(()=>tk(e)):r.run(()=>hP(e));if(a==null)throw ma(oa.UNEXPECTED_ERROR);return[r,a]}}function ZLe(e){{const t=Ge(e.isCE?jLe:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw ma(e.isCE?oa.NOT_INSTALLED_WITH_PROVIDE:oa.UNEXPECTED_ERROR);return t}}function JLe(e,t){return aS(e)?"__i18n"in t?"local":"global":e.useScope?e.useScope:"local"}function QLe(e){return e.mode==="composition"?e.global:e.global.__composer}function eDe(e,t,n=!1){let r=null;const a=t.root;let i=tDe(t,n);for(;i!=null;){const o=e;if(e.mode==="composition")r=o.__getInstance(i);else if(__VUE_I18N_LEGACY_API__){const s=o.__getInstance(i);s!=null&&(r=s.__composer,n&&r&&!r[_K]&&(r=null))}if(r!=null||a===i)break;i=i.parent}return r}function tDe(e,t=!1){return e==null?null:t&&e.vnode.ctx||e.parent}function nDe(e,t,n){St(()=>{},t),il(()=>{const r=n;e.__deleteInstance(t);const a=r[ek];a&&(a(),delete r[ek])},t)}function rDe(e,t,n,r={}){const a=t==="local",i=Ut(null);if(a&&e.proxy&&!(e.proxy.$options.i18n||e.proxy.$options.__i18n))throw ma(oa.MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION);const o=Nn(r.inheritLocale)?r.inheritLocale:!Pt(r.locale),s=H(!a||o?n.locale.value:Pt(r.locale)?r.locale:xv),l=H(!a||o?n.fallbackLocale.value:Pt(r.fallbackLocale)||Er(r.fallbackLocale)||_n(r.fallbackLocale)||r.fallbackLocale===!1?r.fallbackLocale:s.value),u=H(sS(s.value,r)),c=H(_n(r.datetimeFormats)?r.datetimeFormats:{[s.value]:{}}),d=H(_n(r.numberFormats)?r.numberFormats:{[s.value]:{}}),f=a?n.missingWarn:Nn(r.missingWarn)||_c(r.missingWarn)?r.missingWarn:!0,h=a?n.fallbackWarn:Nn(r.fallbackWarn)||_c(r.fallbackWarn)?r.fallbackWarn:!0,v=a?n.fallbackRoot:Nn(r.fallbackRoot)?r.fallbackRoot:!0,p=!!r.fallbackFormat,g=br(r.missing)?r.missing:null,m=br(r.postTranslation)?r.postTranslation:null,b=a?n.warnHtmlMessage:Nn(r.warnHtmlMessage)?r.warnHtmlMessage:!0,_=!!r.escapeParameter,w=a?n.modifiers:_n(r.modifiers)?r.modifiers:{},S=r.pluralRules||a&&n.pluralRules;function x(){return[s.value,l.value,u.value,c.value,d.value]}const C=M({get:()=>i.value?i.value.locale.value:s.value,set:Q=>{i.value&&(i.value.locale.value=Q),s.value=Q}}),T=M({get:()=>i.value?i.value.fallbackLocale.value:l.value,set:Q=>{i.value&&(i.value.fallbackLocale.value=Q),l.value=Q}}),E=M(()=>i.value?i.value.messages.value:u.value),k=M(()=>c.value),A=M(()=>d.value);function I(){return i.value?i.value.getPostTranslationHandler():m}function P(Q){i.value&&i.value.setPostTranslationHandler(Q)}function R(){return i.value?i.value.getMissingHandler():g}function O(Q){i.value&&i.value.setMissingHandler(Q)}function $(Q){return x(),Q()}function N(...Q){return i.value?$(()=>Reflect.apply(i.value.t,null,[...Q])):$(()=>"")}function D(...Q){return i.value?Reflect.apply(i.value.rt,null,[...Q]):""}function F(...Q){return i.value?$(()=>Reflect.apply(i.value.d,null,[...Q])):$(()=>"")}function W(...Q){return i.value?$(()=>Reflect.apply(i.value.n,null,[...Q])):$(()=>"")}function z(Q){return i.value?i.value.tm(Q):{}}function Y(Q,ue){return i.value?i.value.te(Q,ue):!1}function q(Q){return i.value?i.value.getLocaleMessage(Q):{}}function re(Q,ue){i.value&&(i.value.setLocaleMessage(Q,ue),u.value[Q]=ue)}function ee(Q,ue){i.value&&i.value.mergeLocaleMessage(Q,ue)}function se(Q){return i.value?i.value.getDateTimeFormat(Q):{}}function ne(Q,ue){i.value&&(i.value.setDateTimeFormat(Q,ue),c.value[Q]=ue)}function de(Q,ue){i.value&&i.value.mergeDateTimeFormat(Q,ue)}function le(Q){return i.value?i.value.getNumberFormat(Q):{}}function J(Q,ue){i.value&&(i.value.setNumberFormat(Q,ue),d.value[Q]=ue)}function Z(Q,ue){i.value&&i.value.mergeNumberFormat(Q,ue)}const U={get id(){return i.value?i.value.id:-1},locale:C,fallbackLocale:T,messages:E,datetimeFormats:k,numberFormats:A,get inheritLocale(){return i.value?i.value.inheritLocale:o},set inheritLocale(Q){i.value&&(i.value.inheritLocale=Q)},get availableLocales(){return i.value?i.value.availableLocales:Object.keys(u.value)},get modifiers(){return i.value?i.value.modifiers:w},get pluralRules(){return i.value?i.value.pluralRules:S},get isGlobal(){return i.value?i.value.isGlobal:!1},get missingWarn(){return i.value?i.value.missingWarn:f},set missingWarn(Q){i.value&&(i.value.missingWarn=Q)},get fallbackWarn(){return i.value?i.value.fallbackWarn:h},set fallbackWarn(Q){i.value&&(i.value.missingWarn=Q)},get fallbackRoot(){return i.value?i.value.fallbackRoot:v},set fallbackRoot(Q){i.value&&(i.value.fallbackRoot=Q)},get fallbackFormat(){return i.value?i.value.fallbackFormat:p},set fallbackFormat(Q){i.value&&(i.value.fallbackFormat=Q)},get warnHtmlMessage(){return i.value?i.value.warnHtmlMessage:b},set warnHtmlMessage(Q){i.value&&(i.value.warnHtmlMessage=Q)},get escapeParameter(){return i.value?i.value.escapeParameter:_},set escapeParameter(Q){i.value&&(i.value.escapeParameter=Q)},t:N,getPostTranslationHandler:I,setPostTranslationHandler:P,getMissingHandler:R,setMissingHandler:O,rt:D,d:F,n:W,tm:z,te:Y,getLocaleMessage:q,setLocaleMessage:re,mergeLocaleMessage:ee,getDateTimeFormat:se,setDateTimeFormat:ne,mergeDateTimeFormat:de,getNumberFormat:le,setNumberFormat:J,mergeNumberFormat:Z};function te(Q){Q.locale.value=s.value,Q.fallbackLocale.value=l.value,Object.keys(u.value).forEach(ue=>{Q.mergeLocaleMessage(ue,u.value[ue])}),Object.keys(c.value).forEach(ue=>{Q.mergeDateTimeFormat(ue,c.value[ue])}),Object.keys(d.value).forEach(ue=>{Q.mergeNumberFormat(ue,d.value[ue])}),Q.escapeParameter=_,Q.fallbackFormat=p,Q.fallbackRoot=v,Q.fallbackWarn=h,Q.missingWarn=f,Q.warnHtmlMessage=b}return dy(()=>{if(e.proxy==null||e.proxy.$i18n==null)throw ma(oa.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const Q=i.value=e.proxy.$i18n.__composer;t==="global"?(s.value=Q.locale.value,l.value=Q.fallbackLocale.value,u.value=Q.messages.value,c.value=Q.datetimeFormats.value,d.value=Q.numberFormats.value):a&&te(Q)}),U}const aDe=["locale","fallbackLocale","availableLocales"],QV=["t","rt","d","n","tm","te"];function iDe(e,t){const n=Object.create(null);return aDe.forEach(a=>{const i=Object.getOwnPropertyDescriptor(t,a);if(!i)throw ma(oa.UNEXPECTED_ERROR);const o=Hn(i.value)?{get(){return i.value.value},set(s){i.value.value=s}}:{get(){return i.get&&i.get()}};Object.defineProperty(n,a,o)}),e.config.globalProperties.$i18n=n,QV.forEach(a=>{const i=Object.getOwnPropertyDescriptor(t,a);if(!i||!i.value)throw ma(oa.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${a}`,i)}),()=>{delete e.config.globalProperties.$i18n,QV.forEach(a=>{delete e.config.globalProperties[`$${a}`]})}}RLe();__INTLIFY_JIT_COMPILATION__?LV(ALe):LV(kLe);yLe(JPe);bLe(oK);if(__INTLIFY_PROD_DEVTOOLS__){const e=Ml();e.__INTLIFY__=!0,sLe(e.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__)}const oDe={__name:"App",setup(e){const{locale:t}=Ur(),n=M(()=>t.value==="en"?G7:W7);return(r,a)=>{const i=Ie("router-view"),o=Ie("el-config-provider");return L(),ve(o,{locale:n.value},{default:G(()=>[V(i)]),_:1},8,["locale"])}}};/*! + * vue-router v4.6.4 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */const Ah=typeof document<"u";function TK(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function sDe(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&TK(e.default)}const tr=Object.assign;function Zx(e,t){const n={};for(const r in t){const a=t[r];n[r]=ns(a)?a.map(e):e(a)}return n}const Ng=()=>{},ns=Array.isArray;function e$(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}const EK=/#/g,lDe=/&/g,uDe=/\//g,cDe=/=/g,dDe=/\?/g,kK=/\+/g,fDe=/%5B/g,hDe=/%5D/g,AK=/%5E/g,vDe=/%60/g,IK=/%7B/g,pDe=/%7C/g,MK=/%7D/g,gDe=/%20/g;function pP(e){return e==null?"":encodeURI(""+e).replace(pDe,"|").replace(fDe,"[").replace(hDe,"]")}function mDe(e){return pP(e).replace(IK,"{").replace(MK,"}").replace(AK,"^")}function nk(e){return pP(e).replace(kK,"%2B").replace(gDe,"+").replace(EK,"%23").replace(lDe,"%26").replace(vDe,"`").replace(IK,"{").replace(MK,"}").replace(AK,"^")}function yDe(e){return nk(e).replace(cDe,"%3D")}function bDe(e){return pP(e).replace(EK,"%23").replace(dDe,"%3F")}function _De(e){return bDe(e).replace(uDe,"%2F")}function Mm(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const wDe=/\/$/,SDe=e=>e.replace(wDe,"");function Jx(e,t,n="/"){let r,a={},i="",o="";const s=t.indexOf("#");let l=t.indexOf("?");return l=s>=0&&l>s?-1:l,l>=0&&(r=t.slice(0,l),i=t.slice(l,s>0?s:t.length),a=e(i.slice(1))),s>=0&&(r=r||t.slice(0,s),o=t.slice(s,t.length)),r=EDe(r??t,n),{fullPath:r+i+o,path:r,query:a,hash:Mm(o)}}function xDe(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function t$(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function CDe(e,t,n){const r=t.matched.length-1,a=n.matched.length-1;return r>-1&&r===a&&Cv(t.matched[r],n.matched[a])&&PK(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Cv(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function PK(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!TDe(e[n],t[n]))return!1;return!0}function TDe(e,t){return ns(e)?n$(e,t):ns(t)?n$(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function n$(e,t){return ns(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function EDe(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),a=r[r.length-1];(a===".."||a===".")&&r.push("");let i=n.length-1,o,s;for(o=0;o1&&i--;else break;return n.slice(0,i).join("/")+"/"+r.slice(o).join("/")}const xu={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let rk=function(e){return e.pop="pop",e.push="push",e}({}),Qx=function(e){return e.back="back",e.forward="forward",e.unknown="",e}({});function kDe(e){if(!e)if(Ah){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),SDe(e)}const ADe=/^[^#]+#/;function IDe(e,t){return e.replace(ADe,"#")+t}function MDe(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const lS=()=>({left:window.scrollX,top:window.scrollY});function PDe(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),a=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!a)return;t=MDe(a,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 r$(e,t){return(history.state?history.state.position-t:-1)+e}const ak=new Map;function LDe(e,t){ak.set(e,t)}function DDe(e){const t=ak.get(e);return ak.delete(e),t}function RDe(e){return typeof e=="string"||e&&typeof e=="object"}function LK(e){return typeof e=="string"||typeof e=="symbol"}let Or=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 DK=Symbol("");Or.MATCHER_NOT_FOUND+"",Or.NAVIGATION_GUARD_REDIRECT+"",Or.NAVIGATION_ABORTED+"",Or.NAVIGATION_CANCELLED+"",Or.NAVIGATION_DUPLICATED+"";function Tv(e,t){return tr(new Error,{type:e,[DK]:!0},t)}function yl(e,t){return e instanceof Error&&DK in e&&(t==null||!!(e.type&t))}const ODe=["params","query","hash"];function NDe(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of ODe)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function VDe(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;ra&&nk(a)):[r&&nk(r)]).forEach(a=>{a!==void 0&&(t+=(t.length?"&":"")+n,a!=null&&(t+="="+a))})}return t}function $De(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=ns(r)?r.map(a=>a==null?null:""+a):r==null?r:""+r)}return t}const BDe=Symbol(""),i$=Symbol(""),uS=Symbol(""),gP=Symbol(""),ik=Symbol("");function kp(){let e=[];function t(r){return e.push(r),()=>{const a=e.indexOf(r);a>-1&&e.splice(a,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function zu(e,t,n,r,a,i=o=>o()){const o=r&&(r.enterCallbacks[a]=r.enterCallbacks[a]||[]);return()=>new Promise((s,l)=>{const u=f=>{f===!1?l(Tv(Or.NAVIGATION_ABORTED,{from:n,to:t})):f instanceof Error?l(f):RDe(f)?l(Tv(Or.NAVIGATION_GUARD_REDIRECT,{from:t,to:f})):(o&&r.enterCallbacks[a]===o&&typeof f=="function"&&o.push(f),s())},c=i(()=>e.call(r&&r.instances[a],t,n,u));let d=Promise.resolve(c);e.length<3&&(d=d.then(u)),d.catch(f=>l(f))})}function eC(e,t,n,r,a=i=>i()){const i=[];for(const o of e)for(const s in o.components){let l=o.components[s];if(!(t!=="beforeRouteEnter"&&!o.instances[s]))if(TK(l)){const u=(l.__vccOpts||l)[t];u&&i.push(zu(u,n,r,o,s,a))}else{let u=l();i.push(()=>u.then(c=>{if(!c)throw new Error(`Couldn't resolve component "${s}" at "${o.path}"`);const d=sDe(c)?c.default:c;o.mods[s]=c,o.components[s]=d;const f=(d.__vccOpts||d)[t];return f&&zu(f,n,r,o,s,a)()}))}}return i}function FDe(e,t){const n=[],r=[],a=[],i=Math.max(t.matched.length,e.matched.length);for(let o=0;oCv(u,s))?r.push(s):n.push(s));const l=e.matched[o];l&&(t.matched.find(u=>Cv(u,l))||a.push(l))}return[n,r,a]}/*! + * vue-router v4.6.4 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */let zDe=()=>location.protocol+"//"+location.host;function RK(e,t){const{pathname:n,search:r,hash:a}=t,i=e.indexOf("#");if(i>-1){let o=a.includes(e.slice(i))?e.slice(i).length:1,s=a.slice(o);return s[0]!=="/"&&(s="/"+s),t$(s,"")}return t$(n,e)+r+a}function HDe(e,t,n,r){let a=[],i=[],o=null;const s=({state:f})=>{const h=RK(e,location),v=n.value,p=t.value;let g=0;if(f){if(n.value=h,t.value=f,o&&o===v){o=null;return}g=p?f.position-p.position:0}else r(h);a.forEach(m=>{m(n.value,v,{delta:g,type:rk.pop,direction:g?g>0?Qx.forward:Qx.back:Qx.unknown})})};function l(){o=n.value}function u(f){a.push(f);const h=()=>{const v=a.indexOf(f);v>-1&&a.splice(v,1)};return i.push(h),h}function c(){if(document.visibilityState==="hidden"){const{history:f}=window;if(!f.state)return;f.replaceState(tr({},f.state,{scroll:lS()}),"")}}function d(){for(const f of i)f();i=[],window.removeEventListener("popstate",s),window.removeEventListener("pagehide",c),document.removeEventListener("visibilitychange",c)}return window.addEventListener("popstate",s),window.addEventListener("pagehide",c),document.addEventListener("visibilitychange",c),{pauseListeners:l,listen:u,destroy:d}}function o$(e,t,n,r=!1,a=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:a?lS():null}}function WDe(e){const{history:t,location:n}=window,r={value:RK(e,n)},a={value:t.state};a.value||i(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(l,u,c){const d=e.indexOf("#"),f=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+l:zDe()+e+l;try{t[c?"replaceState":"pushState"](u,"",f),a.value=u}catch(h){console.error(h),n[c?"replace":"assign"](f)}}function o(l,u){i(l,tr({},t.state,o$(a.value.back,l,a.value.forward,!0),u,{position:a.value.position}),!0),r.value=l}function s(l,u){const c=tr({},a.value,t.state,{forward:l,scroll:lS()});i(c.current,c,!0),i(l,tr({},o$(r.value,l,null),{position:c.position+1},u),!1),r.value=l}return{location:r,state:a,push:s,replace:o}}function GDe(e){e=kDe(e);const t=WDe(e),n=HDe(e,t.state,t.location,t.replace);function r(i,o=!0){o||n.pauseListeners(),history.go(i)}const a=tr({location:"",base:e,go:r,createHref:IDe.bind(null,e)},t,n);return Object.defineProperty(a,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(a,"state",{enumerable:!0,get:()=>t.state.value}),a}let Od=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e}({});var ta=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}(ta||{});const UDe={type:Od.Static,value:""},KDe=/[a-zA-Z0-9_]/;function YDe(e){if(!e)return[[]];if(e==="/")return[[UDe]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(h){throw new Error(`ERR (${n})/"${u}": ${h}`)}let n=ta.Static,r=n;const a=[];let i;function o(){i&&a.push(i),i=[]}let s=0,l,u="",c="";function d(){u&&(n===ta.Static?i.push({type:Od.Static,value:u}):n===ta.Param||n===ta.ParamRegExp||n===ta.ParamRegExpEnd?(i.length>1&&(l==="*"||l==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),i.push({type:Od.Param,value:u,regexp:c,repeatable:l==="*"||l==="+",optional:l==="*"||l==="?"})):t("Invalid state to consume buffer"),u="")}function f(){u+=l}for(;st.length?t.length===1&&t[0]===ei.Static+ei.Segment?1:-1:0}function OK(e,t){let n=0;const r=e.score,a=t.score;for(;n0&&t[t.length-1]<0}const JDe={strict:!1,end:!0,sensitive:!1};function QDe(e,t,n){const r=XDe(YDe(e.path),n),a=tr(r,{record:e,parent:t,children:[],alias:[]});return t&&!a.record.aliasOf==!t.record.aliasOf&&t.children.push(a),a}function eRe(e,t){const n=[],r=new Map;t=e$(JDe,t);function a(d){return r.get(d)}function i(d,f,h){const v=!h,p=c$(d);p.aliasOf=h&&h.record;const g=e$(t,d),m=[p];if("alias"in d){const w=typeof d.alias=="string"?[d.alias]:d.alias;for(const S of w)m.push(c$(tr({},p,{components:h?h.record.components:p.components,path:S,aliasOf:h?h.record:p})))}let b,_;for(const w of m){const{path:S}=w;if(f&&S[0]!=="/"){const x=f.record.path,C=x[x.length-1]==="/"?"":"/";w.path=f.record.path+(S&&C+S)}if(b=QDe(w,f,g),h?h.alias.push(b):(_=_||b,_!==b&&_.alias.push(b),v&&d.name&&!d$(b)&&o(d.name)),NK(b)&&l(b),p.children){const x=p.children;for(let C=0;C{o(_)}:Ng}function o(d){if(LK(d)){const f=r.get(d);f&&(r.delete(d),n.splice(n.indexOf(f),1),f.children.forEach(o),f.alias.forEach(o))}else{const f=n.indexOf(d);f>-1&&(n.splice(f,1),d.record.name&&r.delete(d.record.name),d.children.forEach(o),d.alias.forEach(o))}}function s(){return n}function l(d){const f=rRe(d,n);n.splice(f,0,d),d.record.name&&!d$(d)&&r.set(d.record.name,d)}function u(d,f){let h,v={},p,g;if("name"in d&&d.name){if(h=r.get(d.name),!h)throw Tv(Or.MATCHER_NOT_FOUND,{location:d});g=h.record.name,v=tr(u$(f.params,h.keys.filter(_=>!_.optional).concat(h.parent?h.parent.keys.filter(_=>_.optional):[]).map(_=>_.name)),d.params&&u$(d.params,h.keys.map(_=>_.name))),p=h.stringify(v)}else if(d.path!=null)p=d.path,h=n.find(_=>_.re.test(p)),h&&(v=h.parse(p),g=h.record.name);else{if(h=f.name?r.get(f.name):n.find(_=>_.re.test(f.path)),!h)throw Tv(Or.MATCHER_NOT_FOUND,{location:d,currentLocation:f});g=h.record.name,v=tr({},f.params,d.params),p=h.stringify(v)}const m=[];let b=h;for(;b;)m.unshift(b.record),b=b.parent;return{name:g,path:p,params:v,matched:m,meta:nRe(m)}}e.forEach(d=>i(d));function c(){n.length=0,r.clear()}return{addRoute:i,resolve:u,removeRoute:o,clearRoutes:c,getRoutes:s,getRecordMatcher:a}}function u$(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function c$(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:tRe(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 tRe(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function d$(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function nRe(e){return e.reduce((t,n)=>tr(t,n.meta),{})}function rRe(e,t){let n=0,r=t.length;for(;n!==r;){const i=n+r>>1;OK(e,t[i])<0?r=i:n=i+1}const a=aRe(e);return a&&(r=t.lastIndexOf(a,r-1)),r}function aRe(e){let t=e;for(;t=t.parent;)if(NK(t)&&OK(e,t)===0)return t}function NK({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function f$(e){const t=Ge(uS),n=Ge(gP),r=M(()=>{const l=y(e.to);return t.resolve(l)}),a=M(()=>{const{matched:l}=r.value,{length:u}=l,c=l[u-1],d=n.matched;if(!c||!d.length)return-1;const f=d.findIndex(Cv.bind(null,c));if(f>-1)return f;const h=h$(l[u-2]);return u>1&&h$(c)===h&&d[d.length-1].path!==h?d.findIndex(Cv.bind(null,l[u-2])):f}),i=M(()=>a.value>-1&&uRe(n.params,r.value.params)),o=M(()=>a.value>-1&&a.value===n.matched.length-1&&PK(n.params,r.value.params));function s(l={}){if(lRe(l)){const u=t[y(e.replace)?"replace":"push"](y(e.to)).catch(Ng);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:r,href:M(()=>r.value.href),isActive:i,isExactActive:o,navigate:s}}function iRe(e){return e.length===1?e[0]:e}const oRe=ye({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:f$,setup(e,{slots:t}){const n=Qt(f$(e)),{options:r}=Ge(uS),a=M(()=>({[v$(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[v$(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&iRe(t.default(n));return e.custom?i:ot("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:a.value},i)}}}),sRe=oRe;function lRe(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 uRe(e,t){for(const n in t){const r=t[n],a=e[n];if(typeof r=="string"){if(r!==a)return!1}else if(!ns(a)||a.length!==r.length||r.some((i,o)=>i.valueOf()!==a[o].valueOf()))return!1}return!0}function h$(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const v$=(e,t,n)=>e??t??n,cRe=ye({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Ge(ik),a=M(()=>e.route||r.value),i=Ge(i$,0),o=M(()=>{let u=y(i);const{matched:c}=a.value;let d;for(;(d=c[u])&&!d.components;)u++;return u}),s=M(()=>a.value.matched[o.value]);Ft(i$,M(()=>o.value+1)),Ft(BDe,s),Ft(ik,a);const l=H();return _e(()=>[l.value,s.value,e.name],([u,c,d],[f,h,v])=>{c&&(c.instances[d]=u,h&&h!==c&&u&&u===f&&(c.leaveGuards.size||(c.leaveGuards=h.leaveGuards),c.updateGuards.size||(c.updateGuards=h.updateGuards))),u&&c&&(!h||!Cv(c,h)||!f)&&(c.enterCallbacks[d]||[]).forEach(p=>p(u))},{flush:"post"}),()=>{const u=a.value,c=e.name,d=s.value,f=d&&d.components[c];if(!f)return p$(n.default,{Component:f,route:u});const h=d.props[c],v=h?h===!0?u.params:typeof h=="function"?h(u):h:null,g=ot(f,tr({},v,t,{onVnodeUnmounted:m=>{m.component.isUnmounted&&(d.instances[c]=null)},ref:l}));return p$(n.default,{Component:g,route:u})||g}}});function p$(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const dRe=cRe;function fRe(e){const t=eRe(e.routes,e),n=e.parseQuery||VDe,r=e.stringifyQuery||a$,a=e.history,i=kp(),o=kp(),s=kp(),l=Ut(xu);let u=xu;Ah&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=Zx.bind(null,ne=>""+ne),d=Zx.bind(null,_De),f=Zx.bind(null,Mm);function h(ne,de){let le,J;return LK(ne)?(le=t.getRecordMatcher(ne),J=de):J=ne,t.addRoute(J,le)}function v(ne){const de=t.getRecordMatcher(ne);de&&t.removeRoute(de)}function p(){return t.getRoutes().map(ne=>ne.record)}function g(ne){return!!t.getRecordMatcher(ne)}function m(ne,de){if(de=tr({},de||l.value),typeof ne=="string"){const Q=Jx(n,ne,de.path),ue=t.resolve({path:Q.path},de),pe=a.createHref(Q.fullPath);return tr(Q,ue,{params:f(ue.params),hash:Mm(Q.hash),redirectedFrom:void 0,href:pe})}let le;if(ne.path!=null)le=tr({},ne,{path:Jx(n,ne.path,de.path).path});else{const Q=tr({},ne.params);for(const ue in Q)Q[ue]==null&&delete Q[ue];le=tr({},ne,{params:d(Q)}),de.params=d(de.params)}const J=t.resolve(le,de),Z=ne.hash||"";J.params=c(f(J.params));const U=xDe(r,tr({},ne,{hash:mDe(Z),path:J.path})),te=a.createHref(U);return tr({fullPath:U,hash:Z,query:r===a$?$De(ne.query):ne.query||{}},J,{redirectedFrom:void 0,href:te})}function b(ne){return typeof ne=="string"?Jx(n,ne,l.value.path):tr({},ne)}function _(ne,de){if(u!==ne)return Tv(Or.NAVIGATION_CANCELLED,{from:de,to:ne})}function w(ne){return C(ne)}function S(ne){return w(tr(b(ne),{replace:!0}))}function x(ne,de){const le=ne.matched[ne.matched.length-1];if(le&&le.redirect){const{redirect:J}=le;let Z=typeof J=="function"?J(ne,de):J;return typeof Z=="string"&&(Z=Z.includes("?")||Z.includes("#")?Z=b(Z):{path:Z},Z.params={}),tr({query:ne.query,hash:ne.hash,params:Z.path!=null?{}:ne.params},Z)}}function C(ne,de){const le=u=m(ne),J=l.value,Z=ne.state,U=ne.force,te=ne.replace===!0,Q=x(le,J);if(Q)return C(tr(b(Q),{state:typeof Q=="object"?tr({},Z,Q.state):Z,force:U,replace:te}),de||le);const ue=le;ue.redirectedFrom=de;let pe;return!U&&CDe(r,J,le)&&(pe=Tv(Or.NAVIGATION_DUPLICATED,{to:ue,from:J}),z(J,J,!0,!1)),(pe?Promise.resolve(pe):k(ue,J)).catch(me=>yl(me)?yl(me,Or.NAVIGATION_GUARD_REDIRECT)?me:W(me):D(me,ue,J)).then(me=>{if(me){if(yl(me,Or.NAVIGATION_GUARD_REDIRECT))return C(tr({replace:te},b(me.to),{state:typeof me.to=="object"?tr({},Z,me.to.state):Z,force:U}),de||ue)}else me=I(ue,J,!0,te,Z);return A(ue,J,me),me})}function T(ne,de){const le=_(ne,de);return le?Promise.reject(le):Promise.resolve()}function E(ne){const de=re.values().next().value;return de&&typeof de.runWithContext=="function"?de.runWithContext(ne):ne()}function k(ne,de){let le;const[J,Z,U]=FDe(ne,de);le=eC(J.reverse(),"beforeRouteLeave",ne,de);for(const Q of J)Q.leaveGuards.forEach(ue=>{le.push(zu(ue,ne,de))});const te=T.bind(null,ne,de);return le.push(te),se(le).then(()=>{le=[];for(const Q of i.list())le.push(zu(Q,ne,de));return le.push(te),se(le)}).then(()=>{le=eC(Z,"beforeRouteUpdate",ne,de);for(const Q of Z)Q.updateGuards.forEach(ue=>{le.push(zu(ue,ne,de))});return le.push(te),se(le)}).then(()=>{le=[];for(const Q of U)if(Q.beforeEnter)if(ns(Q.beforeEnter))for(const ue of Q.beforeEnter)le.push(zu(ue,ne,de));else le.push(zu(Q.beforeEnter,ne,de));return le.push(te),se(le)}).then(()=>(ne.matched.forEach(Q=>Q.enterCallbacks={}),le=eC(U,"beforeRouteEnter",ne,de,E),le.push(te),se(le))).then(()=>{le=[];for(const Q of o.list())le.push(zu(Q,ne,de));return le.push(te),se(le)}).catch(Q=>yl(Q,Or.NAVIGATION_CANCELLED)?Q:Promise.reject(Q))}function A(ne,de,le){s.list().forEach(J=>E(()=>J(ne,de,le)))}function I(ne,de,le,J,Z){const U=_(ne,de);if(U)return U;const te=de===xu,Q=Ah?history.state:{};le&&(J||te?a.replace(ne.fullPath,tr({scroll:te&&Q&&Q.scroll},Z)):a.push(ne.fullPath,Z)),l.value=ne,z(ne,de,le,te),W()}let P;function R(){P||(P=a.listen((ne,de,le)=>{if(!ee.listening)return;const J=m(ne),Z=x(J,ee.currentRoute.value);if(Z){C(tr(Z,{replace:!0,force:!0}),J).catch(Ng);return}u=J;const U=l.value;Ah&&LDe(r$(U.fullPath,le.delta),lS()),k(J,U).catch(te=>yl(te,Or.NAVIGATION_ABORTED|Or.NAVIGATION_CANCELLED)?te:yl(te,Or.NAVIGATION_GUARD_REDIRECT)?(C(tr(b(te.to),{force:!0}),J).then(Q=>{yl(Q,Or.NAVIGATION_ABORTED|Or.NAVIGATION_DUPLICATED)&&!le.delta&&le.type===rk.pop&&a.go(-1,!1)}).catch(Ng),Promise.reject()):(le.delta&&a.go(-le.delta,!1),D(te,J,U))).then(te=>{te=te||I(J,U,!1),te&&(le.delta&&!yl(te,Or.NAVIGATION_CANCELLED)?a.go(-le.delta,!1):le.type===rk.pop&&yl(te,Or.NAVIGATION_ABORTED|Or.NAVIGATION_DUPLICATED)&&a.go(-1,!1)),A(J,U,te)}).catch(Ng)}))}let O=kp(),$=kp(),N;function D(ne,de,le){W(ne);const J=$.list();return J.length?J.forEach(Z=>Z(ne,de,le)):console.error(ne),Promise.reject(ne)}function F(){return N&&l.value!==xu?Promise.resolve():new Promise((ne,de)=>{O.add([ne,de])})}function W(ne){return N||(N=!ne,R(),O.list().forEach(([de,le])=>ne?le(ne):de()),O.reset()),ne}function z(ne,de,le,J){const{scrollBehavior:Z}=e;if(!Ah||!Z)return Promise.resolve();const U=!le&&DDe(r$(ne.fullPath,0))||(J||!le)&&history.state&&history.state.scroll||null;return Ue().then(()=>Z(ne,de,U)).then(te=>te&&PDe(te)).catch(te=>D(te,ne,de))}const Y=ne=>a.go(ne);let q;const re=new Set,ee={currentRoute:l,listening:!0,addRoute:h,removeRoute:v,clearRoutes:t.clearRoutes,hasRoute:g,getRoutes:p,resolve:m,options:e,push:w,replace:S,go:Y,back:()=>Y(-1),forward:()=>Y(1),beforeEach:i.add,beforeResolve:o.add,afterEach:s.add,onError:$.add,isReady:F,install(ne){ne.component("RouterLink",sRe),ne.component("RouterView",dRe),ne.config.globalProperties.$router=ee,Object.defineProperty(ne.config.globalProperties,"$route",{enumerable:!0,get:()=>y(l)}),Ah&&!q&&l.value===xu&&(q=!0,w(a.location).catch(J=>{}));const de={};for(const J in xu)Object.defineProperty(de,J,{get:()=>l.value[J],enumerable:!0});ne.provide(uS,ee),ne.provide(gP,yw(de)),ne.provide(ik,l);const le=ne.unmount;re.add(ne),ne.unmount=function(){re.delete(ne),re.size<1&&(u=xu,P&&P(),P=null,l.value=xu,q=!1,N=!1),le()}}};function se(ne){return ne.reduce((de,le)=>de.then(()=>E(le)),Promise.resolve())}return ee}function VK(){return Ge(uS)}function hRe(e){return Ge(gP)}const vRe=["width","height"],$K={__name:"AppLogo",props:{size:{type:[Number,String],default:20}},setup(e){return(t,n)=>(L(),K("svg",{width:e.size,height:e.size,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...n[0]||(n[0]=[j("path",{d:"M12 2L2 7L12 12L22 7L12 2Z",stroke:"currentColor","stroke-width":"2","stroke-linejoin":"round"},null,-1),j("path",{d:"M2 17L12 22L22 17",stroke:"currentColor","stroke-width":"2","stroke-linejoin":"round"},null,-1),j("path",{d:"M2 12L12 17L22 12",stroke:"currentColor","stroke-width":"2","stroke-linejoin":"round"},null,-1)])],8,vRe))}},pRe={app:{name:"Wormhole",tagline:"内网穿透 + 反向代理网关"},common:{refresh:"刷新",save:"保存",cancel:"取消",close:"关闭",search:"搜索",delete:"删除",edit:"编辑",create:"创建",confirm:"确认",actions:"操作",enabled:"启用",disabled:"禁用",yes:"是",no:"否",name:"名称",status:"状态",id:"ID",optional:"可选",loading:"加载中…",viewAll:"查看全部",logout:"退出",language:"语言",zh:"中文",en:"English",hint:"提示",export:"导出",import:"导入",start:"启动",stop:"停止",pause:"暂停",resume:"恢复",block:"拉黑",traffic:"流量",target:"目标",client:"客户端",mode:"模式",port:"端口",prefix:"前缀",resource:"资源",method:"方法",path:"路径",time:"时间",type:"类型",running:"运行中",stopped:"已停止",paused:"已暂停",on:"已开启",off:"未开启",online:"在线",offline:"离线",selectClient:"请选择客户端",dash:"-"},nav:{groups:{overview:"概览",forward:"转发",tunnel:"穿透",security:"安全",system:"系统"},dashboard:"仪表盘",domainForwards:"域名转发",clients:"客户端",tunnels:"隧道",hosts:"域名",ipRules:"IP 规则",requestIPs:"请求 IP",users:"访客用户",settings:"系统设置"},topbar:{dashboard:"仪表盘",clients:"客户端管理",tunnels:"隧道管理",hosts:"域名解析",domainForwards:"域名转发",ipRules:"IP 规则",requestIPs:"请求 IP 监控",users:"访客用户",settings:"系统设置",fallback:"Wormhole"},login:{title:"登录",username:"用户名",password:"密码",submit:"登录",hint:"默认账号 admin / admin",lockDefault:"登录尝试次数过多,请稍后再试",lockMinutes:"登录尝试次数过多,请 {n} 分钟后再试",lockSeconds:"登录尝试次数过多,请 {n} 秒后再试"},dashboard:{title:"仪表盘",description:"系统运行状态、流量与访问监控概览",openapi:"OpenAPI",statClientTotal:"客户端总数",statClientOnline:"在线客户端",statTunnelRunning:"运行隧道",statHostTotal:"域名数量",systemResources:"系统资源",trafficOverview:"流量概览",cpu:"CPU",memory:"内存",load:"负载",inlet:"入站",export:"出站",resourceTrend:"系统资源趋势",trafficTrend:"流量趋势",tunnelTop10:"隧道流量 Top10",hostTop10:"域名流量 Top10",ipTop10:"请求 IP Top10",rankTunnels:"隧道流量排行",rankHosts:"域名流量排行",rankIps:"请求 IP 排行",visitorIp:"访客 IP",directIp:"直连 IP",hitCount:"次数",host:"域名",listenPort:"端口"},clients:{title:"客户端管理",description:"管理 Agent 连接与 verify_key",add:"新增客户端",edit:"编辑客户端",verifyKey:"Verify Key",rateLimit:"限速(KB/s)",maxConn:"最大连接",confirmDelete:"确认删除该客户端?"},tunnels:{title:"隧道管理",description:"配置 TCP/UDP 端口转发隧道",add:"新增隧道",edit:"编辑隧道",searchPlaceholder:"搜索名称、端口、目标",listenPort:"监听端口",targetAddr:"目标地址",visitorAuth:"访客登录",confirmDelete:"确认删除该隧道?",tcp:"TCP",udp:"UDP"},hosts:{title:"域名解析",description:"HTTP/HTTPS 反向代理与 Host 路由",add:"新增域名",edit:"编辑域名",searchPlaceholder:"搜索域名、目标",host:"域名",location:"路径前缀",autoHttps:"自动 HTTPS",visitorAuth:"访客登录",confirmDelete:"确认删除该域名?"},domainForwards:{title:"域名转发",description:"将源域名跳转或反代到目标 URL,无需 Agent(与内网穿透独立)",add:"新增转发",edit:"编辑转发",searchPlaceholder:"搜索源域名、目标",sourceHost:"源域名",sourceLocation:"路径前缀",scheme:"协议",schemeAll:"全部",forwardMode:"转发模式",redirect:"302/301 跳转",proxy:"反向代理",targetUrl:"目标 URL",redirectMode:"跳转策略",preservePath:"保留路径与参数",fixedTarget:"固定目标地址",statusCode:"状态码",outboundProxy:"出站代理",httpDirect:"HTTP 直连",httpProxy:"HTTP 代理",socks5:"SOCKS5 代理",httpProxyAddr:"HTTP 代理地址",socks5Addr:"SOCKS5 地址",username:"用户名",password:"密码",preserveHost:"保留 Host",preserveHostHint:"开启后将源域名作为 Host 头发给上游",pluginChain:"插件链",pluginChainHint:"按顺序处理响应;仅对普通 HTTP 生效,WebSocket 不走插件",plugins:"插件",proxyCol:"代理",direct:"直连",httpProxyShort:"HTTP代理",modeProxy:"反代",modeRedirect:"跳转",pluginDisabled:"未启用",confirmDelete:"确认删除该转发规则?"},ipRules:{title:"IP 规则",description:"白名单 / 黑名单 / CIDR 访问控制",add:"新增规则",edit:"编辑规则",pattern:"匹配模式",patternPlaceholder:"IP / CIDR / 正则",ruleType:"类型",allow:"白名单",deny:"黑名单",resourceType:"资源类型",global:"全局",tunnel:"隧道",host:"域名",resourceId:"资源ID",confirmDelete:"确认删除该规则?"},requestIPs:{title:"请求 IP 监控",description:"访客真实 IP(优先 X-Forwarded-For)与直连 IP",searchPlaceholder:"搜索 IP",resourceType:"资源类型",resourceId:"资源 ID",hitCount:"访问次数",lastSeen:"最后访问",confirmBlock:"确认将该 IP 加入黑名单?"},users:{title:"访客用户",description:"管理可访问受保护域名/隧道的访客账号",add:"新增访客",edit:"编辑访客",username:"用户名",password:"密码",passwordPlaceholderEdit:"留空不修改",accessLogs:"访问记录",accessLogsTitle:"访问记录 · {name}",logsHint:"最近 {n} 条(最多保留 200 条,不含静态资源请求)",login:"登录",visit:"访问",confirmDelete:"确认删除该访客?"},settings:{title:"系统设置",description:"服务端运行参数(保存后部分项需重启服务生效)",listenPorts:"监听端口",bridgeAddr:"Bridge 地址",httpAddr:"管理 API / Web",httpProxyPort:"HTTP 反代端口",httpsProxyPort:"HTTPS 反代端口",tlsCert:"TLS 证书",tlsKey:"TLS 私钥",tlsOptional:"可选,留空不使用",authSecurity:"认证与安全",jwtSecret:"JWT 密钥",jwtSecretPlaceholder:"留空则不修改",tokenTtl:"Token 有效期(h)",loginMaxAttempts:"登录最大尝试",loginWindow:"统计窗口(分钟)",loginLockout:"锁定时长(分钟)",adminAccount:"管理员账号",currentPassword:"当前密码",newPassword:"新密码",confirmPassword:"确认新密码",changePassword:"修改管理员密码",metrics:"指标",flushInterval:"刷新间隔(秒)",apiKey:"API Key",apiKeyHint:"用于程序化访问 API(端口 8529),请求头携带 {header}。文档:{doc}",createApiKey:"创建 API Key",createApiKeyTitle:"创建 API Key",apiKeyNamePlaceholder:"如 CI/CD",apiKeySave:"请保存:{key}",fillPassword:"请填写当前密码和新密码",passwordMismatch:"两次输入的新密码不一致",enterApiKeyName:"请输入名称"},ipForward:{replace:{label:"覆盖真实 IP",hint:"将 X-Forwarded-For、X-Real-IP 覆盖为访客真实 IP,不保留已有代理链"},append:{label:"标准转发头",hint:"按反向代理规范追加 X-Forwarded-For,并设置 X-Real-IP(等同 Nginx proxy_add_x_forwarded_for)"},ipForward:"IP 转发",customHeaders:"自定义请求头",headerName:"Header 名称",headerValue:"Header 值",addHeader:"添加请求头"},visitorAuth:{title:"访客登录",enable:"开启验证",allowVisitors:"允许访客",allVisitors:"全部访客",selectedVisitors:"指定访客",selectVisitors:"选择访客用户",ttl:"凭证有效期",ttlHint:"单位:秒,登录成功后浏览器将保存凭证",tunnelHint:"开启访客登录后,该端口将以 HTTP 方式提供服务(适用于 Web 应用)。SSH 等 TCP 协议请使用域名反代。"},importExport:{importTitle:"批量导入",importMode:"导入模式",upsert:"覆盖更新(已存在则更新)",skip:"跳过已存在(仅导入新配置)",create:"全部新建(冲突则跳过)",pending:"待导入",pendingCount:"{n} 条配置",startImport:"开始导入",exportSuccess:"已导出 {n} 条配置",importDone:"导入完成:新增 {created},更新 {updated},跳过 {skipped},失败 {failed}",parseFailed:"解析文件失败"},forwardPlugin:{addPlugin:"添加插件",moveUp:"上移",moveDown:"下移",find:"查找",replaceWith:"替换为",addRule:"添加替换规则",mimeTypes:"MIME 类型",removeShort:"删",mbHint:"MB(0 表示禁用缓存)",ttlSec:"秒 TTL",scriptPlaceholder:" + + + +
+ + diff --git a/web/docs/UI-DESIGN-SYSTEM.md b/web/docs/UI-DESIGN-SYSTEM.md new file mode 100644 index 0000000..c6adb10 --- /dev/null +++ b/web/docs/UI-DESIGN-SYSTEM.md @@ -0,0 +1,2013 @@ +# UI 设计规范 + +> 适用范围:基于 Vue 3 + Element Plus 2.x 的后台管理系统 Web 页面 +> **本文档为唯一设计规范**:色彩、间距、布局、组件样式、全局 CSS 均定义于本文件(§6 分模块说明 + §8.9 完整 CSS)。项目实施时从本文档复制代码即可,不依赖其他设计资产文件。 + +--- + +## 目录 + +1. [页面整体风格](#1-页面整体风格) +2. [布局标准](#2-布局标准) +3. [字体标准](#3-字体标准) +4. [颜色规范](#4-颜色规范) +5. [图标使用规范](#5-图标使用规范) +6. [组件与页面标准样式](#6-组件与页面标准样式) +7. [交互原则](#7-交互原则) +8. [附录:复刻指南](#8-附录复刻指南) + +--- + +## 1. 页面整体风格 + +### 1.1 设计定位 + +本规范定义一套**浅色、克制、数据导向**的后台界面风格。视觉语言强调可读性与操作效率,避免装饰性元素喧宾夺主。 + +| 维度 | 规范 | +|------|------| +| 整体调性 | 专业、冷静、工具感;类似现代 SaaS 控制台 | +| 色彩策略 | 大面积中性灰白底 + 青绿品牌色点缀 | +| 层次表达 | 靠**字号阶梯**与**灰度阶梯**区分,不靠重阴影 | +| 容器形态 | 白底细边框卡片(`1px` + `8px` 圆角),无浮起阴影 | +| 信息密度 | 列表/表格偏紧凑(`size="small"`),表单区留白充分 | +| 技术底座 | Element Plus 组件 + 全局 CSS 变量覆盖 | + +### 1.2 核心设计原则 + +| 原则 | 说明 | +|------|------| +| **浅色优先** | 页面背景 `#f4f4f5`,内容区白卡片;禁止深色全屏侧栏 | +| **克制用色** | 主色青绿仅用于品牌、主按钮、导航激活态、关键正向状态 | +| **细边框卡片** | 白底 + `1px` 浅灰边框 + `8px` 圆角,禁止大面积 box-shadow | +| **8px 间距节奏** | 所有间距使用间距 Token(4px 仅用于极紧凑场景) | +| **层次靠字号与灰度** | 标题 `#18181b`,正文 `#3f3f46`,辅助 `#71717a` | +| **组件复用优先** | 使用 `PageHeader`、`AppCard`、`StatCard` 等标准壳层,禁止页面内自建容器体系 | +| **国际化友好** | 文案走 i18n;布局预留中英文长度差异(按钮组 `flex-wrap`) | + +### 1.3 视觉示意 + +``` +┌──────────────┬────────────────────────────────────┐ +│ Sidebar │ Topbar(52px,白底,底部分割线) │ +│ 240px ├────────────────────────────────────┤ +│ 半透明浅灰 │ Main Content(padding 24px) │ +│ 品牌区+导航 │ .page(max-width 1400px) │ +│ │ PageHeader → StatGrid → AppCard │ +└──────────────┴────────────────────────────────────┘ +``` + +登录页为独立全屏居中布局,无侧栏与顶栏。 + +--- + +## 2. 布局标准 + +### 2.1 栅格系统 + +#### PC 端(≥1025px) + +| 项目 | 规范 | +|------|------| +| 基准栅格 | **12 列**逻辑栅格(内容区 `max-width: 1400px` 内划分) | +| 列间距(gutter) | `16px`(`--space-4`) | +| 页面水平边距 | 主内容区内边距 `24px`(`--space-6`) | +| 典型列分配 | 统计卡 4×3 列;双栏内容 `1.4fr : 1fr` 或 `1fr : 1fr`;三栏等分 `1fr × 3` | + +常用网格类: + +| 类名 | PC 列数 | 说明 | +|------|---------|------| +| `.stat-grid` | 4 列 | 概览指标卡 | +| `.content-grid--2` | 2 列等宽 | 并列卡片 | +| `.content-grid--2-1` | 2 列(约 7:5) | 主内容 + 侧信息 | +| `.content-grid--3` | 3 列等宽 | 三列面板(按需扩展) | + +#### 平板(641px – 1024px) + +| 项目 | 规范 | +|------|------| +| 有效栅格 | **8 列**逻辑栅格 | +| `.stat-grid` | 2 列 | +| `.content-grid--*` | 全部折叠为 **1 列** | +| 主内容 padding | 保持 `24px` | + +#### 移动端(≤640px) + +| 项目 | 规范 | +|------|------| +| 有效栅格 | **4 列**逻辑栅格 | +| `.stat-grid` | 1 列 | +| `.page-header` | 纵向堆叠(标题在上,操作在下) | +| 主内容 padding | `16px`(`--space-4`) | +| 底部 Tab(若启用) | 固定底部,高度 `56px`,图标 `20px` + 文字 `10px` | + +> 默认以 PC 为主、移动端通过响应式折叠适配;若启用底部 Tab 导航,须使用本节尺寸,不得自定义高度。 + +### 2.2 间距体系(8px 基准) + +**硬性规则:页面级、组件级外边距与内边距必须使用间距 Token,禁止出现 5px、7px、10px、15px 等非体系数值。** + +| Token | 值 | 是否 8 的倍数 | 典型用途 | +|-------|-----|---------------|----------| +| `--space-1` | 4px | ½×8,仅紧凑场景 | 标题与副标题间距、行内 code 水平 padding | +| `--space-2` | 8px | ✓ | 按钮组 gap、导航项内边距、表格单元格垂直 padding | +| `--space-3` | 12px | — | 列表项间距、卡片底栏提示 | +| `--space-4` | 16px | ✓ | 卡片间距、工具栏下边距、移动端页面 padding | +| `--space-5` | 20px | — | 卡片水平内边距、统计卡内边距 | +| `--space-6` | 24px | ✓ | 页头下边距、主内容 padding、区块分隔 | +| `--space-8` | 32px | ✓ | 登录卡片内边距、大区块分隔 | + +**垂直节奏(页面级)** + +- `.page-header` 下方:`24px` +- `.stat-grid`、`.content-grid` 下方:`24px` +- 相邻 `.app-card` 间距:`16px`;页面最后一个卡片无底边距 + +**已知例外(保留,勿改)** + +| 位置 | 值 | 原因 | +|------|-----|------| +| `.form-hint` 的 `margin-top` | `6px` | 紧贴表单项控件底部,视觉上等同 8px 体系 | + +`--primary-hover` 已定义但未写独立 CSS 规则,主按钮 hover 由 Element Plus 通过 `--el-color-primary-dark-2` 自动处理。 + +### 2.3 布局组件尺寸 + +| 组件 | 尺寸 | 其他规则 | +|------|------|----------| +| **侧栏** `.sidebar` | 宽 `240px`(`15rem`) | 右边框 `1px`;背景半透明 + `backdrop-filter: blur(8px)` | +| **侧栏品牌区** `.sidebar-brand` | 高随内容;padding `20px 16px` | 品牌图标 `32×32px` | +| **导航项** `.nav-item` | 高随内容;padding `8px 12px`;margin 左右 `8px` | 圆角 `8px`;图标 `16px` | +| **导航分组标签** `.nav-group-label` | padding `16px 16px 8px` | 字号 `12px`,全大写 | +| **顶栏** `.topbar` | 高 **`52px`** | 左右 padding `24px`;白底 + 底边框 | +| **主内容** `.main-content` | flex 填满剩余高度 | padding `24px`(移动端 `16px`);纵向滚动 | +| **页面容器** `.page` | max-width **`1400px`** | 无水平居中强制(随主内容左对齐) | +| **底部 Tab**(预留) | 高 **`56px`** | 图标 `20px`,标签 `10px`,最多 5 项 | +| **登录卡片** `.login-card` | max-width 外层 `400px`;内边距 `32px` | 品牌图标 `48×48px`,圆角 `12px` | + +### 2.4 断点 + +| 断点 | 媒体查询 | 主要变化 | +|------|----------|----------| +| 平板 | `max-width: 1024px` | 统计 2 列;内容网格单列 | +| 手机 | `max-width: 640px` | 统计 1 列;页头纵向;主内容 16px padding | + +### 2.5 布局结构(ASCII) + +``` +PC (≥1025px) +┌─ sidebar 240px ─┬──────────── main-area ────────────────────┐ +│ [brand 32px] │ topbar 52px │ +│ [nav × N] ├───────────────────────────────────────────┤ +│ │ padding 24px │ +│ │ ┌─ page max 1400px ─────────────────┐ │ +│ │ │ page-header │ │ +│ │ │ stat-grid (4 col, gap 16) │ │ +│ │ │ app-card │ │ +│ │ └────────────────────────────────────┘ │ +└─────────────────┴───────────────────────────────────────────┘ + +Mobile (≤640px) +┌──────────────── main-area 100% ────────────────┐ +│ topbar 52px │ +├────────────────────────────────────────────────┤ +│ padding 16px │ +│ page-header (column) │ +│ stat-grid (1 col) │ +│ app-card │ +├────────────────────────────────────────────────┤ +│ [optional bottom-tab 56px] │ +└────────────────────────────────────────────────┘ +``` + +--- + +## 3. 字体标准 + +### 3.1 字体族 + +| 场景 | 字体栈 | +|------|--------| +| **中文界面** | `"PingFang SC"`, `"Microsoft YaHei"`, `"Noto Sans SC"`, `"Helvetica Neue"`, `Arial`, `sans-serif` | +| **英文界面** | `ui-sans-serif`, `system-ui`, `-apple-system`, `"Segoe UI"`, `Roboto`, `"Helvetica Neue"`, `Arial`, `sans-serif` | +| **合并栈(推荐默认)** | `ui-sans-serif`, `system-ui`, `-apple-system`, "Segoe UI", Roboto, "Helvetica Neue", Arial, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif` | +| **等宽(代码/文件名)** | `ui-monospace`, `SFMono-Regular`, `Menlo`, `Monaco`, `Consolas`, monospace` | + +> 中英文共用同一 sans 栈:西文优先 system 字体,CJK 由系统自动 fallback 至苹方/微软雅黑。禁止为中文单独引入 Web Font,保持加载性能。 + +### 3.2 字号阶梯 + +根元素 `font-size: 14px`(`1rem = 14px`)。所有字号使用 `rem` 相对根字号。 + +| 层级 | 类名 / 场景 | 字号 | 字重 | 行高 | 颜色 | +|------|-------------|------|------|------|------| +| 页面标题 | `.page-title` | `1.5rem`(21px) | 600 | 默认 | `--foreground` | +| 登录品牌标题 | `.page-title`(登录页) | 同上 | 600 | 默认 | `--foreground` | +| 卡片标题 | `.app-card__title` | `0.9375rem`(13px) | 600 | 默认 | `--foreground` | +| 品牌名 | `.brand-name` | `1.125rem`(15.75px) | 600 | 默认 | `--foreground` | +| 统计数值 | `.stat-card__value` | `1.75rem`(24.5px) | 600 | 默认 | `--foreground` | +| 正文 / 导航 / 顶栏 | `.nav-item`, `.topbar-title`, 表格正文 | `0.875rem`(12.25px) | 400–500 | 1.4(表格) | `--el-text-color-regular` 或 `--muted-foreground` | +| 描述 / 标签说明 | `.page-desc`, `.stat-card__label` | `0.875rem` | 400 | 默认 | `--muted-foreground` | +| 表头 / 辅助 | 表头 `th`, `.form-hint`, `.nav-group-label` | `0.75rem`(10.5px) | 600(表头)/ 400 | 默认 | `--muted-foreground` | +| 极小说明 | `.form-hint`, `code.inline-code` | `0.75rem` | 400 | 默认 | `--muted-foreground` | +| 等宽数据 | `.kv-block code`, `.meta-list` | `0.8125rem` | 400 | 默认 | 继承 | + +### 3.3 字重与样式 + +| 样式 | 使用场景 | 禁止场景 | +|------|----------|----------| +| **600(Semibold)** | 页面标题、卡片标题、表头、导航激活态、分组标题 `.section-title` | 大段正文 | +| **500(Medium)** | 导航默认态、顶栏次要文字 | — | +| **400(Regular)** | 正文、描述、表单标签 | — | +| **加粗 ``** | 行内强调少量关键词 | 整段文字 | +| **斜体 ``** | 极少使用;仅引用或术语首次出现 | 按钮、导航、表头 | +| **`letter-spacing: -0.02em`** | 仅 `.page-title` | 其他文字 | +| **`text-transform: uppercase`** | 仅 `.nav-group-label` | 其他文字 | + +### 3.4 Element Plus 表单标签 + +| 场景 | `label-width` | +|------|---------------| +| 简单 CRUD 对话框 | `100px` | +| 字段名较长 | `110px` | +| 系统设置长表单 | `120px` | +| 嵌套子表单 | `90px` | +| 登录页 | `size="large"`(EP 默认大号控件) | + +--- + +## 4. 颜色规范 + +### 4.1 色彩角色一览 + +``` +品牌层:primary 系列(操作引导) +中性层:background / card / muted / border(结构) +语义层:success / warning / danger / info(状态) +文本层:foreground / regular / muted-foreground(可读性) +``` + +### 4.2 完整色板 + +#### 品牌色 + +| Token | 色值 | 用途 | +|-------|------|------| +| `--primary` | `#0f7a62` | 主按钮、品牌图标底、导航激活文字、链接强调 | +| `--primary-hover` | `#0d6b56` | 主按钮 hover | +| `--primary-foreground` | `#fafafa` | 主色背景上的文字/图标 | +| `--el-color-primary-light-3` | `#4da08c` | EP 组件浅色变体 | +| `--el-color-primary-light-5` | `#76b8a8` | — | +| `--el-color-primary-light-7` | `#a0d0c4` | — | +| `--el-color-primary-light-8` | `#b8dcd2` | — | +| `--el-color-primary-light-9` | `#d0e8e1` | 浅色背景提示 | +| `--el-color-primary-dark-2` | `#0c624e` | 主色按下/深色态 | + +#### 中性色 + +| Token | 色值 | 用途 | +|-------|------|------| +| `--background` | `#f4f4f5` | 页面底色、登录页背景 | +| `--foreground` | `#18181b` | 主标题、强强调正文 | +| `--card` | `#ffffff` | 卡片、顶栏、弹窗内容区背景 | +| `--card-foreground` | `#18181b` | 卡片上主文字 | +| `--muted` | `#f4f4f5` | 表头背景、内嵌块、行内 code 底 | +| `--muted-foreground` | `#71717a` | 描述、表头文字、顶栏标题、占位性文字 | +| `--border` | `#e4e4e7` | 卡片边框、分割线、顶栏底边 | +| `--input` | `#e4e4e7` | 输入框边框(与 border 一致) | + +#### 侧栏专用 + +| Token | 色值 | 用途 | +|-------|------|------| +| `--sidebar` | `rgba(250, 250, 250, 0.85)` | 侧栏背景(半透明) | +| `--sidebar-foreground` | `#18181b` | 侧栏主文字 | +| `--sidebar-accent` | `#f4f4f5` | 导航 hover / active 背景 | +| `--sidebar-border` | `#e4e4e7` | 侧栏右边框 | + +#### 语义色 + +| Token / 类名 | 色值 | 用途 | +|--------------|------|------| +| `--success` | `#047857` | 成功状态(与 EP success 同步) | +| `--warning` | `#b45309` | 警告状态 | +| `--danger` / `--destructive` | `#dc2626` | 危险、错误、删除 | +| `--info` | `#a1a1aa` | 中性、禁用、分类标签 | +| `--el-color-success` | `#047857` | `el-tag type="success"` | +| `--el-color-warning` | `#b45309` | `el-tag type="warning"` | +| `--el-color-danger` | `#dc2626` | `el-tag type="danger"` | +| `--el-color-info` | `#a1a1aa` | `el-tag type="info"` | +| `.status-good` | `#047857` | 数值/状态优良 | +| `.status-warn` | `#b45309` | 数值/状态偏高 | +| `.status-bad` | `#dc2626` | 数值/状态很差 | +| `.status-muted` | `--muted-foreground` | 无数据/超时/不可用 | +| `.meta-list__ok` | `var(--success)` | 列表项就绪 | +| `.meta-list__warn` | `var(--warning)` | 列表项缺失/警告 | + +#### 文本色(Element Plus 对齐) + +| Token | 色值 | 用途 | +|-------|------|------| +| `--el-text-color-primary` | `#18181b` | EP 主要文字 | +| `--el-text-color-regular` | `#3f3f46` | 表格正文 | +| `--el-text-color-secondary` | `#71717a` | EP 次要文字 | + +### 4.3 颜色使用规范 + +| 规则 | 说明 | +|------|------| +| **禁止硬编码色值** | 新样式必须使用 CSS 变量 | +| **主色克制** | 单屏主色面积不超过 15%;除主按钮与激活导航外不大面积铺主色 | +| **状态色统一** | 成功/失败/禁用一律用 `el-tag` 语义 type,不自创色块 | +| **边框优先于阴影** | 容器分隔用 `1px solid var(--border)`,不用阴影 | +| **危险操作** | 破坏性操作用 `type="danger"` + `link`(表格行内)或二次确认弹框 | +| **图表** | 遵循 [§6.16](#616-图表规范echarts) 配色与 grid 配置 | + +### 4.4 圆角 + +| Token | 值 | 用途 | +|-------|-----|------| +| `--radius` | `0.5rem`(8px) | 卡片、按钮、输入框、导航项、内嵌块 | +| 登录品牌图标 | `12px` | 仅 `.login-brand-icon`,略大以强化品牌 | + +--- + +## 5. 图标使用规范 + +### 5.1 图标体系 + +| 类型 | 来源 | 说明 | +|------|------|------| +| **品牌图标** | 项目自有 Logo(自行实现) | 产品标识;仅用于侧栏 `.brand-icon`、登录页 `.login-brand-icon`;**各项目图形不同,本文档不提供参考实现** | +| **功能图标** | `@element-plus/icons-vue` | 导航、操作提示;通过 `` 包裹 | +| **状态** | 优先 `el-tag` 文字 | 不以图标替代明确状态文案 | + +### 5.2 尺寸规范 + +| 场景 | 尺寸 | +|------|------| +| 侧栏品牌区 Logo | `20px` | +| 登录页品牌 Logo | `24px` | +| 侧栏导航图标 | `16px`(``) | +| 按钮内图标(若使用) | `14px` | +| 底部 Tab(预留) | `20px` | + +### 5.3 常见场景图标推荐 + +图标库统一使用 `@element-plus/icons-vue`(Outlined 线型)。下表为常见导航/功能场景的推荐映射,各项目可按业务替换,但须保持风格一致。 + +| 场景 | 推荐图标 | 含义 | +|------|----------|------| +| 首页 / 仪表盘 | `Odometer`、`HomeFilled` | 总览、监控 | +| 列表 / 规则 / 配置项 | `List`、`Menu` | 条目化管理 | +| 连接 / 网络 | `Connection`、`Share` | 链路、拓扑 | +| 外部关联 / 链接 | `Link` | 外部数据源 | +| 切换 / 路由 / 策略 | `Switch` | 分流、调度 | +| 日志 / 文档 | `Document`、`Tickets` | 记录、流水 | +| 用户 / 权限 | `User`、`Lock` | 身份、安全 | +| 系统设置 | `Setting` | 全局配置 | +| 新建 | `Plus` | 创建资源 | +| 编辑 | `Edit` | 修改 | +| 删除 | `Delete` | 移除(配合 danger 按钮,不单用图标) | +| 刷新 | `Refresh` | 重新加载 | +| 导入 / 导出 | `Upload`、`Download` | 数据交换 | + +### 5.4 使用原则 + +| 原则 | 说明 | +|------|------| +| **导航必带图标** | 侧栏每项左侧固定 `16px` 图标,增强扫读性 | +| **颜色跟随文字** | 图标 `currentColor`,不单独设色 | +| **禁止混用风格** | 统一 Outlined 线型图标(Element Plus Icons) | +| **操作按钮** | 主操作优先文字按钮;图标-only 按钮需 `aria-label` | +| **品牌图标不外借** | Logo 仅用于品牌区,不用于普通操作按钮 | + +--- + +## 6. 组件与页面标准样式 + +> 本节 6.1–6.14 为**分模块说明**(便于查阅);**合并后的完整全局 CSS 见 [§8.9](#89-完整全局样式一键复制)**。两处内容须保持一致。 + +### 6.0 技术栈与引入 + +| 项目 | 要求 | +|------|------| +| Vue | `^3.4` | +| Element Plus | `^2.4`(2.x 均可,须使用 CSS 变量主题) | +| 图标 | `@element-plus/icons-vue` | +| 图表(可选) | `echarts` `^5` | + +**`main.ts` 引入顺序(顺序不可颠倒):** + +```ts +import { createApp } from 'vue' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' // ① 先 Element Plus 基础样式 +import './styles/global.css' // ② 再将本文档 §8.9 复制为全局样式文件后引入 + +const app = createApp(App) +app.use(ElementPlus) // ③ 全量注册(或按需,但变量须生效) +app.mount('#app') +``` + +**依赖说明:** + +- 全局样式**仅来源于本文档 §8.9**,文件名与存放路径由项目自定(如 `global.css`、`app.css`)。 +- 按钮、输入框、弹框、Tabs 等**无需逐组件写 CSS**,通过 `:root` 中的 `--el-*` 变量与品牌色对齐。 +- 表格、卡片容器、布局壳层使用本文档自定义 class,须与 §8.1 壳层 DOM 结构配合。 + +### 6.1 设计 Token 与基础重置 + +```css +:root { + --background: #f4f4f5; + --foreground: #18181b; + --card: #ffffff; + --card-foreground: #18181b; + --primary: #0f7a62; + --primary-hover: #0d6b56; + --primary-foreground: #fafafa; + --muted: #f4f4f5; + --muted-foreground: #71717a; + --border: #e4e4e7; + --input: #e4e4e7; + --destructive: #dc2626; + --success: #047857; + --warning: #b45309; + --danger: #dc2626; + --info: #a1a1aa; + --sidebar: rgba(250, 250, 250, 0.85); + --sidebar-foreground: #18181b; + --sidebar-accent: #f4f4f5; + --sidebar-border: #e4e4e7; + --sidebar-width: 15rem; + --radius: 0.5rem; + --space-1: 4px; + --space-2: 8px; + --space-3: 12px; + --space-4: 16px; + --space-5: 20px; + --space-6: 24px; + --space-8: 32px; + + --el-color-primary: #0f7a62; + --el-color-primary-light-3: #4da08c; + --el-color-primary-light-5: #76b8a8; + --el-color-primary-light-7: #a0d0c4; + --el-color-primary-light-8: #b8dcd2; + --el-color-primary-light-9: #d0e8e1; + --el-color-primary-dark-2: #0c624e; + --el-color-success: #047857; + --el-color-warning: #b45309; + --el-color-danger: #dc2626; + --el-color-info: #a1a1aa; + --el-border-radius-base: 0.5rem; + --el-border-color: #e4e4e7; + --el-bg-color-page: #f4f4f5; + --el-text-color-primary: #18181b; + --el-text-color-regular: #3f3f46; + --el-text-color-secondary: #71717a; + --el-font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif; +} + +* { box-sizing: border-box; } + +html, body, #app { + margin: 0; + padding: 0; + height: 100%; + font-size: 14px; + font-family: var(--el-font-family); + background: var(--background); + color: var(--foreground); +} +``` + +### 6.2 布局壳层(侧栏 / 顶栏 / 主内容) + +```css +.layout { + display: flex; + height: 100vh; +} + +.sidebar { + width: var(--sidebar-width); + flex-shrink: 0; + background: var(--sidebar); + border-right: 1px solid var(--sidebar-border); + backdrop-filter: blur(8px); + display: flex; + flex-direction: column; + overflow-y: auto; +} + +.sidebar-brand { + display: flex; + align-items: center; + gap: var(--space-3); + padding: var(--space-5) var(--space-4); +} + +.brand-icon { + width: 32px; + height: 32px; + border-radius: var(--radius); + background: var(--primary); + color: var(--primary-foreground); + display: flex; + align-items: center; + justify-content: center; +} + +.brand-name { + font-size: 1.125rem; + font-weight: 600; +} + +.nav-group-label { + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.04em; + color: var(--muted-foreground); + padding: var(--space-4) var(--space-4) var(--space-2); +} + +.nav-item { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-2) var(--space-3); + margin: 0 var(--space-2); + border-radius: var(--radius); + color: var(--muted-foreground); + text-decoration: none; + font-size: 0.875rem; + font-weight: 500; +} + +.nav-item:hover { background: var(--sidebar-accent); } + +.nav-item.active { + background: var(--sidebar-accent); + color: var(--primary); + font-weight: 600; +} + +.main-area { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; +} + +.topbar { + height: 52px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 var(--space-6); + background: var(--card); + border-bottom: 1px solid var(--border); +} + +.topbar-title { + font-size: 0.875rem; + color: var(--muted-foreground); +} + +.main-content { + flex: 1; + overflow-y: auto; + padding: var(--space-6); +} +``` + +### 6.3 页面头与网格 + +```css +.page { + max-width: 1400px; +} + +.page-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + margin-bottom: var(--space-6); + gap: var(--space-4); +} + +.page-actions { + display: flex; + align-items: center; + gap: var(--space-2); + flex-shrink: 0; + flex-wrap: wrap; +} + +.page-title { + font-size: 1.5rem; + font-weight: 600; + letter-spacing: -0.02em; + margin: 0 0 var(--space-1); +} + +.page-desc { + font-size: 0.875rem; + color: var(--muted-foreground); + margin: 0; +} + +.stat-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: var(--space-4); + margin-bottom: var(--space-6); +} + +.stat-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: var(--space-5); +} + +.stat-card__label { + font-size: 0.875rem; + color: var(--muted-foreground); + margin-bottom: var(--space-2); +} + +.stat-card__value { + font-size: 1.75rem; + font-weight: 600; +} + +.content-grid { + display: grid; + gap: var(--space-4); + margin-bottom: var(--space-6); +} + +.content-grid--2-1 { grid-template-columns: 1.4fr 1fr; } +.content-grid--2 { grid-template-columns: 1fr 1fr; } +.content-grid--3 { grid-template-columns: repeat(3, 1fr); } +``` + +### 6.4 卡片与工具栏 + +```css +.app-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + margin-bottom: var(--space-4); +} + +.page > .app-card:last-child, +.page > .content-grid:last-child { + margin-bottom: 0; +} + +.app-card__header { + padding: var(--space-4) var(--space-5); + border-bottom: 1px solid var(--border); +} + +.app-card__title { + font-size: 0.9375rem; + font-weight: 600; + margin: 0; +} + +.app-card__body--padded { padding: var(--space-5); } + +.card-toolbar { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-4) var(--space-5) 0; + margin-bottom: var(--space-4); + flex-wrap: wrap; +} + +.card-toolbar--desc { + align-items: flex-start; +} + +.card-pager { + padding: var(--space-4) var(--space-5); + display: flex; + justify-content: flex-end; +} + +.card-footer-hint { + padding: 0 var(--space-5) var(--space-3); + margin: 0; +} + +.card-footer-hint + .card-pager { + padding-top: var(--space-3); +} + +.card-inset-block { + margin: 0 var(--space-5) var(--space-4); + padding: var(--space-3); + background: var(--muted); + border-radius: var(--radius); + font-size: 0.875rem; +} + +.tabs-bar { + padding: 0 var(--space-5); + border-bottom: 1px solid var(--border); +} + +.tabs-bar .el-tabs__header { margin-bottom: 0; } + +.page-toolbar { + display: flex; + align-items: center; + gap: var(--space-2); + margin-bottom: var(--space-4); + flex-wrap: wrap; +} + +.inline-actions { + display: flex; + align-items: center; + gap: var(--space-2); + flex-wrap: wrap; +} + +.card-header-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-4); +} +``` + +### 6.5 表单、间距工具类 + +```css +.form-hint { + margin-top: 6px; + font-size: 0.75rem; + color: var(--muted-foreground); +} + +.form-hint--flush { margin-top: 0; } + +.u-mt-3 { margin-top: var(--space-3); } +.u-mt-4 { margin-top: var(--space-4); } +.u-mb-3 { margin-bottom: var(--space-3); } +.u-mb-4 { margin-bottom: var(--space-4); } +.u-mb-6 { margin-bottom: var(--space-6); } +.text-center { text-align: center; } +.w-full { width: 100%; } + +code.inline-code { + font-size: 0.75rem; + padding: 0 var(--space-1); + background: var(--muted); + border-radius: var(--radius); +} + +.section-title { + font-size: 0.875rem; + font-weight: 600; + margin-bottom: var(--space-4); +} + +.section-title:not(:first-child) { margin-top: var(--space-6); } + +.el-form .el-select { width: 100%; } +``` + +### 6.6 登录页 + +```css +.login-page { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + background: var(--background); + padding: var(--space-6); +} + +.login-wrap { max-width: 400px; width: 100%; text-align: center; } + +.login-brand-icon { + width: 48px; + height: 48px; + border-radius: 12px; + background: var(--primary); + color: var(--primary-foreground); + display: inline-flex; + align-items: center; + justify-content: center; + margin-bottom: var(--space-4); +} + +.login-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: var(--space-8); + margin-top: var(--space-6); + text-align: left; +} +``` + +### 6.7 表格 + +```css +.app-card .el-table { + --el-table-header-bg-color: var(--muted); + font-size: 0.875rem; +} + +.app-card .el-table--small .el-table__cell { + padding: var(--space-2) var(--space-3); +} + +.app-card .el-table--small th.el-table__cell { + font-size: 0.75rem; + font-weight: 600; + color: var(--muted-foreground); +} + +.app-card .el-table--small td.el-table__cell { + color: var(--el-text-color-regular); +} + +.app-card .el-table--small .el-table__row { + height: 40px; +} + +.app-card .el-table .el-button.is-link { + padding: 0; + height: auto; +} + +.app-card .el-table .cell { + line-height: 1.4; +} + +.table-scroll--sm { max-height: 320px; } +.table-scroll--md { max-height: 360px; } +.table-scroll--lg { max-height: 480px; } + +.card-pager .el-pagination { + font-size: 0.875rem; +} +``` + +**表格列宽约定** + +| 列类型 | 宽度 | +|--------|------| +| 时间 | `168px` | +| 状态 / 布尔 | `80–100px` | +| 操作 | `120–160px`,`fixed="right"` | +| 主文本 | `min-width`,不设固定宽 | + +### 6.8 工具栏控件宽度 + +```css +.toolbar-select { width: 120px; } +.toolbar-select--country { width: 160px; } +.toolbar-select--wide { width: 280px; } +.toolbar-input { width: 200px; } +.toolbar-input--wide { width: 260px; } +.toolbar-input--grow { flex: 1; min-width: 200px; } +.table-cell-select { width: 100%; min-width: 200px; } + +.card-toolbar .toolbar-input--grow { + flex: 1; + min-width: 200px; +} +``` + +### 6.9 按钮规范(Element Plus 约定) + +| 场景 | 写法 | +|------|------| +| 页面主操作 | `` | +| 页头次要操作 | 默认按钮(无 type) | +| 表格行内操作 | `` | +| 表格行内删除 | `` | +| 顶栏退出 | `` | +| 登录提交 | `` | +| 加载中 | `:loading="true"`,禁止重复点击 | + +### 6.10 弹框与抽屉 + +| 类型 | 宽度 | 属性 | +|------|------|------| +| 简单 CRUD | `480–520px` | `destroy-on-close` | +| 导入/中等表单 | `560–640px` | 同上 | +| 复杂列表弹窗 | `720px` | 同上 | +| 二级编辑 | 抽屉 `50%` | — | + +**底部按钮顺序**:取消(默认)在左,确认(`type="primary"`)在右。 + +### 6.11 标签(Tag) + +统一 `size="small"`: + +| 语义 | type | +|------|------| +| 启用 / 成功 / 存活 | `success` | +| 禁用 / 中性 | `info` | +| 失败 / 错误 | `danger` | +| 警告 / 未就绪 | `warning` | +| 可选项高亮 | `primary` | + +### 6.12 状态色与辅助块 + +```css +.status-good { color: #047857; } +.status-warn { color: #b45309; } +.status-bad { color: #dc2626; } +.status-muted { color: var(--muted-foreground); } + +.kv-block p { + margin: 0 0 var(--space-2); +} + +.kv-block p:last-child { + margin-bottom: 0; +} + +.kv-block .label { + display: inline-block; + width: 5rem; + color: var(--muted-foreground); +} + +.kv-block code { + font-size: 0.8125rem; +} + +.cell-stack { + display: flex; + flex-direction: column; + gap: var(--space-2); + width: 100%; +} + +.meta-list { + margin: 0; + padding: 0; + list-style: none; + font-size: 0.8125rem; + color: var(--muted-foreground); +} + +.meta-list li { + display: flex; + justify-content: space-between; + gap: var(--space-3); + padding: var(--space-1) 0; +} + +.meta-list__mono { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; +} + +.meta-list__ok { color: var(--el-color-success); } +.meta-list__warn { color: var(--el-color-warning); } + +.chart-box { + height: 280px; +} +``` + +### 6.13 滚动条与响应式 + +```css +.custom-scrollbar { + scrollbar-width: thin; + scrollbar-color: #e4e4e7 transparent; +} + +.custom-scrollbar::-webkit-scrollbar { + width: 6px; + height: 6px; +} + +.custom-scrollbar::-webkit-scrollbar-thumb { + background: #e4e4e7; + border-radius: 3px; +} + +.custom-scrollbar::-webkit-scrollbar-track { + background: transparent; +} + +@media (max-width: 1024px) { + .stat-grid { grid-template-columns: repeat(2, 1fr); } + .content-grid--2-1, + .content-grid--2, + .content-grid--3 { grid-template-columns: 1fr; } +} + +@media (max-width: 640px) { + .stat-grid { grid-template-columns: 1fr; } + .main-content { padding: var(--space-4); } + .page-header { flex-direction: column; } +} +``` + +### 6.14 全局工具类速查 + +| 类名 | 用途 | +|------|------| +| `.card-toolbar` | 卡片内筛选行 | +| `.card-pager` | 卡片内分页(右对齐) | +| `.card-header-row` | 卡片头标题 + 右侧操作 | +| `.form-hint` | 表单项下方说明 | +| `.section-title` | 长表单分组标题 | +| `.page-toolbar` | 页内独立工具条 | +| `.tabs-bar` | 卡片内 Tab 容器 | +| `.toolbar-select` / `.toolbar-input` | 工具栏控件宽度 | +| `.table-scroll--sm/md/lg` | 表格最大高度 | +| `.w-full` | 宽度 100% | +| `.u-mb-4` / `.u-mt-3` 等 | 标准外边距 | +| `.status-good` / `.status-warn` / `.status-bad` | 行内数值/状态语义色 | +| `.kv-block` | 键值对结果展示(常配合 `.card-inset-block`) | +| `.cell-stack` | 表格单元格内纵向堆叠 | +| `.meta-list` | 元数据清单列表 | +| `.custom-scrollbar` | 细滚动条(Firefox + WebKit) | + +### 6.15 Element Plus 适配说明 + +以下组件**依靠 EP 默认样式 + `:root` 变量**即可,禁止重复覆盖(除非本节另有说明): + +| 组件 | 使用约定 | 自定义 CSS | +|------|----------|------------| +| `el-button` | 主操作 `type="primary"`;行内 `size="small" link` | 无(颜色来自 `--el-color-primary*`) | +| `el-input` / `el-select` | 表单内 select 宽度 `100%` | 仅 `.el-form .el-select { width: 100% }` | +| `el-dialog` | `destroy-on-close`;宽度见 §6.10 | 无 | +| `el-drawer` | 二级编辑 `size="50%"` | 无 | +| `el-tabs` | 放在 `.tabs-bar` 内 | 仅 `.tabs-bar .el-tabs__header { margin-bottom: 0 }`;激活色来自 `--el-color-primary` | +| `el-pagination` | 放在 `.card-pager` 内 | 仅 `font-size: 0.875rem` | +| `el-tag` | 统一 `size="small"` | 语义色来自 `--el-color-success` 等 | +| `el-message` / `el-message-box` | 操作反馈 | 无 | +| `el-form` | `label-width` 见 §3.4 | 无 | + +**Tabs 推荐结构:** + +```vue + +
+ + + + +
+ +
+``` + +**Dialog 推荐结构:** + +```vue + + + + +``` + +### 6.16 图表规范(ECharts) + +含折线图的统计页使用 `.chart-box` 容器(高度 `280px`)。图表配置须与品牌色一致: + +| 配置项 | 值 | +|--------|-----| +| 容器 class | `chart-box`(`height: 280px`) | +| 主系列色 | `#0f7a62`(`var(--primary)`) | +| 次系列色 | `#71717a`(`var(--muted-foreground)`) | +| 第三系列及以后 | `#4da08c`、`#76b8a8`、`#a0d0c4`(primary-light 阶梯) | +| `grid` | `{ left: 40, right: 16, top: 16, bottom: 24 }` | +| 坐标轴字号 | `12`(与 `0.857rem` 接近) | +| 坐标轴颜色 | `#71717a` | +| 分割线 | `#e4e4e7` | +| 折线 | `smooth: true`;线宽 `2` | +| tooltip | `trigger: 'axis'` | +| 图例 | 顶部或底部,字号 `12` | + +```ts +chart.setOption({ + grid: { left: 40, right: 16, top: 16, bottom: 24 }, + xAxis: { + type: 'category', + data: labels, + axisLabel: { color: '#71717a', fontSize: 12 }, + axisLine: { lineStyle: { color: '#e4e4e7' } }, + }, + yAxis: { + type: 'value', + axisLabel: { color: '#71717a', fontSize: 12 }, + splitLine: { lineStyle: { color: '#e4e4e7' } }, + }, + series: [ + { name: '主指标', type: 'line', smooth: true, data: a, color: '#0f7a62' }, + { name: '次指标', type: 'line', smooth: true, data: b, color: '#71717a' }, + ], + tooltip: { trigger: 'axis' }, +}) +``` + +--- + +## 7. 交互原则 + +### 7.1 反馈与状态 + +| 原则 | 规范 | +|------|------| +| **操作反馈** | 成功/失败使用消息提示(如 `ElMessage`);破坏性操作须二次确认(如 `ElMessageBox.confirm`) | +| **加载态** | 列表 `v-loading`;按钮 `:loading`;全页加载用卡片级 loading | +| **空状态** | 表格无数据依赖 EP 默认 empty;需文案时走 i18n | +| **禁用态** | 批量任务进行中禁用与之互斥的行内操作 | +| **乐观更新** | 不做乐观更新;等 API 成功后再刷新列表 | + +### 7.2 导航与层级 + +| 原则 | 规范 | +|------|------| +| **路由即导航** | 侧栏链接与当前路由同步,激活态高亮 | +| **顶栏标题** | 显示当前一级导航名称,非重复页面 H1 | +| **页内标题** | `PageHeader` 的 `title` 为页面 H1,描述可选 | +| **退出登录** | 顶栏右侧 `text` 按钮,清除会话后跳转登录页 | + +### 7.3 表单与对话框 + +| 原则 | 规范 | +|------|------| +| **关闭销毁** | 对话框统一 `destroy-on-close`,避免脏数据残留 | +| **提交防重** | 提交按钮 `loading` 期间禁止重复提交 | +| **取消不保存** | 取消仅关闭弹层,不触发 API | +| **密码字段** | `type="password"` + `show-password` | +| **字段说明** | 用 `.form-hint`,不用 placeholder 替代说明 | + +### 7.4 列表与表格 + +| 原则 | 规范 | +|------|------| +| **主操作位置** | 新建/导入放 `PageHeader#actions`;筛选放 `.card-toolbar` | +| **行内操作** | 链接式小按钮,删除放最右 | +| **分页** | 放 `.card-pager`,右对齐 | +| **刷新** | 提供显式「刷新」按钮;除监控大屏等实时场景外,不依赖隐式自动刷新 | +| **固定列** | 操作列 `fixed="right"` | + +### 7.5 动效与过渡 + +| 原则 | 规范 | +|------|------| +| **克制动效** | 仅使用 EP 默认过渡(对话框、下拉、Message) | +| **禁止花哨动画** | 不加自定义 page transition、弹跳、视差 | +| **侧栏** | 桌面端固定展开,不用折叠动画(移动端待扩展) | + +### 7.6 无障碍与可用性 + +| 原则 | 规范 | +|------|------| +| **对比度** | 正文与背景对比度 ≥ 4.5:1 | +| **焦点** | 依赖 EP 默认 focus ring,不自行移除 | +| **点击目标** | 按钮最小高度遵循 EP(默认 32px,large 40px) | +| **错误信息** | 接口错误映射为用户可读的本地化文案(如限流、权限不足) | + +### 7.7 国际化 + +| 原则 | 规范 | +|------|------| +| **文案** | 所有可见文字走国际化方案(如 i18n),禁止硬编码用户可见字符串 | +| **时间** | 显示格式 `YYYY-MM-DD HH:mm:ss`(ISO 替换 `T` 并截断) | +| **布局弹性** | 按钮组、工具栏 `flex-wrap: wrap` 适配长文案 | + +--- + +## 8. 附录:复刻指南 + +按以下顺序实施,可在新项目中复刻本文档定义的全部视觉(Vue 3 + Element Plus 2.x)。 + +### 8.1 壳层布局完整模板 + +**DOM 层级(class 名称不可改):** + +``` +.layout +├── .sidebar.custom-scrollbar +│ ├── .sidebar-brand +│ │ ├── .brand-icon → 项目自有 Logo(20px) +│ │ └── .brand-name +│ ├── .nav-group-label(可选分组) +│ └── a.nav-item[.active] × N(含 el-icon 16px) +└── .main-area + ├── header.topbar + │ ├── .topbar-title + │ └── 顶栏操作(如 el-button text) + └── main.main-content.custom-scrollbar + └── router-view → 各页面 .page +``` + +```vue + + + + +``` + +### 8.2 登录页完整模板 + +```vue + + + + +``` + +### 8.3 公共组件完整源码 + +```vue + + + + +``` + +```vue + + + + +``` + +```vue + + + + +``` + +品牌 Logo 由各项目自行提供,放入 `.brand-icon`(20px)与 `.login-brand-icon`(24px)容器即可;须使用 `currentColor` 或适配主色底上的 `--primary-foreground`。 + +### 8.4 标准页面模板 + +```vue + +``` + +### 8.5 带 Tab 的列表页 + +```vue + +
+ + + + +
+
+ +
+
+``` + +### 8.6 新页面 Checklist + +1. 将 §8.9 复制为项目全局样式文件,按 §6.0 顺序在 `main.ts` 中引入 +2. 复制 §8.1 壳层布局、§8.3 公共组件(文件名自定) +3. 页面根节点 `
` +4. `PageHeader`(标题 + 描述 + actions) +5. 主内容 `AppCard`;表单页加 `padded` +6. 列表筛选用 `.card-toolbar`,分页用 `.card-pager` +7. 间距与颜色仅使用 CSS 变量与全局类 +8. 在主布局中注册导航项与图标(§5.3) + +### 8.7 反模式 + +| 不要 | 应该 | +|------|------| +| 深色侧栏 | 浅色半透明侧栏 | +| 页面内裸 `el-card` 作主容器 | `AppCard` | +| 无标题直接上表格 | 先 `PageHeader` | +| 硬编码色值 | CSS 变量 | +| 重阴影 | 细边框 | +| 每页自定义 `.toolbar` / `.pager` | `.card-toolbar` / `.card-pager` | +| 表单卡片不加 `padded` | `AppCard padded` | +| `style="margin-top: 12px"` | `.u-mt-3` 等工具类 | +| 非 8px 倍数的随意间距 | 间距 Token | +| 在 EP 样式之前引入全局样式 | 先 `element-plus/dist/index.css`,再引入 §8.9 全局样式 | + +### 8.8 推荐目录结构(示例) + +``` +styles/global.css ← 由本文档 §8.9 复制生成,路径与文件名自定 +components/PageHeader.vue +components/StatCard.vue +components/AppCard.vue +layouts/MainLayout.vue ← 见 §8.1,文件名自定 +views/Login.vue ← 见 §8.2,文件名自定 +``` + +样式变更时,须同时更新本文档 **§6.1–6.14** 与 **§8.9** 两处 CSS,保持内容一致。 + +### 8.9 完整全局样式(一键复制) + +以下为**设计规范定义的完整全局 CSS**,直接复制到项目全局样式文件即可(§6.1–6.14 为分模块对照版,内容须与本节一致)。 + +```css +:root { + --background: #f4f4f5; + --foreground: #18181b; + --card: #ffffff; + --card-foreground: #18181b; + --primary: #0f7a62; + --primary-hover: #0d6b56; + --primary-foreground: #fafafa; + --muted: #f4f4f5; + --muted-foreground: #71717a; + --border: #e4e4e7; + --input: #e4e4e7; + --destructive: #dc2626; + --success: #047857; + --warning: #b45309; + --danger: #dc2626; + --info: #a1a1aa; + --sidebar: rgba(250, 250, 250, 0.85); + --sidebar-foreground: #18181b; + --sidebar-accent: #f4f4f5; + --sidebar-border: #e4e4e7; + --sidebar-width: 15rem; + --radius: 0.5rem; + --space-1: 4px; + --space-2: 8px; + --space-3: 12px; + --space-4: 16px; + --space-5: 20px; + --space-6: 24px; + --space-8: 32px; + + --el-color-primary: #0f7a62; + --el-color-primary-light-3: #4da08c; + --el-color-primary-light-5: #76b8a8; + --el-color-primary-light-7: #a0d0c4; + --el-color-primary-light-8: #b8dcd2; + --el-color-primary-light-9: #d0e8e1; + --el-color-primary-dark-2: #0c624e; + --el-color-success: #047857; + --el-color-warning: #b45309; + --el-color-danger: #dc2626; + --el-color-info: #a1a1aa; + --el-border-radius-base: 0.5rem; + --el-border-color: #e4e4e7; + --el-bg-color-page: #f4f4f5; + --el-text-color-primary: #18181b; + --el-text-color-regular: #3f3f46; + --el-text-color-secondary: #71717a; + --el-font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif; +} + +* { box-sizing: border-box; } + +html, body, #app { + margin: 0; + padding: 0; + height: 100%; + font-size: 14px; + font-family: var(--el-font-family); + background: var(--background); + color: var(--foreground); +} + +.layout { + display: flex; + height: 100vh; +} + +.sidebar { + width: var(--sidebar-width); + flex-shrink: 0; + background: var(--sidebar); + border-right: 1px solid var(--sidebar-border); + backdrop-filter: blur(8px); + display: flex; + flex-direction: column; + overflow-y: auto; +} + +.sidebar-brand { + display: flex; + align-items: center; + gap: var(--space-3); + padding: var(--space-5) var(--space-4); +} + +.brand-icon { + width: 32px; + height: 32px; + border-radius: var(--radius); + background: var(--primary); + color: var(--primary-foreground); + display: flex; + align-items: center; + justify-content: center; +} + +.brand-name { + font-size: 1.125rem; + font-weight: 600; +} + +.nav-group-label { + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.04em; + color: var(--muted-foreground); + padding: var(--space-4) var(--space-4) var(--space-2); +} + +.nav-item { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-2) var(--space-3); + margin: 0 var(--space-2); + border-radius: var(--radius); + color: var(--muted-foreground); + text-decoration: none; + font-size: 0.875rem; + font-weight: 500; +} + +.nav-item:hover { background: var(--sidebar-accent); } + +.nav-item.active { + background: var(--sidebar-accent); + color: var(--primary); + font-weight: 600; +} + +.main-area { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; +} + +.topbar { + height: 52px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 var(--space-6); + background: var(--card); + border-bottom: 1px solid var(--border); +} + +.topbar-title { + font-size: 0.875rem; + color: var(--muted-foreground); +} + +.main-content { + flex: 1; + overflow-y: auto; + padding: var(--space-6); +} + +.page { + max-width: 1400px; +} + +.page-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + margin-bottom: var(--space-6); + gap: var(--space-4); +} + +.page-actions { + display: flex; + align-items: center; + gap: var(--space-2); + flex-shrink: 0; + flex-wrap: wrap; +} + +.page-title { + font-size: 1.5rem; + font-weight: 600; + letter-spacing: -0.02em; + margin: 0 0 var(--space-1); +} + +.page-desc { + font-size: 0.875rem; + color: var(--muted-foreground); + margin: 0; +} + +.stat-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: var(--space-4); + margin-bottom: var(--space-6); +} + +.stat-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: var(--space-5); +} + +.stat-card__label { + font-size: 0.875rem; + color: var(--muted-foreground); + margin-bottom: var(--space-2); +} + +.stat-card__value { + font-size: 1.75rem; + font-weight: 600; +} + +.app-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + margin-bottom: var(--space-4); +} + +.page > .app-card:last-child, +.page > .content-grid:last-child { + margin-bottom: 0; +} + +.app-card__header { + padding: var(--space-4) var(--space-5); + border-bottom: 1px solid var(--border); +} + +.app-card__title { + font-size: 0.9375rem; + font-weight: 600; + margin: 0; +} + +.app-card__body--padded { padding: var(--space-5); } + +.content-grid { + display: grid; + gap: var(--space-4); + margin-bottom: var(--space-6); +} + +.content-grid--2-1 { grid-template-columns: 1.4fr 1fr; } +.content-grid--2 { grid-template-columns: 1fr 1fr; } +.content-grid--3 { grid-template-columns: repeat(3, 1fr); } + +.card-toolbar { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-4) var(--space-5) 0; + margin-bottom: var(--space-4); + flex-wrap: wrap; +} + +.card-toolbar--desc { + align-items: flex-start; +} + +.card-pager { + padding: var(--space-4) var(--space-5); + display: flex; + justify-content: flex-end; +} + +.card-footer-hint { + padding: 0 var(--space-5) var(--space-3); + margin: 0; +} + +.card-footer-hint + .card-pager { + padding-top: var(--space-3); +} + +.card-inset-block { + margin: 0 var(--space-5) var(--space-4); + padding: var(--space-3); + background: var(--muted); + border-radius: var(--radius); + font-size: 0.875rem; +} + +.tabs-bar { + padding: 0 var(--space-5); + border-bottom: 1px solid var(--border); +} + +.tabs-bar .el-tabs__header { margin-bottom: 0; } + +.page-toolbar { + display: flex; + align-items: center; + gap: var(--space-2); + margin-bottom: var(--space-4); + flex-wrap: wrap; +} + +.inline-actions { + display: flex; + align-items: center; + gap: var(--space-2); + flex-wrap: wrap; +} + +.card-header-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-4); +} + +.form-hint { + margin-top: 6px; + font-size: 0.75rem; + color: var(--muted-foreground); +} + +.form-hint--flush { margin-top: 0; } + +.u-mt-3 { margin-top: var(--space-3); } +.u-mt-4 { margin-top: var(--space-4); } +.u-mb-3 { margin-bottom: var(--space-3); } +.u-mb-4 { margin-bottom: var(--space-4); } +.u-mb-6 { margin-bottom: var(--space-6); } +.text-center { text-align: center; } +.w-full { width: 100%; } + +code.inline-code { + font-size: 0.75rem; + padding: 0 var(--space-1); + background: var(--muted); + border-radius: var(--radius); +} + +.section-title { + font-size: 0.875rem; + font-weight: 600; + margin-bottom: var(--space-4); +} + +.section-title:not(:first-child) { margin-top: var(--space-6); } + +.login-page { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + background: var(--background); + padding: var(--space-6); +} + +.login-wrap { max-width: 400px; width: 100%; text-align: center; } + +.login-brand-icon { + width: 48px; + height: 48px; + border-radius: 12px; + background: var(--primary); + color: var(--primary-foreground); + display: inline-flex; + align-items: center; + justify-content: center; + margin-bottom: var(--space-4); +} + +.login-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: var(--space-8); + margin-top: var(--space-6); + text-align: left; +} + +.status-good { color: #047857; } +.status-warn { color: #b45309; } +.status-bad { color: #dc2626; } +.status-muted { color: var(--muted-foreground); } + +.toolbar-select { width: 120px; } +.toolbar-select--country { width: 160px; } +.toolbar-select--wide { width: 280px; } +.toolbar-input { width: 200px; } +.toolbar-input--wide { width: 260px; } +.toolbar-input--grow { flex: 1; min-width: 200px; } +.table-cell-select { width: 100%; min-width: 200px; } + +.el-form .el-select { width: 100%; } + +.app-card .el-table { + --el-table-header-bg-color: var(--muted); + font-size: 0.875rem; +} + +.app-card .el-table--small .el-table__cell { + padding: var(--space-2) var(--space-3); +} + +.app-card .el-table--small th.el-table__cell { + font-size: 0.75rem; + font-weight: 600; + color: var(--muted-foreground); +} + +.app-card .el-table--small td.el-table__cell { + color: var(--el-text-color-regular); +} + +.app-card .el-table--small .el-table__row { + height: 40px; +} + +.app-card .el-table .el-button.is-link { + padding: 0; + height: auto; +} + +.app-card .el-table .cell { + line-height: 1.4; +} + +.table-scroll--sm { max-height: 320px; } +.table-scroll--md { max-height: 360px; } +.table-scroll--lg { max-height: 480px; } + +.card-toolbar .toolbar-input--grow { + flex: 1; + min-width: 200px; +} + +.card-pager .el-pagination { + font-size: 0.875rem; +} + +.kv-block p { + margin: 0 0 var(--space-2); +} + +.kv-block p:last-child { + margin-bottom: 0; +} + +.kv-block .label { + display: inline-block; + width: 5rem; + color: var(--muted-foreground); +} + +.kv-block code { + font-size: 0.8125rem; +} + +.cell-stack { + display: flex; + flex-direction: column; + gap: var(--space-2); + width: 100%; +} + +.meta-list { + margin: 0; + padding: 0; + list-style: none; + font-size: 0.8125rem; + color: var(--muted-foreground); +} + +.meta-list li { + display: flex; + justify-content: space-between; + gap: var(--space-3); + padding: var(--space-1) 0; +} + +.meta-list__mono { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; +} + +.meta-list__ok { color: var(--el-color-success); } +.meta-list__warn { color: var(--el-color-warning); } + +.chart-box { + height: 280px; +} + +.custom-scrollbar { + scrollbar-width: thin; + scrollbar-color: #e4e4e7 transparent; +} + +.custom-scrollbar::-webkit-scrollbar { + width: 6px; + height: 6px; +} + +.custom-scrollbar::-webkit-scrollbar-thumb { + background: #e4e4e7; + border-radius: 3px; +} + +.custom-scrollbar::-webkit-scrollbar-track { + background: transparent; +} + +@media (max-width: 1024px) { + .stat-grid { grid-template-columns: repeat(2, 1fr); } + .content-grid--2-1, + .content-grid--2, + .content-grid--3 { grid-template-columns: 1fr; } +} + +@media (max-width: 640px) { + .stat-grid { grid-template-columns: 1fr; } + .main-content { padding: var(--space-4); } + .page-header { flex-direction: column; } +} +``` + +--- + +*浅色后台管理系统 UI 设计规范* diff --git a/web/embed.go b/web/embed.go new file mode 100644 index 0000000..29c8403 --- /dev/null +++ b/web/embed.go @@ -0,0 +1,6 @@ +package web + +import "embed" + +//go:embed dist/* +var Dist embed.FS diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..cc9a22c --- /dev/null +++ b/web/index.html @@ -0,0 +1,12 @@ + + + + + + Wormhole + + +
+ + + diff --git a/web/package-lock.json b/web/package-lock.json new file mode 100644 index 0000000..85ad588 --- /dev/null +++ b/web/package-lock.json @@ -0,0 +1,1846 @@ +{ + "name": "wormhole-web", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "wormhole-web", + "version": "0.1.0", + "dependencies": { + "@element-plus/icons-vue": "^2.3.2", + "axios": "^1.7.7", + "echarts": "^5.5.1", + "element-plus": "^2.8.4", + "vue": "^3.5.11", + "vue-i18n": "^9.14.4", + "vue-router": "^4.4.5" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.1.4", + "vite": "^5.4.8" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz", + "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", + "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, + "node_modules/@intlify/core-base": { + "version": "9.14.4", + "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.14.4.tgz", + "integrity": "sha512-vtZCt7NqWhKEtHa3SD/322DlgP5uR9MqWxnE0y8Q0tjDs9H5Lxhss+b5wv8rmuXRoHKLESNgw9d+EN9ybBbj9g==", + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "9.14.4", + "@intlify/shared": "9.14.4" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "9.14.4", + "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.14.4.tgz", + "integrity": "sha512-vcyCLiVRN628U38c3PbahrhbbXrckrM9zpy0KZVlDk2Z0OnGwv8uQNNXP3twwGtfLsCf4gu3ci6FMIZnPaqZsw==", + "license": "MIT", + "dependencies": { + "@intlify/shared": "9.14.4", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "9.14.4", + "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.14.4.tgz", + "integrity": "sha512-P9zv6i1WvMc9qDBWvIgKkymjY2ptIiQ065PjDv7z7fDqH3J/HBRBN5IoiR46r/ujRcU7hCuSIZWvCAFCyuOYZA==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.8", + "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.8.tgz", + "integrity": "sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.0.tgz", + "integrity": "sha512-IPIQ55ythEHkfEd9jMEi32OQ7SxURsGA43JI22lj01OLZNt2NUbJX8YUHxkVWyQ6daHPNn0truF5nSj3DQp6YQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.0.tgz", + "integrity": "sha512-M6s9cr10MibETyo8JsOkq+Lo1+lU6hcvb1MApnUql5qte/5hMEgzlN8/ReIKNfRV8rrqX50W1BX9zoUhC192RA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.0.tgz", + "integrity": "sha512-BqCoMoIbn0keKys+dEAdBa70EtOwV1bEsQCUgU9FdiZmmMge/Zk7LlkYGqbrdHR+Frnt0E1FOanly+rlwvvQzw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.0.tgz", + "integrity": "sha512-SIMzST3VFNXDAbeIWDWiFCNM5qncUBDWaEV7NfE7oZbDt2mgfW4MvbKdbYiGOLoM32gbTv608UMd0XktEYSD7w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.0.tgz", + "integrity": "sha512-ezjfSQMP7ArdUsbBwbQIfwAlhE84I2iVnzQNCFSveqV42q+BmKlzVpf7mxv5EchLcoWU4y6/heFzVg1F+hodUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.0.tgz", + "integrity": "sha512-9+qTWGW9AZRhnUgwtTwzNwcPlL87ngkeN0LA+q1bADvmY9aNvWaF2TFW8BZgnQPYxpDI7+rMVLivcd4V737TAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.0.tgz", + "integrity": "sha512-T1dMEQhXA/jkJ/jyMIw9IovK8bSUq7A8kLIlvZTb/6YIVsp2zLavr4F3oyllHWo7eIVJRyE5n3tUjQJEbE1IuQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.0.tgz", + "integrity": "sha512-2as0LgT7qQpyceQq6VUJYnumUMUrgGQCWIiDIN9DE0/tglsk6o66uCB4f3djRawAltvfCNLyZZrsqbPA6inCsA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.0.tgz", + "integrity": "sha512-bVURMg+6eNN9C/yc0aVjooZcwTTtYF4YW3xta5pP0//r3o1V8gXEHXWCndj47w/HhwsFroZrFhR+6uQP5T0n0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.0.tgz", + "integrity": "sha512-Ful8pM/2yYI83PViWdFdpZhdI8HJ5qsXANe5atypbHDf+KIBBDsZsbyy8hbXnULVvW9NsTh5DHwbcBftyLTfiw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.0.tgz", + "integrity": "sha512-9Gp/DgrkzfUBmNPVTyPTvay+4xEP7M/clXpj3efXBcm6uTIVIgDg4rqUpqKXvLEuFRVuEpSAOkhgNeecvaZ4Cg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.0.tgz", + "integrity": "sha512-m9tsJz54LUXkSYM8+8PG81B9IKK5r+2T0clMq4QrS16xFosufU7firBDAZEsDheDs7wTlP7h3++S7lMsU955HA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.0.tgz", + "integrity": "sha512-3UvJ5PNVU16aJf6M3tFI24pWzAl2/ynfbyRN3ICyQajK1lSkrnVYNnLz3v04J32qKa0FczJc22zeToc0lr2A3w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.0.tgz", + "integrity": "sha512-vRWUAbYLGHBZS6Q8Msb2sfnf1fvJf+47t8l/TwOerM2qArzy+IeNMTHrYLHXh95h8MoatPHI5hhSZNs+mGXKPg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.0.tgz", + "integrity": "sha512-c00T5SYENHAt86cfW47URaP3Us5vLC/4QO7GYud1G5VNRffCwwCuBspwqYrriuJB+5m0WFzClCn9wed0FBjKvg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.0.tgz", + "integrity": "sha512-krrCDilhXOwFkSkO3Wm9I/f9H0L92XHHwy2fwxjukxIbh0dem8gZqOW5Y8BsHrpJv5qwlRBV+Wl4ZFyRWhUpwg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.0.tgz", + "integrity": "sha512-7pfYFSTc4/rUC/FtAI0Qp6QthDBCIi6/AuP1xYqFk5vanI6KnL5dWKP60OM/05LOsbwTmIcvr6eXC4CJuJ75IA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.0.tgz", + "integrity": "sha512-7SDIalKeIpG0Ifogbbdn58HmSotYMlf23K3dCJEmiVd9Fg36Vmni82iPQec27N3wY4Bvbxftkxz6vSx9OcouTg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.0.tgz", + "integrity": "sha512-eRZevouTH2i1HeAVLqJuLnt256krQkGY0TN6WsTmsIhuzbh457HuWDMakKwmi0Cjadux983CoSr8Lim2QhUIFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.0.tgz", + "integrity": "sha512-3oVS7FLGa4U1qcvao9ylGxrjXZyUQqR8UwxEcnUEyPX53O/C/mKDZegNXTdHCP+h3e6ta/f1EN38Yif1mmZHYg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.0.tgz", + "integrity": "sha512-yTB9TgfWj5wHe5QgktAgXTLLot1gvEjl1NiPPAUiCs4oPrIWFl5V4nC3GrkNdj9LaAU4s94nVrGbGOCqUpyWsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.0.tgz", + "integrity": "sha512-5LOhoaesY3doG1c+ac/2JtgREpKoJr5bUHH8tKY0V8di7+uSV6BwLs2PlR0/yzefGOkR+wE7ZolZphHCsyG5Rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.0.tgz", + "integrity": "sha512-yYkWHhmbhRTWTnWos5HC4GcPQfjlzzCNbM9e/+GXrLuaBXYA3qSDR9f0Vgufd5S8yX81U8jPKp7ZnAjZFMtRnw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.0.tgz", + "integrity": "sha512-SoTb6lPg25xZlA2ibwQ++ahCCnH+FP0qmEuafMJ4gznZKOlXioKEAeJLgCrqjM98ACziXM9V1amFjICVL4IFoA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.0.tgz", + "integrity": "sha512-5L+T1fMX4RIEBoZzT0+sQ0PhTS36NULFmMXtl1TZo44TMAROIMHbZufSOjVWt/Y622BtxgxtaNOokbTDvfsrZA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.24", + "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.38.tgz", + "integrity": "sha512-s99aGxWYig9ErHbct27KXEGhrBYlRI6c4MwAgXErOAbX9xiW37/uMa+XUDO69zLz83dng8UUZ70CTOJrLrYrEQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@vue/shared": "3.5.38", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.38.tgz", + "integrity": "sha512-JTqp25l8aFfJYF7/KmsXZjAxJz7T+SjmTJLoXVjHtc2BrSgSiW2n9Aem/cWq1OPe68A8JL06B3eVdhlP0H4TVw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.38", + "@vue/shared": "3.5.38" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.38.tgz", + "integrity": "sha512-DuA2GiZawSEW442iw/9+Fkol8hTgb4Ke5KkhmSry65QA7YuyMbIdy8p0XZRMvNwJdgRz307W8g1CSzdvS4nuNg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@vue/compiler-core": "3.5.38", + "@vue/compiler-dom": "3.5.38", + "@vue/compiler-ssr": "3.5.38", + "@vue/shared": "3.5.38", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.15", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.38.tgz", + "integrity": "sha512-7s+W5Gc42FGxZMcuwl8H5B29T8BJPMdBT7KHFE+BbAuZ/iTEdTtv7z2XiMjiaUUw4w3ZcCEdHs36RuYJ2VA7bA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.38", + "@vue/shared": "3.5.38" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/reactivity": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.38.tgz", + "integrity": "sha512-pG6LV/NDNRbKizcUjFFLAfjaL8mcv4DmR9avNcUw2gDHBzZneuS2TWCmp633ynzxz9YYKNeEPK2I8Wraqy2HUQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.38" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.38.tgz", + "integrity": "sha512-iyW8WVfF1CpCXxncZY5Ei6rSd6oZr5DgEom//fUjRBRl56AXPD+s9ATvukRt77ZFTuYlnVA1bxY+dJB94tWVYw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.38", + "@vue/shared": "3.5.38" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.38.tgz", + "integrity": "sha512-apX2wt9sdfDshS+a2xueFZLVpt0GkRJZSoPmrW/SA4yzXTznhfcMVW59gr7h4YQeY0vJhdJkk2rsIDwgfFgC5A==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.38", + "@vue/runtime-core": "3.5.38", + "@vue/shared": "3.5.38", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.38.tgz", + "integrity": "sha512-vue8vbf2QlV4quHqzwmJy6dWfmRhP1J8l4wtZg60CL6VoKqcPY2oe7may3+1d9qfpedjK5PRLFqd5k3Isj9mUw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.38", + "@vue/shared": "3.5.38" + }, + "peerDependencies": { + "vue": "3.5.38" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.38.tgz", + "integrity": "sha512-FTW0AFZNaK5/mOqvGBwVfUlNLU38TiQn4+DQgIFUnrBBJQ1crMJ82yeGQLV5jyKFsO8yRukpbuP7x+nRbH6aug==", + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "14.3.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-14.3.0.tgz", + "integrity": "sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.3.0", + "@vueuse/shared": "14.3.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "14.3.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-14.3.0.tgz", + "integrity": "sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "14.3.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-14.3.0.tgz", + "integrity": "sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.18.0", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.18.0.tgz", + "integrity": "sha512-E32NzpYKp++W7XRe52rHiXV2ehxmh3wbdgO7MHeFM+vqxLBYHzt0ElkiImtOBxtOmyp0yoC8C6uESVV84Y2/hw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.21", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.21.tgz", + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/echarts": { + "version": "5.6.0", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz", + "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.6.1" + } + }, + "node_modules/element-plus": { + "version": "2.14.2", + "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.14.2.tgz", + "integrity": "sha512-eNH9uP3wQoNqieEIHXiNvIVv+zO5sZDU0CAZq5b0zqSN06DD0/V9xIq1R/qm3rw5k3nBTM1JvpxhCfRbaFLzDQ==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^4.2.0", + "@element-plus/icons-vue": "^2.3.2", + "@floating-ui/dom": "^1.7.6", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.8", + "@types/lodash": "^4.17.24", + "@types/lodash-es": "^4.17.12", + "@vueuse/core": "14.3.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.20", + "lodash": "^4.18.1", + "lodash-es": "^4.18.1", + "lodash-unified": "^1.0.3", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0", + "vue-component-type-helpers": "^3.3.3" + }, + "peerDependencies": { + "vue": "^3.3.7" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "license": "MIT" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.62.0.tgz", + "integrity": "sha512-nc72Wgq62I7rtDV4izT5/aaS0zxy3kttkinf9586ApknY3jZO9NYsmtc24fUckA0X7Q2v+ML4a15pdUlV5V/jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.62.0", + "@rollup/rollup-android-arm64": "4.62.0", + "@rollup/rollup-darwin-arm64": "4.62.0", + "@rollup/rollup-darwin-x64": "4.62.0", + "@rollup/rollup-freebsd-arm64": "4.62.0", + "@rollup/rollup-freebsd-x64": "4.62.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.0", + "@rollup/rollup-linux-arm-musleabihf": "4.62.0", + "@rollup/rollup-linux-arm64-gnu": "4.62.0", + "@rollup/rollup-linux-arm64-musl": "4.62.0", + "@rollup/rollup-linux-loong64-gnu": "4.62.0", + "@rollup/rollup-linux-loong64-musl": "4.62.0", + "@rollup/rollup-linux-ppc64-gnu": "4.62.0", + "@rollup/rollup-linux-ppc64-musl": "4.62.0", + "@rollup/rollup-linux-riscv64-gnu": "4.62.0", + "@rollup/rollup-linux-riscv64-musl": "4.62.0", + "@rollup/rollup-linux-s390x-gnu": "4.62.0", + "@rollup/rollup-linux-x64-gnu": "4.62.0", + "@rollup/rollup-linux-x64-musl": "4.62.0", + "@rollup/rollup-openbsd-x64": "4.62.0", + "@rollup/rollup-openharmony-arm64": "4.62.0", + "@rollup/rollup-win32-arm64-msvc": "4.62.0", + "@rollup/rollup-win32-ia32-msvc": "4.62.0", + "@rollup/rollup-win32-x64-gnu": "4.62.0", + "@rollup/rollup-win32-x64-msvc": "4.62.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.38.tgz", + "integrity": "sha512-vAMKHfImQlYSy0C+PBue4s3ERZ2xGKfgZg5GXAsLInq1dyh2H78ILVP5sK0KPFPVW4kv+OGCIvBEondcjpZp7A==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.38", + "@vue/compiler-sfc": "3.5.38", + "@vue/runtime-dom": "3.5.38", + "@vue/server-renderer": "3.5.38", + "@vue/shared": "3.5.38" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-component-type-helpers": { + "version": "3.3.5", + "resolved": "https://registry.npmmirror.com/vue-component-type-helpers/-/vue-component-type-helpers-3.3.5.tgz", + "integrity": "sha512-Fe1jyPJoUGpJOYKOri44jduR7My4yYINOMJISuMAbmrs+L5LbIDUc8NTWZYY3EJLK0yPLuCmcd5zoCsE4k2/KA==", + "license": "MIT" + }, + "node_modules/vue-i18n": { + "version": "9.14.4", + "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.14.4.tgz", + "integrity": "sha512-B934C8yUyWLT0EMud3DySrwSUJI7ZNiWYsEEz2gknTthqKiG4dzWE/WSa8AzCuSQzwBEv4HtG1jZDhgzPfWSKQ==", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "9.14.4", + "@intlify/shared": "9.14.4", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-router": { + "version": "4.6.4", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.6.4.tgz", + "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/zrender": { + "version": "5.6.1", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz", + "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==", + "license": "BSD-3-Clause", + "dependencies": { + "tslib": "2.3.0" + } + } + } +} diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..99fd335 --- /dev/null +++ b/web/package.json @@ -0,0 +1,24 @@ +{ + "name": "wormhole-web", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.2", + "axios": "^1.7.7", + "echarts": "^5.5.1", + "element-plus": "^2.8.4", + "vue": "^3.5.11", + "vue-i18n": "^9.14.4", + "vue-router": "^4.4.5" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.1.4", + "vite": "^5.4.8" + } +} diff --git a/web/src/App.vue b/web/src/App.vue new file mode 100644 index 0000000..d94ed87 --- /dev/null +++ b/web/src/App.vue @@ -0,0 +1,15 @@ + + + diff --git a/web/src/api/index.js b/web/src/api/index.js new file mode 100644 index 0000000..a765ff7 --- /dev/null +++ b/web/src/api/index.js @@ -0,0 +1,27 @@ +import axios from 'axios' + +const api = axios.create({ baseURL: '/api' }) + +api.interceptors.request.use((config) => { + const token = localStorage.getItem('token') + if (token) { + config.headers.Authorization = `Bearer ${token}` + } + return config +}) + +api.interceptors.response.use( + (res) => res, + (err) => { + if (err.response?.status === 401) { + localStorage.removeItem('token') + localStorage.removeItem('user') + if (!window.location.pathname.includes('/login')) { + window.location.href = '/login' + } + } + return Promise.reject(err) + } +) + +export default api diff --git a/web/src/components/AppCard.vue b/web/src/components/AppCard.vue new file mode 100644 index 0000000..61b900a --- /dev/null +++ b/web/src/components/AppCard.vue @@ -0,0 +1,19 @@ + + + diff --git a/web/src/components/AppLogo.vue b/web/src/components/AppLogo.vue new file mode 100644 index 0000000..67b55c7 --- /dev/null +++ b/web/src/components/AppLogo.vue @@ -0,0 +1,13 @@ + + + diff --git a/web/src/components/ChartBox.vue b/web/src/components/ChartBox.vue new file mode 100644 index 0000000..66580e7 --- /dev/null +++ b/web/src/components/ChartBox.vue @@ -0,0 +1,37 @@ + + + diff --git a/web/src/components/ClientSelect.vue b/web/src/components/ClientSelect.vue new file mode 100644 index 0000000..5c394a7 --- /dev/null +++ b/web/src/components/ClientSelect.vue @@ -0,0 +1,36 @@ + + + diff --git a/web/src/components/ForwardPluginEditor.vue b/web/src/components/ForwardPluginEditor.vue new file mode 100644 index 0000000..701db7d --- /dev/null +++ b/web/src/components/ForwardPluginEditor.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/web/src/components/ImportExportActions.vue b/web/src/components/ImportExportActions.vue new file mode 100644 index 0000000..e876b90 --- /dev/null +++ b/web/src/components/ImportExportActions.vue @@ -0,0 +1,109 @@ + + + diff --git a/web/src/components/PageHeader.vue b/web/src/components/PageHeader.vue new file mode 100644 index 0000000..3b984b0 --- /dev/null +++ b/web/src/components/PageHeader.vue @@ -0,0 +1,18 @@ + + + diff --git a/web/src/components/ProxyHeadersFields.vue b/web/src/components/ProxyHeadersFields.vue new file mode 100644 index 0000000..0d01afa --- /dev/null +++ b/web/src/components/ProxyHeadersFields.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/web/src/components/RankDialog.vue b/web/src/components/RankDialog.vue new file mode 100644 index 0000000..fc6f730 --- /dev/null +++ b/web/src/components/RankDialog.vue @@ -0,0 +1,75 @@ + + + diff --git a/web/src/components/StatCard.vue b/web/src/components/StatCard.vue new file mode 100644 index 0000000..cdf45ed --- /dev/null +++ b/web/src/components/StatCard.vue @@ -0,0 +1,13 @@ + + + diff --git a/web/src/components/VisitorAuthFields.vue b/web/src/components/VisitorAuthFields.vue new file mode 100644 index 0000000..10de20b --- /dev/null +++ b/web/src/components/VisitorAuthFields.vue @@ -0,0 +1,73 @@ + + + diff --git a/web/src/composables/useMetricHistory.js b/web/src/composables/useMetricHistory.js new file mode 100644 index 0000000..831b26e --- /dev/null +++ b/web/src/composables/useMetricHistory.js @@ -0,0 +1,26 @@ +import { ref } from 'vue' +import { formatChartTime } from '@/utils/datetime' + +const MAX_POINTS = 36 + +export function useMetricHistory() { + const labels = ref([]) + const cpu = ref([]) + const memory = ref([]) + const inlet = ref([]) + const exportFlow = ref([]) + + function trim(arr) { + return arr.length > MAX_POINTS ? arr.slice(-MAX_POINTS) : arr + } + + function record(snapshot) { + labels.value = trim([...labels.value, formatChartTime()]) + cpu.value = trim([...cpu.value, Number(snapshot.cpu_percent?.toFixed?.(1) ?? 0)]) + memory.value = trim([...memory.value, Number(snapshot.mem_percent?.toFixed?.(1) ?? 0)]) + inlet.value = trim([...inlet.value, snapshot.inlet_flow ?? 0]) + exportFlow.value = trim([...exportFlow.value, snapshot.export_flow ?? 0]) + } + + return { labels, cpu, memory, inlet, exportFlow, record } +} diff --git a/web/src/i18n/index.js b/web/src/i18n/index.js new file mode 100644 index 0000000..cb152b9 --- /dev/null +++ b/web/src/i18n/index.js @@ -0,0 +1,29 @@ +import { createI18n } from 'vue-i18n' +import zhCN from '@/locales/zh-CN' +import en from '@/locales/en' + +const LOCALE_KEY = 'wormhole-locale' + +function detectLocale() { + const saved = localStorage.getItem(LOCALE_KEY) + if (saved === 'zh-CN' || saved === 'en') return saved + const lang = navigator.language || '' + return lang.startsWith('zh') ? 'zh-CN' : 'en' +} + +export const i18n = createI18n({ + legacy: false, + locale: detectLocale(), + fallbackLocale: 'zh-CN', + messages: { 'zh-CN': zhCN, en }, +}) + +export function setLocale(locale) { + i18n.global.locale.value = locale + localStorage.setItem(LOCALE_KEY, locale) + document.documentElement.lang = locale === 'zh-CN' ? 'zh-CN' : 'en' +} + +setLocale(i18n.global.locale.value) + +export default i18n diff --git a/web/src/layouts/MainLayout.vue b/web/src/layouts/MainLayout.vue new file mode 100644 index 0000000..4cf8fc8 --- /dev/null +++ b/web/src/layouts/MainLayout.vue @@ -0,0 +1,143 @@ + + + diff --git a/web/src/locales/en.js b/web/src/locales/en.js new file mode 100644 index 0000000..926fa0b --- /dev/null +++ b/web/src/locales/en.js @@ -0,0 +1,358 @@ +export default { + app: { + name: 'Wormhole', + tagline: 'Intranet tunneling + reverse proxy gateway', + }, + common: { + refresh: 'Refresh', + save: 'Save', + cancel: 'Cancel', + close: 'Close', + search: 'Search', + delete: 'Delete', + edit: 'Edit', + create: 'Create', + confirm: 'Confirm', + actions: 'Actions', + enabled: 'Enabled', + disabled: 'Disabled', + yes: 'Yes', + no: 'No', + name: 'Name', + status: 'Status', + id: 'ID', + optional: 'Optional', + loading: 'Loading…', + viewAll: 'View all', + logout: 'Sign out', + language: 'Language', + zh: '中文', + en: 'English', + hint: 'Notice', + export: 'Export', + import: 'Import', + start: 'Start', + stop: 'Stop', + pause: 'Pause', + resume: 'Resume', + block: 'Block', + traffic: 'Traffic', + target: 'Target', + client: 'Client', + mode: 'Mode', + port: 'Port', + prefix: 'Prefix', + resource: 'Resource', + method: 'Method', + path: 'Path', + time: 'Time', + type: 'Type', + running: 'Running', + stopped: 'Stopped', + paused: 'Paused', + on: 'On', + off: 'Off', + online: 'Online', + offline: 'Offline', + selectClient: 'Please select a client', + dash: '-', + }, + nav: { + groups: { + overview: 'Overview', + forward: 'Forward', + tunnel: 'Tunnel', + security: 'Security', + system: 'System', + }, + dashboard: 'Dashboard', + domainForwards: 'Domain forward', + clients: 'Clients', + tunnels: 'Tunnels', + hosts: 'Hosts', + ipRules: 'IP rules', + requestIPs: 'Request IPs', + users: 'Visitors', + settings: 'Settings', + }, + topbar: { + dashboard: 'Dashboard', + clients: 'Client management', + tunnels: 'Tunnel management', + hosts: 'Host routing', + domainForwards: 'Domain forward', + ipRules: 'IP rules', + requestIPs: 'Request IP monitor', + users: 'Visitor users', + settings: 'System settings', + fallback: 'Wormhole', + }, + login: { + title: 'Sign in', + username: 'Username', + password: 'Password', + submit: 'Sign in', + hint: 'Default account admin / admin', + lockDefault: 'Too many login attempts. Please try again later.', + lockMinutes: 'Too many login attempts. Try again in {n} minute(s).', + lockSeconds: 'Too many login attempts. Try again in {n} second(s).', + }, + dashboard: { + title: 'Dashboard', + description: 'System status, traffic and access monitoring', + openapi: 'OpenAPI', + statClientTotal: 'Total clients', + statClientOnline: 'Online clients', + statTunnelRunning: 'Running tunnels', + statHostTotal: 'Total hosts', + systemResources: 'System resources', + trafficOverview: 'Traffic overview', + cpu: 'CPU', + memory: 'Memory', + load: 'Load', + inlet: 'Inbound', + export: 'Outbound', + resourceTrend: 'Resource trend', + trafficTrend: 'Traffic trend', + tunnelTop10: 'Top 10 tunnels by traffic', + hostTop10: 'Top 10 hosts by traffic', + ipTop10: 'Top 10 request IPs', + rankTunnels: 'Tunnel traffic ranking', + rankHosts: 'Host traffic ranking', + rankIps: 'Request IP ranking', + visitorIp: 'Visitor IP', + directIp: 'Direct IP', + hitCount: 'Hits', + host: 'Host', + listenPort: 'Port', + }, + clients: { + title: 'Client management', + description: 'Manage Agent connections and verify_key', + add: 'Add client', + edit: 'Edit client', + verifyKey: 'Verify Key', + rateLimit: 'Rate limit (KB/s)', + maxConn: 'Max connections', + confirmDelete: 'Delete this client?', + }, + tunnels: { + title: 'Tunnel management', + description: 'Configure TCP/UDP port forwarding tunnels', + add: 'Add tunnel', + edit: 'Edit tunnel', + searchPlaceholder: 'Search name, port, target', + listenPort: 'Listen port', + targetAddr: 'Target address', + visitorAuth: 'Visitor auth', + confirmDelete: 'Delete this tunnel?', + tcp: 'TCP', + udp: 'UDP', + }, + hosts: { + title: 'Host routing', + description: 'HTTP/HTTPS reverse proxy and Host routing', + add: 'Add host', + edit: 'Edit host', + searchPlaceholder: 'Search host, target', + host: 'Host', + location: 'Path prefix', + autoHttps: 'Auto HTTPS', + visitorAuth: 'Visitor auth', + confirmDelete: 'Delete this host?', + }, + domainForwards: { + title: 'Domain forward', + description: 'Redirect or reverse-proxy source domains to target URLs without Agent', + add: 'Add forward', + edit: 'Edit forward', + searchPlaceholder: 'Search source host, target', + sourceHost: 'Source host', + sourceLocation: 'Path prefix', + scheme: 'Scheme', + schemeAll: 'All', + forwardMode: 'Forward mode', + redirect: '302/301 redirect', + proxy: 'Reverse proxy', + targetUrl: 'Target URL', + redirectMode: 'Redirect strategy', + preservePath: 'Preserve path and query', + fixedTarget: 'Fixed target URL', + statusCode: 'Status code', + outboundProxy: 'Outbound proxy', + httpDirect: 'HTTP direct', + httpProxy: 'HTTP proxy', + socks5: 'SOCKS5 proxy', + httpProxyAddr: 'HTTP proxy address', + socks5Addr: 'SOCKS5 address', + username: 'Username', + password: 'Password', + preserveHost: 'Preserve Host', + preserveHostHint: 'Send source host as Host header to upstream when enabled', + pluginChain: 'Plugin chain', + pluginChainHint: 'Process responses in order; HTTP only, WebSocket bypasses plugins', + plugins: 'Plugins', + proxyCol: 'Proxy', + direct: 'Direct', + httpProxyShort: 'HTTP proxy', + modeProxy: 'Proxy', + modeRedirect: 'Redirect', + pluginDisabled: 'Disabled', + confirmDelete: 'Delete this forward rule?', + }, + ipRules: { + title: 'IP rules', + description: 'Allow / deny lists and CIDR access control', + add: 'Add rule', + edit: 'Edit rule', + pattern: 'Pattern', + patternPlaceholder: 'IP / CIDR / regex', + ruleType: 'Type', + allow: 'Allow', + deny: 'Deny', + resourceType: 'Resource type', + global: 'Global', + tunnel: 'Tunnel', + host: 'Host', + resourceId: 'Resource ID', + confirmDelete: 'Delete this rule?', + }, + requestIPs: { + title: 'Request IP monitor', + description: 'Visitor IP (X-Forwarded-For preferred) and direct IP', + searchPlaceholder: 'Search IP', + resourceType: 'Resource type', + resourceId: 'Resource ID', + hitCount: 'Hit count', + lastSeen: 'Last seen', + confirmBlock: 'Add this IP to the block list?', + }, + users: { + title: 'Visitor users', + description: 'Manage visitor accounts for protected hosts/tunnels', + add: 'Add visitor', + edit: 'Edit visitor', + username: 'Username', + password: 'Password', + passwordPlaceholderEdit: 'Leave blank to keep unchanged', + accessLogs: 'Access logs', + accessLogsTitle: 'Access logs · {name}', + logsHint: 'Latest {n} entries (max 200, static assets excluded)', + login: 'Login', + visit: 'Visit', + confirmDelete: 'Delete this visitor?', + }, + settings: { + title: 'System settings', + description: 'Server runtime parameters (some changes require restart)', + listenPorts: 'Listen ports', + bridgeAddr: 'Bridge address', + httpAddr: 'Admin API / Web', + httpProxyPort: 'HTTP proxy port', + httpsProxyPort: 'HTTPS proxy port', + tlsCert: 'TLS certificate', + tlsKey: 'TLS private key', + tlsOptional: 'Optional, leave blank to disable', + authSecurity: 'Auth & security', + jwtSecret: 'JWT secret', + jwtSecretPlaceholder: 'Leave blank to keep unchanged', + tokenTtl: 'Token TTL (hours)', + loginMaxAttempts: 'Max login attempts', + loginWindow: 'Attempt window (minutes)', + loginLockout: 'Lockout duration (minutes)', + adminAccount: 'Admin account', + currentPassword: 'Current password', + newPassword: 'New password', + confirmPassword: 'Confirm password', + changePassword: 'Change admin password', + metrics: 'Metrics', + flushInterval: 'Flush interval (seconds)', + apiKey: 'API Key', + apiKeyHint: 'For programmatic API access (port 8529), use header {header}. Docs: {doc}', + createApiKey: 'Create API Key', + createApiKeyTitle: 'Create API Key', + apiKeyNamePlaceholder: 'e.g. CI/CD', + apiKeySave: 'Save this key: {key}', + fillPassword: 'Please enter current and new password', + passwordMismatch: 'New passwords do not match', + enterApiKeyName: 'Please enter a name', + }, + ipForward: { + replace: { + label: 'Replace real IP', + hint: 'Overwrite X-Forwarded-For and X-Real-IP with visitor IP, no proxy chain preserved', + }, + append: { + label: 'Standard forward headers', + hint: 'Append X-Forwarded-For and set X-Real-IP per reverse-proxy convention (like Nginx proxy_add_x_forwarded_for)', + }, + ipForward: 'IP forwarding', + customHeaders: 'Custom headers', + headerName: 'Header name', + headerValue: 'Header value', + addHeader: 'Add header', + }, + visitorAuth: { + title: 'Visitor auth', + enable: 'Enable auth', + allowVisitors: 'Allowed visitors', + allVisitors: 'All visitors', + selectedVisitors: 'Selected visitors', + selectVisitors: 'Select visitor users', + ttl: 'Credential TTL', + ttlHint: 'Seconds; browser stores credential after successful login', + tunnelHint: 'With visitor auth, the port serves HTTP (for web apps). For SSH/TCP use host reverse proxy.', + }, + importExport: { + importTitle: 'Bulk import', + importMode: 'Import mode', + upsert: 'Upsert (update if exists)', + skip: 'Skip existing (new only)', + create: 'Create all (skip conflicts)', + pending: 'Pending import', + pendingCount: '{n} item(s)', + startImport: 'Start import', + exportSuccess: 'Exported {n} item(s)', + importDone: 'Import done: created {created}, updated {updated}, skipped {skipped}, failed {failed}', + parseFailed: 'Failed to parse file', + }, + forwardPlugin: { + addPlugin: 'Add plugin', + moveUp: 'Move up', + moveDown: 'Move down', + find: 'Find', + replaceWith: 'Replace with', + addRule: 'Add replace rule', + mimeTypes: 'MIME types', + removeShort: 'Del', + mbHint: 'MB (0 disables cache)', + ttlSec: 'seconds TTL', + scriptPlaceholder: '', + fromDomain: 'From domain, e.g. .old.com', + toDomain: 'To domain, e.g. .new.com', + }, + clientSelect: { + placeholder: 'Select client', + label: '{name} (#{id}) · {status}', + }, + rank: { + defaultTitle: 'Details', + }, + message: { + loginSuccess: 'Signed in', + loginFailed: 'Sign in failed', + loginRateLimit: 'Too many login attempts', + saveSuccess: 'Saved', + saveFailed: 'Save failed', + deleteSuccess: 'Deleted', + exportFailed: 'Export failed', + importFailed: 'Import failed', + loadFailed: 'Load failed', + saved: 'Saved', + savedRestart: 'Saved. Restart wormhole server for listen port changes to take effect.', + passwordUpdated: 'Admin password updated', + passwordChangeFailed: 'Password change failed', + apiKeyCreated: 'Created. Copy and save the key.', + blockSuccess: 'Added to block list', + }, +} diff --git a/web/src/locales/zh-CN.js b/web/src/locales/zh-CN.js new file mode 100644 index 0000000..5b2cbd6 --- /dev/null +++ b/web/src/locales/zh-CN.js @@ -0,0 +1,358 @@ +export default { + app: { + name: 'Wormhole', + tagline: '内网穿透 + 反向代理网关', + }, + common: { + refresh: '刷新', + save: '保存', + cancel: '取消', + close: '关闭', + search: '搜索', + delete: '删除', + edit: '编辑', + create: '创建', + confirm: '确认', + actions: '操作', + enabled: '启用', + disabled: '禁用', + yes: '是', + no: '否', + name: '名称', + status: '状态', + id: 'ID', + optional: '可选', + loading: '加载中…', + viewAll: '查看全部', + logout: '退出', + language: '语言', + zh: '中文', + en: 'English', + hint: '提示', + export: '导出', + import: '导入', + start: '启动', + stop: '停止', + pause: '暂停', + resume: '恢复', + block: '拉黑', + traffic: '流量', + target: '目标', + client: '客户端', + mode: '模式', + port: '端口', + prefix: '前缀', + resource: '资源', + method: '方法', + path: '路径', + time: '时间', + type: '类型', + running: '运行中', + stopped: '已停止', + paused: '已暂停', + on: '已开启', + off: '未开启', + online: '在线', + offline: '离线', + selectClient: '请选择客户端', + dash: '-', + }, + nav: { + groups: { + overview: '概览', + forward: '转发', + tunnel: '穿透', + security: '安全', + system: '系统', + }, + dashboard: '仪表盘', + domainForwards: '域名转发', + clients: '客户端', + tunnels: '隧道', + hosts: '域名', + ipRules: 'IP 规则', + requestIPs: '请求 IP', + users: '访客用户', + settings: '系统设置', + }, + topbar: { + dashboard: '仪表盘', + clients: '客户端管理', + tunnels: '隧道管理', + hosts: '域名解析', + domainForwards: '域名转发', + ipRules: 'IP 规则', + requestIPs: '请求 IP 监控', + users: '访客用户', + settings: '系统设置', + fallback: 'Wormhole', + }, + login: { + title: '登录', + username: '用户名', + password: '密码', + submit: '登录', + hint: '默认账号 admin / admin', + lockDefault: '登录尝试次数过多,请稍后再试', + lockMinutes: '登录尝试次数过多,请 {n} 分钟后再试', + lockSeconds: '登录尝试次数过多,请 {n} 秒后再试', + }, + dashboard: { + title: '仪表盘', + description: '系统运行状态、流量与访问监控概览', + openapi: 'OpenAPI', + statClientTotal: '客户端总数', + statClientOnline: '在线客户端', + statTunnelRunning: '运行隧道', + statHostTotal: '域名数量', + systemResources: '系统资源', + trafficOverview: '流量概览', + cpu: 'CPU', + memory: '内存', + load: '负载', + inlet: '入站', + export: '出站', + resourceTrend: '系统资源趋势', + trafficTrend: '流量趋势', + tunnelTop10: '隧道流量 Top10', + hostTop10: '域名流量 Top10', + ipTop10: '请求 IP Top10', + rankTunnels: '隧道流量排行', + rankHosts: '域名流量排行', + rankIps: '请求 IP 排行', + visitorIp: '访客 IP', + directIp: '直连 IP', + hitCount: '次数', + host: '域名', + listenPort: '端口', + }, + clients: { + title: '客户端管理', + description: '管理 Agent 连接与 verify_key', + add: '新增客户端', + edit: '编辑客户端', + verifyKey: 'Verify Key', + rateLimit: '限速(KB/s)', + maxConn: '最大连接', + confirmDelete: '确认删除该客户端?', + }, + tunnels: { + title: '隧道管理', + description: '配置 TCP/UDP 端口转发隧道', + add: '新增隧道', + edit: '编辑隧道', + searchPlaceholder: '搜索名称、端口、目标', + listenPort: '监听端口', + targetAddr: '目标地址', + visitorAuth: '访客登录', + confirmDelete: '确认删除该隧道?', + tcp: 'TCP', + udp: 'UDP', + }, + hosts: { + title: '域名解析', + description: 'HTTP/HTTPS 反向代理与 Host 路由', + add: '新增域名', + edit: '编辑域名', + searchPlaceholder: '搜索域名、目标', + host: '域名', + location: '路径前缀', + autoHttps: '自动 HTTPS', + visitorAuth: '访客登录', + confirmDelete: '确认删除该域名?', + }, + domainForwards: { + title: '域名转发', + description: '将源域名跳转或反代到目标 URL,无需 Agent(与内网穿透独立)', + add: '新增转发', + edit: '编辑转发', + searchPlaceholder: '搜索源域名、目标', + sourceHost: '源域名', + sourceLocation: '路径前缀', + scheme: '协议', + schemeAll: '全部', + forwardMode: '转发模式', + redirect: '302/301 跳转', + proxy: '反向代理', + targetUrl: '目标 URL', + redirectMode: '跳转策略', + preservePath: '保留路径与参数', + fixedTarget: '固定目标地址', + statusCode: '状态码', + outboundProxy: '出站代理', + httpDirect: 'HTTP 直连', + httpProxy: 'HTTP 代理', + socks5: 'SOCKS5 代理', + httpProxyAddr: 'HTTP 代理地址', + socks5Addr: 'SOCKS5 地址', + username: '用户名', + password: '密码', + preserveHost: '保留 Host', + preserveHostHint: '开启后将源域名作为 Host 头发给上游', + pluginChain: '插件链', + pluginChainHint: '按顺序处理响应;仅对普通 HTTP 生效,WebSocket 不走插件', + plugins: '插件', + proxyCol: '代理', + direct: '直连', + httpProxyShort: 'HTTP代理', + modeProxy: '反代', + modeRedirect: '跳转', + pluginDisabled: '未启用', + confirmDelete: '确认删除该转发规则?', + }, + ipRules: { + title: 'IP 规则', + description: '白名单 / 黑名单 / CIDR 访问控制', + add: '新增规则', + edit: '编辑规则', + pattern: '匹配模式', + patternPlaceholder: 'IP / CIDR / 正则', + ruleType: '类型', + allow: '白名单', + deny: '黑名单', + resourceType: '资源类型', + global: '全局', + tunnel: '隧道', + host: '域名', + resourceId: '资源ID', + confirmDelete: '确认删除该规则?', + }, + requestIPs: { + title: '请求 IP 监控', + description: '访客真实 IP(优先 X-Forwarded-For)与直连 IP', + searchPlaceholder: '搜索 IP', + resourceType: '资源类型', + resourceId: '资源 ID', + hitCount: '访问次数', + lastSeen: '最后访问', + confirmBlock: '确认将该 IP 加入黑名单?', + }, + users: { + title: '访客用户', + description: '管理可访问受保护域名/隧道的访客账号', + add: '新增访客', + edit: '编辑访客', + username: '用户名', + password: '密码', + passwordPlaceholderEdit: '留空不修改', + accessLogs: '访问记录', + accessLogsTitle: '访问记录 · {name}', + logsHint: '最近 {n} 条(最多保留 200 条,不含静态资源请求)', + login: '登录', + visit: '访问', + confirmDelete: '确认删除该访客?', + }, + settings: { + title: '系统设置', + description: '服务端运行参数(保存后部分项需重启服务生效)', + listenPorts: '监听端口', + bridgeAddr: 'Bridge 地址', + httpAddr: '管理 API / Web', + httpProxyPort: 'HTTP 反代端口', + httpsProxyPort: 'HTTPS 反代端口', + tlsCert: 'TLS 证书', + tlsKey: 'TLS 私钥', + tlsOptional: '可选,留空不使用', + authSecurity: '认证与安全', + jwtSecret: 'JWT 密钥', + jwtSecretPlaceholder: '留空则不修改', + tokenTtl: 'Token 有效期(h)', + loginMaxAttempts: '登录最大尝试', + loginWindow: '统计窗口(分钟)', + loginLockout: '锁定时长(分钟)', + adminAccount: '管理员账号', + currentPassword: '当前密码', + newPassword: '新密码', + confirmPassword: '确认新密码', + changePassword: '修改管理员密码', + metrics: '指标', + flushInterval: '刷新间隔(秒)', + apiKey: 'API Key', + apiKeyHint: '用于程序化访问 API(端口 8529),请求头携带 {header}。文档:{doc}', + createApiKey: '创建 API Key', + createApiKeyTitle: '创建 API Key', + apiKeyNamePlaceholder: '如 CI/CD', + apiKeySave: '请保存:{key}', + fillPassword: '请填写当前密码和新密码', + passwordMismatch: '两次输入的新密码不一致', + enterApiKeyName: '请输入名称', + }, + ipForward: { + replace: { + label: '覆盖真实 IP', + hint: '将 X-Forwarded-For、X-Real-IP 覆盖为访客真实 IP,不保留已有代理链', + }, + append: { + label: '标准转发头', + hint: '按反向代理规范追加 X-Forwarded-For,并设置 X-Real-IP(等同 Nginx proxy_add_x_forwarded_for)', + }, + ipForward: 'IP 转发', + customHeaders: '自定义请求头', + headerName: 'Header 名称', + headerValue: 'Header 值', + addHeader: '添加请求头', + }, + visitorAuth: { + title: '访客登录', + enable: '开启验证', + allowVisitors: '允许访客', + allVisitors: '全部访客', + selectedVisitors: '指定访客', + selectVisitors: '选择访客用户', + ttl: '凭证有效期', + ttlHint: '单位:秒,登录成功后浏览器将保存凭证', + tunnelHint: '开启访客登录后,该端口将以 HTTP 方式提供服务(适用于 Web 应用)。SSH 等 TCP 协议请使用域名反代。', + }, + importExport: { + importTitle: '批量导入', + importMode: '导入模式', + upsert: '覆盖更新(已存在则更新)', + skip: '跳过已存在(仅导入新配置)', + create: '全部新建(冲突则跳过)', + pending: '待导入', + pendingCount: '{n} 条配置', + startImport: '开始导入', + exportSuccess: '已导出 {n} 条配置', + importDone: '导入完成:新增 {created},更新 {updated},跳过 {skipped},失败 {failed}', + parseFailed: '解析文件失败', + }, + forwardPlugin: { + addPlugin: '添加插件', + moveUp: '上移', + moveDown: '下移', + find: '查找', + replaceWith: '替换为', + addRule: '添加替换规则', + mimeTypes: 'MIME 类型', + removeShort: '删', + mbHint: 'MB(0 表示禁用缓存)', + ttlSec: '秒 TTL', + scriptPlaceholder: '', + fromDomain: '原 Domain,如 .old.com', + toDomain: '新 Domain,如 .new.com', + }, + clientSelect: { + placeholder: '选择客户端', + label: '{name} (#{id}) · {status}', + }, + rank: { + defaultTitle: '详情', + }, + message: { + loginSuccess: '登录成功', + loginFailed: '登录失败', + loginRateLimit: '登录尝试次数过多', + saveSuccess: '保存成功', + saveFailed: '保存失败', + deleteSuccess: '已删除', + exportFailed: '导出失败', + importFailed: '导入失败', + loadFailed: '加载失败', + saved: '已保存', + savedRestart: '已保存,监听端口变更需重启 wormhole server 后生效', + passwordUpdated: '管理员密码已更新', + passwordChangeFailed: '修改失败', + apiKeyCreated: '已创建,请复制保存', + blockSuccess: '已加入黑名单', + }, +} diff --git a/web/src/main.js b/web/src/main.js new file mode 100644 index 0000000..3c7bbaf --- /dev/null +++ b/web/src/main.js @@ -0,0 +1,17 @@ +import { createApp } from 'vue' +import ElementPlus from 'element-plus' +import zhCn from 'element-plus/dist/locale/zh-cn.mjs' +import enLocale from 'element-plus/dist/locale/en.mjs' +import 'element-plus/dist/index.css' +import '@/styles/theme.css' +import App from './App.vue' +import router from './router' +import i18n from '@/i18n' + +const epLocales = { 'zh-CN': zhCn, en: enLocale } + +createApp(App) + .use(ElementPlus, { locale: epLocales[i18n.global.locale.value] }) + .use(i18n) + .use(router) + .mount('#app') diff --git a/web/src/router/index.js b/web/src/router/index.js new file mode 100644 index 0000000..7f67b7d --- /dev/null +++ b/web/src/router/index.js @@ -0,0 +1,50 @@ +import { createRouter, createWebHistory } from 'vue-router' +import MainLayout from '@/layouts/MainLayout.vue' +import Login from '@/views/Login.vue' +import Dashboard from '@/views/Dashboard.vue' +import Clients from '@/views/Clients.vue' +import Tunnels from '@/views/Tunnels.vue' +import Hosts from '@/views/Hosts.vue' +import DomainForwards from '@/views/DomainForwards.vue' +import IPRules from '@/views/IPRules.vue' +import RequestIPs from '@/views/RequestIPs.vue' +import Users from '@/views/Users.vue' +import Settings from '@/views/Settings.vue' + +const routes = [ + { path: '/login', component: Login }, + { + path: '/', + component: MainLayout, + redirect: '/dashboard', + children: [ + { path: 'dashboard', component: Dashboard }, + { path: 'clients', component: Clients }, + { path: 'tunnels', component: Tunnels }, + { path: 'hosts', component: Hosts }, + { path: 'domain-forwards', component: DomainForwards }, + { path: 'security/ip-rules', component: IPRules }, + { path: 'security/request-ips', component: RequestIPs }, + { path: 'users', component: Users }, + { path: 'settings', component: Settings }, + ], + }, +] + +const router = createRouter({ + history: createWebHistory(), + routes, +}) + +router.beforeEach((to, from, next) => { + const token = localStorage.getItem('token') + if (to.path !== '/login' && !token) { + next('/login') + } else if (to.path === '/login' && token) { + next('/dashboard') + } else { + next() + } +}) + +export default router diff --git a/web/src/styles/theme.css b/web/src/styles/theme.css new file mode 100644 index 0000000..b7c01e2 --- /dev/null +++ b/web/src/styles/theme.css @@ -0,0 +1,557 @@ +:root { + --background: #f4f4f5; + --foreground: #18181b; + --card: #ffffff; + --card-foreground: #18181b; + --primary: #0f7a62; + --primary-hover: #0d6b56; + --primary-foreground: #fafafa; + --muted: #f4f4f5; + --muted-foreground: #71717a; + --border: #e4e4e7; + --input: #e4e4e7; + --destructive: #dc2626; + --success: #047857; + --warning: #b45309; + --danger: #dc2626; + --info: #a1a1aa; + --sidebar: rgba(250, 250, 250, 0.85); + --sidebar-foreground: #18181b; + --sidebar-accent: #f4f4f5; + --sidebar-border: #e4e4e7; + --sidebar-width: 15rem; + --radius: 0.5rem; + --space-1: 4px; + --space-2: 8px; + --space-3: 12px; + --space-4: 16px; + --space-5: 20px; + --space-6: 24px; + --space-8: 32px; + + --el-color-primary: #0f7a62; + --el-color-primary-light-3: #4da08c; + --el-color-primary-light-5: #76b8a8; + --el-color-primary-light-7: #a0d0c4; + --el-color-primary-light-8: #b8dcd2; + --el-color-primary-light-9: #d0e8e1; + --el-color-primary-dark-2: #0c624e; + --el-color-success: #047857; + --el-color-warning: #b45309; + --el-color-danger: #dc2626; + --el-color-info: #a1a1aa; + --el-border-radius-base: 0.5rem; + --el-border-color: #e4e4e7; + --el-bg-color-page: #f4f4f5; + --el-text-color-primary: #18181b; + --el-text-color-regular: #3f3f46; + --el-text-color-secondary: #71717a; + --el-font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif; +} + +* { box-sizing: border-box; } + +html, body, #app { + margin: 0; + padding: 0; + height: 100%; + font-size: 14px; + font-family: var(--el-font-family); + background: var(--background); + color: var(--foreground); + -webkit-font-smoothing: antialiased; +} + +.layout { + display: flex; + height: 100vh; + overflow: hidden; +} + +.sidebar { + width: var(--sidebar-width); + flex-shrink: 0; + background: var(--sidebar); + border-right: 1px solid var(--sidebar-border); + backdrop-filter: blur(8px); + display: flex; + flex-direction: column; + overflow-y: auto; +} + +.sidebar-brand { + display: flex; + align-items: center; + gap: var(--space-3); + padding: var(--space-5) var(--space-4); +} + +.brand-icon { + width: 32px; + height: 32px; + border-radius: var(--radius); + background: var(--primary); + color: var(--primary-foreground); + display: flex; + align-items: center; + justify-content: center; +} + +.brand-name { + font-size: 1.125rem; + font-weight: 600; +} + +.nav-group-label { + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.04em; + color: var(--muted-foreground); + padding: var(--space-4) var(--space-4) var(--space-2); +} + +.nav-item { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-2) var(--space-3); + margin: 0 var(--space-2); + border-radius: var(--radius); + color: var(--muted-foreground); + text-decoration: none; + font-size: 0.875rem; + font-weight: 500; +} + +.nav-item:hover { background: var(--sidebar-accent); } + +.nav-item.active { + background: var(--sidebar-accent); + color: var(--primary); + font-weight: 600; +} + +.main-area { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; + overflow: hidden; +} + +.topbar { + height: 52px; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 var(--space-6); + background: var(--card); + border-bottom: 1px solid var(--border); +} + +.topbar-title { + font-size: 0.875rem; + color: var(--muted-foreground); +} + +.topbar-user { + display: flex; + align-items: center; + gap: var(--space-3); + font-size: 0.875rem; + color: var(--muted-foreground); +} + +.main-content { + flex: 1; + overflow-y: auto; + padding: var(--space-6); + background: var(--background); +} + +.page { + max-width: 1400px; +} + +.page-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + margin-bottom: var(--space-6); + gap: var(--space-4); +} + +.page-actions { + display: flex; + align-items: center; + gap: var(--space-2); + flex-shrink: 0; + flex-wrap: wrap; +} + +.page-title { + font-size: 1.5rem; + font-weight: 600; + letter-spacing: -0.02em; + margin: 0 0 var(--space-1); +} + +.page-desc { + font-size: 0.875rem; + color: var(--muted-foreground); + margin: 0; +} + +.stat-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: var(--space-4); + margin-bottom: var(--space-6); +} + +.stat-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: var(--space-5); +} + +.stat-card__label { + font-size: 0.875rem; + color: var(--muted-foreground); + margin-bottom: var(--space-2); +} + +.stat-card__value { + font-size: 1.75rem; + font-weight: 600; +} + +.app-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + margin-bottom: var(--space-4); +} + +.page > .app-card:last-child, +.page > .content-grid:last-child { + margin-bottom: 0; +} + +.app-card__header { + padding: var(--space-4) var(--space-5); + border-bottom: 1px solid var(--border); +} + +.app-card__title { + font-size: 0.9375rem; + font-weight: 600; + margin: 0; +} + +.app-card__body--padded { padding: var(--space-5); } + +.content-grid { + display: grid; + gap: var(--space-4); + margin-bottom: var(--space-6); +} + +.content-grid--2-1 { grid-template-columns: 1.4fr 1fr; } +.content-grid--2 { grid-template-columns: 1fr 1fr; } +.content-grid--3 { grid-template-columns: repeat(3, 1fr); } + +.card-toolbar { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-4) var(--space-5) 0; + margin-bottom: var(--space-4); + flex-wrap: wrap; +} + +.card-toolbar--desc { + align-items: flex-start; +} + +.card-pager { + padding: var(--space-4) var(--space-5); + display: flex; + justify-content: flex-end; +} + +.card-footer-hint { + padding: 0 var(--space-5) var(--space-3); + margin: 0; +} + +.card-footer-hint + .card-pager { + padding-top: var(--space-3); +} + +.card-inset-block { + margin: 0 var(--space-5) var(--space-4); + padding: var(--space-3); + background: var(--muted); + border-radius: var(--radius); + font-size: 0.875rem; +} + +.tabs-bar { + padding: 0 var(--space-5); + border-bottom: 1px solid var(--border); +} + +.tabs-bar .el-tabs__header { margin-bottom: 0; } + +.page-toolbar { + display: flex; + align-items: center; + gap: var(--space-2); + margin-bottom: var(--space-4); + flex-wrap: wrap; +} + +.inline-actions { + display: flex; + align-items: center; + gap: var(--space-2); + flex-wrap: wrap; +} + +.card-header-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-4); +} + +.form-hint { + margin-top: 6px; + font-size: 0.75rem; + color: var(--muted-foreground); +} + +.form-hint--flush { margin-top: 0; } + +.u-mt-3 { margin-top: var(--space-3); } +.u-mt-4 { margin-top: var(--space-4); } +.u-mb-3 { margin-bottom: var(--space-3); } +.u-mb-4 { margin-bottom: var(--space-4); } +.u-mb-6 { margin-bottom: var(--space-6); } +.text-center { text-align: center; } +.w-full { width: 100%; } + +code.inline-code { + font-size: 0.75rem; + padding: 0 var(--space-1); + background: var(--muted); + border-radius: var(--radius); +} + +.section-title { + font-size: 0.875rem; + font-weight: 600; + margin-bottom: var(--space-4); +} + +.section-title:not(:first-child) { margin-top: var(--space-6); } + +.login-page { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + background: var(--background); + padding: var(--space-6); +} + +.login-wrap { max-width: 400px; width: 100%; text-align: center; } + +.login-brand-icon { + width: 48px; + height: 48px; + border-radius: 12px; + background: var(--primary); + color: var(--primary-foreground); + display: inline-flex; + align-items: center; + justify-content: center; + margin-bottom: var(--space-4); +} + +.login-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: var(--space-8); + margin-top: var(--space-6); + text-align: left; +} + +.status-good { color: #047857; } +.status-warn { color: #b45309; } +.status-bad { color: #dc2626; } +.status-muted { color: var(--muted-foreground); } + +.toolbar-select { width: 120px; } +.toolbar-select--country { width: 160px; } +.toolbar-select--wide { width: 280px; } +.toolbar-input { width: 200px; } +.toolbar-input--wide { width: 260px; } +.toolbar-input--grow { flex: 1; min-width: 200px; } +.table-cell-select { width: 100%; min-width: 200px; } + +.el-form .el-select { width: 100%; } +.el-form .el-input-number { width: 100%; } + +.app-card .el-table { + --el-table-header-bg-color: var(--muted); + font-size: 0.875rem; +} + +.app-card .el-table--small .el-table__cell { + padding: var(--space-2) var(--space-3); +} + +.app-card .el-table--small th.el-table__cell { + font-size: 0.75rem; + font-weight: 600; + color: var(--muted-foreground); +} + +.app-card .el-table--small td.el-table__cell { + color: var(--el-text-color-regular); +} + +.app-card .el-table--small .el-table__row { + height: 40px; +} + +.app-card .el-table .el-button.is-link { + padding: 0; + height: auto; +} + +.app-card .el-table .cell { + line-height: 1.4; +} + +.table-scroll--sm { max-height: 320px; } +.table-scroll--md { max-height: 360px; } +.table-scroll--lg { max-height: 480px; } + +.card-toolbar .toolbar-input--grow { + flex: 1; + min-width: 200px; +} + +.card-pager .el-pagination { + font-size: 0.875rem; +} + +.kv-block p { + margin: 0 0 var(--space-2); +} + +.kv-block p:last-child { + margin-bottom: 0; +} + +.kv-block .label { + display: inline-block; + width: 5rem; + color: var(--muted-foreground); +} + +.kv-block code { + font-size: 0.8125rem; +} + +.cell-stack { + display: flex; + flex-direction: column; + gap: var(--space-2); + width: 100%; +} + +.meta-list { + margin: 0; + padding: 0; + list-style: none; + font-size: 0.8125rem; + color: var(--muted-foreground); +} + +.meta-list li { + display: flex; + justify-content: space-between; + gap: var(--space-3); + padding: var(--space-1) 0; +} + +.meta-list__mono { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; +} + +.meta-list__ok { color: var(--el-color-success); } +.meta-list__warn { color: var(--el-color-warning); } + +.chart-box { + height: 280px; +} + +.custom-scrollbar { + scrollbar-width: thin; + scrollbar-color: #e4e4e7 transparent; +} + +.custom-scrollbar::-webkit-scrollbar { + width: 6px; + height: 6px; +} + +.custom-scrollbar::-webkit-scrollbar-thumb { + background: #e4e4e7; + border-radius: 3px; +} + +.custom-scrollbar::-webkit-scrollbar-track { + background: transparent; +} + +.settings-form { + max-width: 640px; +} + +.card-actions { + margin-bottom: var(--space-3); +} + +.hidden-input { + display: none; +} + +.el-card { + border: 1px solid var(--border); + box-shadow: none !important; +} + +.el-dialog { + border-radius: var(--radius); +} + +@media (max-width: 1024px) { + .stat-grid { grid-template-columns: repeat(2, 1fr); } + .content-grid--2-1, + .content-grid--2, + .content-grid--3 { grid-template-columns: 1fr; } +} + +@media (max-width: 640px) { + .stat-grid { grid-template-columns: 1fr; } + .main-content { padding: var(--space-4); } + .page-header { flex-direction: column; } +} diff --git a/web/src/utils/chartTheme.js b/web/src/utils/chartTheme.js new file mode 100644 index 0000000..efa2b4e --- /dev/null +++ b/web/src/utils/chartTheme.js @@ -0,0 +1,41 @@ +/** §6.16 ECharts 品牌色与默认 grid */ +export const CHART_COLORS = ['#0f7a62', '#71717a', '#4da08c', '#76b8a8', '#a0d0c4'] + +const AXIS_LABEL = { color: '#71717a', fontSize: 12 } +const AXIS_LINE = { lineStyle: { color: '#e4e4e7' } } +const SPLIT_LINE = { lineStyle: { color: '#e4e4e7' } } + +export function buildLineChartOption({ labels, series, legend = true, yAxisFormatter }) { + return { + color: CHART_COLORS, + grid: { left: 40, right: 16, top: legend ? 36 : 16, bottom: 24 }, + legend: legend + ? { top: 0, textStyle: { fontSize: 12, color: '#71717a' } } + : undefined, + tooltip: { trigger: 'axis' }, + xAxis: { + type: 'category', + data: labels, + axisLabel: AXIS_LABEL, + axisLine: AXIS_LINE, + }, + yAxis: { + type: 'value', + axisLabel: { + ...AXIS_LABEL, + formatter: yAxisFormatter, + }, + axisLine: AXIS_LINE, + splitLine: SPLIT_LINE, + }, + series: series.map((item, index) => ({ + name: item.name, + type: 'line', + smooth: true, + data: item.data, + color: CHART_COLORS[index % CHART_COLORS.length], + lineStyle: { width: 2 }, + showSymbol: false, + })), + } +} diff --git a/web/src/utils/datetime.js b/web/src/utils/datetime.js new file mode 100644 index 0000000..1785dbd --- /dev/null +++ b/web/src/utils/datetime.js @@ -0,0 +1,22 @@ +/** §7.7: YYYY-MM-DD HH:mm:ss */ +export function formatDateTime(value) { + if (!value) return '-' + let iso + if (value instanceof Date) { + if (Number.isNaN(value.getTime())) return '-' + iso = value.toISOString() + } else { + const d = new Date(value) + if (Number.isNaN(d.getTime())) return String(value) + iso = d.toISOString() + } + return iso.replace('T', ' ').slice(0, 19) +} + +/** 图表 X 轴短标签 */ +export function formatChartTime(date = new Date()) { + const h = String(date.getHours()).padStart(2, '0') + const m = String(date.getMinutes()).padStart(2, '0') + const s = String(date.getSeconds()).padStart(2, '0') + return `${h}:${m}:${s}` +} diff --git a/web/src/utils/format.js b/web/src/utils/format.js new file mode 100644 index 0000000..0ae0920 --- /dev/null +++ b/web/src/utils/format.js @@ -0,0 +1,11 @@ +export function formatBytes(n) { + if (!n) return '0 B' + const units = ['B', 'KB', 'MB', 'GB', 'TB'] + let i = 0 + let val = n + while (val >= 1024 && i < units.length - 1) { + val /= 1024 + i++ + } + return `${val.toFixed(1)} ${units[i]}` +} diff --git a/web/src/utils/importExport.js b/web/src/utils/importExport.js new file mode 100644 index 0000000..6bdb2d9 --- /dev/null +++ b/web/src/utils/importExport.js @@ -0,0 +1,52 @@ +import api from '@/api' + +export function downloadJSON(filename, data) { + const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }) + const url = URL.createObjectURL(blob) + const a = document.createElement('a') + a.href = url + a.download = filename + a.click() + URL.revokeObjectURL(url) +} + +export function parseImportFile(file) { + return new Promise((resolve, reject) => { + const reader = new FileReader() + reader.onload = () => { + try { + const data = JSON.parse(reader.result) + const items = Array.isArray(data) ? data : data?.items + if (!Array.isArray(items) || items.length === 0) { + reject(new Error('文件中没有可导入的配置项')) + return + } + resolve(items) + } catch { + reject(new Error('JSON 格式无效')) + } + } + reader.onerror = () => reject(new Error('读取文件失败')) + reader.readAsText(file) + }) +} + +export async function exportResource(path, filename) { + const { data } = await api.get(`${path}/export`) + downloadJSON(filename, data) + return data +} + +export async function importResource(path, mode, items) { + const { data } = await api.post(`${path}/import`, { mode, items }) + return data +} + +export function importModeLabel(mode) { + const map = { + upsert: '覆盖更新(已存在则更新)', + skip: '跳过已存在(仅导入新配置)', + create: '全部新建(冲突则跳过)', + } + return map[mode] || mode +} diff --git a/web/src/utils/ipForward.js b/web/src/utils/ipForward.js new file mode 100644 index 0000000..4534638 --- /dev/null +++ b/web/src/utils/ipForward.js @@ -0,0 +1,19 @@ +/** @param {string} mode */ +export function normalizeIPForwardMode(mode) { + if (mode === 'append' || mode === 'replace') return mode + if (mode === 'proxy') return 'append' + if (mode === 'real') return 'replace' + return 'replace' +} + +/** @param {string} mode @param {(key: string) => string} t */ +export function ipForwardModeLabel(mode, t) { + const key = normalizeIPForwardMode(mode) + return t(`ipForward.${key}.label`) +} + +/** @param {string} mode @param {(key: string) => string} t */ +export function ipForwardModeHint(mode, t) { + const key = normalizeIPForwardMode(mode) + return t(`ipForward.${key}.hint`) +} diff --git a/web/src/utils/targetLink.js b/web/src/utils/targetLink.js new file mode 100644 index 0000000..dbcc3f7 --- /dev/null +++ b/web/src/utils/targetLink.js @@ -0,0 +1,43 @@ +/** 将 target_addr 转为可打开的 URL */ +export function targetHref(addr) { + if (!addr) return '' + const trimmed = String(addr).trim() + if (/^https?:\/\//i.test(trimmed)) return trimmed + return `http://${trimmed}` +} + +/** 域名解析:点击域名打开对外访问地址 */ +export function hostHref(row) { + const domain = row?.host?.trim() + if (!domain) return '' + if (/^https?:\/\//i.test(domain)) return domain + const useHttps = row.auto_https || row.scheme === 'https' + const scheme = useHttps ? 'https' : 'http' + let loc = (row.location || '/').trim() + if (!loc.startsWith('/')) loc = `/${loc}` + const suffix = loc === '/' ? '' : loc + return `${scheme}://${domain}${suffix}` +} + +/** 隧道:点击监听端口打开服务端对外入口 */ +export function tunnelHref(row) { + const port = row?.listen_port + if (!port) return '' + const host = window.location.hostname || 'localhost' + return `http://${host}:${port}` +} + +export function openTarget(addr) { + const url = targetHref(addr) + if (url) window.open(url, '_blank', 'noopener,noreferrer') +} + +export function openHost(row) { + const url = hostHref(row) + if (url) window.open(url, '_blank', 'noopener,noreferrer') +} + +export function openTunnel(row) { + const url = tunnelHref(row) + if (url) window.open(url, '_blank', 'noopener,noreferrer') +} diff --git a/web/src/views/Clients.vue b/web/src/views/Clients.vue new file mode 100644 index 0000000..be7aa44 --- /dev/null +++ b/web/src/views/Clients.vue @@ -0,0 +1,116 @@ + + + diff --git a/web/src/views/Dashboard.vue b/web/src/views/Dashboard.vue new file mode 100644 index 0000000..924b4d5 --- /dev/null +++ b/web/src/views/Dashboard.vue @@ -0,0 +1,155 @@ + + + diff --git a/web/src/views/DomainForwards.vue b/web/src/views/DomainForwards.vue new file mode 100644 index 0000000..a8ebb0f --- /dev/null +++ b/web/src/views/DomainForwards.vue @@ -0,0 +1,305 @@ + + + diff --git a/web/src/views/Hosts.vue b/web/src/views/Hosts.vue new file mode 100644 index 0000000..6356d4d --- /dev/null +++ b/web/src/views/Hosts.vue @@ -0,0 +1,201 @@ + + + diff --git a/web/src/views/IPRules.vue b/web/src/views/IPRules.vue new file mode 100644 index 0000000..a6dc7c2 --- /dev/null +++ b/web/src/views/IPRules.vue @@ -0,0 +1,127 @@ + + + diff --git a/web/src/views/Login.vue b/web/src/views/Login.vue new file mode 100644 index 0000000..327d695 --- /dev/null +++ b/web/src/views/Login.vue @@ -0,0 +1,98 @@ + + + diff --git a/web/src/views/RequestIPs.vue b/web/src/views/RequestIPs.vue new file mode 100644 index 0000000..eb305db --- /dev/null +++ b/web/src/views/RequestIPs.vue @@ -0,0 +1,84 @@ + + + diff --git a/web/src/views/Settings.vue b/web/src/views/Settings.vue new file mode 100644 index 0000000..979755a --- /dev/null +++ b/web/src/views/Settings.vue @@ -0,0 +1,229 @@ + + + diff --git a/web/src/views/Tunnels.vue b/web/src/views/Tunnels.vue new file mode 100644 index 0000000..f7b44ed --- /dev/null +++ b/web/src/views/Tunnels.vue @@ -0,0 +1,218 @@ + + + diff --git a/web/src/views/Users.vue b/web/src/views/Users.vue new file mode 100644 index 0000000..ee29a00 --- /dev/null +++ b/web/src/views/Users.vue @@ -0,0 +1,148 @@ + + + diff --git a/web/vite.config.js b/web/vite.config.js new file mode 100644 index 0000000..6207fda --- /dev/null +++ b/web/vite.config.js @@ -0,0 +1,25 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import { fileURLToPath, URL } from 'node:url' + +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + }, + }, + build: { + outDir: 'dist', + emptyOutDir: true, + }, + server: { + port: 5173, + proxy: { + '/api': { + target: 'http://127.0.0.1:8080', + changeOrigin: true, + }, + }, + }, +})