From 4e576ad7e2ac3981eb69c88e27100200ef9c410d Mon Sep 17 00:00:00 2001 From: liukl <1138493417@qq.com> Date: Thu, 17 Oct 2024 14:45:59 +0800 Subject: [PATCH 01/26] =?UTF-8?q?feat:=E4=BD=BF=E7=94=A8sqlite=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E6=96=87=E4=BB=B6=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/templates/files.tmpl | 2 +- assets/templates/footer.tmpl | 24 ++++++++++++-- build.bat | 11 +++++++ conf/conf.go | 9 ++++-- control/control.go | 53 +++++++++++++++++++++++------- control/db.go | 63 ++++++++++++++++++++++++++++++++++++ go.mod | 7 +++- go.sum | 4 +++ main.go | 14 ++++++++ 9 files changed, 168 insertions(+), 19 deletions(-) create mode 100644 build.bat create mode 100644 control/db.go diff --git a/assets/templates/files.tmpl b/assets/templates/files.tmpl index 8659c8a..e48fb8b 100644 --- a/assets/templates/files.tmpl +++ b/assets/templates/files.tmpl @@ -1,6 +1,6 @@ {{template "public/header" .}}

上传文件到 Telegram

+ type="file" name="file" id="uploadFile" class="custom-file-input" multiple>
上传中...
{{template "public/footer" .}} diff --git a/assets/templates/footer.tmpl b/assets/templates/footer.tmpl index ed91446..c531994 100644 --- a/assets/templates/footer.tmpl +++ b/assets/templates/footer.tmpl @@ -58,7 +58,7 @@ function uploadImg(e, ms) { return new Promise((resolve, reject) => { var o = new FormData(); - o.append("image", e); + o.append("file", e); var isImage = e.type.startsWith('image/'); $("#uploadButton").prop("disabled", !0); $("#uploadButton").text("上传中"); @@ -74,7 +74,9 @@ contentType: !1, processData: !1, success: function (e) { + var link = a + e.message; + var proxyUrl = e.proxyUrl var t; if (e.code == 1) { if (ms) { @@ -90,6 +92,17 @@ link + ')">MarkdownBBCode'+ + '
上传成功,代理图片外链:' + + proxyUrl + + '
' ); } else { @@ -98,8 +111,13 @@ link + '">' + link + - "" - ); + "" + + '
上传成功,代理文件外链:' + + proxyUrl + + "
" + ) } } resolve(e.message); diff --git a/build.bat b/build.bat new file mode 100644 index 0000000..56369a2 --- /dev/null +++ b/build.bat @@ -0,0 +1,11 @@ +@echo off +REM 设置目标操作系统为 Linux,架构为 64 位 +set GOOS=freebsd +set GOARCH=amd64 + +REM 编译 Go 程序并输出为指定的二进制文件名 +go build -o tgState main.go + +REM 提示编译完成 +echo 编译完成,生成了 Linux 版本的二进制文件 tgState +pause diff --git a/conf/conf.go b/conf/conf.go index 2d7ac60..4d262e3 100644 --- a/conf/conf.go +++ b/conf/conf.go @@ -5,11 +5,14 @@ var ChannelName string var Pass string var Mode string var BaseUrl string +var AllowedExts string +var ProxyUrl string type UploadResponse struct { - Code int `json:"code"` - Message string `json:"message"` - ImgUrl string `json:"url"` + Code int `json:"code"` + Message string `json:"message"` + ImgUrl string `json:"url"` + ProxyUrl string `json:"proxyUrl"` } const FileRoute = "/d/" diff --git a/control/control.go b/control/control.go index 3850919..8081aa7 100644 --- a/control/control.go +++ b/control/control.go @@ -2,10 +2,12 @@ package control import ( "encoding/json" + "fmt" "html/template" "io" "log" "net/http" + "net/url" "path/filepath" "strconv" "strings" @@ -19,9 +21,11 @@ import ( // UploadImageAPI 上传图片api func UploadImageAPI(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") + if r.Method == http.MethodPost { // 获取上传的文件 - file, header, err := r.FormFile("image") + file, header, err := r.FormFile("file") + if err != nil { errJsonMsg("Unable to get file", w) // http.Error(w, "Unable to get file", http.StatusBadRequest) @@ -35,7 +39,14 @@ func UploadImageAPI(w http.ResponseWriter, r *http.Request) { } // 检查文件类型 allowedExts := []string{".jpg", ".jpeg", ".png"} - ext := filepath.Ext(header.Filename) + + // 如果设置了AllowedExts,则使用设置的文件类型 + if len(conf.AllowedExts) > 0 { + allowedExts = append(allowedExts, strings.Split(conf.AllowedExts, ",")...) + } + + var fileName = header.Filename + ext := filepath.Ext(fileName) valid := false for _, allowedExt := range allowedExts { if ext == allowedExt { @@ -44,7 +55,7 @@ func UploadImageAPI(w http.ResponseWriter, r *http.Request) { } } if conf.Mode != "p" && !valid { - errJsonMsg("Invalid file type. Only .jpg, .jpeg, and .png are allowed.", w) + errJsonMsg(fmt.Sprintf("Invalid file type. Only .jpg, .jpeg, and .png %s are allowed.", conf.AllowedExts), w) // http.Error(w, "Invalid file type. Only .jpg, .jpeg, and .png are allowed.", http.StatusBadRequest) return } @@ -52,12 +63,26 @@ func UploadImageAPI(w http.ResponseWriter, r *http.Request) { Code: 0, Message: "error", } - img := conf.FileRoute + utils.UpDocument(utils.TgFileData(header.Filename, file)) - if img != conf.FileRoute { + fileId := utils.UpDocument(utils.TgFileData(fileName, file)) + if "blob" != fileName { + ip := r.RemoteAddr // 获取上传者IP + // 插入数据到数据库 + err := SaveFileRecord(fileId, fileName, ip) + if err != nil { + errJsonMsg("Unable to save file record", w) + } + } + + downloadUrl := conf.FileRoute + fileId + if downloadUrl != conf.FileRoute { + imageUrl := strings.TrimSuffix(conf.BaseUrl, "/") + downloadUrl + // url encode imageUrl + proxyUrl := conf.ProxyUrl + "/" + url.QueryEscape(imageUrl) res = conf.UploadResponse{ - Code: 1, - Message: img, - ImgUrl: strings.TrimSuffix(conf.BaseUrl, "/") + img, + Code: 1, + Message: downloadUrl, + ImgUrl: imageUrl, + ProxyUrl: proxyUrl, } } w.Header().Set("Content-Type", "application/json") @@ -81,8 +106,8 @@ func errJsonMsg(msg string, w http.ResponseWriter) { } func D(w http.ResponseWriter, r *http.Request) { path := r.URL.Path - id := strings.TrimPrefix(path, conf.FileRoute) - if id == "" { + fileId := strings.TrimPrefix(path, conf.FileRoute) + if fileId == "" { // 设置响应的状态码为 404 w.WriteHeader(http.StatusNotFound) // 写入响应内容 @@ -91,7 +116,7 @@ func D(w http.ResponseWriter, r *http.Request) { } // 发起HTTP GET请求来获取Telegram图片 - fileUrl, _ := utils.GetDownloadUrl(id) + fileUrl, _ := utils.GetDownloadUrl(fileId) resp, err := http.Get(fileUrl) if err != nil { http.Error(w, "Failed to fetch content", http.StatusInternalServerError) @@ -156,6 +181,12 @@ func D(w http.ResponseWriter, r *http.Request) { } else { // 使用DetectContentType函数检测文件类型 w.Header().Set("Content-Type", http.DetectContentType(buffer)) + + fileName, err := GetFileNameByID(fileId) + if err == nil && fileName != "" { + w.Header().Set("Content-Disposition", "attachment; filename=\""+fileName+"\"") + } + _, err = w.Write(buffer[:n]) if err != nil { http.Error(w, "Failed to write content", http.StatusInternalServerError) diff --git a/control/db.go b/control/db.go new file mode 100644 index 0000000..053ed6b --- /dev/null +++ b/control/db.go @@ -0,0 +1,63 @@ +package control + +import ( + "database/sql" + "errors" + "fmt" + _ "github.com/mattn/go-sqlite3" + "log" + "sync" +) + +var ( + db *sql.DB + once sync.Once +) + +// InitDB 初始化数据库,创建表结构 +func InitDB() (*sql.DB, error) { + var err error + // 使用 sync.Once 确保数据库只初始化一次 + once.Do(func() { + db, err = sql.Open("sqlite3", "./files.db") + if err != nil { + log.Fatal("Failed to open database:", err) + } + + query := `CREATE TABLE IF NOT EXISTS uploaded_files ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + fileId TEXT NOT NULL, + filename TEXT NOT NULL, + ip TEXT NOT NULL, + time TIMESTAMP DEFAULT CURRENT_TIMESTAMP + );` + _, err = db.Exec(query) + if err != nil { + log.Fatal("Failed to create table:", err) + } + }) + + return db, err +} + +// GetFileNameByID 查询文件名 +func GetFileNameByID(id string) (string, error) { + var fileName string + // 执行查询,获取对应id的fileName + query := "SELECT filename FROM uploaded_files WHERE fileId = ?" + err := db.QueryRow(query, id).Scan(&fileName) + if err != nil { + if errors.Is(err, sql.ErrNoRows) { + return "", fmt.Errorf("no file found with id %s", id) + } + return "", err + } + + return fileName, nil +} + +func SaveFileRecord(fileID string, fileName string, ip string) error { + // 插入数据到数据库 + _, err := db.Exec("INSERT INTO uploaded_files (fileId, filename, ip) VALUES (?, ?, ?)", fileID, fileName, ip) + return err +} diff --git a/go.mod b/go.mod index c744d82..b8a8b53 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,9 @@ module csz.net/tgstate go 1.20 -require github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1 +require ( + github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1 + github.com/joho/godotenv v1.5.1 +) + +require github.com/mattn/go-sqlite3 v1.14.24 // indirect diff --git a/go.sum b/go.sum index db8e45c..d010c00 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,6 @@ github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1 h1:wG8n/XJQ07TmjbITcGiUaOtXxdrINDz1b0J1w0SzqDc= github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1/go.mod h1:A2S0CWkNylc2phvKXWBBdD3K0iGnDBGbzRpISP2zBl8= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM= +github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= diff --git a/main.go b/main.go index 1191006..b21adb7 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,8 @@ package main import ( "flag" "fmt" + "github.com/joho/godotenv" + "log" "net" "net/http" "os" @@ -47,12 +49,19 @@ func web() { } func init() { + err := godotenv.Load() + if err != nil { + log.Fatal(err) + } + flag.StringVar(&webPort, "port", "8088", "Web Port") flag.StringVar(&conf.BotToken, "token", os.Getenv("token"), "Bot Token") flag.StringVar(&conf.ChannelName, "target", os.Getenv("target"), "Channel Name or ID") flag.StringVar(&conf.Pass, "pass", os.Getenv("pass"), "Visit Password") flag.StringVar(&conf.Mode, "mode", os.Getenv("mode"), "Run mode") flag.StringVar(&conf.BaseUrl, "url", os.Getenv("url"), "Base Url") + flag.StringVar(&conf.AllowedExts, "exts", os.Getenv("exts"), "Allowed Exts") + flag.StringVar(&conf.ProxyUrl, "proxyUrl", os.Getenv("proxyUrl"), "proxy url") flag.Parse() if conf.Mode == "m" { OptApi = false @@ -60,4 +69,9 @@ func init() { if conf.Mode != "p" && conf.Mode != "m" { conf.Mode = "p" } + _, err = control.InitDB() + if err != nil { + log.Fatal(err) + } + } From de81c5fe735ff293fb2d7fbf0f6f52cdc8eb89f0 Mon Sep 17 00:00:00 2001 From: liukl <1138493417@qq.com> Date: Thu, 17 Oct 2024 14:50:02 +0800 Subject: [PATCH 02/26] build:add build_freebsd.sh --- build_freebsd.sh | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 build_freebsd.sh diff --git a/build_freebsd.sh b/build_freebsd.sh new file mode 100644 index 0000000..84d3ebf --- /dev/null +++ b/build_freebsd.sh @@ -0,0 +1,2 @@ +#/bin/bash +sed -i '' 's/go 1.20/go 1.17/' go.mod && go mod tidy && CGO_ENABLED=0 GOOS=freebsd GOARCH=amd64 go build -o tgState main.go \ No newline at end of file From fee1c3c74b03685bd92efb9ed5915c186f623040 Mon Sep 17 00:00:00 2001 From: liukl <1138493417@qq.com> Date: Thu, 17 Oct 2024 14:57:32 +0800 Subject: [PATCH 03/26] fix:go-sqlite3 requires cgo to work --- .github/workflows/build-go.yml | 2 +- build_freebsd.sh | 3 ++- main.go | 7 ++----- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build-go.yml b/.github/workflows/build-go.yml index d497cc3..119eae4 100644 --- a/.github/workflows/build-go.yml +++ b/.github/workflows/build-go.yml @@ -26,7 +26,7 @@ jobs: - name: Build Linux arm64 run: | - CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o tgState main.go + CGO_ENABLED=1 GOOS=linux GOARCH=arm64 go build -o tgState main.go - name: Zip Linux amd64 run: | diff --git a/build_freebsd.sh b/build_freebsd.sh index 84d3ebf..d0f54bd 100644 --- a/build_freebsd.sh +++ b/build_freebsd.sh @@ -1,2 +1,3 @@ #/bin/bash -sed -i '' 's/go 1.20/go 1.17/' go.mod && go mod tidy && CGO_ENABLED=0 GOOS=freebsd GOARCH=amd64 go build -o tgState main.go \ No newline at end of file +# fix Failed to create table:Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub +sed -i '' 's/go 1.20/go 1.17/' go.mod && go mod tidy && CGO_ENABLED=1 GOOS=freebsd GOARCH=amd64 go build -o tgState main.go \ No newline at end of file diff --git a/main.go b/main.go index b21adb7..b589488 100644 --- a/main.go +++ b/main.go @@ -49,10 +49,7 @@ func web() { } func init() { - err := godotenv.Load() - if err != nil { - log.Fatal(err) - } + _ = godotenv.Load() flag.StringVar(&webPort, "port", "8088", "Web Port") flag.StringVar(&conf.BotToken, "token", os.Getenv("token"), "Bot Token") @@ -69,7 +66,7 @@ func init() { if conf.Mode != "p" && conf.Mode != "m" { conf.Mode = "p" } - _, err = control.InitDB() + _, err := control.InitDB() if err != nil { log.Fatal(err) } From f7a1b774e6de0b6c68218021b9988d1376965bce Mon Sep 17 00:00:00 2001 From: liukl <1138493417@qq.com> Date: Thu, 17 Oct 2024 15:44:27 +0800 Subject: [PATCH 04/26] =?UTF-8?q?feat:=E6=9F=A5=E7=9C=8B=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 7 ++++-- api/vercel.go | 4 ++-- conf/conf.go | 7 ++++++ control/control.go | 54 +++++++++++++++++++++++++++++++++++----------- control/db.go | 36 +++++++++++++++++++++++++++++++ main.go | 4 +++- 6 files changed, 94 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index bccfc20..f59f443 100644 --- a/.gitignore +++ b/.gitignore @@ -23,5 +23,8 @@ mk.txt .idea/* .vscode/* tmp/* -.air.toml -.vercel +.air.toml +.vercel +/.env +/files.db +/tgState.zip diff --git a/api/vercel.go b/api/vercel.go index e97c081..c3dafbf 100644 --- a/api/vercel.go +++ b/api/vercel.go @@ -24,8 +24,8 @@ func Vercel(w http.ResponseWriter, r *http.Request) { } switch path { case "/api": - // 调用 control 包中的 UploadImageAPI 处理函数 - control.Middleware(control.UploadImageAPI)(w, r) + // 调用 control 包中的 UploadAPI 处理函数 + control.Middleware(control.UploadAPI)(w, r) case "/pwd": control.Pwd(w, r) default: diff --git a/conf/conf.go b/conf/conf.go index 4d262e3..1525647 100644 --- a/conf/conf.go +++ b/conf/conf.go @@ -3,6 +3,7 @@ package conf var BotToken string var ChannelName string var Pass string +var ApiPass string var Mode string var BaseUrl string var AllowedExts string @@ -15,4 +16,10 @@ type UploadResponse struct { ProxyUrl string `json:"proxyUrl"` } +type ResponseResult struct { + Code int `json:"code"` + Message string `json:"message"` + Data interface{} `json:"data"` +} + const FileRoute = "/d/" diff --git a/control/control.go b/control/control.go index 8081aa7..6d6442f 100644 --- a/control/control.go +++ b/control/control.go @@ -18,8 +18,8 @@ import ( "csz.net/tgstate/utils" ) -// UploadImageAPI 上传图片api -func UploadImageAPI(w http.ResponseWriter, r *http.Request) { +// UploadAPI 上传图片api +func UploadAPI(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") if r.Method == http.MethodPost { @@ -94,16 +94,8 @@ func UploadImageAPI(w http.ResponseWriter, r *http.Request) { // 如果不是POST请求,返回错误响应 http.Error(w, "Invalid request method", http.StatusMethodNotAllowed) } -func errJsonMsg(msg string, w http.ResponseWriter) { - // 这里示例直接返回JSON响应 - response := conf.UploadResponse{ - Code: 0, - Message: msg, - } - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode(response) -} + +// D 下载文件 func D(w http.ResponseWriter, r *http.Request) { path := r.URL.Path fileId := strings.TrimPrefix(path, conf.FileRoute) @@ -111,7 +103,7 @@ func D(w http.ResponseWriter, r *http.Request) { // 设置响应的状态码为 404 w.WriteHeader(http.StatusNotFound) // 写入响应内容 - w.Write([]byte("404 Not Found")) + errJsonMsg("404 Not Found", w) return } @@ -301,6 +293,42 @@ func Pwd(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, "/", http.StatusSeeOther) } +func FilesAPI(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + password := r.URL.Query().Get("password") + response := conf.ResponseResult{ + Code: 0, + Message: "ok", + } + + if conf.ApiPass != "" && password != conf.ApiPass { + response.Message = "Unauthorized" + response.Code = http.StatusUnauthorized + w.WriteHeader(http.StatusUnauthorized) + json.NewEncoder(w).Encode(response) + return + } + + record, err := SelectAllRecord() + response.Data = record + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + } + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(response) +} + +func errJsonMsg(msg string, w http.ResponseWriter) { + // 这里示例直接返回JSON响应 + response := conf.UploadResponse{ + Code: 0, + Message: msg, + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(response) +} + func Middleware(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // 只有当密码设置并且不为"none"时,才进行检查 diff --git a/control/db.go b/control/db.go index 053ed6b..88b5831 100644 --- a/control/db.go +++ b/control/db.go @@ -7,6 +7,7 @@ import ( _ "github.com/mattn/go-sqlite3" "log" "sync" + "time" ) var ( @@ -61,3 +62,38 @@ func SaveFileRecord(fileID string, fileName string, ip string) error { _, err := db.Exec("INSERT INTO uploaded_files (fileId, filename, ip) VALUES (?, ?, ?)", fileID, fileName, ip) return err } + +type FileRecord struct { + FileId string `json:"fileId"` + Filename string `json:"filename"` + Ip string `json:"ip"` + Time time.Time `json:"time"` +} + +func SelectAllRecord() ([]FileRecord, error) { + // 查询所有记录 + rows, err := db.Query("SELECT fileId, filename, ip, time FROM uploaded_files") + if err != nil { + return nil, err + } + defer rows.Close() + + var records []FileRecord + + // 迭代查询结果 + for rows.Next() { + var record FileRecord + err := rows.Scan(&record.FileId, &record.Filename, &record.Ip, &record.Time) + if err != nil { + return nil, err + } + records = append(records, record) + } + + // 检查查询错误 + if err = rows.Err(); err != nil { + return nil, err + } + + return records, nil +} diff --git a/main.go b/main.go index b589488..bab7f97 100644 --- a/main.go +++ b/main.go @@ -33,7 +33,8 @@ func web() { if conf.Pass != "" && conf.Pass != "none" { http.HandleFunc("/pwd", control.Pwd) } - http.HandleFunc("/api", control.Middleware(control.UploadImageAPI)) + http.HandleFunc("/api", control.Middleware(control.UploadAPI)) + http.HandleFunc("/files", control.Middleware(control.FilesAPI)) http.HandleFunc("/", control.Middleware(control.Index)) } @@ -55,6 +56,7 @@ func init() { flag.StringVar(&conf.BotToken, "token", os.Getenv("token"), "Bot Token") flag.StringVar(&conf.ChannelName, "target", os.Getenv("target"), "Channel Name or ID") flag.StringVar(&conf.Pass, "pass", os.Getenv("pass"), "Visit Password") + flag.StringVar(&conf.ApiPass, "apiPass", os.Getenv("apiPass"), "API Visit Password") flag.StringVar(&conf.Mode, "mode", os.Getenv("mode"), "Run mode") flag.StringVar(&conf.BaseUrl, "url", os.Getenv("url"), "Base Url") flag.StringVar(&conf.AllowedExts, "exts", os.Getenv("exts"), "Allowed Exts") From 36812f36d162ee905ec7d0bc29a23987c5635b5b Mon Sep 17 00:00:00 2001 From: liukl <1138493417@qq.com> Date: Thu, 17 Oct 2024 16:00:36 +0800 Subject: [PATCH 05/26] =?UTF-8?q?feat:=E9=80=9A=E8=BF=87=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=90=8D=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- control/control.go | 10 ++++++---- control/db.go | 32 ++++++++++++++++---------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/control/control.go b/control/control.go index 6d6442f..588305b 100644 --- a/control/control.go +++ b/control/control.go @@ -106,7 +106,10 @@ func D(w http.ResponseWriter, r *http.Request) { errJsonMsg("404 Not Found", w) return } - + record, err := GetFileNameByIDOrName(fileId) + if err == nil && record.FileId != "" { + fileId = record.FileId + } // 发起HTTP GET请求来获取Telegram图片 fileUrl, _ := utils.GetDownloadUrl(fileId) resp, err := http.Get(fileUrl) @@ -174,9 +177,8 @@ func D(w http.ResponseWriter, r *http.Request) { // 使用DetectContentType函数检测文件类型 w.Header().Set("Content-Type", http.DetectContentType(buffer)) - fileName, err := GetFileNameByID(fileId) - if err == nil && fileName != "" { - w.Header().Set("Content-Disposition", "attachment; filename=\""+fileName+"\"") + if err == nil && record.Filename != "" { + w.Header().Set("Content-Disposition", "attachment; filename=\""+record.Filename+"\"") } _, err = w.Write(buffer[:n]) diff --git a/control/db.go b/control/db.go index 88b5831..d02b28d 100644 --- a/control/db.go +++ b/control/db.go @@ -41,20 +41,27 @@ func InitDB() (*sql.DB, error) { return db, err } -// GetFileNameByID 查询文件名 -func GetFileNameByID(id string) (string, error) { - var fileName string - // 执行查询,获取对应id的fileName - query := "SELECT filename FROM uploaded_files WHERE fileId = ?" - err := db.QueryRow(query, id).Scan(&fileName) +type FileRecord struct { + FileId string `json:"fileId"` + Filename string `json:"filename"` + Ip string `json:"ip"` + Time time.Time `json:"time"` +} + +// GetFileNameByIDOrName 查询文件名 +func GetFileNameByIDOrName(idOrName string) (FileRecord, error) { + var record FileRecord + // 执行查询,获取对应id或name的file记录 + query := "SELECT fileId, filename, ip, time FROM uploaded_files WHERE fileId = ? OR filename = ? ORDER BY time DESC LIMIT 1" + err := db.QueryRow(query, idOrName, idOrName).Scan(&record.FileId, &record.Filename, &record.Ip, &record.Time) if err != nil { if errors.Is(err, sql.ErrNoRows) { - return "", fmt.Errorf("no file found with id %s", id) + return FileRecord{}, fmt.Errorf("no file found with idOrName %s", idOrName) } - return "", err + return FileRecord{}, err } - return fileName, nil + return record, nil } func SaveFileRecord(fileID string, fileName string, ip string) error { @@ -63,13 +70,6 @@ func SaveFileRecord(fileID string, fileName string, ip string) error { return err } -type FileRecord struct { - FileId string `json:"fileId"` - Filename string `json:"filename"` - Ip string `json:"ip"` - Time time.Time `json:"time"` -} - func SelectAllRecord() ([]FileRecord, error) { // 查询所有记录 rows, err := db.Query("SELECT fileId, filename, ip, time FROM uploaded_files") From 7158f027efd4174c8b30a1faf80092fea2764a31 Mon Sep 17 00:00:00 2001 From: liukl <1138493417@qq.com> Date: Thu, 17 Oct 2024 16:42:15 +0800 Subject: [PATCH 06/26] doc:hidden NSFW --- README.md | 4 ++++ README_en.md | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/README.md b/README.md index 5b53e45..5b929dc 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,12 @@ https://tgstate.vercel.app / https://tgstate.ikun123.com/ 不限制大小demo(临时) http://tgstate-cdn.ikun123.com/ 演示图片: +
+NSFW ![tgState](https://tgstate.vercel.app/d/BQACAgUAAx0EcyK3ugACByxlOR-Nfl4esavoO4zdaYIP_k1KYQACDAsAAkf4yFVpf_awaEkS8jAE) +
+ # 参数说明 diff --git a/README_en.md b/README_en.md index e258b42..68093ed 100644 --- a/README_en.md +++ b/README_en.md @@ -23,7 +23,11 @@ Hosted on Vercel, resource limitations - files larger than 5MB are not supported Demo image: +
+NSFW + ![tgState](https://tgstate.vercel.app/d/BQACAgUAAx0EcyK3ugACByxlOR-Nfl4esavoO4zdaYIP_k1KYQACDAsAAkf4yFVpf_awaEkS8jAE) +
# Parameter Description From e0a84906249f0fd1f3aeec85d83196683f5d71b6 Mon Sep 17 00:00:00 2001 From: liukl <1138493417@qq.com> Date: Thu, 17 Oct 2024 17:06:27 +0800 Subject: [PATCH 07/26] feat:support proxy web --- assets/templates/footer.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/templates/footer.tmpl b/assets/templates/footer.tmpl index c531994..d75e0ae 100644 --- a/assets/templates/footer.tmpl +++ b/assets/templates/footer.tmpl @@ -69,7 +69,7 @@ (a = a + ":" + window.location.port), $.ajax({ type: "POST", - url: a + "/api", + url: window.location.href + "/api", data: o, contentType: !1, processData: !1, From 18548d915269a18c46a886e38f1eecc060ca2f1a Mon Sep 17 00:00:00 2001 From: liukl <1138493417@qq.com> Date: Thu, 17 Oct 2024 17:10:12 +0800 Subject: [PATCH 08/26] feat:support proxy web --- assets/templates/footer.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/templates/footer.tmpl b/assets/templates/footer.tmpl index d75e0ae..172540b 100644 --- a/assets/templates/footer.tmpl +++ b/assets/templates/footer.tmpl @@ -75,7 +75,7 @@ processData: !1, success: function (e) { - var link = a + e.message; + var link = window.location.href + e.message; var proxyUrl = e.proxyUrl var t; if (e.code == 1) { From add80a5587fc4395db111cc33f1df2c22c78ccd0 Mon Sep 17 00:00:00 2001 From: liukl <1138493417@qq.com> Date: Fri, 18 Oct 2024 16:23:48 +0800 Subject: [PATCH 09/26] feat:support proxy web --- assets/templates/footer.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/templates/footer.tmpl b/assets/templates/footer.tmpl index 172540b..ab0af6c 100644 --- a/assets/templates/footer.tmpl +++ b/assets/templates/footer.tmpl @@ -69,7 +69,7 @@ (a = a + ":" + window.location.port), $.ajax({ type: "POST", - url: window.location.href + "/api", + url: window.location.href.replace(/\/$/, "") + "/api", data: o, contentType: !1, processData: !1, From 6f5d418aecc1da005fdda85998ec036c8d118565 Mon Sep 17 00:00:00 2001 From: bestk <1138493417@qq.com> Date: Fri, 8 Aug 2025 15:06:00 +0800 Subject: [PATCH 10/26] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0=E7=9F=AD=E9=93=BE?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + assets/templates/files.tmpl | 426 ++++++++++++++++++++++++++++++++- assets/templates/footer.tmpl | 179 +++++++------- assets/templates/header.tmpl | 6 +- assets/templates/images.tmpl | 6 +- assets/templates/pwd.tmpl | 2 +- conf/conf.go | 11 +- control/control.go | 99 +++++++- control/db.go | 92 +++++++- main.go | 34 ++- start.sh | 446 +++++++++++++++++++++++++++++++++++ utils/utils.go | 78 +++++- 12 files changed, 1266 insertions(+), 115 deletions(-) create mode 100644 start.sh diff --git a/.gitignore b/.gitignore index f59f443..06e248c 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,5 @@ tmp/* /.env /files.db /tgState.zip + +__debug_bin.exe* \ No newline at end of file diff --git a/assets/templates/files.tmpl b/assets/templates/files.tmpl index e48fb8b..279fa2a 100644 --- a/assets/templates/files.tmpl +++ b/assets/templates/files.tmpl @@ -1,6 +1,426 @@ {{template "public/header" .}} -

上传文件到 Telegram

-
上传中...
+
+

📁 File Upload to Telegram

+

Secure, Fast, Permanent Storage

+ +
+
+
📤
+

Drag files here or click to select

+ + +
+ + + +
+ 📊 Multiple Files + 🔒 Secure + ⚡ Fast +
+
+ +
Uploading...
+
+ + + + + {{template "public/footer" .}} diff --git a/assets/templates/footer.tmpl b/assets/templates/footer.tmpl index ab0af6c..04cb22f 100644 --- a/assets/templates/footer.tmpl +++ b/assets/templates/footer.tmpl @@ -3,7 +3,7 @@ function uploadFile(file) { var limit = 10 * 1024 * 1024; if (file.size <= limit) { - uploadImg(file, 1).then((url) => { + uploadImg(file, 1, file.name).then((url) => { // 处理上传成功的情况 console.log(url); }).catch((error) => { @@ -18,7 +18,7 @@ function uploadNextChunk() { if (start < file.size) { var chunk = file.slice(start, end); - return uploadImg(chunk, 0) + return uploadImg(chunk, 0, file.name) .then((url) => { // 处理上传成功的情况 temp = temp + '\n' + url.replace(/^\/d\//, ''); // 每次改变值都换行 @@ -47,7 +47,7 @@ // 将字符串转换为 Blob 对象 var blob = new Blob([temp], { type: 'text/plain' }); var fileAll = new File([blob], 'fileAll.txt', { type: 'text/plain' }); - return uploadImg(fileAll, 1); + return uploadImg(fileAll, 1, file.name); }) .catch((error) => { // 处理上传失败的情况 @@ -55,13 +55,14 @@ }); } } - function uploadImg(e, ms) { + function uploadImg(e, ms, fileName) { return new Promise((resolve, reject) => { var o = new FormData(); o.append("file", e); var isImage = e.type.startsWith('image/'); + var displayFileName = fileName || e.name || 'Unknown file'; $("#uploadButton").prop("disabled", !0); - $("#uploadButton").text("上传中"); + $("#uploadButton").text("Uploading"); $("#loading").show(); var a = window.location.protocol + "//" + window.location.hostname; "80" !== window.location.port && @@ -75,101 +76,118 @@ processData: !1, success: function (e) { - var link = window.location.href + e.message; + var link = window.location.href.replace(/\/$/, "") + e.message; var proxyUrl = e.proxyUrl var t; if (e.code == 1) { if (ms) { + var shortLink = e.shortFileUrl ? window.location.href.replace(/\/$/, "") + e.shortUrl : ''; + var fileNameToShow = displayFileName; + if (isImage) { - t = $( - '
上传成功,图片外链:' + - link + - '
'+ - '
上传成功,代理图片外链:' + - proxyUrl + - '
' - ); + var shortLinkHtml = shortLink ? + '
' + + '
' + fileNameToShow + '
' + + '' + + '
' : ''; + + t = $(shortLinkHtml); } else { - t = $( - '
上传成功,文件外链:' + - link + - "
" + - '
上传成功,代理文件外链:' + - proxyUrl + - "
" - ) + var shortLinkHtml = shortLink ? + '
' + + '
' + fileNameToShow + '
' + + '' + + '
' : ''; + + t = $(shortLinkHtml); } } resolve(e.message); } else { - var t = $('
上传失败(' + e.message + ')
'); - reject("上传失败(" + e.message + ")"); + var t = $('
Upload failed (' + e.message + ')
'); + reject("Upload failed (" + e.message + ")"); } $("#response").prepend(t); $("#uploadFile").val(""); $("#uploadFileLabel") - .text("选择文件") + .text("Choose Files") .css("background-color", "#007BFF"); + + // 重置上传按钮状态 + $("#uploadButton").prop("disabled", true); + $("#uploadButton").text("⬆️ Please select files first"); $(".copy-code").click(function () { var code = $(this).data("clipboard-text"); - var input = $(""); - $("body").append(input); - input.val(code).select(); - document.execCommand("copy"); - input.remove(); var copyButton = $(this); var originalText = copyButton.text(); - copyButton.text("复制成功"); - setTimeout(function () { - copyButton.text(originalText); - }, 1000); + + // 使用现代的 Clipboard API,如果不支持则回退到旧方法 + if (navigator.clipboard && window.isSecureContext) { + navigator.clipboard.writeText(code).then(function() { + copyButton.text("Copied!").addClass("copied"); + setTimeout(function () { + copyButton.text(originalText).removeClass("copied"); + }, 1500); + }).catch(function() { + // 如果 Clipboard API 失败,使用旧方法 + fallbackCopy(code, copyButton, originalText); + }); + } else { + // 使用旧的复制方法 + fallbackCopy(code, copyButton, originalText); + } }); + + function fallbackCopy(text, button, originalText) { + var input = $(""); + $("body").append(input); + input.val(text).select(); + try { + document.execCommand("copy"); + button.text("Copied!").addClass("copied"); + setTimeout(function () { + button.text(originalText).removeClass("copied"); + }, 1500); + } catch (err) { + button.text("Copy failed"); + setTimeout(function () { + button.text(originalText); + }, 1500); + } + input.remove(); + } return e.message; }, error: function () { - var errorResponse = $('
上传失败
'); + var errorResponse = $('
Upload failed
'); $("#response").prepend(errorResponse); - reject("上传失败"); + reject("Upload failed"); }, complete: function () { - $("#uploadButton").prop("disabled", !1); - $("#uploadButton").text("上传"); + // 检查是否还有文件选中 + var input = document.getElementById("uploadFile"); + if (input.files.length > 0) { + $("#uploadButton").prop("disabled", false); + $("#uploadButton").text("⬆️ Start Upload"); + } else { + $("#uploadButton").prop("disabled", true); + $("#uploadButton").text("⬆️ Please select files first"); + } $("#loading").hide(); } }); }); } function readAndUploadFile(file) { - var reader = new FileReader(); - reader.onload = function (e) { - // e.target.result 包含读取的文件内容 - var fileContent = e.target.result; - // 调用上传文件的函数 - uploadFile(file, fileContent); - }; - // 以文本形式读取文件内容 - reader.readAsText(file); + // 直接调用上传文件的函数 + uploadFile(file); } document.addEventListener("paste", function (e) { for (var o = e.clipboardData.items, t = 0; t < o.length; t++) { @@ -178,8 +196,11 @@ -1 !== n.type.indexOf("image") && ((a = n.getAsFile()), $("#uploadFileLabel") - .text("已选择剪贴板文件") + .text("Clipboard file selected") .css("background-color", "#0056b3"), + // 启用上传按钮 + $("#uploadButton").prop("disabled", false), + $("#uploadButton").text("⬆️ Start Upload"), uploadFile(a)); } }), @@ -189,16 +210,16 @@ if (files.length > 0) { if (files.length === 1) { $("#uploadFileLabel") - .text("已选择文件: " + files[0].name) + .text("Selected: " + files[0].name) .css("background-color", "#0056b3"); } else { $("#uploadFileLabel") - .text("已选择多个文件") + .text("Selected " + files.length + " files") .css("background-color", "#0056b3"); } } else { $("#uploadFileLabel") - .text("选择文件") + .text("Choose Files") .css("background-color", "#007BFF"); } }); @@ -209,24 +230,12 @@ readAndUploadFile(input.files[i]); } } else { - alert("请选择一个文件"); + alert("No file!"); } }); }); - - - + diff --git a/assets/templates/header.tmpl b/assets/templates/header.tmpl index c5dddb6..a853cfb 100644 --- a/assets/templates/header.tmpl +++ b/assets/templates/header.tmpl @@ -3,10 +3,10 @@ - tgState + File Upload to Telegram - + content="telegram file upload,tg file storage,free file hosting,permanent file storage,file sharing,free file links,telegram cloud,file upload service" /> + diff --git a/assets/templates/footer.tmpl b/assets/templates/footer.tmpl index 04cb22f..5bb8e97 100644 --- a/assets/templates/footer.tmpl +++ b/assets/templates/footer.tmpl @@ -223,16 +223,7 @@ .css("background-color", "#007BFF"); } }); - $("#uploadButton").click(function () { - var input = document.getElementById("uploadFile"); - if (input.files.length > 0) { - for (var i = 0; i < input.files.length; i++) { - readAndUploadFile(input.files[i]); - } - } else { - alert("No file!"); - } - }); + // 上传按钮点击事件已在files.tmpl中处理,这里不再重复绑定 }); diff --git a/conf/conf.go b/conf/conf.go index 36ff330..e2dad56 100644 --- a/conf/conf.go +++ b/conf/conf.go @@ -17,6 +17,7 @@ type UploadResponse struct { ShortUrl string `json:"shortUrl"` ShortFileUrl string `json:"shortFileUrl"` Name string `json:"name"` + ChunkId string `json:"chunkId,omitempty"` } type ResponseResult struct { diff --git a/control/control.go b/control/control.go index f0c4a46..7b8fd67 100644 --- a/control/control.go +++ b/control/control.go @@ -405,6 +405,149 @@ func ShortLinksAPI(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(response) } +// ChunkUploadAPI 分片上传API +func ChunkUploadAPI(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + + if r.Method != http.MethodPost { + http.Error(w, "Invalid request method", http.StatusMethodNotAllowed) + return + } + + // 获取上传的分片文件 + file, _, err := r.FormFile("file") + if err != nil { + errJsonMsg("Unable to get chunk file", w) + return + } + defer file.Close() + + chunkIndex := r.FormValue("chunkIndex") + uploadId := r.FormValue("uploadId") + fileName := r.FormValue("fileName") + + if chunkIndex == "" || uploadId == "" || fileName == "" { + errJsonMsg("Missing required parameters", w) + return + } + + // 上传分片到Telegram + chunkFileName := fmt.Sprintf("%s.chunk.%s", fileName, chunkIndex) + chunkId := utils.UpDocument(utils.TgFileData(chunkFileName, file)) + + if chunkId == "" { + errJsonMsg("Failed to upload chunk", w) + return + } + + // 保存分片信息到数据库 + ip := r.RemoteAddr + err = SaveChunkRecord(uploadId, chunkIndex, chunkId, fileName, ip) + if err != nil { + errJsonMsg("Failed to save chunk record", w) + return + } + + response := conf.UploadResponse{ + Code: 1, + Message: "Chunk uploaded successfully", + ChunkId: chunkId, + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(response) +} + +// MergeChunksAPI 合并分片API +func MergeChunksAPI(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + + if r.Method != http.MethodPost { + http.Error(w, "Invalid request method", http.StatusMethodNotAllowed) + return + } + + var req struct { + UploadId string `json:"uploadId"` + FileName string `json:"fileName"` + ChunkIds []string `json:"chunkIds"` + FileSize int64 `json:"fileSize"` + } + + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + errJsonMsg("Invalid request body", w) + return + } + + if req.UploadId == "" || req.FileName == "" || len(req.ChunkIds) == 0 { + errJsonMsg("Missing required parameters", w) + return + } + + // 创建合并文件的元数据 + mergedFileId := utils.CreateMergedFile(req.FileName, req.ChunkIds, req.FileSize) + if mergedFileId == "" { + errJsonMsg("Failed to create merged file", w) + return + } + + // 保存文件记录 + ip := r.RemoteAddr + err := SaveFileRecord(mergedFileId, req.FileName, ip) + if err != nil { + errJsonMsg("Failed to save file record", w) + return + } + + // 生成短链 + downloadUrl := conf.FileRoute + mergedFileId + shortUrl := "" + + var shortCode string + maxRetries := 10 + for i := 0; i < maxRetries; i++ { + shortCode = utils.GenerateShortCode(6) + if !ShortCodeExists(shortCode) { + break + } + if i == maxRetries-1 { + log.Printf("Failed to generate unique short code after %d retries", maxRetries) + shortCode = "" + } + } + + if shortCode != "" { + err := CreateShortLink(shortCode, mergedFileId) + if err != nil { + log.Printf("Failed to create short link: %v", err) + } else { + shortUrl = "/s/" + shortCode + } + } + + imageUrl := strings.TrimSuffix(conf.BaseUrl, "/") + downloadUrl + shortImageUrl := strings.TrimSuffix(conf.BaseUrl, "/") + shortUrl + proxyUrl := conf.ProxyUrl + "/" + url.QueryEscape(imageUrl) + + response := conf.UploadResponse{ + Code: 1, + Message: downloadUrl, + ImgUrl: imageUrl, + ProxyUrl: proxyUrl, + ShortUrl: shortUrl, + ShortFileUrl: shortImageUrl, + Name: req.FileName, + } + + // 清理分片记录 + go CleanupChunkRecords(req.UploadId) + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(response) +} + func errJsonMsg(msg string, w http.ResponseWriter) { // 这里示例直接返回JSON响应 response := conf.UploadResponse{ diff --git a/control/db.go b/control/db.go index 35f6e17..cc5f7f6 100644 --- a/control/db.go +++ b/control/db.go @@ -50,6 +50,22 @@ func InitDB() (*sql.DB, error) { if err != nil { log.Fatal("Failed to create short_links table:", err) } + + // 创建分片记录表 + chunkQuery := `CREATE TABLE IF NOT EXISTS chunk_records ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + upload_id TEXT NOT NULL, + chunk_index INTEGER NOT NULL, + chunk_id TEXT NOT NULL, + file_name TEXT NOT NULL, + ip TEXT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + UNIQUE(upload_id, chunk_index) + );` + _, err = db.Exec(chunkQuery) + if err != nil { + log.Fatal("Failed to create chunk_records table:", err) + } }) return db, err @@ -187,3 +203,50 @@ func GetShortCodeByFileId(fileId string) (string, error) { } return shortCode, nil } + +// SaveChunkRecord 保存分片记录 +func SaveChunkRecord(uploadId, chunkIndex, chunkId, fileName, ip string) error { + _, err := db.Exec("INSERT OR REPLACE INTO chunk_records (upload_id, chunk_index, chunk_id, file_name, ip) VALUES (?, ?, ?, ?, ?)", + uploadId, chunkIndex, chunkId, fileName, ip) + return err +} + +// GetChunkRecords 获取指定上传ID的所有分片记录 +func GetChunkRecords(uploadId string) ([]ChunkRecord, error) { + rows, err := db.Query("SELECT upload_id, chunk_index, chunk_id, file_name, ip, created_at FROM chunk_records WHERE upload_id = ? ORDER BY chunk_index", uploadId) + if err != nil { + return nil, err + } + defer rows.Close() + + var records []ChunkRecord + for rows.Next() { + var record ChunkRecord + err := rows.Scan(&record.UploadId, &record.ChunkIndex, &record.ChunkId, &record.FileName, &record.Ip, &record.CreatedAt) + if err != nil { + return nil, err + } + records = append(records, record) + } + + if err = rows.Err(); err != nil { + return nil, err + } + + return records, nil +} + +// CleanupChunkRecords 清理分片记录 +func CleanupChunkRecords(uploadId string) error { + _, err := db.Exec("DELETE FROM chunk_records WHERE upload_id = ?", uploadId) + return err +} + +type ChunkRecord struct { + UploadId string `json:"uploadId"` + ChunkIndex int `json:"chunkIndex"` + ChunkId string `json:"chunkId"` + FileName string `json:"fileName"` + Ip string `json:"ip"` + CreatedAt time.Time `json:"createdAt"` +} diff --git a/main.go b/main.go index abfdb1a..9242bbd 100644 --- a/main.go +++ b/main.go @@ -59,6 +59,8 @@ func web() { http.HandleFunc("/pwd", control.Pwd) } http.HandleFunc("/api", control.Middleware(control.UploadAPI)) + http.HandleFunc("/api/chunk", control.Middleware(control.ChunkUploadAPI)) + http.HandleFunc("/api/merge", control.Middleware(control.MergeChunksAPI)) http.HandleFunc("/files", control.Middleware(control.FilesAPI)) http.HandleFunc("/shortlinks", control.Middleware(control.ShortLinksAPI)) http.HandleFunc("/", control.Middleware(control.Index)) diff --git a/test_chunked_upload.html b/test_chunked_upload.html new file mode 100644 index 0000000..e69de29 diff --git a/utils/utils.go b/utils/utils.go index 7d202ed..3e79599 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -182,3 +182,26 @@ func GenerateShortCode(length int) string { return string(result) } + +// CreateMergedFile 创建合并文件的元数据 +func CreateMergedFile(fileName string, chunkIds []string, fileSize int64) string { + // 创建合并文件的元数据内容 + content := fmt.Sprintf("tgstate-blob\n%s\nsize%d\n", fileName, fileSize) + + // 添加所有分片ID + for _, chunkId := range chunkIds { + content += chunkId + "\n" + } + + // 将元数据作为文件上传到Telegram + fileData := TgFileData("blob", strings.NewReader(content)) + mergedFileId := UpDocument(fileData) + + if mergedFileId != "" { + log.Printf("合并文件元数据创建成功: %s, FileID: %s", fileName, mergedFileId) + } else { + log.Printf("合并文件元数据创建失败: %s", fileName) + } + + return mergedFileId +} From 6f7773a8310fe874c65f5d8dbe96838dcf39f4ea Mon Sep 17 00:00:00 2001 From: bestk <1138493417@qq.com> Date: Fri, 8 Aug 2025 15:51:32 +0800 Subject: [PATCH 12/26] =?UTF-8?q?feat:=20=E8=BF=9B=E5=BA=A6=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/templates/files.tmpl | 350 +++++++++++++++++++++++++++++++++--- 1 file changed, 324 insertions(+), 26 deletions(-) diff --git a/assets/templates/files.tmpl b/assets/templates/files.tmpl index 19e7d48..d67310f 100644 --- a/assets/templates/files.tmpl +++ b/assets/templates/files.tmpl @@ -328,6 +328,13 @@ white-space: nowrap; } +.progress-status { + color: #007bff; + font-size: 0.85rem; + margin-bottom: 8px; + font-style: italic; +} + .progress-bar { width: 100%; height: 8px; @@ -340,7 +347,34 @@ height: 100%; background: linear-gradient(90deg, #007bff, #0056b3); border-radius: 4px; - transition: width 0.3s ease; + transition: width 0.2s ease-out; + position: relative; + overflow: hidden; +} + +.progress-fill::after { + content: ''; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: linear-gradient( + 90deg, + transparent, + rgba(255, 255, 255, 0.3), + transparent + ); + animation: shimmer 2s infinite; +} + +@keyframes shimmer { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(100%); + } } /* 响应式 */ @@ -520,31 +554,99 @@ document.addEventListener('DOMContentLoaded', function() { // 上传小文件(<10MB) async function uploadSmallFile(file) { - const formData = new FormData(); - formData.append('file', file); - - const response = await fetch('/api', { - method: 'POST', - body: formData - }); - - const result = await response.json(); + // 创建进度显示 + const progressDiv = createProgressDisplay(file.name, 1); - if (result.code === 1) { - showResponse(`File uploaded successfully: ${file.name}`, true, result); - } else { - throw new Error(result.message || 'Upload failed'); + try { + await uploadSmallFileWithProgress(file, progressDiv); + } catch (error) { + progressDiv.remove(); + throw error; } } + // 带进度的小文件上传 + function uploadSmallFileWithProgress(file, progressDiv) { + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + const formData = new FormData(); + formData.append('file', file); + + const progressText = progressDiv.querySelector('.progress-text'); + const progressFill = progressDiv.querySelector('.progress-fill'); + const progressStatus = progressDiv.querySelector('.progress-status'); + + // 监听上传进度 + xhr.upload.addEventListener('progress', (e) => { + if (e.lengthComputable) { + const percentage = Math.round((e.loaded / e.total) * 100); + progressText.textContent = `${percentage}%`; + progressFill.style.width = `${percentage}%`; + + if (percentage < 100) { + progressStatus.textContent = 'Uploading...'; + } + } + }); + + xhr.addEventListener('load', () => { + if (xhr.status === 200) { + try { + const result = JSON.parse(xhr.responseText); + if (result.code === 1) { + // 显示完成状态 + progressText.textContent = '100%'; + progressFill.style.width = '100%'; + progressStatus.textContent = 'Upload complete!'; + + // 延迟一下再移除进度条,让用户看到100% + setTimeout(() => { + progressDiv.remove(); + showResponse(`uploaded successfully: ${file.name}`, true, result); + resolve(); + }, 500); + } else { + reject(new Error(result.message || 'Upload failed')); + } + } catch (error) { + reject(new Error('Invalid response format')); + } + } else { + reject(new Error(`HTTP ${xhr.status}: ${xhr.statusText}`)); + } + }); + + xhr.addEventListener('error', () => { + progressStatus.textContent = 'Upload failed'; + progressFill.style.background = '#dc3545'; + reject(new Error('Network error during upload')); + }); + + xhr.addEventListener('timeout', () => { + progressStatus.textContent = 'Upload timeout'; + progressFill.style.background = '#dc3545'; + reject(new Error('Upload timeout')); + }); + + // 初始状态 + progressStatus.textContent = 'Starting upload...'; + progressText.textContent = '0%'; + progressFill.style.width = '0%'; + + xhr.open('POST', '/api'); + xhr.send(formData); + }); + } + // 上传大文件(>=10MB)- 分片上传 async function uploadLargeFile(file) { const totalChunks = Math.ceil(file.size / CHUNK_SIZE); const uploadId = generateUploadId(); const chunkIds = []; - // 创建进度显示 + // 创建进度显示和跟踪器 const progressDiv = createProgressDisplay(file.name, totalChunks); + const progressTracker = new ProgressTracker(totalChunks, progressDiv); try { // 并发上传分片 @@ -558,12 +660,15 @@ document.addEventListener('DOMContentLoaded', function() { const end = Math.min(start + CHUNK_SIZE, file.size); const chunk = file.slice(start, end); - const chunkId = await uploadChunk(chunk, chunkIndex, uploadId, file.name); + const chunkId = await uploadChunkWithProgress( + chunk, + chunkIndex, + uploadId, + file.name, + progressTracker + ); chunkIds[chunkIndex] = chunkId; - // 更新进度 - updateProgress(progressDiv, chunkIndex + 1, totalChunks); - return chunkId; } finally { release(); @@ -574,12 +679,24 @@ document.addEventListener('DOMContentLoaded', function() { await Promise.all(uploadPromises); + // 确保所有分块都显示为100%完成 + progressTracker.forceUpdate(); + + // 显示合并状态 + progressTracker.setStatus('Merging chunks...'); + // 合并分片 const result = await mergeChunks(uploadId, file.name, chunkIds, file.size); if (result.code === 1) { - progressDiv.remove(); - showResponse(`Large file uploaded successfully: ${file.name}`, true, result); + // 显示完成状态 + progressTracker.setStatus('Upload complete!'); + + // 延迟一下再移除进度条,让用户看到100% + setTimeout(() => { + progressDiv.remove(); + showResponse(`uploaded successfully: ${file.name}`, true, result); + }, 500); } else { throw new Error(result.message || 'Merge failed'); } @@ -590,7 +707,57 @@ document.addEventListener('DOMContentLoaded', function() { } } - // 上传单个分片 + // 上传单个分片(带进度跟踪) + async function uploadChunkWithProgress(chunk, chunkIndex, uploadId, fileName, progressTracker) { + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + const formData = new FormData(); + + formData.append('file', chunk, `${fileName}.chunk.${chunkIndex}`); + formData.append('chunkIndex', chunkIndex); + formData.append('uploadId', uploadId); + formData.append('fileName', fileName); + + // 监听上传进度 + xhr.upload.addEventListener('progress', (e) => { + if (e.lengthComputable) { + const chunkProgress = (e.loaded / e.total) * 100; + progressTracker.updateChunkProgress(chunkIndex, chunkProgress); + } + }); + + xhr.addEventListener('load', () => { + if (xhr.status === 200) { + try { + const result = JSON.parse(xhr.responseText); + if (result.code === 1) { + progressTracker.updateChunkProgress(chunkIndex, 100); + resolve(result.chunkId); + } else { + reject(new Error(result.message || 'Chunk upload failed')); + } + } catch (error) { + reject(new Error('Invalid response format')); + } + } else { + reject(new Error(`HTTP ${xhr.status}: ${xhr.statusText}`)); + } + }); + + xhr.addEventListener('error', () => { + reject(new Error('Network error during chunk upload')); + }); + + xhr.addEventListener('timeout', () => { + reject(new Error('Chunk upload timeout')); + }); + + xhr.open('POST', '/api/chunk'); + xhr.send(formData); + }); + } + + // 上传单个分片(兼容性保留) async function uploadChunk(chunk, chunkIndex, uploadId, fileName) { const formData = new FormData(); formData.append('file', chunk, `${fileName}.chunk.${chunkIndex}`); @@ -642,8 +809,9 @@ document.addEventListener('DOMContentLoaded', function() { progressDiv.innerHTML = `
${fileName} - 0/${totalChunks} chunks + 0%
+
Uploading...
@@ -653,13 +821,22 @@ document.addEventListener('DOMContentLoaded', function() { } // 更新进度 - function updateProgress(progressDiv, completed, total) { + function updateProgress(progressDiv, completed, total, status = null) { const progressText = progressDiv.querySelector('.progress-text'); const progressFill = progressDiv.querySelector('.progress-fill'); + const progressStatus = progressDiv.querySelector('.progress-status'); - const percentage = (completed / total) * 100; - progressText.textContent = `${completed}/${total} chunks`; + const percentage = Math.round((completed / total) * 100); + progressText.textContent = `${percentage}%`; progressFill.style.width = `${percentage}%`; + + if (status) { + progressStatus.textContent = status; + } else if (percentage === 100) { + progressStatus.textContent = 'Processing...'; + } else { + progressStatus.textContent = 'Uploading...'; + } } // 显示响应结果 @@ -705,6 +882,127 @@ document.addEventListener('DOMContentLoaded', function() { responseDiv.scrollIntoView({ behavior: 'smooth' }); } + // 进度跟踪器类 + class ProgressTracker { + constructor(totalChunks, progressDiv) { + this.totalChunks = totalChunks; + this.progressDiv = progressDiv; + this.chunkProgress = new Array(totalChunks).fill(0); + this.lastUpdateTime = 0; + this.updateThrottle = 100; // 限制更新频率为100ms + this.startTime = Date.now(); + this.lastProgress = 0; + this.progressHistory = []; + } + + updateChunkProgress(chunkIndex, progress) { + this.chunkProgress[chunkIndex] = progress; + + // 节流更新,避免过于频繁的DOM操作 + const now = Date.now(); + if (now - this.lastUpdateTime > this.updateThrottle) { + this.updateDisplay(); + this.lastUpdateTime = now; + } + } + + updateDisplay() { + const totalProgress = this.chunkProgress.reduce((sum, progress) => sum + progress, 0); + const overallProgress = totalProgress / this.totalChunks; + + const progressText = this.progressDiv.querySelector('.progress-text'); + const progressFill = this.progressDiv.querySelector('.progress-fill'); + + const percentage = Math.round(overallProgress); + + // 更新进度显示 + progressText.textContent = `${percentage}%`; + progressFill.style.width = `${percentage}%`; + + // 记录进度历史用于速度计算 + const now = Date.now(); + this.progressHistory.push({ + time: now, + progress: percentage + }); + + // 只保留最近5秒的历史记录 + this.progressHistory = this.progressHistory.filter( + record => now - record.time < 5000 + ); + + // 更新状态文本(如果不是在合并阶段) + const progressStatus = this.progressDiv.querySelector('.progress-status'); + if (progressStatus && !progressStatus.textContent.includes('Merging')) { + if (percentage < 100) { + const speed = this.calculateSpeed(); + const eta = this.calculateETA(percentage, speed); + + if (speed > 0 && eta > 0) { + progressStatus.textContent = `Uploading... (${this.formatSpeed(speed)}, ETA: ${this.formatTime(eta)})`; + } else { + progressStatus.textContent = 'Uploading...'; + } + } else { + progressStatus.textContent = 'Processing...'; + } + } + + this.lastProgress = percentage; + } + + calculateSpeed() { + if (this.progressHistory.length < 2) return 0; + + const recent = this.progressHistory[this.progressHistory.length - 1]; + const older = this.progressHistory[0]; + + const timeDiff = (recent.time - older.time) / 1000; // 秒 + const progressDiff = recent.progress - older.progress; + + return progressDiff / timeDiff; // 百分比/秒 + } + + calculateETA(currentProgress, speed) { + if (speed <= 0 || currentProgress >= 100) return 0; + + const remainingProgress = 100 - currentProgress; + return remainingProgress / speed; // 秒 + } + + formatSpeed(speed) { + return `${speed.toFixed(1)}%/s`; + } + + formatTime(seconds) { + if (seconds < 60) { + return `${Math.round(seconds)}s`; + } else if (seconds < 3600) { + const minutes = Math.floor(seconds / 60); + const remainingSeconds = Math.round(seconds % 60); + return `${minutes}m ${remainingSeconds}s`; + } else { + const hours = Math.floor(seconds / 3600); + const minutes = Math.floor((seconds % 3600) / 60); + return `${hours}h ${minutes}m`; + } + } + + setStatus(status) { + const progressStatus = this.progressDiv.querySelector('.progress-status'); + if (progressStatus) { + progressStatus.textContent = status; + } + } + + // 强制更新显示(用于最终状态) + forceUpdate() { + // 确保所有分块都是100% + this.chunkProgress.fill(100); + this.updateDisplay(); + } + } + // 信号量实现,用于控制并发数 class Semaphore { constructor(max) { From 489cbb0b2dbaf09d4227f7c1fbef496566df34c5 Mon Sep 17 00:00:00 2001 From: bestk <1138493417@qq.com> Date: Fri, 8 Aug 2025 15:59:07 +0800 Subject: [PATCH 13/26] =?UTF-8?q?feat:=20=E8=BF=9B=E5=BA=A6=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/templates/files.tmpl | 62 +++++++++++++++++++++++++------------ 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/assets/templates/files.tmpl b/assets/templates/files.tmpl index d67310f..421281b 100644 --- a/assets/templates/files.tmpl +++ b/assets/templates/files.tmpl @@ -889,7 +889,7 @@ document.addEventListener('DOMContentLoaded', function() { this.progressDiv = progressDiv; this.chunkProgress = new Array(totalChunks).fill(0); this.lastUpdateTime = 0; - this.updateThrottle = 100; // 限制更新频率为100ms + this.updateThrottle = 300; // 限制更新频率为300ms this.startTime = Date.now(); this.lastProgress = 0; this.progressHistory = []; @@ -919,27 +919,34 @@ document.addEventListener('DOMContentLoaded', function() { progressText.textContent = `${percentage}%`; progressFill.style.width = `${percentage}%`; - // 记录进度历史用于速度计算 + // 只有当进度有实际变化时才记录历史 const now = Date.now(); - this.progressHistory.push({ - time: now, - progress: percentage - }); - - // 只保留最近5秒的历史记录 - this.progressHistory = this.progressHistory.filter( - record => now - record.time < 5000 - ); + if (percentage !== this.lastProgress) { + this.progressHistory.push({ + time: now, + progress: percentage + }); + + // 只保留最近10秒的历史记录,并限制记录数量 + this.progressHistory = this.progressHistory + .filter(record => now - record.time < 10000) + .slice(-20); // 最多保留20个记录点 + } // 更新状态文本(如果不是在合并阶段) const progressStatus = this.progressDiv.querySelector('.progress-status'); if (progressStatus && !progressStatus.textContent.includes('Merging')) { if (percentage < 100) { - const speed = this.calculateSpeed(); - const eta = this.calculateETA(percentage, speed); - - if (speed > 0 && eta > 0) { - progressStatus.textContent = `Uploading... (${this.formatSpeed(speed)}, ETA: ${this.formatTime(eta)})`; + // 只有在有足够历史数据且进度变化时才显示速度 + if (this.progressHistory.length >= 3 && percentage > this.lastProgress) { + const speed = this.calculateSpeed(); + const eta = this.calculateETA(percentage, speed); + + if (speed > 0.1 && eta > 0 && eta < 3600) { + progressStatus.textContent = `Uploading... (${this.formatSpeed(speed)}, ETA: ${this.formatTime(eta)})`; + } else { + progressStatus.textContent = 'Uploading...'; + } } else { progressStatus.textContent = 'Uploading...'; } @@ -952,7 +959,7 @@ document.addEventListener('DOMContentLoaded', function() { } calculateSpeed() { - if (this.progressHistory.length < 2) return 0; + if (this.progressHistory.length < 3) return 0; const recent = this.progressHistory[this.progressHistory.length - 1]; const older = this.progressHistory[0]; @@ -960,26 +967,41 @@ document.addEventListener('DOMContentLoaded', function() { const timeDiff = (recent.time - older.time) / 1000; // 秒 const progressDiff = recent.progress - older.progress; - return progressDiff / timeDiff; // 百分比/秒 + // 防止异常值:时间差太小或进度差为负 + if (timeDiff < 0.5 || progressDiff <= 0) return 0; + + const speed = progressDiff / timeDiff; + + // 限制速度范围,防止异常值 + return Math.min(Math.max(speed, 0), 50); // 最大50%/s } calculateETA(currentProgress, speed) { if (speed <= 0 || currentProgress >= 100) return 0; const remainingProgress = 100 - currentProgress; - return remainingProgress / speed; // 秒 + const eta = remainingProgress / speed; + + // 限制ETA范围,防止异常值 + return Math.min(eta, 3600); // 最大1小时 } formatSpeed(speed) { - return `${speed.toFixed(1)}%/s`; + if (speed < 0.1) return '0.1%/s'; + if (speed < 1) return `${speed.toFixed(1)}%/s`; + return `${speed.toFixed(0)}%/s`; } formatTime(seconds) { + if (seconds < 1) return '1s'; if (seconds < 60) { return `${Math.round(seconds)}s`; } else if (seconds < 3600) { const minutes = Math.floor(seconds / 60); const remainingSeconds = Math.round(seconds % 60); + if (remainingSeconds === 0) { + return `${minutes}m`; + } return `${minutes}m ${remainingSeconds}s`; } else { const hours = Math.floor(seconds / 3600); From c26df4f98cd1ca66679e945ac8c8beda330d1d2e Mon Sep 17 00:00:00 2001 From: bestk <1138493417@qq.com> Date: Fri, 8 Aug 2025 16:18:25 +0800 Subject: [PATCH 14/26] typo --- assets/templates/files.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/templates/files.tmpl b/assets/templates/files.tmpl index 421281b..a99df1e 100644 --- a/assets/templates/files.tmpl +++ b/assets/templates/files.tmpl @@ -501,7 +501,7 @@ document.addEventListener('DOMContentLoaded', function() { } fileLabel.style.background = '#28a745'; } else { - fileLabel.textContent = '选择文件'; + fileLabel.textContent = 'Choose Files'; fileLabel.style.background = '#007bff'; } } From 9a569d54adcf858c65c20f466fa873a8738ce345 Mon Sep 17 00:00:00 2001 From: bestk <1138493417@qq.com> Date: Tue, 12 Aug 2025 16:43:23 +0800 Subject: [PATCH 15/26] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=AA=92?= =?UTF-8?q?=E4=BD=93=E6=96=87=E4=BB=B6=E7=B1=BB=E5=9E=8B=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=92=8CHTTP=20Range=E8=AF=B7=E6=B1=82=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- control/control.go | 195 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 174 insertions(+), 21 deletions(-) diff --git a/control/control.go b/control/control.go index 7b8fd67..c998ff1 100644 --- a/control/control.go +++ b/control/control.go @@ -18,6 +18,81 @@ import ( "csz.net/tgstate/utils" ) +// getContentTypeFromExtension 根据文件扩展名返回对应的MIME类型 +func getContentTypeFromExtension(filename string) string { + ext := strings.ToLower(filepath.Ext(filename)) + + // 视频格式 + videoTypes := map[string]string{ + ".mp4": "video/mp4", + ".avi": "video/x-msvideo", + ".mov": "video/quicktime", + ".wmv": "video/x-ms-wmv", + ".flv": "video/x-flv", + ".webm": "video/webm", + ".mkv": "video/x-matroska", + ".3gp": "video/3gpp", + ".m4v": "video/x-m4v", + ".ts": "video/mp2t", + } + + // 音频格式 + audioTypes := map[string]string{ + ".mp3": "audio/mpeg", + ".wav": "audio/wav", + ".flac": "audio/flac", + ".aac": "audio/aac", + ".ogg": "audio/ogg", + ".wma": "audio/x-ms-wma", + ".m4a": "audio/mp4", + ".opus": "audio/opus", + } + + // 图片格式 + imageTypes := map[string]string{ + ".jpg": "image/jpeg", + ".jpeg": "image/jpeg", + ".png": "image/png", + ".gif": "image/gif", + ".webp": "image/webp", + ".bmp": "image/bmp", + ".svg": "image/svg+xml", + } + + if contentType, exists := videoTypes[ext]; exists { + return contentType + } + if contentType, exists := audioTypes[ext]; exists { + return contentType + } + if contentType, exists := imageTypes[ext]; exists { + return contentType + } + + return "application/octet-stream" +} + +// isMediaFile 检查文件是否为媒体文件(视频、音频、图片) +func isMediaFile(filename string) bool { + ext := strings.ToLower(filepath.Ext(filename)) + + mediaExts := []string{ + // 视频 + ".mp4", ".avi", ".mov", ".wmv", ".flv", ".webm", ".mkv", ".3gp", ".m4v", ".ts", + // 音频 + ".mp3", ".wav", ".flac", ".aac", ".ogg", ".wma", ".m4a", ".opus", + // 图片 + ".jpg", ".jpeg", ".png", ".gif", ".webp", ".bmp", ".svg", + } + + for _, mediaExt := range mediaExts { + if ext == mediaExt { + return true + } + } + return false +} + // UploadAPI 上传图片api func UploadAPI(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") @@ -43,6 +118,15 @@ func UploadAPI(w http.ResponseWriter, r *http.Request) { // 如果设置了AllowedExts,则使用设置的文件类型 if len(conf.AllowedExts) > 0 { allowedExts = append(allowedExts, strings.Split(conf.AllowedExts, ",")...) + } else { + // 如果没有设置特定的允许扩展名,添加常见的媒体文件格式 + mediaExts := []string{ + // 视频格式 + ".mp4", ".avi", ".mov", ".wmv", ".flv", ".webm", ".mkv", ".3gp", ".m4v", ".ts", + // 音频格式 + ".mp3", ".wav", ".flac", ".aac", ".ogg", ".wma", ".m4a", ".opus", + } + allowedExts = append(allowedExts, mediaExts...) } var fileName = header.Filename @@ -160,31 +244,64 @@ func D(w http.ResponseWriter, r *http.Request) { if err == nil && record.FileId != "" { fileId = record.FileId } - // 发起HTTP GET请求来获取Telegram图片 + + // 发起HTTP GET请求来获取Telegram文件 fileUrl, _ := utils.GetDownloadUrl(fileId) - resp, err := http.Get(fileUrl) + + // 创建HTTP请求,支持Range请求 + req, err := http.NewRequest("GET", fileUrl, nil) + if err != nil { + http.Error(w, "Failed to create request", http.StatusInternalServerError) + return + } + + // 如果客户端发送了Range请求头,转发给Telegram + rangeHeader := r.Header.Get("Range") + if rangeHeader != "" { + req.Header.Set("Range", rangeHeader) + } + + client := &http.Client{} + resp, err := client.Do(req) if err != nil { http.Error(w, "Failed to fetch content", http.StatusInternalServerError) return } - w.Header().Set("Content-Disposition", "inline") // 设置为 "inline" 以支持在线播放 + defer resp.Body.Close() + // 检查Content-Type是否为图片类型 if !strings.HasPrefix(resp.Header.Get("Content-Type"), "application/octet-stream") { w.WriteHeader(http.StatusNotFound) w.Write([]byte("404 Not Found")) return } - contentLength, err := strconv.Atoi(resp.Header.Get("Content-Length")) - if err != nil { - log.Println("获取Content-Length出错:", err) - return - } - buffer := make([]byte, contentLength) - n, err := resp.Body.Read(buffer) - defer resp.Body.Close() - if err != nil && err != io.ErrUnexpectedEOF { - log.Println("读取响应主体数据时发生错误:", err) - return + // 获取内容长度 + var contentLength int + var buffer []byte + var n int + + contentLengthStr := resp.Header.Get("Content-Length") + if contentLengthStr != "" { + contentLength, err = strconv.Atoi(contentLengthStr) + if err != nil { + log.Println("获取Content-Length出错:", err) + return + } + buffer = make([]byte, contentLength) + n, err = resp.Body.Read(buffer) + if err != nil && err != io.ErrUnexpectedEOF && err != io.EOF { + log.Println("读取响应主体数据时发生错误:", err) + return + } + } else { + // 如果没有Content-Length,读取所有内容 + buffer, err = io.ReadAll(resp.Body) + if err != nil { + log.Println("读取响应主体数据时发生错误:", err) + return + } + n = len(buffer) + contentLength = n } // 输出文件内容到控制台 if string(buffer[:12]) == "tgstate-blob" { @@ -226,29 +343,65 @@ func D(w http.ResponseWriter, r *http.Request) { } else { // 使用DetectContentType函数检测文件类型 contentType := http.DetectContentType(buffer) + + // 如果有文件名记录,尝试根据扩展名获取更准确的Content-Type + if err == nil && record.Filename != "" { + if detectedType := getContentTypeFromExtension(record.Filename); detectedType != "application/octet-stream" { + contentType = detectedType + } + } + w.Header().Set("Content-Type", contentType) - // 设置文件名,优先使用数据库中的原始文件名 + // 设置文件名和Content-Disposition,优先使用数据库中的原始文件名 if err == nil && record.Filename != "" { // 对文件名进行URL编码以处理特殊字符 encodedFilename := url.QueryEscape(record.Filename) - w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"; filename*=UTF-8''%s", record.Filename, encodedFilename)) + + // 如果是媒体文件,设置为inline以支持浏览器内播放 + if isMediaFile(record.Filename) { + w.Header().Set("Content-Disposition", fmt.Sprintf("inline; filename=\"%s\"; filename*=UTF-8''%s", record.Filename, encodedFilename)) + } else { + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"; filename*=UTF-8''%s", record.Filename, encodedFilename)) + } } else { // 如果没有找到记录,使用默认的文件名 w.Header().Set("Content-Disposition", "attachment") } + // 添加支持HTTP Range请求的头部,用于视频播放器的拖拽功能 + if strings.HasPrefix(contentType, "video/") || strings.HasPrefix(contentType, "audio/") { + w.Header().Set("Accept-Ranges", "bytes") + + // 如果是Range请求,传递相关的响应头 + if rangeHeader != "" && resp.StatusCode == http.StatusPartialContent { + // 传递Range相关的响应头 + if contentRange := resp.Header.Get("Content-Range"); contentRange != "" { + w.Header().Set("Content-Range", contentRange) + } + if acceptRanges := resp.Header.Get("Accept-Ranges"); acceptRanges != "" { + w.Header().Set("Accept-Ranges", acceptRanges) + } + + // 设置206状态码 + w.WriteHeader(http.StatusPartialContent) + } + } + _, err = w.Write(buffer[:n]) if err != nil { http.Error(w, "Failed to write content", http.StatusInternalServerError) log.Println(http.StatusInternalServerError) return } - _, err = io.Copy(w, resp.Body) - resp.Body.Close() - if err != nil { - log.Println(http.StatusInternalServerError) - return + + // 如果还有剩余内容,继续复制 + if resp.Body != nil { + _, err = io.Copy(w, resp.Body) + if err != nil { + log.Println("复制剩余内容时出错:", err) + return + } } } } From 0b71820571d8ea567a789660a901436c2f6b21bb Mon Sep 17 00:00:00 2001 From: bestk <1138493417@qq.com> Date: Wed, 13 Aug 2025 11:21:42 +0800 Subject: [PATCH 16/26] feat: vue frontend --- .gitignore | 4 +- FRONTEND_README.md | 113 + assets/assets.go | 3 + assets/dist/assets/index-BPZYI3YT.js | 1 + assets/dist/assets/index-BUrt7Nle.css | 1 + assets/dist/assets/ui-l0sNRNKZ.js | 1 + assets/dist/assets/vendor-pQYyzRmo.js | 22 + assets/dist/index.html | 17 + build-frontend.bat | 15 + build-frontend.sh | 12 + control/control.go | 204 +- control/db.go | 133 +- dev-frontend.bat | 7 + frontend/index.html | 15 + frontend/package-lock.json | 3209 ++++++++++++++++++++++ frontend/package.json | 35 + frontend/postcss.config.js | 6 + frontend/src/App.vue | 9 + frontend/src/components/FileUpload.vue | 615 +++++ frontend/src/components/HistoryModal.vue | 277 ++ frontend/src/components/ui/Button.vue | 62 + frontend/src/components/ui/Card.vue | 9 + frontend/src/components/ui/Progress.vue | 20 + frontend/src/lib/fingerprint.ts | 65 + frontend/src/lib/utils.ts | 63 + frontend/src/main.ts | 5 + frontend/src/services/api.ts | 146 + frontend/src/style.css | 59 + frontend/tailwind.config.js | 77 + frontend/tsconfig.json | 31 + frontend/tsconfig.node.json | 10 + frontend/vite.config.ts | 50 + main.go | 6 + 33 files changed, 5268 insertions(+), 34 deletions(-) create mode 100644 FRONTEND_README.md create mode 100644 assets/dist/assets/index-BPZYI3YT.js create mode 100644 assets/dist/assets/index-BUrt7Nle.css create mode 100644 assets/dist/assets/ui-l0sNRNKZ.js create mode 100644 assets/dist/assets/vendor-pQYyzRmo.js create mode 100644 assets/dist/index.html create mode 100644 build-frontend.bat create mode 100644 build-frontend.sh create mode 100644 dev-frontend.bat create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/postcss.config.js create mode 100644 frontend/src/App.vue create mode 100644 frontend/src/components/FileUpload.vue create mode 100644 frontend/src/components/HistoryModal.vue create mode 100644 frontend/src/components/ui/Button.vue create mode 100644 frontend/src/components/ui/Card.vue create mode 100644 frontend/src/components/ui/Progress.vue create mode 100644 frontend/src/lib/fingerprint.ts create mode 100644 frontend/src/lib/utils.ts create mode 100644 frontend/src/main.ts create mode 100644 frontend/src/services/api.ts create mode 100644 frontend/src/style.css create mode 100644 frontend/tailwind.config.js create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.node.json create mode 100644 frontend/vite.config.ts diff --git a/.gitignore b/.gitignore index 06e248c..c12d903 100644 --- a/.gitignore +++ b/.gitignore @@ -29,4 +29,6 @@ tmp/* /files.db /tgState.zip -__debug_bin.exe* \ No newline at end of file +__debug_bin.exe* + +node_modules/ \ No newline at end of file diff --git a/FRONTEND_README.md b/FRONTEND_README.md new file mode 100644 index 0000000..f07159d --- /dev/null +++ b/FRONTEND_README.md @@ -0,0 +1,113 @@ +# TGState 前端重构 + +使用 Vite + Vue 3 + Shadcn UI 重构的现代化前端界面。 + +## 功能特性 + +- 🎨 现代化的UI设计,基于Shadcn UI组件库 +- 📱 完全响应式设计,支持移动端 +- 🚀 使用Vite构建,开发体验更佳 +- ⚡ Vue 3 Composition API,性能更优 +- 📤 支持拖拽上传和多文件上传 +- 📊 实时上传进度显示 +- 🔄 大文件分片上传支持 +- 📋 一键复制链接功能 +- 🖼️ 图片文件支持HTML和Markdown格式复制 + +## 开发环境 + +### 前端开发 +```bash +cd frontend +npm install +npm run dev +``` + +### 后端开发 +```bash +go run main.go +``` + +### 同时启动前后端(Windows) +```bash +dev-frontend.bat +``` + +## 生产构建 + +### 构建前端并编译Go程序(Windows) +```bash +build-frontend.bat +``` + +### 构建前端并编译Go程序(Linux/Mac) +```bash +chmod +x build-frontend.sh +./build-frontend.sh +``` + +### 手动构建 +```bash +# 构建前端 +cd frontend +npm install +npm run build +cd .. + +# 构建Go程序 +go build -o tgstate +``` + +## 项目结构 + +``` +frontend/ +├── src/ +│ ├── components/ +│ │ ├── ui/ # Shadcn UI组件 +│ │ └── FileUpload.vue # 主上传组件 +│ ├── lib/ +│ │ └── utils.ts # 工具函数 +│ ├── services/ +│ │ └── api.ts # API服务 +│ ├── App.vue # 主应用组件 +│ ├── main.ts # 应用入口 +│ └── style.css # 全局样式 +├── package.json +├── vite.config.ts +├── tailwind.config.js +└── tsconfig.json +``` + +## 技术栈 + +- **Vue 3** - 渐进式JavaScript框架 +- **TypeScript** - 类型安全的JavaScript +- **Vite** - 下一代前端构建工具 +- **Tailwind CSS** - 实用优先的CSS框架 +- **Shadcn UI** - 高质量的Vue组件库 +- **Axios** - HTTP客户端 +- **Lucide Vue** - 图标库 + +## API兼容性 + +新前端完全兼容现有的Go后端API: +- `/api` - 文件上传 +- `/api/chunk` - 分片上传 +- `/api/merge` - 分片合并 +- `/d/` - 文件下载 +- `/s/` - 短链重定向 + +## 浏览器支持 + +- Chrome >= 87 +- Firefox >= 78 +- Safari >= 14 +- Edge >= 88 + +## 注意事项 + +1. 构建后的文件会输出到 `assets/dist/` 目录 +2. Go程序会优先使用构建后的前端,如果不存在则回退到原始模板 +3. 开发时前端运行在3000端口,通过代理访问后端8088端口 +4. 生产环境下前端文件会被嵌入到Go二进制文件中 \ No newline at end of file diff --git a/assets/assets.go b/assets/assets.go index 7a20b2b..30577d9 100644 --- a/assets/assets.go +++ b/assets/assets.go @@ -5,4 +5,7 @@ import "embed" var ( //go:embed templates Templates embed.FS + + //go:embed dist + Dist embed.FS ) diff --git a/assets/dist/assets/index-BPZYI3YT.js b/assets/dist/assets/index-BPZYI3YT.js new file mode 100644 index 0000000..0677162 --- /dev/null +++ b/assets/dist/assets/index-BPZYI3YT.js @@ -0,0 +1 @@ +import{a as Re,d as te,u as je,c as Le,b as N,o as S,m as Ge,r as Me,n as de,e as ue,f as x,g as Ee,h as B,i as K,j as O,w as q,k as ie,l as J,t as j,F as ye,p as xe,q as we,s as Oe}from"./vendor-pQYyzRmo.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))o(s);new MutationObserver(s=>{for(const n of s)if(n.type==="childList")for(const d of n.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&o(d)}).observe(document,{childList:!0,subtree:!0});function r(s){const n={};return s.integrity&&(n.integrity=s.integrity),s.referrerPolicy&&(n.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?n.credentials="include":s.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function o(s){if(s.ep)return;s.ep=!0;const n=r(s);fetch(s.href,n)}})();const be=Re.create({baseURL:"/",timeout:3e4}),Ve=async(e,t)=>{const r=new FormData;return r.append("file",e),(await be.post("/api",r,{headers:{"Content-Type":"multipart/form-data"},onUploadProgress:s=>{if(s.total&&t){const n=s.loaded/s.total*100;t(n)}}})).data},De=async(e,t,r,o,s)=>{const n=new FormData;return n.append("file",e,`${o}.chunk.${t}`),n.append("chunkIndex",t.toString()),n.append("uploadId",r),n.append("fileName",o),(await be.post("/api/chunk",n,{headers:{"Content-Type":"multipart/form-data"},onUploadProgress:l=>{if(l.total&&s){const m=l.loaded/l.total*100;s(m)}}})).data},Be=async e=>(await be.post("/api/merge",e,{headers:{"Content-Type":"application/json"}})).data;function Ae(e){var t,r,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var s=e.length;for(t=0;t{const t=He(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:o}=e;return{getClassGroupId:d=>{const l=d.split(he);return l[0]===""&&l.length!==1&&l.shift(),Ne(l,t)||qe(d)},getConflictingClassGroupIds:(d,l)=>{const m=r[d]||[];return l&&o[d]?[...m,...o[d]]:m}}},Ne=(e,t)=>{var d;if(e.length===0)return t.classGroupId;const r=e[0],o=t.nextPart.get(r),s=o?Ne(e.slice(1),o):void 0;if(s)return s;if(t.validators.length===0)return;const n=e.join(he);return(d=t.validators.find(({validator:l})=>l(n)))==null?void 0:d.classGroupId},ke=/^\[(.+)\]$/,qe=e=>{if(ke.test(e)){const t=ke.exec(e)[1],r=t==null?void 0:t.substring(0,t.indexOf(":"));if(r)return"arbitrary.."+r}},He=e=>{const{theme:t,prefix:r}=e,o={nextPart:new Map,validators:[]};return Ze(Object.entries(e.classGroups),r).forEach(([n,d])=>{me(d,o,n,t)}),o},me=(e,t,r,o)=>{e.forEach(s=>{if(typeof s=="string"){const n=s===""?t:Ce(t,s);n.classGroupId=r;return}if(typeof s=="function"){if(Ke(s)){me(s(o),t,r,o);return}t.validators.push({validator:s,classGroupId:r});return}Object.entries(s).forEach(([n,d])=>{me(d,Ce(t,n),r,o)})})},Ce=(e,t)=>{let r=e;return t.split(he).forEach(o=>{r.nextPart.has(o)||r.nextPart.set(o,{nextPart:new Map,validators:[]}),r=r.nextPart.get(o)}),r},Ke=e=>e.isThemeGetter,Ze=(e,t)=>t?e.map(([r,o])=>{const s=o.map(n=>typeof n=="string"?t+n:typeof n=="object"?Object.fromEntries(Object.entries(n).map(([d,l])=>[t+d,l])):n);return[r,s]}):e,Xe=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,r=new Map,o=new Map;const s=(n,d)=>{r.set(n,d),t++,t>e&&(t=0,o=r,r=new Map)};return{get(n){let d=r.get(n);if(d!==void 0)return d;if((d=o.get(n))!==void 0)return s(n,d),d},set(n,d){r.has(n)?r.set(n,d):s(n,d)}}},Te="!",Je=e=>{const{separator:t,experimentalParseClassName:r}=e,o=t.length===1,s=t[0],n=t.length,d=l=>{const m=[];let f=0,h=0,k;for(let g=0;gh?k-h:void 0;return{modifiers:m,hasImportantModifier:T,baseClassName:M,maybePostfixModifierPosition:y}};return r?l=>r({className:l,parseClassName:d}):d},Qe=e=>{if(e.length<=1)return e;const t=[];let r=[];return e.forEach(o=>{o[0]==="["?(t.push(...r.sort(),o),r=[]):r.push(o)}),t.push(...r.sort()),t},Ye=e=>({cache:Xe(e.cacheSize),parseClassName:Je(e),...We(e)}),et=/\s+/,tt=(e,t)=>{const{parseClassName:r,getClassGroupId:o,getConflictingClassGroupIds:s}=t,n=[],d=e.trim().split(et);let l="";for(let m=d.length-1;m>=0;m-=1){const f=d[m],{modifiers:h,hasImportantModifier:k,baseClassName:w,maybePostfixModifierPosition:T}=r(f);let M=!!T,y=o(M?w.substring(0,T):w);if(!y){if(!M){l=f+(l.length>0?" "+l:l);continue}if(y=o(w),!y){l=f+(l.length>0?" "+l:l);continue}M=!1}const g=Qe(h).join(":"),C=k?g+Te:g,_=C+y;if(n.includes(_))continue;n.push(_);const L=s(y,M);for(let U=0;U0?" "+l:l)}return l};function rt(){let e=0,t,r,o="";for(;e{if(typeof e=="string")return e;let t,r="";for(let o=0;ok(h),e());return r=Ye(f),o=r.cache.get,s=r.cache.set,n=l,l(m)}function l(m){const f=o(m);if(f)return f;const h=tt(m,r);return s(m,h),h}return function(){return n(rt.apply(null,arguments))}}const b=e=>{const t=r=>r[e]||[];return t.isThemeGetter=!0,t},Ie=/^\[(?:([a-z-]+):)?(.+)\]$/i,nt=/^\d+\/\d+$/,st=new Set(["px","full","screen"]),at=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,lt=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,it=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,ct=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,dt=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,E=e=>Z(e)||st.has(e)||nt.test(e),V=e=>X(e,"length",vt),Z=e=>!!e&&!Number.isNaN(Number(e)),ge=e=>X(e,"number",Z),Q=e=>!!e&&Number.isInteger(Number(e)),ut=e=>e.endsWith("%")&&Z(e.slice(0,-1)),u=e=>Ie.test(e),D=e=>at.test(e),pt=new Set(["length","size","percentage"]),ft=e=>X(e,pt,Ue),gt=e=>X(e,"position",Ue),mt=new Set(["image","url"]),bt=e=>X(e,mt,xt),ht=e=>X(e,"",yt),Y=()=>!0,X=(e,t,r)=>{const o=Ie.exec(e);return o?o[1]?typeof t=="string"?o[1]===t:t.has(o[1]):r(o[2]):!1},vt=e=>lt.test(e)&&!it.test(e),Ue=()=>!1,yt=e=>ct.test(e),xt=e=>dt.test(e),wt=()=>{const e=b("colors"),t=b("spacing"),r=b("blur"),o=b("brightness"),s=b("borderColor"),n=b("borderRadius"),d=b("borderSpacing"),l=b("borderWidth"),m=b("contrast"),f=b("grayscale"),h=b("hueRotate"),k=b("invert"),w=b("gap"),T=b("gradientColorStops"),M=b("gradientColorStopPositions"),y=b("inset"),g=b("margin"),C=b("opacity"),_=b("padding"),L=b("saturate"),U=b("scale"),W=b("sepia"),re=b("skew"),oe=b("space"),ne=b("translate"),c=()=>["auto","contain","none"],a=()=>["auto","hidden","clip","visible","scroll"],i=()=>["auto",u,t],p=()=>[u,t],z=()=>["",E,V],v=()=>["auto",Z,u],F=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],G=()=>["solid","dashed","dotted","double","none"],R=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],$=()=>["start","end","center","between","around","evenly","stretch"],I=()=>["","0",u],P=()=>["auto","avoid","all","avoid-page","page","left","right","column"],A=()=>[Z,u];return{cacheSize:500,separator:":",theme:{colors:[Y],spacing:[E,V],blur:["none","",D,u],brightness:A(),borderColor:[e],borderRadius:["none","","full",D,u],borderSpacing:p(),borderWidth:z(),contrast:A(),grayscale:I(),hueRotate:A(),invert:I(),gap:p(),gradientColorStops:[e],gradientColorStopPositions:[ut,V],inset:i(),margin:i(),opacity:A(),padding:p(),saturate:A(),scale:A(),sepia:I(),skew:A(),space:p(),translate:p()},classGroups:{aspect:[{aspect:["auto","square","video",u]}],container:["container"],columns:[{columns:[D]}],"break-after":[{"break-after":P()}],"break-before":[{"break-before":P()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...F(),u]}],overflow:[{overflow:a()}],"overflow-x":[{"overflow-x":a()}],"overflow-y":[{"overflow-y":a()}],overscroll:[{overscroll:c()}],"overscroll-x":[{"overscroll-x":c()}],"overscroll-y":[{"overscroll-y":c()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[y]}],"inset-x":[{"inset-x":[y]}],"inset-y":[{"inset-y":[y]}],start:[{start:[y]}],end:[{end:[y]}],top:[{top:[y]}],right:[{right:[y]}],bottom:[{bottom:[y]}],left:[{left:[y]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Q,u]}],basis:[{basis:i()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",u]}],grow:[{grow:I()}],shrink:[{shrink:I()}],order:[{order:["first","last","none",Q,u]}],"grid-cols":[{"grid-cols":[Y]}],"col-start-end":[{col:["auto",{span:["full",Q,u]},u]}],"col-start":[{"col-start":v()}],"col-end":[{"col-end":v()}],"grid-rows":[{"grid-rows":[Y]}],"row-start-end":[{row:["auto",{span:[Q,u]},u]}],"row-start":[{"row-start":v()}],"row-end":[{"row-end":v()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",u]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",u]}],gap:[{gap:[w]}],"gap-x":[{"gap-x":[w]}],"gap-y":[{"gap-y":[w]}],"justify-content":[{justify:["normal",...$()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...$(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...$(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[_]}],px:[{px:[_]}],py:[{py:[_]}],ps:[{ps:[_]}],pe:[{pe:[_]}],pt:[{pt:[_]}],pr:[{pr:[_]}],pb:[{pb:[_]}],pl:[{pl:[_]}],m:[{m:[g]}],mx:[{mx:[g]}],my:[{my:[g]}],ms:[{ms:[g]}],me:[{me:[g]}],mt:[{mt:[g]}],mr:[{mr:[g]}],mb:[{mb:[g]}],ml:[{ml:[g]}],"space-x":[{"space-x":[oe]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[oe]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",u,t]}],"min-w":[{"min-w":[u,t,"min","max","fit"]}],"max-w":[{"max-w":[u,t,"none","full","min","max","fit","prose",{screen:[D]},D]}],h:[{h:[u,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[u,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[u,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[u,t,"auto","min","max","fit"]}],"font-size":[{text:["base",D,V]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",ge]}],"font-family":[{font:[Y]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",u]}],"line-clamp":[{"line-clamp":["none",Z,ge]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",E,u]}],"list-image":[{"list-image":["none",u]}],"list-style-type":[{list:["none","disc","decimal",u]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[C]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[C]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...G(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",E,V]}],"underline-offset":[{"underline-offset":["auto",E,u]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:p()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",u]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",u]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[C]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...F(),gt]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",ft]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},bt]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[M]}],"gradient-via-pos":[{via:[M]}],"gradient-to-pos":[{to:[M]}],"gradient-from":[{from:[T]}],"gradient-via":[{via:[T]}],"gradient-to":[{to:[T]}],rounded:[{rounded:[n]}],"rounded-s":[{"rounded-s":[n]}],"rounded-e":[{"rounded-e":[n]}],"rounded-t":[{"rounded-t":[n]}],"rounded-r":[{"rounded-r":[n]}],"rounded-b":[{"rounded-b":[n]}],"rounded-l":[{"rounded-l":[n]}],"rounded-ss":[{"rounded-ss":[n]}],"rounded-se":[{"rounded-se":[n]}],"rounded-ee":[{"rounded-ee":[n]}],"rounded-es":[{"rounded-es":[n]}],"rounded-tl":[{"rounded-tl":[n]}],"rounded-tr":[{"rounded-tr":[n]}],"rounded-br":[{"rounded-br":[n]}],"rounded-bl":[{"rounded-bl":[n]}],"border-w":[{border:[l]}],"border-w-x":[{"border-x":[l]}],"border-w-y":[{"border-y":[l]}],"border-w-s":[{"border-s":[l]}],"border-w-e":[{"border-e":[l]}],"border-w-t":[{"border-t":[l]}],"border-w-r":[{"border-r":[l]}],"border-w-b":[{"border-b":[l]}],"border-w-l":[{"border-l":[l]}],"border-opacity":[{"border-opacity":[C]}],"border-style":[{border:[...G(),"hidden"]}],"divide-x":[{"divide-x":[l]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[l]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[C]}],"divide-style":[{divide:G()}],"border-color":[{border:[s]}],"border-color-x":[{"border-x":[s]}],"border-color-y":[{"border-y":[s]}],"border-color-s":[{"border-s":[s]}],"border-color-e":[{"border-e":[s]}],"border-color-t":[{"border-t":[s]}],"border-color-r":[{"border-r":[s]}],"border-color-b":[{"border-b":[s]}],"border-color-l":[{"border-l":[s]}],"divide-color":[{divide:[s]}],"outline-style":[{outline:["",...G()]}],"outline-offset":[{"outline-offset":[E,u]}],"outline-w":[{outline:[E,V]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:z()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[C]}],"ring-offset-w":[{"ring-offset":[E,V]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",D,ht]}],"shadow-color":[{shadow:[Y]}],opacity:[{opacity:[C]}],"mix-blend":[{"mix-blend":[...R(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":R()}],filter:[{filter:["","none"]}],blur:[{blur:[r]}],brightness:[{brightness:[o]}],contrast:[{contrast:[m]}],"drop-shadow":[{"drop-shadow":["","none",D,u]}],grayscale:[{grayscale:[f]}],"hue-rotate":[{"hue-rotate":[h]}],invert:[{invert:[k]}],saturate:[{saturate:[L]}],sepia:[{sepia:[W]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[r]}],"backdrop-brightness":[{"backdrop-brightness":[o]}],"backdrop-contrast":[{"backdrop-contrast":[m]}],"backdrop-grayscale":[{"backdrop-grayscale":[f]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[h]}],"backdrop-invert":[{"backdrop-invert":[k]}],"backdrop-opacity":[{"backdrop-opacity":[C]}],"backdrop-saturate":[{"backdrop-saturate":[L]}],"backdrop-sepia":[{"backdrop-sepia":[W]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[d]}],"border-spacing-x":[{"border-spacing-x":[d]}],"border-spacing-y":[{"border-spacing-y":[d]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",u]}],duration:[{duration:A()}],ease:[{ease:["linear","in","out","in-out",u]}],delay:[{delay:A()}],animate:[{animate:["none","spin","ping","pulse","bounce",u]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[U]}],"scale-x":[{"scale-x":[U]}],"scale-y":[{"scale-y":[U]}],rotate:[{rotate:[Q,u]}],"translate-x":[{"translate-x":[ne]}],"translate-y":[{"translate-y":[ne]}],"skew-x":[{"skew-x":[re]}],"skew-y":[{"skew-y":[re]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",u]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",u]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":p()}],"scroll-mx":[{"scroll-mx":p()}],"scroll-my":[{"scroll-my":p()}],"scroll-ms":[{"scroll-ms":p()}],"scroll-me":[{"scroll-me":p()}],"scroll-mt":[{"scroll-mt":p()}],"scroll-mr":[{"scroll-mr":p()}],"scroll-mb":[{"scroll-mb":p()}],"scroll-ml":[{"scroll-ml":p()}],"scroll-p":[{"scroll-p":p()}],"scroll-px":[{"scroll-px":p()}],"scroll-py":[{"scroll-py":p()}],"scroll-ps":[{"scroll-ps":p()}],"scroll-pe":[{"scroll-pe":p()}],"scroll-pt":[{"scroll-pt":p()}],"scroll-pr":[{"scroll-pr":p()}],"scroll-pb":[{"scroll-pb":p()}],"scroll-pl":[{"scroll-pl":p()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",u]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[E,V,ge]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},kt=ot(wt);function ve(...e){return kt(Pe(e))}function Ct(e){if(e===0)return"0 Bytes";const t=1024,r=["Bytes","KB","MB","GB","TB"],o=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/Math.pow(t,o)).toFixed(2))+" "+r[o]}function _t(e){return Ct(e)+"/s"}function zt(e){if(e<60)return`${Math.round(e)}s`;if(e<3600){const t=Math.floor(e/60),r=Math.round(e%60);return`${t}m ${r}s`}else{const t=Math.floor(e/3600),r=Math.floor(e%3600/60);return`${t}h ${r}m`}}function H(){return Date.now().toString(36)+Math.random().toString(36).substr(2)}async function St(e){try{if(navigator.clipboard&&window.isSecureContext)return await navigator.clipboard.writeText(e),!0;{const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.left="-999999px",t.style.top="-999999px",document.body.appendChild(t),t.focus(),t.select();const r=document.execCommand("copy");return t.remove(),r}}catch(t){return console.error("Failed to copy text: ",t),!1}}const _e=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,ze=Pe,Mt=(e,t)=>r=>{var o;if((t==null?void 0:t.variants)==null)return ze(e,r==null?void 0:r.class,r==null?void 0:r.className);const{variants:s,defaultVariants:n}=t,d=Object.keys(s).map(f=>{const h=r==null?void 0:r[f],k=n==null?void 0:n[f];if(h===null)return null;const w=_e(h)||_e(k);return s[f][w]}),l=r&&Object.entries(r).reduce((f,h)=>{let[k,w]=h;return w===void 0||(f[k]=w),f},{}),m=t==null||(o=t.compoundVariants)===null||o===void 0?void 0:o.reduce((f,h)=>{let{class:k,className:w,...T}=h;return Object.entries(T).every(M=>{let[y,g]=M;return Array.isArray(g)?g.includes({...n,...l}[y]):{...n,...l}[y]===g})?[...f,k,w]:f},[]);return ze(e,d,m,r==null?void 0:r.class,r==null?void 0:r.className)},At=["disabled"],ee=te({__name:"Button",props:{variant:{},size:{},disabled:{type:Boolean}},setup(e){const t=Mt("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),r=e,o=je(),s=Le(()=>ve(t({variant:r.variant,size:r.size}),o.class));return(n,d)=>(S(),N("button",Ge({class:s.value,disabled:n.disabled},n.$attrs),[Me(n.$slots,"default")],16,At))}}),Pt=te({__name:"Card",setup(e){return(t,r)=>(S(),N("div",{class:de(ue(ve)("rounded-lg border bg-card text-card-foreground shadow-sm",t.$attrs.class))},[Me(t.$slots,"default")],2))}}),Nt=te({__name:"Progress",props:{modelValue:{}},setup(e){return(t,r)=>(S(),N("div",{class:de(ue(ve)("relative h-4 w-full overflow-hidden rounded-full bg-secondary",t.$attrs.class))},[x("div",{class:"h-full w-full flex-1 bg-primary transition-all duration-300 ease-out",style:Ee({transform:`translateX(-${100-(t.modelValue||0)}%)`})},null,4)],2))}});var Tt=Object.defineProperty,$t=(e,t,r)=>t in e?Tt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Se=(e,t,r)=>$t(e,typeof t!="symbol"?t+"":t,r);const It={class:"w-full max-w-2xl mx-auto p-6"},Ut={key:0,class:"space-y-4 mb-6"},Ft={class:"flex justify-between items-center mb-2"},Rt={class:"font-medium text-gray-900 truncate flex-1 mr-4"},jt={class:"text-sm text-gray-500 whitespace-nowrap"},Lt={class:"mb-2"},Gt={class:"flex justify-between items-center text-xs text-gray-500"},Et={key:0},Ot={key:1,class:"space-y-4"},Vt={class:"flex items-start justify-between"},Dt={class:"flex-1"},Bt={class:"font-medium mb-2"},Wt={key:0,class:"mb-3"},qt=["href"],Ht={key:1,class:"flex flex-wrap gap-2"},Kt={key:2,class:"text-red-600"},ce=10*1024*1024,Zt=3,Xt=te({__name:"FileUpload",setup(e){const t=B(),r=B(),o=B([]),s=B(!1),n=B(!1),d=B([]),l=B([]),m=c=>{c.preventDefault(),s.value=!0},f=c=>{c.preventDefault(),s.value=!0},h=c=>{var a;c.preventDefault(),(a=t.value)!=null&&a.contains(c.relatedTarget)||(s.value=!1)},k=c=>{var i;c.preventDefault(),s.value=!1;const a=Array.from(((i=c.dataTransfer)==null?void 0:i.files)||[]);o.value=a},w=c=>{const a=c.target,i=Array.from(a.files||[]);o.value=i},T=c=>{const a=[".jpg",".jpeg",".png",".gif",".webp",".bmp",".svg"],i=c.toLowerCase().substring(c.lastIndexOf("."));return a.includes(i)},M=async(c,a)=>{await St(c)&&console.log(a)},y=async(c,a)=>{const i=`${a}`;await M(i,"HTML copied!")},g=async(c,a)=>{const i=`![${a}](${c})`;await M(i,"Markdown copied!")},C=c=>({id:H(),fileName:c,progress:0,status:"Starting upload...",speed:0,eta:0}),_=(c,a,i,p,z)=>{const v=d.value.find(F=>F.id===c);v&&(v.progress=a,i&&(v.status=i),p!==void 0&&(v.speed=p),z!==void 0&&(v.eta=z))},L=c=>{const a=d.value.findIndex(i=>i.id===c);a>-1&&d.value.splice(a,1)},U=c=>{l.value.unshift(c)},W=async c=>{const a=C(c.name);d.value.push(a);const i=Date.now();let p=0,z=i;try{const v=await Ve(c,F=>{const G=Date.now(),R=(G-z)/1e3,$=F-p;if(R>.5&&$>0){const I=$/100*c.size/R,P=100-F,A=P>0?P/100*c.size/I:0;_(a.id,F,"Uploading...",I,A),p=F,z=G}else _(a.id,F,"Uploading...")});if(v.code===1)_(a.id,100,"Upload complete!"),setTimeout(()=>{L(a.id),U({id:H(),fileName:c.name,success:!0,data:v})},500);else throw new Error(v.message||"Upload failed")}catch(v){L(a.id),U({id:H(),fileName:c.name,success:!1,error:v instanceof Error?v.message:"Upload failed"})}},re=async c=>{const a=Math.ceil(c.size/ce),i=H(),p=new Array(a),z=C(c.name);d.value.push(z);const v=new Array(a).fill(0),F=Date.now(),G=()=>{const $=v.reduce((pe,fe)=>pe+fe,0)/a,P=(Date.now()-F)/1e3,A=$/100*c.size/P,se=100-$,ae=se>0?se/100*c.size/A:0;_(z.id,$,"Uploading...",A,ae)};try{const R=new ne(Zt),$=[];for(let P=0;P{try{const ae=P*ce,pe=Math.min(ae+ce,c.size),fe=c.slice(ae,pe),le=await De(fe,P,i,c.name,Fe=>{v[P]=Fe,G()});if(le.code===1&&le.chunkId)p[P]=le.chunkId,v[P]=100,G();else throw new Error(le.message||"Chunk upload failed")}finally{se()}});$.push(A)}await Promise.all($),_(z.id,100,"Merging chunks...");const I=await Be({uploadId:i,fileName:c.name,chunkIds:p,fileSize:c.size});if(I.code===1)_(z.id,100,"Upload complete!"),setTimeout(()=>{L(z.id),U({id:H(),fileName:c.name,success:!0,data:I})},500);else throw new Error(I.message||"Merge failed")}catch(R){L(z.id),U({id:H(),fileName:c.name,success:!1,error:R instanceof Error?R.message:"Upload failed"})}},oe=async()=>{if(!(o.value.length===0||n.value)){n.value=!0;try{for(const c of o.value)c.size>ce?await re(c):await W(c)}finally{n.value=!1,o.value=[],r.value&&(r.value.value="")}}};class ne{constructor(a){Se(this,"permits"),Se(this,"waiting",[]),this.permits=a}async acquire(){return new Promise(a=>{this.permits>0?(this.permits--,a(()=>this.release())):this.waiting.push(()=>{this.permits--,a(()=>this.release())})})}release(){if(this.permits++,this.waiting.length>0){const a=this.waiting.shift();a&&a()}}}return(c,a)=>(S(),N("div",It,[a[7]||(a[7]=x("div",{class:"text-center mb-8"},[x("h1",{class:"text-3xl font-bold text-gray-900 mb-2"}," 📁 File Upload to Telegram "),x("p",{class:"text-gray-600"},"Secure, Fast, Permanent Storage")],-1)),K(Pt,{class:"p-6 mb-6"},{default:q(()=>[x("div",{ref_key:"dropZone",ref:t,class:de(["border-2 border-dashed rounded-lg p-8 text-center transition-all duration-300",s.value?"border-green-400 bg-green-50 scale-105":"border-blue-400 bg-blue-50 hover:border-blue-500 hover:bg-blue-100"]),onDragenter:ie(m,["prevent"]),onDragover:ie(f,["prevent"]),onDragleave:ie(h,["prevent"]),onDrop:ie(k,["prevent"])},[a[1]||(a[1]=x("div",{class:"text-4xl mb-4"},"📤",-1)),a[2]||(a[2]=x("p",{class:"text-gray-700 mb-4"},"Drag files here or click to select",-1)),x("input",{ref_key:"fileInput",ref:r,type:"file",multiple:"",class:"hidden",onChange:w},null,544),K(ee,{onClick:a[0]||(a[0]=()=>{var i;return(i=r.value)==null?void 0:i.click()}),variant:o.value.length>0?"secondary":"default",class:"mb-4"},{default:q(()=>[J(j(o.value.length>0?`${o.value.length} file(s) selected`:"Choose Files"),1)]),_:1},8,["variant"]),a[3]||(a[3]=x("div",{class:"flex justify-center gap-4 text-sm text-gray-500"},[x("span",null,"📊 Multiple Files"),x("span",null,"🔒 Secure"),x("span",null,"⚡ Fast")],-1))],34),K(ee,{onClick:oe,disabled:o.value.length===0||n.value,class:"w-full mt-4",size:"lg"},{default:q(()=>[J(j(n.value?"Uploading...":o.value.length===0?"🈳 No file":"⬆️ UPLOAD"),1)]),_:1},8,["disabled"])]),_:1}),d.value.length>0?(S(),N("div",Ut,[(S(!0),N(ye,null,xe(d.value,i=>(S(),N("div",{key:i.id,class:"bg-white rounded-lg border p-4 shadow-sm"},[x("div",Ft,[x("span",Rt,j(i.fileName),1),x("span",jt,j(Math.round(i.progress))+"% ",1)]),x("div",Lt,[K(Nt,{"model-value":i.progress,class:"h-2"},null,8,["model-value"])]),x("div",Gt,[x("span",null,j(i.status),1),i.speed&&i.eta?(S(),N("span",Et,j(ue(_t)(i.speed))+" • ETA: "+j(ue(zt)(i.eta)),1)):O("",!0)])]))),128))])):O("",!0),l.value.length>0?(S(),N("div",Ot,[(S(!0),N(ye,null,xe(l.value,i=>{var p,z;return S(),N("div",{key:i.id,class:de(["rounded-lg border-l-4 p-4 shadow-sm",i.success?"border-l-green-500 bg-green-50":"border-l-red-500 bg-red-50"])},[x("div",Vt,[x("div",Dt,[x("div",Bt,j(i.success?"✅":"❌")+" "+j(i.fileName),1),i.success&&((p=i.data)!=null&&p.shortFileUrl)?(S(),N("div",Wt,[x("a",{href:i.data.shortFileUrl,target:"_blank",class:"text-blue-600 hover:text-blue-800 underline break-all"},j(i.data.shortFileUrl),9,qt)])):O("",!0),i.success&&((z=i.data)!=null&&z.shortFileUrl)?(S(),N("div",Ht,[K(ee,{size:"sm",variant:"outline",onClick:v=>M(i.data.shortFileUrl,"Link copied!")},{default:q(()=>a[4]||(a[4]=[J(" Copy Link ",-1)])),_:2,__:[4]},1032,["onClick"]),T(i.fileName)?(S(),we(ee,{key:0,size:"sm",variant:"outline",onClick:v=>y(i.data.shortFileUrl,i.fileName)},{default:q(()=>a[5]||(a[5]=[J(" HTML ",-1)])),_:2,__:[5]},1032,["onClick"])):O("",!0),T(i.fileName)?(S(),we(ee,{key:1,size:"sm",variant:"outline",onClick:v=>g(i.data.shortFileUrl,i.fileName)},{default:q(()=>a[6]||(a[6]=[J(" Markdown ",-1)])),_:2,__:[6]},1032,["onClick"])):O("",!0)])):O("",!0),i.success?O("",!0):(S(),N("div",Kt,j(i.error),1))])])],2)}),128))])):O("",!0)]))}}),Jt={class:"min-h-screen bg-gray-50"},Qt=te({__name:"App",setup(e){return(t,r)=>(S(),N("div",Jt,[K(Xt)]))}});Oe(Qt).mount("#app"); diff --git a/assets/dist/assets/index-BUrt7Nle.css b/assets/dist/assets/index-BUrt7Nle.css new file mode 100644 index 0000000..40c216d --- /dev/null +++ b/assets/dist/assets/index-BUrt7Nle.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 100%;--foreground: 222.2 84% 4.9%;--card: 0 0% 100%;--card-foreground: 222.2 84% 4.9%;--popover: 0 0% 100%;--popover-foreground: 222.2 84% 4.9%;--primary: 221.2 83.2% 53.3%;--primary-foreground: 210 40% 98%;--secondary: 210 40% 96%;--secondary-foreground: 222.2 84% 4.9%;--muted: 210 40% 96%;--muted-foreground: 215.4 16.3% 46.9%;--accent: 210 40% 96%;--accent-foreground: 222.2 84% 4.9%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 210 40% 98%;--border: 214.3 31.8% 91.4%;--input: 214.3 31.8% 91.4%;--ring: 221.2 83.2% 53.3%;--radius: .5rem}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.fixed{position:fixed}.relative{position:relative}.mx-auto{margin-left:auto;margin-right:auto}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mr-4{margin-right:1rem}.mt-4{margin-top:1rem}.flex{display:flex}.inline-flex{display:inline-flex}.hidden{display:none}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-2{height:.5rem}.h-4{height:1rem}.h-9{height:2.25rem}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.flex-1{flex:1 1 0%}.scale-105{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-4{gap:1rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.break-all{word-break:break-all}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.border{border-width:1px}.border-2{border-width:2px}.border-l-4{border-left-width:4px}.border-dashed{border-style:dashed}.border-blue-400{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.border-green-400{--tw-border-opacity: 1;border-color:rgb(74 222 128 / var(--tw-border-opacity, 1))}.border-input{border-color:hsl(var(--input))}.border-l-green-500{--tw-border-opacity: 1;border-left-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-l-red-500{--tw-border-opacity: 1;border-left-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.bg-background{background-color:hsl(var(--background))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-primary{background-color:hsl(var(--primary))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.text-center{text-align:center}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.duration-300{animation-duration:.3s}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.hover\:border-blue-500:hover{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-blue-100:hover{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5} diff --git a/assets/dist/assets/ui-l0sNRNKZ.js b/assets/dist/assets/ui-l0sNRNKZ.js new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/assets/dist/assets/ui-l0sNRNKZ.js @@ -0,0 +1 @@ + diff --git a/assets/dist/assets/vendor-pQYyzRmo.js b/assets/dist/assets/vendor-pQYyzRmo.js new file mode 100644 index 0000000..6972148 --- /dev/null +++ b/assets/dist/assets/vendor-pQYyzRmo.js @@ -0,0 +1,22 @@ +/** +* @vue/shared v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function cs(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const J={},ct=[],Fe=()=>{},no=()=>!1,an=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),fs=e=>e.startsWith("onUpdate:"),re=Object.assign,us=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},so=Object.prototype.hasOwnProperty,q=(e,t)=>so.call(e,t),I=Array.isArray,ft=e=>dn(e)==="[object Map]",Rr=e=>dn(e)==="[object Set]",j=e=>typeof e=="function",X=e=>typeof e=="string",He=e=>typeof e=="symbol",G=e=>e!==null&&typeof e=="object",Tr=e=>(G(e)||j(e))&&j(e.then)&&j(e.catch),Or=Object.prototype.toString,dn=e=>Or.call(e),ro=e=>dn(e).slice(8,-1),Ar=e=>dn(e)==="[object Object]",as=e=>X(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Tt=cs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),hn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},io=/-(\w)/g,We=hn(e=>e.replace(io,(t,n)=>n?n.toUpperCase():"")),oo=/\B([A-Z])/g,it=hn(e=>e.replace(oo,"-$1").toLowerCase()),Cr=hn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Cn=hn(e=>e?`on${Cr(e)}`:""),ke=(e,t)=>!Object.is(e,t),vn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},lo=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let js;const pn=()=>js||(js=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ds(e){if(I(e)){const t={};for(let n=0;n{if(n){const s=n.split(fo);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function hs(e){let t="";if(X(e))t=e;else if(I(e))for(let n=0;n!!(e&&e.__v_isRef===!0),mo=e=>X(e)?e:e==null?"":I(e)||G(e)&&(e.toString===Or||!j(e.toString))?Pr(e)?mo(e.value):JSON.stringify(e,Fr,2):String(e),Fr=(e,t)=>Pr(t)?Fr(e,t.value):ft(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[Pn(s,i)+" =>"]=r,n),{})}:Rr(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Pn(n))}:He(t)?Pn(t):G(t)&&!I(t)&&!Ar(t)?String(t):t,Pn=(e,t="")=>{var n;return He(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ae;class go{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=ae,!t&&ae&&(this.index=(ae.scopes||(ae.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(ae=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(At){let t=At;for(At=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Ot;){let t=Ot;for(Ot=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Mr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Lr(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),gs(s),yo(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Vn(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ur(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ur(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ft)||(e.globalVersion=Ft,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Vn(e))))return;e.flags|=2;const t=e.dep,n=W,s=xe;W=e,xe=!0;try{Mr(e);const r=e.fn(e._value);(t.version===0||ke(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{W=n,xe=s,Lr(e),e.flags&=-3}}function gs(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)gs(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function yo(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let xe=!0;const jr=[];function Ue(){jr.push(xe),xe=!1}function je(){const e=jr.pop();xe=e===void 0?!0:e}function Bs(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=W;W=void 0;try{t()}finally{W=n}}}let Ft=0;class _o{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 bs{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(!W||!xe||W===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==W)n=this.activeLink=new _o(W,this),W.deps?(n.prevDep=W.depsTail,W.depsTail.nextDep=n,W.depsTail=n):W.deps=W.depsTail=n,Br(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=W.depsTail,n.nextDep=void 0,W.depsTail.nextDep=n,W.depsTail=n,W.deps===n&&(W.deps=s)}return n}trigger(t){this.version++,Ft++,this.notify(t)}notify(t){ps();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{ms()}}}function Br(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Br(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const kn=new WeakMap,nt=Symbol(""),Wn=Symbol(""),Nt=Symbol("");function te(e,t,n){if(xe&&W){let s=kn.get(e);s||kn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new bs),r.map=s,r.key=n),r.track()}}function Le(e,t,n,s,r,i){const o=kn.get(e);if(!o){Ft++;return}const l=c=>{c&&c.trigger()};if(ps(),t==="clear")o.forEach(l);else{const c=I(e),a=c&&as(n);if(c&&n==="length"){const f=Number(s);o.forEach((h,y)=>{(y==="length"||y===Nt||!He(y)&&y>=f)&&l(h)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),a&&l(o.get(Nt)),t){case"add":c?a&&l(o.get("length")):(l(o.get(nt)),ft(e)&&l(o.get(Wn)));break;case"delete":c||(l(o.get(nt)),ft(e)&&l(o.get(Wn)));break;case"set":ft(e)&&l(o.get(nt));break}}ms()}function ot(e){const t=$(e);return t===e?t:(te(t,"iterate",Nt),we(e)?t:t.map(ee))}function mn(e){return te(e=$(e),"iterate",Nt),e}const wo={__proto__:null,[Symbol.iterator](){return Nn(this,Symbol.iterator,ee)},concat(...e){return ot(this).concat(...e.map(t=>I(t)?ot(t):t))},entries(){return Nn(this,"entries",e=>(e[1]=ee(e[1]),e))},every(e,t){return Ie(this,"every",e,t,void 0,arguments)},filter(e,t){return Ie(this,"filter",e,t,n=>n.map(ee),arguments)},find(e,t){return Ie(this,"find",e,t,ee,arguments)},findIndex(e,t){return Ie(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ie(this,"findLast",e,t,ee,arguments)},findLastIndex(e,t){return Ie(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ie(this,"forEach",e,t,void 0,arguments)},includes(...e){return Dn(this,"includes",e)},indexOf(...e){return Dn(this,"indexOf",e)},join(e){return ot(this).join(e)},lastIndexOf(...e){return Dn(this,"lastIndexOf",e)},map(e,t){return Ie(this,"map",e,t,void 0,arguments)},pop(){return xt(this,"pop")},push(...e){return xt(this,"push",e)},reduce(e,...t){return Hs(this,"reduce",e,t)},reduceRight(e,...t){return Hs(this,"reduceRight",e,t)},shift(){return xt(this,"shift")},some(e,t){return Ie(this,"some",e,t,void 0,arguments)},splice(...e){return xt(this,"splice",e)},toReversed(){return ot(this).toReversed()},toSorted(e){return ot(this).toSorted(e)},toSpliced(...e){return ot(this).toSpliced(...e)},unshift(...e){return xt(this,"unshift",e)},values(){return Nn(this,"values",ee)}};function Nn(e,t,n){const s=mn(e),r=s[t]();return s!==e&&!we(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const xo=Array.prototype;function Ie(e,t,n,s,r,i){const o=mn(e),l=o!==e&&!we(e),c=o[t];if(c!==xo[t]){const h=c.apply(e,i);return l?ee(h):h}let a=n;o!==e&&(l?a=function(h,y){return n.call(this,ee(h),y,e)}:n.length>2&&(a=function(h,y){return n.call(this,h,y,e)}));const f=c.call(o,a,s);return l&&r?r(f):f}function Hs(e,t,n,s){const r=mn(e);let i=n;return r!==e&&(we(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,ee(l),c,e)}),r[t](i,...s)}function Dn(e,t,n){const s=$(e);te(s,"iterate",Nt);const r=s[t](...n);return(r===-1||r===!1)&&xs(n[0])?(n[0]=$(n[0]),s[t](...n)):r}function xt(e,t,n=[]){Ue(),ps();const s=$(e)[t].apply(e,n);return ms(),je(),s}const So=cs("__proto__,__v_isRef,__isVue"),Hr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(He));function Eo(e){He(e)||(e=String(e));const t=$(this);return te(t,"has",e),t.hasOwnProperty(e)}class $r{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Do:kr:i?Vr:Kr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=I(t);if(!r){let c;if(o&&(c=wo[n]))return c;if(n==="hasOwnProperty")return Eo}const l=Reflect.get(t,n,se(t)?t:s);return(He(n)?Hr.has(n):So(n))||(r||te(t,"get",n),i)?l:se(l)?o&&as(n)?l:l.value:G(l)?r?Wr(l):_s(l):l}}class qr extends $r{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=Je(i);if(!we(s)&&!Je(s)&&(i=$(i),s=$(s)),!I(t)&&se(i)&&!se(s))return c?!1:(i.value=s,!0)}const o=I(t)&&as(n)?Number(n)e,Jt=e=>Reflect.getPrototypeOf(e);function Co(e,t,n){return function(...s){const r=this.__v_raw,i=$(r),o=ft(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,a=r[e](...s),f=n?Jn:t?nn:ee;return!t&&te(i,"iterate",c?Wn:nt),{next(){const{value:h,done:y}=a.next();return y?{value:h,done:y}:{value:l?[f(h[0]),f(h[1])]:f(h),done:y}},[Symbol.iterator](){return this}}}}function zt(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function vo(e,t){const n={get(r){const i=this.__v_raw,o=$(i),l=$(r);e||(ke(r,l)&&te(o,"get",r),te(o,"get",l));const{has:c}=Jt(o),a=t?Jn:e?nn:ee;if(c.call(o,r))return a(i.get(r));if(c.call(o,l))return a(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&te($(r),"iterate",nt),Reflect.get(r,"size",r)},has(r){const i=this.__v_raw,o=$(i),l=$(r);return e||(ke(r,l)&&te(o,"has",r),te(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=$(l),a=t?Jn:e?nn:ee;return!e&&te(c,"iterate",nt),l.forEach((f,h)=>r.call(i,a(f),a(h),o))}};return re(n,e?{add:zt("add"),set:zt("set"),delete:zt("delete"),clear:zt("clear")}:{add(r){!t&&!we(r)&&!Je(r)&&(r=$(r));const i=$(this);return Jt(i).has.call(i,r)||(i.add(r),Le(i,"add",r,r)),this},set(r,i){!t&&!we(i)&&!Je(i)&&(i=$(i));const o=$(this),{has:l,get:c}=Jt(o);let a=l.call(o,r);a||(r=$(r),a=l.call(o,r));const f=c.call(o,r);return o.set(r,i),a?ke(i,f)&&Le(o,"set",r,i):Le(o,"add",r,i),this},delete(r){const i=$(this),{has:o,get:l}=Jt(i);let c=o.call(i,r);c||(r=$(r),c=o.call(i,r)),l&&l.call(i,r);const a=i.delete(r);return c&&Le(i,"delete",r,void 0),a},clear(){const r=$(this),i=r.size!==0,o=r.clear();return i&&Le(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=Co(r,e,t)}),n}function ys(e,t){const n=vo(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(q(n,r)&&r in s?n:s,r,i)}const Po={get:ys(!1,!1)},Fo={get:ys(!1,!0)},No={get:ys(!0,!1)};const Kr=new WeakMap,Vr=new WeakMap,kr=new WeakMap,Do=new WeakMap;function Io(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Mo(e){return e.__v_skip||!Object.isExtensible(e)?0:Io(ro(e))}function _s(e){return Je(e)?e:ws(e,!1,To,Po,Kr)}function Lo(e){return ws(e,!1,Ao,Fo,Vr)}function Wr(e){return ws(e,!0,Oo,No,kr)}function ws(e,t,n,s,r){if(!G(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=Mo(e);if(i===0)return e;const o=r.get(e);if(o)return o;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function ut(e){return Je(e)?ut(e.__v_raw):!!(e&&e.__v_isReactive)}function Je(e){return!!(e&&e.__v_isReadonly)}function we(e){return!!(e&&e.__v_isShallow)}function xs(e){return e?!!e.__v_raw:!1}function $(e){const t=e&&e.__v_raw;return t?$(t):e}function Uo(e){return!q(e,"__v_skip")&&Object.isExtensible(e)&&Kn(e,"__v_skip",!0),e}const ee=e=>G(e)?_s(e):e,nn=e=>G(e)?Wr(e):e;function se(e){return e?e.__v_isRef===!0:!1}function ou(e){return jo(e,!1)}function jo(e,t){return se(e)?e:new Bo(e,t)}class Bo{constructor(t,n){this.dep=new bs,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:$(t),this._value=n?t:ee(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||we(t)||Je(t);t=s?t:$(t),ke(t,n)&&(this._rawValue=t,this._value=s?t:ee(t),this.dep.trigger())}}function Ho(e){return se(e)?e.value:e}const $o={get:(e,t,n)=>t==="__v_raw"?e:Ho(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return se(r)&&!se(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Jr(e){return ut(e)?e:new Proxy(e,$o)}class qo{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new bs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ft-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&W!==this)return Ir(this,!0),!0}get value(){const t=this.dep.track();return Ur(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Ko(e,t,n=!1){let s,r;return j(e)?s=e:(s=e.get,r=e.set),new qo(s,r,n)}const Gt={},sn=new WeakMap;let et;function Vo(e,t=!1,n=et){if(n){let s=sn.get(n);s||sn.set(n,s=[]),s.push(e)}}function ko(e,t,n=J){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,a=v=>r?v:we(v)||r===!1||r===0?Ve(v,1):Ve(v);let f,h,y,R,x=!1,T=!1;if(se(e)?(h=()=>e.value,x=we(e)):ut(e)?(h=()=>a(e),x=!0):I(e)?(T=!0,x=e.some(v=>ut(v)||we(v)),h=()=>e.map(v=>{if(se(v))return v.value;if(ut(v))return a(v);if(j(v))return c?c(v,2):v()})):j(e)?t?h=c?()=>c(e,2):e:h=()=>{if(y){Ue();try{y()}finally{je()}}const v=et;et=f;try{return c?c(e,3,[R]):e(R)}finally{et=v}}:h=Fe,t&&r){const v=h,B=r===!0?1/0:r;h=()=>Ve(v(),B)}const C=bo(),N=()=>{f.stop(),C&&C.active&&us(C.effects,f)};if(i&&t){const v=t;t=(...B)=>{v(...B),N()}}let M=T?new Array(e.length).fill(Gt):Gt;const U=v=>{if(!(!(f.flags&1)||!f.dirty&&!v))if(t){const B=f.run();if(r||x||(T?B.some((Q,Z)=>ke(Q,M[Z])):ke(B,M))){y&&y();const Q=et;et=f;try{const Z=[B,M===Gt?void 0:T&&M[0]===Gt?[]:M,R];M=B,c?c(t,3,Z):t(...Z)}finally{et=Q}}}else f.run()};return l&&l(U),f=new Nr(h),f.scheduler=o?()=>o(U,!1):U,R=v=>Vo(v,!1,f),y=f.onStop=()=>{const v=sn.get(f);if(v){if(c)c(v,4);else for(const B of v)B();sn.delete(f)}},t?s?U(!0):M=f.run():o?o(U.bind(null,!0),!0):f.run(),N.pause=f.pause.bind(f),N.resume=f.resume.bind(f),N.stop=N,N}function Ve(e,t=1/0,n){if(t<=0||!G(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,se(e))Ve(e.value,t,n);else if(I(e))for(let s=0;s{Ve(s,t,n)});else if(Ar(e)){for(const s in e)Ve(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Ve(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Ut(e,t,n,s){try{return s?e(...s):e()}catch(r){gn(r,t,n)}}function De(e,t,n,s){if(j(e)){const r=Ut(e,t,n,s);return r&&Tr(r)&&r.catch(i=>{gn(i,t,n)}),r}if(I(e)){const r=[];for(let i=0;i>>1,r=le[s],i=Dt(r);i=Dt(n)?le.push(e):le.splice(zo(t),0,e),e.flags|=1,Gr()}}function Gr(){rn||(rn=zr.then(Yr))}function Go(e){I(e)?at.push(...e):qe&&e.id===-1?qe.splice(lt+1,0,e):e.flags&1||(at.push(e),e.flags|=1),Gr()}function $s(e,t,n=ve+1){for(;nDt(n)-Dt(s));if(at.length=0,qe){qe.push(...t);return}for(qe=t,lt=0;lte.id==null?e.flags&2?-1:1/0:e.id;function Yr(e){try{for(ve=0;ve{s._d&&Xs(-1);const i=on(t);let o;try{o=e(...r)}finally{on(i),s._d&&Xs(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Ze(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;oe.__isTeleport;function Es(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Es(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}/*! #__NO_SIDE_EFFECTS__ */function lu(e,t){return j(e)?re({name:e.name},t,{setup:e}):e}function Qr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Ct(e,t,n,s,r=!1){if(I(e)){e.forEach((x,T)=>Ct(x,t&&(I(t)?t[T]:t),n,s,r));return}if(dt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Ct(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?Cs(s.component):s.el,o=r?null:i,{i:l,r:c}=e,a=t&&t.r,f=l.refs===J?l.refs={}:l.refs,h=l.setupState,y=$(h),R=h===J?()=>!1:x=>q(y,x);if(a!=null&&a!==c&&(X(a)?(f[a]=null,R(a)&&(h[a]=null)):se(a)&&(a.value=null)),j(c))Ut(c,l,12,[o,f]);else{const x=X(c),T=se(c);if(x||T){const C=()=>{if(e.f){const N=x?R(c)?h[c]:f[c]:c.value;r?I(N)&&us(N,i):I(N)?N.includes(i)||N.push(i):x?(f[c]=[i],R(c)&&(h[c]=f[c])):(c.value=[i],e.k&&(f[e.k]=c.value))}else x?(f[c]=o,R(c)&&(h[c]=o)):T&&(c.value=o,e.k&&(f[e.k]=o))};o?(C.id=-1,be(C,n)):C()}}}pn().requestIdleCallback;pn().cancelIdleCallback;const dt=e=>!!e.type.__asyncLoader,ei=e=>e.type.__isKeepAlive;function Qo(e,t){ti(e,"a",t)}function el(e,t){ti(e,"da",t)}function ti(e,t,n=ce){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(bn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)ei(r.parent.vnode)&&tl(s,t,n,r),r=r.parent}}function tl(e,t,n,s){const r=bn(t,e,s,!0);ni(()=>{us(s[t],r)},n)}function bn(e,t,n=ce,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{Ue();const l=jt(n),c=De(t,n,e,o);return l(),je(),c});return s?r.unshift(i):r.push(i),i}}const $e=e=>(t,n=ce)=>{(!Mt||e==="sp")&&bn(e,(...s)=>t(...s),n)},nl=$e("bm"),sl=$e("m"),rl=$e("bu"),il=$e("u"),ol=$e("bum"),ni=$e("um"),ll=$e("sp"),cl=$e("rtg"),fl=$e("rtc");function ul(e,t=ce){bn("ec",e,t)}const al=Symbol.for("v-ndc");function cu(e,t,n,s){let r;const i=n,o=I(e);if(o||X(e)){const l=o&&ut(e);let c=!1,a=!1;l&&(c=!we(e),a=Je(e),e=mn(e)),r=new Array(e.length);for(let f=0,h=e.length;ft(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,a=l.length;cOs(t)?!(t.type===Be||t.type===_e&&!si(t.children)):!0)?e:null}const zn=e=>e?Ti(e)?Cs(e):zn(e.parent):null,vt=re(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=>zn(e.parent),$root:e=>zn(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ii(e),$forceUpdate:e=>e.f||(e.f=()=>{Ss(e.update)}),$nextTick:e=>e.n||(e.n=Jo.bind(e.proxy)),$watch:e=>Il.bind(e)}),In=(e,t)=>e!==J&&!e.__isScriptSetup&&q(e,t),dl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const R=o[t];if(R!==void 0)switch(R){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(In(s,t))return o[t]=1,s[t];if(r!==J&&q(r,t))return o[t]=2,r[t];if((a=e.propsOptions[0])&&q(a,t))return o[t]=3,i[t];if(n!==J&&q(n,t))return o[t]=4,n[t];Gn&&(o[t]=0)}}const f=vt[t];let h,y;if(f)return t==="$attrs"&&te(e.attrs,"get",""),f(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==J&&q(n,t))return o[t]=4,n[t];if(y=c.config.globalProperties,q(y,t))return y[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return In(r,t)?(r[t]=n,!0):s!==J&&q(s,t)?(s[t]=n,!0):q(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==J&&q(e,o)||In(t,o)||(l=i[0])&&q(l,o)||q(s,o)||q(vt,o)||q(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:q(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function uu(){return hl().attrs}function hl(e){const t=Ri();return t.setupContext||(t.setupContext=Ai(t))}function qs(e){return I(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Gn=!0;function pl(e){const t=ii(e),n=e.proxy,s=e.ctx;Gn=!1,t.beforeCreate&&Ks(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:a,created:f,beforeMount:h,mounted:y,beforeUpdate:R,updated:x,activated:T,deactivated:C,beforeDestroy:N,beforeUnmount:M,destroyed:U,unmounted:v,render:B,renderTracked:Q,renderTriggered:Z,errorCaptured:me,serverPrefetch:ze,expose:Ge,inheritAttrs:bt,components:Kt,directives:Vt,filters:On}=t;if(a&&ml(a,s,null),o)for(const z in o){const V=o[z];j(V)&&(s[z]=V.bind(n))}if(r){const z=r.call(n,n);G(z)&&(e.data=_s(z))}if(Gn=!0,i)for(const z in i){const V=i[z],Xe=j(V)?V.bind(n,n):j(V.get)?V.get.bind(n,n):Fe,kt=!j(V)&&j(V.set)?V.set.bind(n):Fe,Ye=ec({get:Xe,set:kt});Object.defineProperty(s,z,{enumerable:!0,configurable:!0,get:()=>Ye.value,set:Ee=>Ye.value=Ee})}if(l)for(const z in l)ri(l[z],s,n,z);if(c){const z=j(c)?c.call(n):c;Reflect.ownKeys(z).forEach(V=>{xl(V,z[V])})}f&&Ks(f,e,"c");function ie(z,V){I(V)?V.forEach(Xe=>z(Xe.bind(n))):V&&z(V.bind(n))}if(ie(nl,h),ie(sl,y),ie(rl,R),ie(il,x),ie(Qo,T),ie(el,C),ie(ul,me),ie(fl,Q),ie(cl,Z),ie(ol,M),ie(ni,v),ie(ll,ze),I(Ge))if(Ge.length){const z=e.exposed||(e.exposed={});Ge.forEach(V=>{Object.defineProperty(z,V,{get:()=>n[V],set:Xe=>n[V]=Xe,enumerable:!0})})}else e.exposed||(e.exposed={});B&&e.render===Fe&&(e.render=B),bt!=null&&(e.inheritAttrs=bt),Kt&&(e.components=Kt),Vt&&(e.directives=Vt),ze&&Qr(e)}function ml(e,t,n=Fe){I(e)&&(e=Xn(e));for(const s in e){const r=e[s];let i;G(r)?"default"in r?i=Xt(r.from||s,r.default,!0):i=Xt(r.from||s):i=Xt(r),se(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Ks(e,t,n){De(I(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function ri(e,t,n,s){let r=s.includes(".")?yi(n,s):()=>n[s];if(X(e)){const i=t[e];j(i)&&Ln(r,i)}else if(j(e))Ln(r,e.bind(n));else if(G(e))if(I(e))e.forEach(i=>ri(i,t,n,s));else{const i=j(e.handler)?e.handler.bind(n):t[e.handler];j(i)&&Ln(r,i,e)}}function ii(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(a=>ln(c,a,o,!0)),ln(c,t,o)),G(t)&&i.set(t,c),c}function ln(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&ln(e,i,n,!0),r&&r.forEach(o=>ln(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=gl[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const gl={data:Vs,props:ks,emits:ks,methods:Rt,computed:Rt,beforeCreate:oe,created:oe,beforeMount:oe,mounted:oe,beforeUpdate:oe,updated:oe,beforeDestroy:oe,beforeUnmount:oe,destroyed:oe,unmounted:oe,activated:oe,deactivated:oe,errorCaptured:oe,serverPrefetch:oe,components:Rt,directives:Rt,watch:yl,provide:Vs,inject:bl};function Vs(e,t){return t?e?function(){return re(j(e)?e.call(this,this):e,j(t)?t.call(this,this):t)}:t:e}function bl(e,t){return Rt(Xn(e),Xn(t))}function Xn(e){if(I(e)){const t={};for(let n=0;n1)return n&&j(t)?t.call(s&&s.proxy):t}}const li={},ci=()=>Object.create(li),fi=e=>Object.getPrototypeOf(e)===li;function Sl(e,t,n,s=!1){const r={},i=ci();e.propsDefaults=Object.create(null),ui(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Lo(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function El(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=$(r),[c]=e.propsOptions;let a=!1;if((s||o>0)&&!(o&16)){if(o&8){const f=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[y,R]=ai(h,t,!0);re(o,y),R&&l.push(...R)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!i&&!c)return G(e)&&s.set(e,ct),ct;if(I(i))for(let f=0;fe==="_"||e==="__"||e==="_ctx"||e==="$stable",Ts=e=>I(e)?e.map(Pe):[Pe(e)],Tl=(e,t,n)=>{if(t._n)return t;const s=Xo((...r)=>Ts(t(...r)),n);return s._c=!1,s},di=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Rs(r))continue;const i=e[r];if(j(i))t[r]=Tl(r,i,s);else if(i!=null){const o=Ts(i);t[r]=()=>o}}},hi=(e,t)=>{const n=Ts(t);e.slots.default=()=>n},pi=(e,t,n)=>{for(const s in t)(n||!Rs(s))&&(e[s]=t[s])},Ol=(e,t,n)=>{const s=e.slots=ci();if(e.vnode.shapeFlag&32){const r=t.__;r&&Kn(s,"__",r,!0);const i=t._;i?(pi(s,t,n),n&&Kn(s,"_",i,!0)):di(t,s)}else t&&hi(e,t)},Al=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=J;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:pi(r,t,n):(i=!t.$stable,di(t,r)),o=t}else t&&(hi(e,t),o={default:1});if(i)for(const l in r)!Rs(l)&&o[l]==null&&delete r[l]},be=$l;function Cl(e){return vl(e)}function vl(e,t){const n=pn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:a,setElementText:f,parentNode:h,nextSibling:y,setScopeId:R=Fe,insertStaticContent:x}=e,T=(u,d,m,_=null,g=null,b=null,O=void 0,E=null,S=!!d.dynamicChildren)=>{if(u===d)return;u&&!St(u,d)&&(_=Wt(u),Ee(u,g,b,!0),u=null),d.patchFlag===-2&&(S=!1,d.dynamicChildren=null);const{type:w,ref:F,shapeFlag:A}=d;switch(w){case _n:C(u,d,m,_);break;case Be:N(u,d,m,_);break;case Un:u==null&&M(d,m,_,O);break;case _e:Kt(u,d,m,_,g,b,O,E,S);break;default:A&1?B(u,d,m,_,g,b,O,E,S):A&6?Vt(u,d,m,_,g,b,O,E,S):(A&64||A&128)&&w.process(u,d,m,_,g,b,O,E,S,_t)}F!=null&&g?Ct(F,u&&u.ref,b,d||u,!d):F==null&&u&&u.ref!=null&&Ct(u.ref,null,b,u,!0)},C=(u,d,m,_)=>{if(u==null)s(d.el=l(d.children),m,_);else{const g=d.el=u.el;d.children!==u.children&&a(g,d.children)}},N=(u,d,m,_)=>{u==null?s(d.el=c(d.children||""),m,_):d.el=u.el},M=(u,d,m,_)=>{[u.el,u.anchor]=x(u.children,d,m,_,u.el,u.anchor)},U=({el:u,anchor:d},m,_)=>{let g;for(;u&&u!==d;)g=y(u),s(u,m,_),u=g;s(d,m,_)},v=({el:u,anchor:d})=>{let m;for(;u&&u!==d;)m=y(u),r(u),u=m;r(d)},B=(u,d,m,_,g,b,O,E,S)=>{d.type==="svg"?O="svg":d.type==="math"&&(O="mathml"),u==null?Q(d,m,_,g,b,O,E,S):ze(u,d,g,b,O,E,S)},Q=(u,d,m,_,g,b,O,E)=>{let S,w;const{props:F,shapeFlag:A,transition:P,dirs:D}=u;if(S=u.el=o(u.type,b,F&&F.is,F),A&8?f(S,u.children):A&16&&me(u.children,S,null,_,g,Mn(u,b),O,E),D&&Ze(u,null,_,"created"),Z(S,u,u.scopeId,O,_),F){for(const k in F)k!=="value"&&!Tt(k)&&i(S,k,null,F[k],b,_);"value"in F&&i(S,"value",null,F.value,b),(w=F.onVnodeBeforeMount)&&Ae(w,_,u)}D&&Ze(u,null,_,"beforeMount");const H=Pl(g,P);H&&P.beforeEnter(S),s(S,d,m),((w=F&&F.onVnodeMounted)||H||D)&&be(()=>{w&&Ae(w,_,u),H&&P.enter(S),D&&Ze(u,null,_,"mounted")},g)},Z=(u,d,m,_,g)=>{if(m&&R(u,m),_)for(let b=0;b<_.length;b++)R(u,_[b]);if(g){let b=g.subTree;if(d===b||wi(b.type)&&(b.ssContent===d||b.ssFallback===d)){const O=g.vnode;Z(u,O,O.scopeId,O.slotScopeIds,g.parent)}}},me=(u,d,m,_,g,b,O,E,S=0)=>{for(let w=S;w{const E=d.el=u.el;let{patchFlag:S,dynamicChildren:w,dirs:F}=d;S|=u.patchFlag&16;const A=u.props||J,P=d.props||J;let D;if(m&&Qe(m,!1),(D=P.onVnodeBeforeUpdate)&&Ae(D,m,d,u),F&&Ze(d,u,m,"beforeUpdate"),m&&Qe(m,!0),(A.innerHTML&&P.innerHTML==null||A.textContent&&P.textContent==null)&&f(E,""),w?Ge(u.dynamicChildren,w,E,m,_,Mn(d,g),b):O||V(u,d,E,null,m,_,Mn(d,g),b,!1),S>0){if(S&16)bt(E,A,P,m,g);else if(S&2&&A.class!==P.class&&i(E,"class",null,P.class,g),S&4&&i(E,"style",A.style,P.style,g),S&8){const H=d.dynamicProps;for(let k=0;k{D&&Ae(D,m,d,u),F&&Ze(d,u,m,"updated")},_)},Ge=(u,d,m,_,g,b,O)=>{for(let E=0;E{if(d!==m){if(d!==J)for(const b in d)!Tt(b)&&!(b in m)&&i(u,b,d[b],null,g,_);for(const b in m){if(Tt(b))continue;const O=m[b],E=d[b];O!==E&&b!=="value"&&i(u,b,E,O,g,_)}"value"in m&&i(u,"value",d.value,m.value,g)}},Kt=(u,d,m,_,g,b,O,E,S)=>{const w=d.el=u?u.el:l(""),F=d.anchor=u?u.anchor:l("");let{patchFlag:A,dynamicChildren:P,slotScopeIds:D}=d;D&&(E=E?E.concat(D):D),u==null?(s(w,m,_),s(F,m,_),me(d.children||[],m,F,g,b,O,E,S)):A>0&&A&64&&P&&u.dynamicChildren?(Ge(u.dynamicChildren,P,m,g,b,O,E),(d.key!=null||g&&d===g.subTree)&&mi(u,d,!0)):V(u,d,m,F,g,b,O,E,S)},Vt=(u,d,m,_,g,b,O,E,S)=>{d.slotScopeIds=E,u==null?d.shapeFlag&512?g.ctx.activate(d,m,_,O,S):On(d,m,_,g,b,O,S):Ns(u,d,S)},On=(u,d,m,_,g,b,O)=>{const E=u.component=Gl(u,_,g);if(ei(u)&&(E.ctx.renderer=_t),Xl(E,!1,O),E.asyncDep){if(g&&g.registerDep(E,ie,O),!u.el){const S=E.subTree=Ne(Be);N(null,S,d,m),u.placeholder=S.el}}else ie(E,u,d,m,g,b,O)},Ns=(u,d,m)=>{const _=d.component=u.component;if(Bl(u,d,m))if(_.asyncDep&&!_.asyncResolved){z(_,d,m);return}else _.next=d,_.update();else d.el=u.el,_.vnode=d},ie=(u,d,m,_,g,b,O)=>{const E=()=>{if(u.isMounted){let{next:A,bu:P,u:D,parent:H,vnode:k}=u;{const Te=gi(u);if(Te){A&&(A.el=k.el,z(u,A,O)),Te.asyncDep.then(()=>{u.isUnmounted||E()});return}}let K=A,fe;Qe(u,!1),A?(A.el=k.el,z(u,A,O)):A=k,P&&vn(P),(fe=A.props&&A.props.onVnodeBeforeUpdate)&&Ae(fe,H,A,k),Qe(u,!0);const ue=zs(u),Re=u.subTree;u.subTree=ue,T(Re,ue,h(Re.el),Wt(Re),u,g,b),A.el=ue.el,K===null&&Hl(u,ue.el),D&&be(D,g),(fe=A.props&&A.props.onVnodeUpdated)&&be(()=>Ae(fe,H,A,k),g)}else{let A;const{el:P,props:D}=d,{bm:H,m:k,parent:K,root:fe,type:ue}=u,Re=dt(d);Qe(u,!1),H&&vn(H),!Re&&(A=D&&D.onVnodeBeforeMount)&&Ae(A,K,d),Qe(u,!0);{fe.ce&&fe.ce._def.shadowRoot!==!1&&fe.ce._injectChildStyle(ue);const Te=u.subTree=zs(u);T(null,Te,m,_,u,g,b),d.el=Te.el}if(k&&be(k,g),!Re&&(A=D&&D.onVnodeMounted)){const Te=d;be(()=>Ae(A,K,Te),g)}(d.shapeFlag&256||K&&dt(K.vnode)&&K.vnode.shapeFlag&256)&&u.a&&be(u.a,g),u.isMounted=!0,d=m=_=null}};u.scope.on();const S=u.effect=new Nr(E);u.scope.off();const w=u.update=S.run.bind(S),F=u.job=S.runIfDirty.bind(S);F.i=u,F.id=u.uid,S.scheduler=()=>Ss(F),Qe(u,!0),w()},z=(u,d,m)=>{d.component=u;const _=u.vnode.props;u.vnode=d,u.next=null,El(u,d.props,_,m),Al(u,d.children,m),Ue(),$s(u),je()},V=(u,d,m,_,g,b,O,E,S=!1)=>{const w=u&&u.children,F=u?u.shapeFlag:0,A=d.children,{patchFlag:P,shapeFlag:D}=d;if(P>0){if(P&128){kt(w,A,m,_,g,b,O,E,S);return}else if(P&256){Xe(w,A,m,_,g,b,O,E,S);return}}D&8?(F&16&&yt(w,g,b),A!==w&&f(m,A)):F&16?D&16?kt(w,A,m,_,g,b,O,E,S):yt(w,g,b,!0):(F&8&&f(m,""),D&16&&me(A,m,_,g,b,O,E,S))},Xe=(u,d,m,_,g,b,O,E,S)=>{u=u||ct,d=d||ct;const w=u.length,F=d.length,A=Math.min(w,F);let P;for(P=0;PF?yt(u,g,b,!0,!1,A):me(d,m,_,g,b,O,E,S,A)},kt=(u,d,m,_,g,b,O,E,S)=>{let w=0;const F=d.length;let A=u.length-1,P=F-1;for(;w<=A&&w<=P;){const D=u[w],H=d[w]=S?Ke(d[w]):Pe(d[w]);if(St(D,H))T(D,H,m,null,g,b,O,E,S);else break;w++}for(;w<=A&&w<=P;){const D=u[A],H=d[P]=S?Ke(d[P]):Pe(d[P]);if(St(D,H))T(D,H,m,null,g,b,O,E,S);else break;A--,P--}if(w>A){if(w<=P){const D=P+1,H=DP)for(;w<=A;)Ee(u[w],g,b,!0),w++;else{const D=w,H=w,k=new Map;for(w=H;w<=P;w++){const ge=d[w]=S?Ke(d[w]):Pe(d[w]);ge.key!=null&&k.set(ge.key,w)}let K,fe=0;const ue=P-H+1;let Re=!1,Te=0;const wt=new Array(ue);for(w=0;w=ue){Ee(ge,g,b,!0);continue}let Oe;if(ge.key!=null)Oe=k.get(ge.key);else for(K=H;K<=P;K++)if(wt[K-H]===0&&St(ge,d[K])){Oe=K;break}Oe===void 0?Ee(ge,g,b,!0):(wt[Oe-H]=w+1,Oe>=Te?Te=Oe:Re=!0,T(ge,d[Oe],m,null,g,b,O,E,S),fe++)}const Ms=Re?Fl(wt):ct;for(K=Ms.length-1,w=ue-1;w>=0;w--){const ge=H+w,Oe=d[ge],Ls=d[ge+1],Us=ge+1{const{el:b,type:O,transition:E,children:S,shapeFlag:w}=u;if(w&6){Ye(u.component.subTree,d,m,_);return}if(w&128){u.suspense.move(d,m,_);return}if(w&64){O.move(u,d,m,_t);return}if(O===_e){s(b,d,m);for(let A=0;AE.enter(b),g);else{const{leave:A,delayLeave:P,afterLeave:D}=E,H=()=>{u.ctx.isUnmounted?r(b):s(b,d,m)},k=()=>{A(b,()=>{H(),D&&D()})};P?P(b,H,k):k()}else s(b,d,m)},Ee=(u,d,m,_=!1,g=!1)=>{const{type:b,props:O,ref:E,children:S,dynamicChildren:w,shapeFlag:F,patchFlag:A,dirs:P,cacheIndex:D}=u;if(A===-2&&(g=!1),E!=null&&(Ue(),Ct(E,null,m,u,!0),je()),D!=null&&(d.renderCache[D]=void 0),F&256){d.ctx.deactivate(u);return}const H=F&1&&P,k=!dt(u);let K;if(k&&(K=O&&O.onVnodeBeforeUnmount)&&Ae(K,d,u),F&6)to(u.component,m,_);else{if(F&128){u.suspense.unmount(m,_);return}H&&Ze(u,null,d,"beforeUnmount"),F&64?u.type.remove(u,d,m,_t,_):w&&!w.hasOnce&&(b!==_e||A>0&&A&64)?yt(w,d,m,!1,!0):(b===_e&&A&384||!g&&F&16)&&yt(S,d,m),_&&Ds(u)}(k&&(K=O&&O.onVnodeUnmounted)||H)&&be(()=>{K&&Ae(K,d,u),H&&Ze(u,null,d,"unmounted")},m)},Ds=u=>{const{type:d,el:m,anchor:_,transition:g}=u;if(d===_e){eo(m,_);return}if(d===Un){v(u);return}const b=()=>{r(m),g&&!g.persisted&&g.afterLeave&&g.afterLeave()};if(u.shapeFlag&1&&g&&!g.persisted){const{leave:O,delayLeave:E}=g,S=()=>O(m,b);E?E(u.el,b,S):S()}else b()},eo=(u,d)=>{let m;for(;u!==d;)m=y(u),r(u),u=m;r(d)},to=(u,d,m)=>{const{bum:_,scope:g,job:b,subTree:O,um:E,m:S,a:w,parent:F,slots:{__:A}}=u;Js(S),Js(w),_&&vn(_),F&&I(A)&&A.forEach(P=>{F.renderCache[P]=void 0}),g.stop(),b&&(b.flags|=8,Ee(O,u,d,m)),E&&be(E,d),be(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},yt=(u,d,m,_=!1,g=!1,b=0)=>{for(let O=b;O{if(u.shapeFlag&6)return Wt(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=y(u.anchor||u.el),m=d&&d[Yo];return m?y(m):d};let An=!1;const Is=(u,d,m)=>{u==null?d._vnode&&Ee(d._vnode,null,null,!0):T(d._vnode||null,u,d,null,null,null,m),d._vnode=u,An||(An=!0,$s(),Xr(),An=!1)},_t={p:T,um:Ee,m:Ye,r:Ds,mt:On,mc:me,pc:V,pbc:Ge,n:Wt,o:e};return{render:Is,hydrate:void 0,createApp:wl(Is)}}function Mn({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 Qe({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Pl(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function mi(e,t,n=!1){const s=e.children,r=t.children;if(I(s)&&I(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function gi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:gi(t)}function Js(e){if(e)for(let t=0;tXt(Nl);function Ln(e,t,n){return bi(e,t,n)}function bi(e,t,n=J){const{immediate:s,deep:r,flush:i,once:o}=n,l=re({},n),c=t&&s||!t&&i!=="post";let a;if(Mt){if(i==="sync"){const R=Dl();a=R.__watcherHandles||(R.__watcherHandles=[])}else if(!c){const R=()=>{};return R.stop=Fe,R.resume=Fe,R.pause=Fe,R}}const f=ce;l.call=(R,x,T)=>De(R,f,x,T);let h=!1;i==="post"?l.scheduler=R=>{be(R,f&&f.suspense)}:i!=="sync"&&(h=!0,l.scheduler=(R,x)=>{x?R():Ss(R)}),l.augmentJob=R=>{t&&(R.flags|=4),h&&(R.flags|=2,f&&(R.id=f.uid,R.i=f))};const y=ko(e,t,l);return Mt&&(a?a.push(y):c&&y()),y}function Il(e,t,n){const s=this.proxy,r=X(e)?e.includes(".")?yi(s,e):()=>s[e]:e.bind(s,s);let i;j(t)?i=t:(i=t.handler,n=t);const o=jt(this),l=bi(r,i.bind(s),n);return o(),l}function yi(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${We(t)}Modifiers`]||e[`${it(t)}Modifiers`];function Ll(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||J;let r=n;const i=t.startsWith("update:"),o=i&&Ml(s,t.slice(7));o&&(o.trim&&(r=n.map(f=>X(f)?f.trim():f)),o.number&&(r=n.map(lo)));let l,c=s[l=Cn(t)]||s[l=Cn(We(t))];!c&&i&&(c=s[l=Cn(it(t))]),c&&De(c,e,6,r);const a=s[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,De(a,e,6,r)}}function _i(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!j(e)){const c=a=>{const f=_i(a,t,!0);f&&(l=!0,re(o,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(G(e)&&s.set(e,null),null):(I(i)?i.forEach(c=>o[c]=null):re(o,i),G(e)&&s.set(e,o),o)}function yn(e,t){return!e||!an(t)?!1:(t=t.slice(2).replace(/Once$/,""),q(e,t[0].toLowerCase()+t.slice(1))||q(e,it(t))||q(e,t))}function zs(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:a,renderCache:f,props:h,data:y,setupState:R,ctx:x,inheritAttrs:T}=e,C=on(e);let N,M;try{if(n.shapeFlag&4){const v=r||s,B=v;N=Pe(a.call(B,v,f,h,R,y,x)),M=l}else{const v=t;N=Pe(v.length>1?v(h,{attrs:l,slots:o,emit:c}):v(h,null)),M=t.props?l:Ul(l)}}catch(v){Pt.length=0,gn(v,e,1),N=Ne(Be)}let U=N;if(M&&T!==!1){const v=Object.keys(M),{shapeFlag:B}=U;v.length&&B&7&&(i&&v.some(fs)&&(M=jl(M,i)),U=pt(U,M,!1,!0))}return n.dirs&&(U=pt(U,null,!1,!0),U.dirs=U.dirs?U.dirs.concat(n.dirs):n.dirs),n.transition&&Es(U,n.transition),N=U,on(C),N}const Ul=e=>{let t;for(const n in e)(n==="class"||n==="style"||an(n))&&((t||(t={}))[n]=e[n]);return t},jl=(e,t)=>{const n={};for(const s in e)(!fs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Bl(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,a=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Gs(s,o,a):!!o;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function $l(e,t){t&&t.pendingBranch?I(e)?t.effects.push(...e):t.effects.push(e):Go(e)}const _e=Symbol.for("v-fgt"),_n=Symbol.for("v-txt"),Be=Symbol.for("v-cmt"),Un=Symbol.for("v-stc"),Pt=[];let ye=null;function Zn(e=!1){Pt.push(ye=e?null:[])}function ql(){Pt.pop(),ye=Pt[Pt.length-1]||null}let It=1;function Xs(e,t=!1){It+=e,e<0&&ye&&t&&(ye.hasOnce=!0)}function xi(e){return e.dynamicChildren=It>0?ye||ct:null,ql(),It>0&&ye&&ye.push(e),e}function au(e,t,n,s,r,i){return xi(Ei(e,t,n,s,r,i,!0))}function Qn(e,t,n,s,r){return xi(Ne(e,t,n,s,r,!0))}function Os(e){return e?e.__v_isVNode===!0:!1}function St(e,t){return e.type===t.type&&e.key===t.key}const Si=({key:e})=>e??null,Yt=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?X(e)||se(e)||j(e)?{i:de,r:e,k:t,f:!!n}:e:null);function Ei(e,t=null,n=null,s=0,r=null,i=e===_e?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Si(t),ref:t&&Yt(t),scopeId:Zr,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:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:de};return l?(As(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=X(n)?8:16),It>0&&!o&&ye&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&ye.push(c),c}const Ne=Kl;function Kl(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===al)&&(e=Be),Os(e)){const l=pt(e,t,!0);return n&&As(l,n),It>0&&!i&&ye&&(l.shapeFlag&6?ye[ye.indexOf(e)]=l:ye.push(l)),l.patchFlag=-2,l}if(Ql(e)&&(e=e.__vccOpts),t){t=Vl(t);let{class:l,style:c}=t;l&&!X(l)&&(t.class=hs(l)),G(c)&&(xs(c)&&!I(c)&&(c=re({},c)),t.style=ds(c))}const o=X(e)?1:wi(e)?128:Zo(e)?64:G(e)?4:j(e)?2:0;return Ei(e,t,n,s,r,o,i,!0)}function Vl(e){return e?xs(e)||fi(e)?re({},e):e:null}function pt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,a=t?Wl(r||{},t):r,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&Si(a),ref:t&&t.ref?n&&i?I(i)?i.concat(Yt(t)):[i,Yt(t)]:Yt(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==_e?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&pt(e.ssContent),ssFallback:e.ssFallback&&pt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Es(f,c.clone(f)),f}function kl(e=" ",t=0){return Ne(_n,null,e,t)}function du(e="",t=!1){return t?(Zn(),Qn(Be,null,e)):Ne(Be,null,e)}function Pe(e){return e==null||typeof e=="boolean"?Ne(Be):I(e)?Ne(_e,null,e.slice()):Os(e)?Ke(e):Ne(_n,null,String(e))}function Ke(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:pt(e)}function As(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(I(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),As(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!fi(t)?t._ctx=de:r===3&&de&&(de.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else j(t)?(t={default:t,_ctx:de},n=32):(t=String(t),s&64?(n=16,t=[kl(t)]):n=8);e.children=t,e.shapeFlag|=n}function Wl(...e){const t={};for(let n=0;nce||de;let cn,es;{const e=pn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};cn=t("__VUE_INSTANCE_SETTERS__",n=>ce=n),es=t("__VUE_SSR_SETTERS__",n=>Mt=n)}const jt=e=>{const t=ce;return cn(e),e.scope.on(),()=>{e.scope.off(),cn(t)}},Ys=()=>{ce&&ce.scope.off(),cn(null)};function Ti(e){return e.vnode.shapeFlag&4}let Mt=!1;function Xl(e,t=!1,n=!1){t&&es(t);const{props:s,children:r}=e.vnode,i=Ti(e);Sl(e,s,i,t),Ol(e,r,n||t);const o=i?Yl(e,t):void 0;return t&&es(!1),o}function Yl(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,dl);const{setup:s}=n;if(s){Ue();const r=e.setupContext=s.length>1?Ai(e):null,i=jt(e),o=Ut(s,e,0,[e.props,r]),l=Tr(o);if(je(),i(),(l||e.sp)&&!dt(e)&&Qr(e),l){if(o.then(Ys,Ys),t)return o.then(c=>{Zs(e,c)}).catch(c=>{gn(c,e,0)});e.asyncDep=o}else Zs(e,o)}else Oi(e)}function Zs(e,t,n){j(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:G(t)&&(e.setupState=Jr(t)),Oi(e)}function Oi(e,t,n){const s=e.type;e.render||(e.render=s.render||Fe);{const r=jt(e);Ue();try{pl(e)}finally{je(),r()}}}const Zl={get(e,t){return te(e,"get",""),e[t]}};function Ai(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Zl),slots:e.slots,emit:e.emit,expose:t}}function Cs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Jr(Uo(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in vt)return vt[n](e)},has(t,n){return n in t||n in vt}})):e.proxy}function Ql(e){return j(e)&&"__vccOpts"in e}const ec=(e,t)=>Ko(e,t,Mt),tc="3.5.18";/** +* @vue/runtime-dom v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ts;const Qs=typeof window<"u"&&window.trustedTypes;if(Qs)try{ts=Qs.createPolicy("vue",{createHTML:e=>e})}catch{}const Ci=ts?e=>ts.createHTML(e):e=>e,nc="http://www.w3.org/2000/svg",sc="http://www.w3.org/1998/Math/MathML",Me=typeof document<"u"?document:null,er=Me&&Me.createElement("template"),rc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Me.createElementNS(nc,e):t==="mathml"?Me.createElementNS(sc,e):n?Me.createElement(e,{is:n}):Me.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Me.createTextNode(e),createComment:e=>Me.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Me.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{er.innerHTML=Ci(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=er.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ic=Symbol("_vtc");function oc(e,t,n){const s=e[ic];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const tr=Symbol("_vod"),lc=Symbol("_vsh"),cc=Symbol(""),fc=/(^|;)\s*display\s*:/;function uc(e,t,n){const s=e.style,r=X(n);let i=!1;if(n&&!r){if(t)if(X(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Zt(s,l,"")}else for(const o in t)n[o]==null&&Zt(s,o,"");for(const o in n)o==="display"&&(i=!0),Zt(s,o,n[o])}else if(r){if(t!==n){const o=s[cc];o&&(n+=";"+o),s.cssText=n,i=fc.test(n)}}else t&&e.removeAttribute("style");tr in e&&(e[tr]=i?s.display:"",e[lc]&&(s.display="none"))}const nr=/\s*!important$/;function Zt(e,t,n){if(I(n))n.forEach(s=>Zt(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ac(e,t);nr.test(n)?e.setProperty(it(s),n.replace(nr,""),"important"):e[s]=n}}const sr=["Webkit","Moz","ms"],jn={};function ac(e,t){const n=jn[t];if(n)return n;let s=We(t);if(s!=="filter"&&s in e)return jn[t]=s;s=Cr(s);for(let r=0;rBn||(gc.then(()=>Bn=0),Bn=Date.now());function yc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;De(_c(s,n.value),t,5,[s])};return n.value=e,n.attached=bc(),n}function _c(e,t){if(I(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const fr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,wc=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?oc(e,s,o):t==="style"?uc(e,n,s):an(t)?fs(t)||pc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):xc(e,t,s,o))?(or(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ir(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!X(s))?or(e,We(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),ir(e,t,s,o))};function xc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&fr(t)&&j(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return fr(t)&&X(n)?!1:t in e}const Sc=["ctrl","shift","alt","meta"],Ec={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)=>Sc.some(n=>e[`${n}Key`]&&!t.includes(n))},hu=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const t=Tc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Ac(s);if(!r)return;const i=t._component;!j(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Oc(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function Oc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Ac(e){return X(e)?document.querySelector(e):e}function vi(e,t){return function(){return e.apply(t,arguments)}}const{toString:Cc}=Object.prototype,{getPrototypeOf:vs}=Object,{iterator:wn,toStringTag:Pi}=Symbol,xn=(e=>t=>{const n=Cc.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Se=e=>(e=e.toLowerCase(),t=>xn(t)===e),Sn=e=>t=>typeof t===e,{isArray:mt}=Array,Lt=Sn("undefined");function Bt(e){return e!==null&&!Lt(e)&&e.constructor!==null&&!Lt(e.constructor)&&he(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Fi=Se("ArrayBuffer");function vc(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Fi(e.buffer),t}const Pc=Sn("string"),he=Sn("function"),Ni=Sn("number"),Ht=e=>e!==null&&typeof e=="object",Fc=e=>e===!0||e===!1,Qt=e=>{if(xn(e)!=="object")return!1;const t=vs(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Pi in e)&&!(wn in e)},Nc=e=>{if(!Ht(e)||Bt(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Dc=Se("Date"),Ic=Se("File"),Mc=Se("Blob"),Lc=Se("FileList"),Uc=e=>Ht(e)&&he(e.pipe),jc=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||he(e.append)&&((t=xn(e))==="formdata"||t==="object"&&he(e.toString)&&e.toString()==="[object FormData]"))},Bc=Se("URLSearchParams"),[Hc,$c,qc,Kc]=["ReadableStream","Request","Response","Headers"].map(Se),Vc=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function $t(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let s,r;if(typeof e!="object"&&(e=[e]),mt(e))for(s=0,r=e.length;s0;)if(r=n[s],t===r.toLowerCase())return r;return null}const tt=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Ii=e=>!Lt(e)&&e!==tt;function ns(){const{caseless:e}=Ii(this)&&this||{},t={},n=(s,r)=>{const i=e&&Di(t,r)||r;Qt(t[i])&&Qt(s)?t[i]=ns(t[i],s):Qt(s)?t[i]=ns({},s):mt(s)?t[i]=s.slice():t[i]=s};for(let s=0,r=arguments.length;s($t(t,(r,i)=>{n&&he(r)?e[i]=vi(r,n):e[i]=r},{allOwnKeys:s}),e),Wc=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Jc=(e,t,n,s)=>{e.prototype=Object.create(t.prototype,s),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},zc=(e,t,n,s)=>{let r,i,o;const l={};if(t=t||{},e==null)return t;do{for(r=Object.getOwnPropertyNames(e),i=r.length;i-- >0;)o=r[i],(!s||s(o,e,t))&&!l[o]&&(t[o]=e[o],l[o]=!0);e=n!==!1&&vs(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},Gc=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const s=e.indexOf(t,n);return s!==-1&&s===n},Xc=e=>{if(!e)return null;if(mt(e))return e;let t=e.length;if(!Ni(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},Yc=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&vs(Uint8Array)),Zc=(e,t)=>{const s=(e&&e[wn]).call(e);let r;for(;(r=s.next())&&!r.done;){const i=r.value;t.call(e,i[0],i[1])}},Qc=(e,t)=>{let n;const s=[];for(;(n=e.exec(t))!==null;)s.push(n);return s},ef=Se("HTMLFormElement"),tf=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,s,r){return s.toUpperCase()+r}),ar=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),nf=Se("RegExp"),Mi=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),s={};$t(n,(r,i)=>{let o;(o=t(r,i,e))!==!1&&(s[i]=o||r)}),Object.defineProperties(e,s)},sf=e=>{Mi(e,(t,n)=>{if(he(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const s=e[n];if(he(s)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},rf=(e,t)=>{const n={},s=r=>{r.forEach(i=>{n[i]=!0})};return mt(e)?s(e):s(String(e).split(t)),n},of=()=>{},lf=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function cf(e){return!!(e&&he(e.append)&&e[Pi]==="FormData"&&e[wn])}const ff=e=>{const t=new Array(10),n=(s,r)=>{if(Ht(s)){if(t.indexOf(s)>=0)return;if(Bt(s))return s;if(!("toJSON"in s)){t[r]=s;const i=mt(s)?[]:{};return $t(s,(o,l)=>{const c=n(o,r+1);!Lt(c)&&(i[l]=c)}),t[r]=void 0,i}}return s};return n(e,0)},uf=Se("AsyncFunction"),af=e=>e&&(Ht(e)||he(e))&&he(e.then)&&he(e.catch),Li=((e,t)=>e?setImmediate:t?((n,s)=>(tt.addEventListener("message",({source:r,data:i})=>{r===tt&&i===n&&s.length&&s.shift()()},!1),r=>{s.push(r),tt.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",he(tt.postMessage)),df=typeof queueMicrotask<"u"?queueMicrotask.bind(tt):typeof process<"u"&&process.nextTick||Li,hf=e=>e!=null&&he(e[wn]),p={isArray:mt,isArrayBuffer:Fi,isBuffer:Bt,isFormData:jc,isArrayBufferView:vc,isString:Pc,isNumber:Ni,isBoolean:Fc,isObject:Ht,isPlainObject:Qt,isEmptyObject:Nc,isReadableStream:Hc,isRequest:$c,isResponse:qc,isHeaders:Kc,isUndefined:Lt,isDate:Dc,isFile:Ic,isBlob:Mc,isRegExp:nf,isFunction:he,isStream:Uc,isURLSearchParams:Bc,isTypedArray:Yc,isFileList:Lc,forEach:$t,merge:ns,extend:kc,trim:Vc,stripBOM:Wc,inherits:Jc,toFlatObject:zc,kindOf:xn,kindOfTest:Se,endsWith:Gc,toArray:Xc,forEachEntry:Zc,matchAll:Qc,isHTMLForm:ef,hasOwnProperty:ar,hasOwnProp:ar,reduceDescriptors:Mi,freezeMethods:sf,toObjectSet:rf,toCamelCase:tf,noop:of,toFiniteNumber:lf,findKey:Di,global:tt,isContextDefined:Ii,isSpecCompliantForm:cf,toJSONObject:ff,isAsyncFn:uf,isThenable:af,setImmediate:Li,asap:df,isIterable:hf};function L(e,t,n,s,r){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),s&&(this.request=s),r&&(this.response=r,this.status=r.status?r.status:null)}p.inherits(L,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:p.toJSONObject(this.config),code:this.code,status:this.status}}});const Ui=L.prototype,ji={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{ji[e]={value:e}});Object.defineProperties(L,ji);Object.defineProperty(Ui,"isAxiosError",{value:!0});L.from=(e,t,n,s,r,i)=>{const o=Object.create(Ui);return p.toFlatObject(e,o,function(c){return c!==Error.prototype},l=>l!=="isAxiosError"),L.call(o,e.message,t,n,s,r),o.cause=e,o.name=e.name,i&&Object.assign(o,i),o};const pf=null;function ss(e){return p.isPlainObject(e)||p.isArray(e)}function Bi(e){return p.endsWith(e,"[]")?e.slice(0,-2):e}function dr(e,t,n){return e?e.concat(t).map(function(r,i){return r=Bi(r),!n&&i?"["+r+"]":r}).join(n?".":""):t}function mf(e){return p.isArray(e)&&!e.some(ss)}const gf=p.toFlatObject(p,{},null,function(t){return/^is[A-Z]/.test(t)});function En(e,t,n){if(!p.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=p.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(T,C){return!p.isUndefined(C[T])});const s=n.metaTokens,r=n.visitor||f,i=n.dots,o=n.indexes,c=(n.Blob||typeof Blob<"u"&&Blob)&&p.isSpecCompliantForm(t);if(!p.isFunction(r))throw new TypeError("visitor must be a function");function a(x){if(x===null)return"";if(p.isDate(x))return x.toISOString();if(p.isBoolean(x))return x.toString();if(!c&&p.isBlob(x))throw new L("Blob is not supported. Use a Buffer instead.");return p.isArrayBuffer(x)||p.isTypedArray(x)?c&&typeof Blob=="function"?new Blob([x]):Buffer.from(x):x}function f(x,T,C){let N=x;if(x&&!C&&typeof x=="object"){if(p.endsWith(T,"{}"))T=s?T:T.slice(0,-2),x=JSON.stringify(x);else if(p.isArray(x)&&mf(x)||(p.isFileList(x)||p.endsWith(T,"[]"))&&(N=p.toArray(x)))return T=Bi(T),N.forEach(function(U,v){!(p.isUndefined(U)||U===null)&&t.append(o===!0?dr([T],v,i):o===null?T:T+"[]",a(U))}),!1}return ss(x)?!0:(t.append(dr(C,T,i),a(x)),!1)}const h=[],y=Object.assign(gf,{defaultVisitor:f,convertValue:a,isVisitable:ss});function R(x,T){if(!p.isUndefined(x)){if(h.indexOf(x)!==-1)throw Error("Circular reference detected in "+T.join("."));h.push(x),p.forEach(x,function(N,M){(!(p.isUndefined(N)||N===null)&&r.call(t,N,p.isString(M)?M.trim():M,T,y))===!0&&R(N,T?T.concat(M):[M])}),h.pop()}}if(!p.isObject(e))throw new TypeError("data must be an object");return R(e),t}function hr(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(s){return t[s]})}function Ps(e,t){this._pairs=[],e&&En(e,this,t)}const Hi=Ps.prototype;Hi.append=function(t,n){this._pairs.push([t,n])};Hi.toString=function(t){const n=t?function(s){return t.call(this,s,hr)}:hr;return this._pairs.map(function(r){return n(r[0])+"="+n(r[1])},"").join("&")};function bf(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function $i(e,t,n){if(!t)return e;const s=n&&n.encode||bf;p.isFunction(n)&&(n={serialize:n});const r=n&&n.serialize;let i;if(r?i=r(t,n):i=p.isURLSearchParams(t)?t.toString():new Ps(t,n).toString(s),i){const o=e.indexOf("#");o!==-1&&(e=e.slice(0,o)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}class pr{constructor(){this.handlers=[]}use(t,n,s){return this.handlers.push({fulfilled:t,rejected:n,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){p.forEach(this.handlers,function(s){s!==null&&t(s)})}}const qi={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},yf=typeof URLSearchParams<"u"?URLSearchParams:Ps,_f=typeof FormData<"u"?FormData:null,wf=typeof Blob<"u"?Blob:null,xf={isBrowser:!0,classes:{URLSearchParams:yf,FormData:_f,Blob:wf},protocols:["http","https","file","blob","url","data"]},Fs=typeof window<"u"&&typeof document<"u",rs=typeof navigator=="object"&&navigator||void 0,Sf=Fs&&(!rs||["ReactNative","NativeScript","NS"].indexOf(rs.product)<0),Ef=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Rf=Fs&&window.location.href||"http://localhost",Tf=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Fs,hasStandardBrowserEnv:Sf,hasStandardBrowserWebWorkerEnv:Ef,navigator:rs,origin:Rf},Symbol.toStringTag,{value:"Module"})),ne={...Tf,...xf};function Of(e,t){return En(e,new ne.classes.URLSearchParams,{visitor:function(n,s,r,i){return ne.isNode&&p.isBuffer(n)?(this.append(s,n.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)},...t})}function Af(e){return p.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Cf(e){const t={},n=Object.keys(e);let s;const r=n.length;let i;for(s=0;s=n.length;return o=!o&&p.isArray(r)?r.length:o,c?(p.hasOwnProp(r,o)?r[o]=[r[o],s]:r[o]=s,!l):((!r[o]||!p.isObject(r[o]))&&(r[o]=[]),t(n,s,r[o],i)&&p.isArray(r[o])&&(r[o]=Cf(r[o])),!l)}if(p.isFormData(e)&&p.isFunction(e.entries)){const n={};return p.forEachEntry(e,(s,r)=>{t(Af(s),r,n,0)}),n}return null}function vf(e,t,n){if(p.isString(e))try{return(t||JSON.parse)(e),p.trim(e)}catch(s){if(s.name!=="SyntaxError")throw s}return(n||JSON.stringify)(e)}const qt={transitional:qi,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const s=n.getContentType()||"",r=s.indexOf("application/json")>-1,i=p.isObject(t);if(i&&p.isHTMLForm(t)&&(t=new FormData(t)),p.isFormData(t))return r?JSON.stringify(Ki(t)):t;if(p.isArrayBuffer(t)||p.isBuffer(t)||p.isStream(t)||p.isFile(t)||p.isBlob(t)||p.isReadableStream(t))return t;if(p.isArrayBufferView(t))return t.buffer;if(p.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let l;if(i){if(s.indexOf("application/x-www-form-urlencoded")>-1)return Of(t,this.formSerializer).toString();if((l=p.isFileList(t))||s.indexOf("multipart/form-data")>-1){const c=this.env&&this.env.FormData;return En(l?{"files[]":t}:t,c&&new c,this.formSerializer)}}return i||r?(n.setContentType("application/json",!1),vf(t)):t}],transformResponse:[function(t){const n=this.transitional||qt.transitional,s=n&&n.forcedJSONParsing,r=this.responseType==="json";if(p.isResponse(t)||p.isReadableStream(t))return t;if(t&&p.isString(t)&&(s&&!this.responseType||r)){const o=!(n&&n.silentJSONParsing)&&r;try{return JSON.parse(t)}catch(l){if(o)throw l.name==="SyntaxError"?L.from(l,L.ERR_BAD_RESPONSE,this,null,this.response):l}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ne.classes.FormData,Blob:ne.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};p.forEach(["delete","get","head","post","put","patch"],e=>{qt.headers[e]={}});const Pf=p.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Ff=e=>{const t={};let n,s,r;return e&&e.split(` +`).forEach(function(o){r=o.indexOf(":"),n=o.substring(0,r).trim().toLowerCase(),s=o.substring(r+1).trim(),!(!n||t[n]&&Pf[n])&&(n==="set-cookie"?t[n]?t[n].push(s):t[n]=[s]:t[n]=t[n]?t[n]+", "+s:s)}),t},mr=Symbol("internals");function Et(e){return e&&String(e).trim().toLowerCase()}function en(e){return e===!1||e==null?e:p.isArray(e)?e.map(en):String(e)}function Nf(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=n.exec(e);)t[s[1]]=s[2];return t}const Df=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Hn(e,t,n,s,r){if(p.isFunction(s))return s.call(this,t,n);if(r&&(t=n),!!p.isString(t)){if(p.isString(s))return t.indexOf(s)!==-1;if(p.isRegExp(s))return s.test(t)}}function If(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,s)=>n.toUpperCase()+s)}function Mf(e,t){const n=p.toCamelCase(" "+t);["get","set","has"].forEach(s=>{Object.defineProperty(e,s+n,{value:function(r,i,o){return this[s].call(this,t,r,i,o)},configurable:!0})})}let pe=class{constructor(t){t&&this.set(t)}set(t,n,s){const r=this;function i(l,c,a){const f=Et(c);if(!f)throw new Error("header name must be a non-empty string");const h=p.findKey(r,f);(!h||r[h]===void 0||a===!0||a===void 0&&r[h]!==!1)&&(r[h||c]=en(l))}const o=(l,c)=>p.forEach(l,(a,f)=>i(a,f,c));if(p.isPlainObject(t)||t instanceof this.constructor)o(t,n);else if(p.isString(t)&&(t=t.trim())&&!Df(t))o(Ff(t),n);else if(p.isObject(t)&&p.isIterable(t)){let l={},c,a;for(const f of t){if(!p.isArray(f))throw TypeError("Object iterator must return a key-value pair");l[a=f[0]]=(c=l[a])?p.isArray(c)?[...c,f[1]]:[c,f[1]]:f[1]}o(l,n)}else t!=null&&i(n,t,s);return this}get(t,n){if(t=Et(t),t){const s=p.findKey(this,t);if(s){const r=this[s];if(!n)return r;if(n===!0)return Nf(r);if(p.isFunction(n))return n.call(this,r,s);if(p.isRegExp(n))return n.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=Et(t),t){const s=p.findKey(this,t);return!!(s&&this[s]!==void 0&&(!n||Hn(this,this[s],s,n)))}return!1}delete(t,n){const s=this;let r=!1;function i(o){if(o=Et(o),o){const l=p.findKey(s,o);l&&(!n||Hn(s,s[l],l,n))&&(delete s[l],r=!0)}}return p.isArray(t)?t.forEach(i):i(t),r}clear(t){const n=Object.keys(this);let s=n.length,r=!1;for(;s--;){const i=n[s];(!t||Hn(this,this[i],i,t,!0))&&(delete this[i],r=!0)}return r}normalize(t){const n=this,s={};return p.forEach(this,(r,i)=>{const o=p.findKey(s,i);if(o){n[o]=en(r),delete n[i];return}const l=t?If(i):String(i).trim();l!==i&&delete n[i],n[l]=en(r),s[l]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return p.forEach(this,(s,r)=>{s!=null&&s!==!1&&(n[r]=t&&p.isArray(s)?s.join(", "):s)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const s=new this(t);return n.forEach(r=>s.set(r)),s}static accessor(t){const s=(this[mr]=this[mr]={accessors:{}}).accessors,r=this.prototype;function i(o){const l=Et(o);s[l]||(Mf(r,o),s[l]=!0)}return p.isArray(t)?t.forEach(i):i(t),this}};pe.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);p.reduceDescriptors(pe.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(s){this[n]=s}}});p.freezeMethods(pe);function $n(e,t){const n=this||qt,s=t||n,r=pe.from(s.headers);let i=s.data;return p.forEach(e,function(l){i=l.call(n,i,r.normalize(),t?t.status:void 0)}),r.normalize(),i}function Vi(e){return!!(e&&e.__CANCEL__)}function gt(e,t,n){L.call(this,e??"canceled",L.ERR_CANCELED,t,n),this.name="CanceledError"}p.inherits(gt,L,{__CANCEL__:!0});function ki(e,t,n){const s=n.config.validateStatus;!n.status||!s||s(n.status)?e(n):t(new L("Request failed with status code "+n.status,[L.ERR_BAD_REQUEST,L.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function Lf(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function Uf(e,t){e=e||10;const n=new Array(e),s=new Array(e);let r=0,i=0,o;return t=t!==void 0?t:1e3,function(c){const a=Date.now(),f=s[i];o||(o=a),n[r]=c,s[r]=a;let h=i,y=0;for(;h!==r;)y+=n[h++],h=h%e;if(r=(r+1)%e,r===i&&(i=(i+1)%e),a-o{n=f,r=null,i&&(clearTimeout(i),i=null),e(...a)};return[(...a)=>{const f=Date.now(),h=f-n;h>=s?o(a,f):(r=a,i||(i=setTimeout(()=>{i=null,o(r)},s-h)))},()=>r&&o(r)]}const fn=(e,t,n=3)=>{let s=0;const r=Uf(50,250);return jf(i=>{const o=i.loaded,l=i.lengthComputable?i.total:void 0,c=o-s,a=r(c),f=o<=l;s=o;const h={loaded:o,total:l,progress:l?o/l:void 0,bytes:c,rate:a||void 0,estimated:a&&l&&f?(l-o)/a:void 0,event:i,lengthComputable:l!=null,[t?"download":"upload"]:!0};e(h)},n)},gr=(e,t)=>{const n=e!=null;return[s=>t[0]({lengthComputable:n,total:e,loaded:s}),t[1]]},br=e=>(...t)=>p.asap(()=>e(...t)),Bf=ne.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,ne.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(ne.origin),ne.navigator&&/(msie|trident)/i.test(ne.navigator.userAgent)):()=>!0,Hf=ne.hasStandardBrowserEnv?{write(e,t,n,s,r,i){const o=[e+"="+encodeURIComponent(t)];p.isNumber(n)&&o.push("expires="+new Date(n).toGMTString()),p.isString(s)&&o.push("path="+s),p.isString(r)&&o.push("domain="+r),i===!0&&o.push("secure"),document.cookie=o.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function $f(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function qf(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function Wi(e,t,n){let s=!$f(t);return e&&(s||n==!1)?qf(e,t):t}const yr=e=>e instanceof pe?{...e}:e;function rt(e,t){t=t||{};const n={};function s(a,f,h,y){return p.isPlainObject(a)&&p.isPlainObject(f)?p.merge.call({caseless:y},a,f):p.isPlainObject(f)?p.merge({},f):p.isArray(f)?f.slice():f}function r(a,f,h,y){if(p.isUndefined(f)){if(!p.isUndefined(a))return s(void 0,a,h,y)}else return s(a,f,h,y)}function i(a,f){if(!p.isUndefined(f))return s(void 0,f)}function o(a,f){if(p.isUndefined(f)){if(!p.isUndefined(a))return s(void 0,a)}else return s(void 0,f)}function l(a,f,h){if(h in t)return s(a,f);if(h in e)return s(void 0,a)}const c={url:i,method:i,data:i,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:l,headers:(a,f,h)=>r(yr(a),yr(f),h,!0)};return p.forEach(Object.keys({...e,...t}),function(f){const h=c[f]||r,y=h(e[f],t[f],f);p.isUndefined(y)&&h!==l||(n[f]=y)}),n}const Ji=e=>{const t=rt({},e);let{data:n,withXSRFToken:s,xsrfHeaderName:r,xsrfCookieName:i,headers:o,auth:l}=t;t.headers=o=pe.from(o),t.url=$i(Wi(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),l&&o.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):"")));let c;if(p.isFormData(n)){if(ne.hasStandardBrowserEnv||ne.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if((c=o.getContentType())!==!1){const[a,...f]=c?c.split(";").map(h=>h.trim()).filter(Boolean):[];o.setContentType([a||"multipart/form-data",...f].join("; "))}}if(ne.hasStandardBrowserEnv&&(s&&p.isFunction(s)&&(s=s(t)),s||s!==!1&&Bf(t.url))){const a=r&&i&&Hf.read(i);a&&o.set(r,a)}return t},Kf=typeof XMLHttpRequest<"u",Vf=Kf&&function(e){return new Promise(function(n,s){const r=Ji(e);let i=r.data;const o=pe.from(r.headers).normalize();let{responseType:l,onUploadProgress:c,onDownloadProgress:a}=r,f,h,y,R,x;function T(){R&&R(),x&&x(),r.cancelToken&&r.cancelToken.unsubscribe(f),r.signal&&r.signal.removeEventListener("abort",f)}let C=new XMLHttpRequest;C.open(r.method.toUpperCase(),r.url,!0),C.timeout=r.timeout;function N(){if(!C)return;const U=pe.from("getAllResponseHeaders"in C&&C.getAllResponseHeaders()),B={data:!l||l==="text"||l==="json"?C.responseText:C.response,status:C.status,statusText:C.statusText,headers:U,config:e,request:C};ki(function(Z){n(Z),T()},function(Z){s(Z),T()},B),C=null}"onloadend"in C?C.onloadend=N:C.onreadystatechange=function(){!C||C.readyState!==4||C.status===0&&!(C.responseURL&&C.responseURL.indexOf("file:")===0)||setTimeout(N)},C.onabort=function(){C&&(s(new L("Request aborted",L.ECONNABORTED,e,C)),C=null)},C.onerror=function(){s(new L("Network Error",L.ERR_NETWORK,e,C)),C=null},C.ontimeout=function(){let v=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const B=r.transitional||qi;r.timeoutErrorMessage&&(v=r.timeoutErrorMessage),s(new L(v,B.clarifyTimeoutError?L.ETIMEDOUT:L.ECONNABORTED,e,C)),C=null},i===void 0&&o.setContentType(null),"setRequestHeader"in C&&p.forEach(o.toJSON(),function(v,B){C.setRequestHeader(B,v)}),p.isUndefined(r.withCredentials)||(C.withCredentials=!!r.withCredentials),l&&l!=="json"&&(C.responseType=r.responseType),a&&([y,x]=fn(a,!0),C.addEventListener("progress",y)),c&&C.upload&&([h,R]=fn(c),C.upload.addEventListener("progress",h),C.upload.addEventListener("loadend",R)),(r.cancelToken||r.signal)&&(f=U=>{C&&(s(!U||U.type?new gt(null,e,C):U),C.abort(),C=null)},r.cancelToken&&r.cancelToken.subscribe(f),r.signal&&(r.signal.aborted?f():r.signal.addEventListener("abort",f)));const M=Lf(r.url);if(M&&ne.protocols.indexOf(M)===-1){s(new L("Unsupported protocol "+M+":",L.ERR_BAD_REQUEST,e));return}C.send(i||null)})},kf=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let s=new AbortController,r;const i=function(a){if(!r){r=!0,l();const f=a instanceof Error?a:this.reason;s.abort(f instanceof L?f:new gt(f instanceof Error?f.message:f))}};let o=t&&setTimeout(()=>{o=null,i(new L(`timeout ${t} of ms exceeded`,L.ETIMEDOUT))},t);const l=()=>{e&&(o&&clearTimeout(o),o=null,e.forEach(a=>{a.unsubscribe?a.unsubscribe(i):a.removeEventListener("abort",i)}),e=null)};e.forEach(a=>a.addEventListener("abort",i));const{signal:c}=s;return c.unsubscribe=()=>p.asap(l),c}},Wf=function*(e,t){let n=e.byteLength;if(n{const r=Jf(e,t);let i=0,o,l=c=>{o||(o=!0,s&&s(c))};return new ReadableStream({async pull(c){try{const{done:a,value:f}=await r.next();if(a){l(),c.close();return}let h=f.byteLength;if(n){let y=i+=h;n(y)}c.enqueue(new Uint8Array(f))}catch(a){throw l(a),a}},cancel(c){return l(c),r.return()}},{highWaterMark:2})},Rn=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",zi=Rn&&typeof ReadableStream=="function",Gf=Rn&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),Gi=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Xf=zi&&Gi(()=>{let e=!1;const t=new Request(ne.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),wr=64*1024,is=zi&&Gi(()=>p.isReadableStream(new Response("").body)),un={stream:is&&(e=>e.body)};Rn&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!un[t]&&(un[t]=p.isFunction(e[t])?n=>n[t]():(n,s)=>{throw new L(`Response type '${t}' is not supported`,L.ERR_NOT_SUPPORT,s)})})})(new Response);const Yf=async e=>{if(e==null)return 0;if(p.isBlob(e))return e.size;if(p.isSpecCompliantForm(e))return(await new Request(ne.origin,{method:"POST",body:e}).arrayBuffer()).byteLength;if(p.isArrayBufferView(e)||p.isArrayBuffer(e))return e.byteLength;if(p.isURLSearchParams(e)&&(e=e+""),p.isString(e))return(await Gf(e)).byteLength},Zf=async(e,t)=>{const n=p.toFiniteNumber(e.getContentLength());return n??Yf(t)},Qf=Rn&&(async e=>{let{url:t,method:n,data:s,signal:r,cancelToken:i,timeout:o,onDownloadProgress:l,onUploadProgress:c,responseType:a,headers:f,withCredentials:h="same-origin",fetchOptions:y}=Ji(e);a=a?(a+"").toLowerCase():"text";let R=kf([r,i&&i.toAbortSignal()],o),x;const T=R&&R.unsubscribe&&(()=>{R.unsubscribe()});let C;try{if(c&&Xf&&n!=="get"&&n!=="head"&&(C=await Zf(f,s))!==0){let B=new Request(t,{method:"POST",body:s,duplex:"half"}),Q;if(p.isFormData(s)&&(Q=B.headers.get("content-type"))&&f.setContentType(Q),B.body){const[Z,me]=gr(C,fn(br(c)));s=_r(B.body,wr,Z,me)}}p.isString(h)||(h=h?"include":"omit");const N="credentials"in Request.prototype;x=new Request(t,{...y,signal:R,method:n.toUpperCase(),headers:f.normalize().toJSON(),body:s,duplex:"half",credentials:N?h:void 0});let M=await fetch(x,y);const U=is&&(a==="stream"||a==="response");if(is&&(l||U&&T)){const B={};["status","statusText","headers"].forEach(ze=>{B[ze]=M[ze]});const Q=p.toFiniteNumber(M.headers.get("content-length")),[Z,me]=l&&gr(Q,fn(br(l),!0))||[];M=new Response(_r(M.body,wr,Z,()=>{me&&me(),T&&T()}),B)}a=a||"text";let v=await un[p.findKey(un,a)||"text"](M,e);return!U&&T&&T(),await new Promise((B,Q)=>{ki(B,Q,{data:v,headers:pe.from(M.headers),status:M.status,statusText:M.statusText,config:e,request:x})})}catch(N){throw T&&T(),N&&N.name==="TypeError"&&/Load failed|fetch/i.test(N.message)?Object.assign(new L("Network Error",L.ERR_NETWORK,e,x),{cause:N.cause||N}):L.from(N,N&&N.code,e,x)}}),os={http:pf,xhr:Vf,fetch:Qf};p.forEach(os,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const xr=e=>`- ${e}`,eu=e=>p.isFunction(e)||e===null||e===!1,Xi={getAdapter:e=>{e=p.isArray(e)?e:[e];const{length:t}=e;let n,s;const r={};for(let i=0;i`adapter ${l} `+(c===!1?"is not supported by the environment":"is not available in the build"));let o=t?i.length>1?`since : +`+i.map(xr).join(` +`):" "+xr(i[0]):"as no adapter specified";throw new L("There is no suitable adapter to dispatch the request "+o,"ERR_NOT_SUPPORT")}return s},adapters:os};function qn(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new gt(null,e)}function Sr(e){return qn(e),e.headers=pe.from(e.headers),e.data=$n.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Xi.getAdapter(e.adapter||qt.adapter)(e).then(function(s){return qn(e),s.data=$n.call(e,e.transformResponse,s),s.headers=pe.from(s.headers),s},function(s){return Vi(s)||(qn(e),s&&s.response&&(s.response.data=$n.call(e,e.transformResponse,s.response),s.response.headers=pe.from(s.response.headers))),Promise.reject(s)})}const Yi="1.11.0",Tn={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Tn[e]=function(s){return typeof s===e||"a"+(t<1?"n ":" ")+e}});const Er={};Tn.transitional=function(t,n,s){function r(i,o){return"[Axios v"+Yi+"] Transitional option '"+i+"'"+o+(s?". "+s:"")}return(i,o,l)=>{if(t===!1)throw new L(r(o," has been removed"+(n?" in "+n:"")),L.ERR_DEPRECATED);return n&&!Er[o]&&(Er[o]=!0,console.warn(r(o," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(i,o,l):!0}};Tn.spelling=function(t){return(n,s)=>(console.warn(`${s} is likely a misspelling of ${t}`),!0)};function tu(e,t,n){if(typeof e!="object")throw new L("options must be an object",L.ERR_BAD_OPTION_VALUE);const s=Object.keys(e);let r=s.length;for(;r-- >0;){const i=s[r],o=t[i];if(o){const l=e[i],c=l===void 0||o(l,i,e);if(c!==!0)throw new L("option "+i+" must be "+c,L.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new L("Unknown option "+i,L.ERR_BAD_OPTION)}}const tn={assertOptions:tu,validators:Tn},Ce=tn.validators;let st=class{constructor(t){this.defaults=t||{},this.interceptors={request:new pr,response:new pr}}async request(t,n){try{return await this._request(t,n)}catch(s){if(s instanceof Error){let r={};Error.captureStackTrace?Error.captureStackTrace(r):r=new Error;const i=r.stack?r.stack.replace(/^.+\n/,""):"";try{s.stack?i&&!String(s.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(s.stack+=` +`+i):s.stack=i}catch{}}throw s}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=rt(this.defaults,n);const{transitional:s,paramsSerializer:r,headers:i}=n;s!==void 0&&tn.assertOptions(s,{silentJSONParsing:Ce.transitional(Ce.boolean),forcedJSONParsing:Ce.transitional(Ce.boolean),clarifyTimeoutError:Ce.transitional(Ce.boolean)},!1),r!=null&&(p.isFunction(r)?n.paramsSerializer={serialize:r}:tn.assertOptions(r,{encode:Ce.function,serialize:Ce.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),tn.assertOptions(n,{baseUrl:Ce.spelling("baseURL"),withXsrfToken:Ce.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let o=i&&p.merge(i.common,i[n.method]);i&&p.forEach(["delete","get","head","post","put","patch","common"],x=>{delete i[x]}),n.headers=pe.concat(o,i);const l=[];let c=!0;this.interceptors.request.forEach(function(T){typeof T.runWhen=="function"&&T.runWhen(n)===!1||(c=c&&T.synchronous,l.unshift(T.fulfilled,T.rejected))});const a=[];this.interceptors.response.forEach(function(T){a.push(T.fulfilled,T.rejected)});let f,h=0,y;if(!c){const x=[Sr.bind(this),void 0];for(x.unshift(...l),x.push(...a),y=x.length,f=Promise.resolve(n);h{if(!s._listeners)return;let i=s._listeners.length;for(;i-- >0;)s._listeners[i](r);s._listeners=null}),this.promise.then=r=>{let i;const o=new Promise(l=>{s.subscribe(l),i=l}).then(r);return o.cancel=function(){s.unsubscribe(i)},o},t(function(i,o,l){s.reason||(s.reason=new gt(i,o,l),n(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=s=>{t.abort(s)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new Zi(function(r){t=r}),cancel:t}}};function su(e){return function(n){return e.apply(null,n)}}function ru(e){return p.isObject(e)&&e.isAxiosError===!0}const ls={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(ls).forEach(([e,t])=>{ls[t]=e});function Qi(e){const t=new st(e),n=vi(st.prototype.request,t);return p.extend(n,st.prototype,t,{allOwnKeys:!0}),p.extend(n,t,null,{allOwnKeys:!0}),n.create=function(r){return Qi(rt(e,r))},n}const Y=Qi(qt);Y.Axios=st;Y.CanceledError=gt;Y.CancelToken=nu;Y.isCancel=Vi;Y.VERSION=Yi;Y.toFormData=En;Y.AxiosError=L;Y.Cancel=Y.CanceledError;Y.all=function(t){return Promise.all(t)};Y.spread=su;Y.isAxiosError=ru;Y.mergeConfig=rt;Y.AxiosHeaders=pe;Y.formToJSON=e=>Ki(p.isHTMLForm(e)?new FormData(e):e);Y.getAdapter=Xi.getAdapter;Y.HttpStatusCode=ls;Y.default=Y;const{Axios:bu,AxiosError:yu,CanceledError:_u,isCancel:wu,CancelToken:xu,VERSION:Su,all:Eu,Cancel:Ru,isAxiosError:Tu,spread:Ou,toFormData:Au,AxiosHeaders:Cu,HttpStatusCode:vu,formToJSON:Pu,getAdapter:Fu,mergeConfig:Nu}=Y;export{_e as F,Y as a,au as b,ec as c,lu as d,Ho as e,Ei as f,ds as g,ou as h,Ne as i,du as j,hu as k,kl as l,Wl as m,hs as n,Zn as o,cu as p,Qn as q,fu as r,pu as s,mo as t,uu as u,Xo as w}; diff --git a/assets/dist/index.html b/assets/dist/index.html new file mode 100644 index 0000000..16f159c --- /dev/null +++ b/assets/dist/index.html @@ -0,0 +1,17 @@ + + + + + + + File Upload to Telegram + + + + + + + +
+ + \ No newline at end of file diff --git a/build-frontend.bat b/build-frontend.bat new file mode 100644 index 0000000..aca1e55 --- /dev/null +++ b/build-frontend.bat @@ -0,0 +1,15 @@ +@echo off +echo Building frontend... +cd frontend +call npm install +echo Running type check... +call npm run type-check +if %errorlevel% neq 0 ( + echo Type check failed, but continuing with build... +) +call npm run build +cd .. +echo Frontend build complete! +echo Building Go application... +go build -o tgstate.exe +echo Build complete! \ No newline at end of file diff --git a/build-frontend.sh b/build-frontend.sh new file mode 100644 index 0000000..866d1da --- /dev/null +++ b/build-frontend.sh @@ -0,0 +1,12 @@ +#!/bin/bash +echo "Building frontend..." +cd frontend +npm install +echo "Running type check..." +npm run type-check || echo "Type check failed, but continuing with build..." +npm run build +cd .. +echo "Frontend build complete!" +echo "Building Go application..." +go build -o tgstate +echo "Build complete!" \ No newline at end of file diff --git a/control/control.go b/control/control.go index c998ff1..701a1a9 100644 --- a/control/control.go +++ b/control/control.go @@ -144,14 +144,16 @@ func UploadAPI(w http.ResponseWriter, r *http.Request) { return } res := conf.UploadResponse{ - Code: 0, + Code: 1, Message: "error", } fileId := utils.UpDocument(utils.TgFileData(fileName, file)) if fileName != "blob" { ip := r.RemoteAddr // 获取上传者IP + userFingerprint := r.FormValue("userFingerprint") + shared := r.FormValue("shared") == "true" // 插入数据到数据库 - err := SaveFileRecord(fileId, fileName, ip) + err := SaveFileRecord(fileId, fileName, ip, userFingerprint, shared) if err != nil { errJsonMsg("Unable to save file record", w) } @@ -188,7 +190,7 @@ func UploadAPI(w http.ResponseWriter, r *http.Request) { // url encode imageUrl proxyUrl := conf.ProxyUrl + "/" + url.QueryEscape(imageUrl) res = conf.UploadResponse{ - Code: 1, + Code: 0, Message: downloadUrl, ImgUrl: imageUrl, ProxyUrl: proxyUrl, @@ -408,6 +410,15 @@ func D(w http.ResponseWriter, r *http.Request) { // Index 首页 func Index(w http.ResponseWriter, r *http.Request) { + // 检查是否存在构建的前端文件 + if file, err := assets.Dist.ReadFile("dist/index.html"); err == nil { + // 使用新的Vue前端 + w.Header().Set("Content-Type", "text/html") + w.Write(file) + return + } + + // 回退到原始模板 htmlPath := "templates/images.tmpl" if conf.Mode == "p" { htmlPath = "templates/files.tmpl" @@ -515,7 +526,7 @@ func FilesAPI(w http.ResponseWriter, r *http.Request) { if conf.ApiPass != "" && password != conf.ApiPass { response.Message = "Unauthorized" - response.Code = http.StatusUnauthorized + response.Code = 1 w.WriteHeader(http.StatusUnauthorized) json.NewEncoder(w).Encode(response) return @@ -541,7 +552,7 @@ func ShortLinksAPI(w http.ResponseWriter, r *http.Request) { if conf.ApiPass != "" && password != conf.ApiPass { response.Message = "Unauthorized" - response.Code = http.StatusUnauthorized + response.Code = 1 w.WriteHeader(http.StatusUnauthorized) json.NewEncoder(w).Encode(response) return @@ -558,6 +569,121 @@ func ShortLinksAPI(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(response) } +// HistoryAPI 获取用户历史文件API +func HistoryAPI(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + w.Header().Set("Access-Control-Allow-Origin", "*") + + userFingerprint := r.URL.Query().Get("fingerprint") + if userFingerprint == "" { + response := conf.ResponseResult{ + Code: 1, + Message: "Missing fingerprint parameter", + } + w.WriteHeader(http.StatusBadRequest) + json.NewEncoder(w).Encode(response) + return + } + + // 获取分页参数 + page := 1 + pageSize := 20 + if pageStr := r.URL.Query().Get("page"); pageStr != "" { + if p, err := strconv.Atoi(pageStr); err == nil && p > 0 { + page = p + } + } + if pageSizeStr := r.URL.Query().Get("pageSize"); pageSizeStr != "" { + if ps, err := strconv.Atoi(pageSizeStr); err == nil && ps > 0 && ps <= 100 { + pageSize = ps + } + } + + records, err := GetFilesByUserFingerprint(userFingerprint, page, pageSize) + if err != nil { + response := conf.ResponseResult{ + Code: 1, + Message: "Failed to get user history", + } + w.WriteHeader(http.StatusInternalServerError) + json.NewEncoder(w).Encode(response) + return + } + + // 获取总数 + total, _ := GetUserFilesCount(userFingerprint) + + responseData := map[string]interface{}{ + "files": records, + "pagination": map[string]interface{}{ + "page": page, + "pageSize": pageSize, + "total": total, + "hasMore": len(records) == pageSize, + }, + } + + response := conf.ResponseResult{ + Code: 0, + Message: "ok", + Data: responseData, + } + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(response) +} + +// PlazaAPI 获取广场文件API +func PlazaAPI(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + w.Header().Set("Access-Control-Allow-Origin", "*") + + // 获取分页参数 + page := 1 + pageSize := 20 + if pageStr := r.URL.Query().Get("page"); pageStr != "" { + if p, err := strconv.Atoi(pageStr); err == nil && p > 0 { + page = p + } + } + if pageSizeStr := r.URL.Query().Get("pageSize"); pageSizeStr != "" { + if ps, err := strconv.Atoi(pageSizeStr); err == nil && ps > 0 && ps <= 100 { + pageSize = ps + } + } + + records, err := GetSharedFiles(page, pageSize) + if err != nil { + response := conf.ResponseResult{ + Code: 1, + Message: "Failed to get plaza files", + } + w.WriteHeader(http.StatusInternalServerError) + json.NewEncoder(w).Encode(response) + return + } + + // 获取总数 + total, _ := GetSharedFilesCount() + + responseData := map[string]interface{}{ + "files": records, + "pagination": map[string]interface{}{ + "page": page, + "pageSize": pageSize, + "total": total, + "hasMore": len(records) == pageSize, + }, + } + + response := conf.ResponseResult{ + Code: 0, + Message: "ok", + Data: responseData, + } + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(response) +} + // ChunkUploadAPI 分片上传API func ChunkUploadAPI(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") @@ -595,14 +721,15 @@ func ChunkUploadAPI(w http.ResponseWriter, r *http.Request) { // 保存分片信息到数据库 ip := r.RemoteAddr - err = SaveChunkRecord(uploadId, chunkIndex, chunkId, fileName, ip) + userFingerprint := r.FormValue("userFingerprint") + err = SaveChunkRecord(uploadId, chunkIndex, chunkId, fileName, ip, userFingerprint) if err != nil { errJsonMsg("Failed to save chunk record", w) return } response := conf.UploadResponse{ - Code: 1, + Code: 0, Message: "Chunk uploaded successfully", ChunkId: chunkId, } @@ -622,10 +749,12 @@ func MergeChunksAPI(w http.ResponseWriter, r *http.Request) { } var req struct { - UploadId string `json:"uploadId"` - FileName string `json:"fileName"` - ChunkIds []string `json:"chunkIds"` - FileSize int64 `json:"fileSize"` + UploadId string `json:"uploadId"` + FileName string `json:"fileName"` + ChunkIds []string `json:"chunkIds"` + FileSize int64 `json:"fileSize"` + UserFingerprint string `json:"userFingerprint"` + Shared bool `json:"shared"` } if err := json.NewDecoder(r.Body).Decode(&req); err != nil { @@ -647,7 +776,7 @@ func MergeChunksAPI(w http.ResponseWriter, r *http.Request) { // 保存文件记录 ip := r.RemoteAddr - err := SaveFileRecord(mergedFileId, req.FileName, ip) + err := SaveFileRecord(mergedFileId, req.FileName, ip, req.UserFingerprint, req.Shared) if err != nil { errJsonMsg("Failed to save file record", w) return @@ -684,7 +813,7 @@ func MergeChunksAPI(w http.ResponseWriter, r *http.Request) { proxyUrl := conf.ProxyUrl + "/" + url.QueryEscape(imageUrl) response := conf.UploadResponse{ - Code: 1, + Code: 0, Message: downloadUrl, ImgUrl: imageUrl, ProxyUrl: proxyUrl, @@ -704,7 +833,7 @@ func MergeChunksAPI(w http.ResponseWriter, r *http.Request) { func errJsonMsg(msg string, w http.ResponseWriter) { // 这里示例直接返回JSON响应 response := conf.UploadResponse{ - Code: 0, + Code: 1, Message: msg, } w.Header().Set("Content-Type", "application/json") @@ -712,6 +841,53 @@ func errJsonMsg(msg string, w http.ResponseWriter) { json.NewEncoder(w).Encode(response) } +// ServeDistFiles 服务静态文件 +func ServeDistFiles(w http.ResponseWriter, r *http.Request) { + // 移除 /assets/ 前缀,保留文件路径 + // path := strings.TrimPrefix(r.URL.Path, "/assets/") + + // 构建完整的dist路径 + distPath := "dist" + r.URL.Path + + // 尝试从dist目录读取文件 + if file, err := assets.Dist.ReadFile(distPath); err == nil { + // 设置正确的Content-Type + ext := filepath.Ext(r.URL.Path) + switch ext { + case ".js": + w.Header().Set("Content-Type", "application/javascript; charset=utf-8") + case ".css": + w.Header().Set("Content-Type", "text/css; charset=utf-8") + case ".html": + w.Header().Set("Content-Type", "text/html; charset=utf-8") + case ".png": + w.Header().Set("Content-Type", "image/png") + case ".jpg", ".jpeg": + w.Header().Set("Content-Type", "image/jpeg") + case ".svg": + w.Header().Set("Content-Type", "image/svg+xml") + case ".ico": + w.Header().Set("Content-Type", "image/x-icon") + case ".woff", ".woff2": + w.Header().Set("Content-Type", "font/woff2") + case ".ttf": + w.Header().Set("Content-Type", "font/ttf") + case ".eot": + w.Header().Set("Content-Type", "application/vnd.ms-fontobject") + default: + w.Header().Set("Content-Type", "application/octet-stream") + } + + // 设置缓存头 + w.Header().Set("Cache-Control", "public, max-age=31536000") + + w.Write(file) + return + } + + http.NotFound(w, r) +} + func Middleware(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // 只有当密码设置并且不为"none"时,才进行检查 diff --git a/control/db.go b/control/db.go index cc5f7f6..15c6830 100644 --- a/control/db.go +++ b/control/db.go @@ -31,6 +31,8 @@ func InitDB() (*sql.DB, error) { fileId TEXT NOT NULL, filename TEXT NOT NULL, ip TEXT NOT NULL, + user_fingerprint TEXT, + shared INTEGER DEFAULT 0, time TIMESTAMP DEFAULT CURRENT_TIMESTAMP );` _, err = db.Exec(query) @@ -59,6 +61,7 @@ func InitDB() (*sql.DB, error) { chunk_id TEXT NOT NULL, file_name TEXT NOT NULL, ip TEXT NOT NULL, + user_fingerprint TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE(upload_id, chunk_index) );` @@ -66,16 +69,29 @@ func InitDB() (*sql.DB, error) { if err != nil { log.Fatal("Failed to create chunk_records table:", err) } + + // 迁移:为现有表添加 user_fingerprint 字段(如果不存在) + migrationQuery := `ALTER TABLE uploaded_files ADD COLUMN user_fingerprint TEXT;` + _, _ = db.Exec(migrationQuery) // 忽略错误,因为字段可能已存在 + + migrationQuery2 := `ALTER TABLE chunk_records ADD COLUMN user_fingerprint TEXT;` + _, _ = db.Exec(migrationQuery2) // 忽略错误,因为字段可能已存在 + + // 迁移:为现有表添加 shared 字段(如果不存在) + migrationQuery3 := `ALTER TABLE uploaded_files ADD COLUMN shared INTEGER DEFAULT 0;` + _, _ = db.Exec(migrationQuery3) // 忽略错误,因为字段可能已存在 }) return db, err } type FileRecord struct { - FileId string `json:"fileId"` - Filename string `json:"filename"` - Ip string `json:"ip"` - Time time.Time `json:"time"` + FileId string `json:"fileId"` + Filename string `json:"filename"` + Ip string `json:"ip"` + UserFingerprint string `json:"userFingerprint"` + Shared bool `json:"shared"` + Time time.Time `json:"time"` } type ShortLink struct { @@ -89,28 +105,34 @@ type ShortLink struct { // GetFileNameByIDOrName 查询文件名 func GetFileNameByIDOrName(idOrName string) (FileRecord, error) { var record FileRecord + var shared int // 执行查询,获取对应id或name的file记录 - query := "SELECT fileId, filename, ip, time FROM uploaded_files WHERE fileId = ? OR filename = ? ORDER BY time DESC LIMIT 1" - err := db.QueryRow(query, idOrName, idOrName).Scan(&record.FileId, &record.Filename, &record.Ip, &record.Time) + query := "SELECT fileId, filename, ip, COALESCE(user_fingerprint, '') as user_fingerprint, COALESCE(shared, 0) as shared, time FROM uploaded_files WHERE fileId = ? OR filename = ? ORDER BY time DESC LIMIT 1" + err := db.QueryRow(query, idOrName, idOrName).Scan(&record.FileId, &record.Filename, &record.Ip, &record.UserFingerprint, &shared, &record.Time) if err != nil { if errors.Is(err, sql.ErrNoRows) { return FileRecord{}, fmt.Errorf("no file found with idOrName %s", idOrName) } return FileRecord{}, err } + record.Shared = shared == 1 return record, nil } -func SaveFileRecord(fileID string, fileName string, ip string) error { +func SaveFileRecord(fileID string, fileName string, ip string, userFingerprint string, shared bool) error { // 插入数据到数据库 - _, err := db.Exec("INSERT INTO uploaded_files (fileId, filename, ip) VALUES (?, ?, ?)", fileID, fileName, ip) + sharedInt := 0 + if shared { + sharedInt = 1 + } + _, err := db.Exec("INSERT INTO uploaded_files (fileId, filename, ip, user_fingerprint, shared) VALUES (?, ?, ?, ?, ?)", fileID, fileName, ip, userFingerprint, sharedInt) return err } func SelectAllRecord() ([]FileRecord, error) { // 查询所有记录 - rows, err := db.Query("SELECT fileId, filename, ip, time FROM uploaded_files") + rows, err := db.Query("SELECT fileId, filename, ip, COALESCE(user_fingerprint, '') as user_fingerprint, COALESCE(shared, 0) as shared, time FROM uploaded_files ORDER BY time DESC") if err != nil { return nil, err } @@ -121,10 +143,12 @@ func SelectAllRecord() ([]FileRecord, error) { // 迭代查询结果 for rows.Next() { var record FileRecord - err := rows.Scan(&record.FileId, &record.Filename, &record.Ip, &record.Time) + var shared int + err := rows.Scan(&record.FileId, &record.Filename, &record.Ip, &record.UserFingerprint, &shared, &record.Time) if err != nil { return nil, err } + record.Shared = shared == 1 records = append(records, record) } @@ -205,9 +229,9 @@ func GetShortCodeByFileId(fileId string) (string, error) { } // SaveChunkRecord 保存分片记录 -func SaveChunkRecord(uploadId, chunkIndex, chunkId, fileName, ip string) error { - _, err := db.Exec("INSERT OR REPLACE INTO chunk_records (upload_id, chunk_index, chunk_id, file_name, ip) VALUES (?, ?, ?, ?, ?)", - uploadId, chunkIndex, chunkId, fileName, ip) +func SaveChunkRecord(uploadId, chunkIndex, chunkId, fileName, ip, userFingerprint string) error { + _, err := db.Exec("INSERT OR REPLACE INTO chunk_records (upload_id, chunk_index, chunk_id, file_name, ip, user_fingerprint) VALUES (?, ?, ?, ?, ?, ?)", + uploadId, chunkIndex, chunkId, fileName, ip, userFingerprint) return err } @@ -243,10 +267,81 @@ func CleanupChunkRecords(uploadId string) error { } type ChunkRecord struct { - UploadId string `json:"uploadId"` - ChunkIndex int `json:"chunkIndex"` - ChunkId string `json:"chunkId"` - FileName string `json:"fileName"` - Ip string `json:"ip"` - CreatedAt time.Time `json:"createdAt"` + UploadId string `json:"uploadId"` + ChunkIndex int `json:"chunkIndex"` + ChunkId string `json:"chunkId"` + FileName string `json:"fileName"` + Ip string `json:"ip"` + UserFingerprint string `json:"userFingerprint"` + CreatedAt time.Time `json:"createdAt"` +} + +// GetFilesByUserFingerprint 根据用户指纹获取历史文件 +func GetFilesByUserFingerprint(userFingerprint string, page, pageSize int) ([]FileRecord, error) { + offset := (page - 1) * pageSize + rows, err := db.Query("SELECT fileId, filename, ip, user_fingerprint, COALESCE(shared, 0) as shared, time FROM uploaded_files WHERE user_fingerprint = ? ORDER BY time DESC LIMIT ? OFFSET ?", userFingerprint, pageSize, offset) + if err != nil { + return nil, err + } + defer rows.Close() + + var records []FileRecord + for rows.Next() { + var record FileRecord + var shared int + err := rows.Scan(&record.FileId, &record.Filename, &record.Ip, &record.UserFingerprint, &shared, &record.Time) + if err != nil { + return nil, err + } + record.Shared = shared == 1 + records = append(records, record) + } + + if err = rows.Err(); err != nil { + return nil, err + } + + return records, nil +} + +// GetSharedFiles 获取广场文件(分页) +func GetSharedFiles(page, pageSize int) ([]FileRecord, error) { + offset := (page - 1) * pageSize + rows, err := db.Query("SELECT fileId, filename, ip, COALESCE(user_fingerprint, '') as user_fingerprint, shared, time FROM uploaded_files WHERE shared = 1 ORDER BY time DESC LIMIT ? OFFSET ?", pageSize, offset) + if err != nil { + return nil, err + } + defer rows.Close() + + var records []FileRecord + for rows.Next() { + var record FileRecord + var shared int + err := rows.Scan(&record.FileId, &record.Filename, &record.Ip, &record.UserFingerprint, &shared, &record.Time) + if err != nil { + return nil, err + } + record.Shared = shared == 1 + records = append(records, record) + } + + if err = rows.Err(); err != nil { + return nil, err + } + + return records, nil +} + +// GetSharedFilesCount 获取广场文件总数 +func GetSharedFilesCount() (int, error) { + var count int + err := db.QueryRow("SELECT COUNT(*) FROM uploaded_files WHERE shared = 1").Scan(&count) + return count, err +} + +// GetUserFilesCount 获取用户文件总数 +func GetUserFilesCount(userFingerprint string) (int, error) { + var count int + err := db.QueryRow("SELECT COUNT(*) FROM uploaded_files WHERE user_fingerprint = ?", userFingerprint).Scan(&count) + return count, err } diff --git a/dev-frontend.bat b/dev-frontend.bat new file mode 100644 index 0000000..4d0e9d7 --- /dev/null +++ b/dev-frontend.bat @@ -0,0 +1,7 @@ +@echo off +echo Starting frontend development server... +cd frontend +start cmd /k "npm run dev" +cd .. +echo Starting Go backend... +go run main.go \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..be6f08a --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,15 @@ + + + + + + + File Upload to Telegram + + + + +
+ + + \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..0101bf7 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,3209 @@ +{ + "name": "tgstate-frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "tgstate-frontend", + "version": "0.0.0", + "dependencies": { + "@fingerprintjs/fingerprintjs": "^4.6.2", + "@vueuse/core": "^10.7.0", + "axios": "^1.6.0", + "class-variance-authority": "^0.7.0", + "clsx": "^2.0.0", + "lucide-vue-next": "^0.294.0", + "radix-vue": "^1.9.0", + "tailwind-merge": "^2.2.0", + "vue": "^3.4.0" + }, + "devDependencies": { + "@types/node": "^20.10.0", + "@vitejs/plugin-vue": "^5.0.0", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.32", + "tailwindcss": "^3.4.0", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5.2.0", + "vite": "^5.0.0", + "vue-tsc": "^1.8.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.2", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@fingerprintjs/fingerprintjs": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/@fingerprintjs/fingerprintjs/-/fingerprintjs-4.6.2.tgz", + "integrity": "sha512-g8mXuqcFKbgH2CZKwPfVtsUJDHyvcgIABQI7Y0tzWEFXpGxJaXuAuzlifT2oTakjDBLTK4Gaa9/5PERDhqUjtw==", + "dependencies": { + "tslib": "^2.4.1" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.3.tgz", + "integrity": "sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==" + }, + "node_modules/@floating-ui/vue": { + "version": "1.1.8", + "resolved": "https://registry.npmmirror.com/@floating-ui/vue/-/vue-1.1.8.tgz", + "integrity": "sha512-SNJAa1jbT8Gh1LvWw2uIIViLL0saV2bCY59ISCvJzhbut5DSb2H3LKUK49Xkd7SixTNHKX4LFu59nbwIXt9jjQ==", + "dependencies": { + "@floating-ui/dom": "^1.7.3", + "@floating-ui/utils": "^0.2.10", + "vue-demi": ">=0.13.0" + } + }, + "node_modules/@floating-ui/vue/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@internationalized/date": { + "version": "3.8.2", + "resolved": "https://registry.npmmirror.com/@internationalized/date/-/date-3.8.2.tgz", + "integrity": "sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.4", + "resolved": "https://registry.npmmirror.com/@internationalized/number/-/number-3.6.4.tgz", + "integrity": "sha512-P+/h+RDaiX8EGt3shB9AYM1+QgkvHmJ5rKi4/59k4sg9g58k9rqsRW0WxRO7jCoHyvVbFRRFKmVTdFYdehrxHg==", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "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==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz", + "integrity": "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz", + "integrity": "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz", + "integrity": "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz", + "integrity": "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz", + "integrity": "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz", + "integrity": "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz", + "integrity": "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz", + "integrity": "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz", + "integrity": "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz", + "integrity": "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz", + "integrity": "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz", + "integrity": "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz", + "integrity": "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz", + "integrity": "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz", + "integrity": "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz", + "integrity": "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz", + "integrity": "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz", + "integrity": "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz", + "integrity": "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz", + "integrity": "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmmirror.com/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.13.12", + "resolved": "https://registry.npmmirror.com/@tanstack/virtual-core/-/virtual-core-3.13.12.tgz", + "integrity": "sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/vue-virtual": { + "version": "3.13.12", + "resolved": "https://registry.npmmirror.com/@tanstack/vue-virtual/-/vue-virtual-3.13.12.tgz", + "integrity": "sha512-vhF7kEU9EXWXh+HdAwKJ2m3xaOnTTmgcdXcF2pim8g4GvI7eRrk2YRuV5nUlZnd/NbCIX4/Ja2OZu5EjJL06Ww==", + "dependencies": { + "@tanstack/virtual-core": "3.13.12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.0.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.19.10", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.19.10.tgz", + "integrity": "sha512-iAFpG6DokED3roLSP0K+ybeDdIX6Bc0Vd3mLW5uDqThPWtNos3E+EqOM11mPQHKzfWHqEBuLjIlsBQQ8CsISmQ==", + "dev": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" + }, + "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, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.11.1.tgz", + "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==", + "dev": true, + "dependencies": { + "@volar/source-map": "1.11.1" + } + }, + "node_modules/@volar/source-map": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.11.1.tgz", + "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==", + "dev": true, + "dependencies": { + "muggle-string": "^0.3.1" + } + }, + "node_modules/@volar/typescript": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-1.11.1.tgz", + "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", + "dev": true, + "dependencies": { + "@volar/language-core": "1.11.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.18", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.18.tgz", + "integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==", + "dependencies": { + "@babel/parser": "^7.28.0", + "@vue/shared": "3.5.18", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.18", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz", + "integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==", + "dependencies": { + "@vue/compiler-core": "3.5.18", + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.18", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz", + "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==", + "dependencies": { + "@babel/parser": "^7.28.0", + "@vue/compiler-core": "3.5.18", + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.18", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz", + "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==", + "dependencies": { + "@vue/compiler-dom": "3.5.18", + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/language-core": { + "version": "1.8.27", + "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-1.8.27.tgz", + "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", + "dev": true, + "dependencies": { + "@volar/language-core": "~1.11.1", + "@volar/source-map": "~1.11.1", + "@vue/compiler-dom": "^3.3.0", + "@vue/shared": "^3.3.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "muggle-string": "^0.3.1", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.18", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.18.tgz", + "integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==", + "dependencies": { + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.18", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.18.tgz", + "integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==", + "dependencies": { + "@vue/reactivity": "3.5.18", + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.18", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz", + "integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==", + "dependencies": { + "@vue/reactivity": "3.5.18", + "@vue/runtime-core": "3.5.18", + "@vue/shared": "3.5.18", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.18", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.18.tgz", + "integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==", + "dependencies": { + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18" + }, + "peerDependencies": { + "vue": "3.5.18" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.18", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.18.tgz", + "integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==" + }, + "node_modules/@vueuse/core": { + "version": "10.11.1", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.11.1.tgz", + "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.11.1", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.11.1.tgz", + "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.11.1", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.11.1.tgz", + "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmmirror.com/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.11.0", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.2", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.25.2.tgz", + "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001733", + "electron-to-chromium": "^1.5.199", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001734", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001734.tgz", + "integrity": "sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmmirror.com/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmmirror.com/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "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==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.200", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.200.tgz", + "integrity": "sha512-rFCxROw7aOe4uPTfIAx+rXv9cEcGx+buAF4npnhtTqCJk5KDFRnh3+KYj7rdVh6lsFt5/aPs+Irj9rZ33WMA7w==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "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==", + "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "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==", + "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, + "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/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "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, + "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==", + "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==", + "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==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmmirror.com/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "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==", + "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==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmmirror.com/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/lucide-vue-next": { + "version": "0.294.0", + "resolved": "https://registry.npmmirror.com/lucide-vue-next/-/lucide-vue-next-0.294.0.tgz", + "integrity": "sha512-bcUuGyLJoq9ExyozROMezdaczK2loP3emYb8PvS7HhZ56rUJVOv5hJgTmWfrfr8vJE7J69ImoMyPTwmUHF198w==", + "peerDependencies": { + "vue": ">=3.0.1" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "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==", + "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==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmmirror.com/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/radix-vue": { + "version": "1.9.17", + "resolved": "https://registry.npmmirror.com/radix-vue/-/radix-vue-1.9.17.tgz", + "integrity": "sha512-mVCu7I2vXt1L2IUYHTt0sZMz7s1K2ZtqKeTIxG3yC5mMFfLBG4FtE1FDeRMpDd+Hhg/ybi9+iXmAP1ISREndoQ==", + "dependencies": { + "@floating-ui/dom": "^1.6.7", + "@floating-ui/vue": "^1.1.0", + "@internationalized/date": "^3.5.4", + "@internationalized/number": "^3.5.3", + "@tanstack/vue-virtual": "^3.8.1", + "@vueuse/core": "^10.11.0", + "@vueuse/shared": "^10.11.0", + "aria-hidden": "^1.2.4", + "defu": "^6.1.4", + "fast-deep-equal": "^3.1.3", + "nanoid": "^5.0.7" + }, + "peerDependencies": { + "vue": ">= 3.2.0" + } + }, + "node_modules/radix-vue/node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.46.2", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.46.2.tgz", + "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.46.2", + "@rollup/rollup-android-arm64": "4.46.2", + "@rollup/rollup-darwin-arm64": "4.46.2", + "@rollup/rollup-darwin-x64": "4.46.2", + "@rollup/rollup-freebsd-arm64": "4.46.2", + "@rollup/rollup-freebsd-x64": "4.46.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.46.2", + "@rollup/rollup-linux-arm-musleabihf": "4.46.2", + "@rollup/rollup-linux-arm64-gnu": "4.46.2", + "@rollup/rollup-linux-arm64-musl": "4.46.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.46.2", + "@rollup/rollup-linux-ppc64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-musl": "4.46.2", + "@rollup/rollup-linux-s390x-gnu": "4.46.2", + "@rollup/rollup-linux-x64-gnu": "4.46.2", + "@rollup/rollup-linux-x64-musl": "4.46.2", + "@rollup/rollup-win32-arm64-msvc": "4.46.2", + "@rollup/rollup-win32-ia32-msvc": "4.46.2", + "@rollup/rollup-win32-x64-msvc": "4.46.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmmirror.com/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/tailwind-merge/-/tailwind-merge-2.6.0.tgz", + "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "dev": true, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "5.4.19", + "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.19.tgz", + "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "dev": true, + "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.18", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.18.tgz", + "integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==", + "dependencies": { + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-sfc": "3.5.18", + "@vue/runtime-dom": "3.5.18", + "@vue/server-renderer": "3.5.18", + "@vue/shared": "3.5.18" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "1.8.27", + "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.8.27.tgz", + "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", + "dev": true, + "dependencies": { + "@volar/typescript": "~1.11.1", + "@vue/language-core": "1.8.27", + "semver": "^7.5.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..869a71a --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,35 @@ +{ + "name": "tgstate-frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "build-check": "vue-tsc --noEmit && vite build", + "type-check": "vue-tsc --noEmit", + "preview": "vite preview" + }, + "dependencies": { + "@fingerprintjs/fingerprintjs": "^4.6.2", + "@vueuse/core": "^10.7.0", + "axios": "^1.6.0", + "class-variance-authority": "^0.7.0", + "clsx": "^2.0.0", + "lucide-vue-next": "^0.294.0", + "radix-vue": "^1.9.0", + "tailwind-merge": "^2.2.0", + "vue": "^3.4.0" + }, + "devDependencies": { + "@types/node": "^20.10.0", + "@vitejs/plugin-vue": "^5.0.0", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.32", + "tailwindcss": "^3.4.0", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5.2.0", + "vite": "^5.0.0", + "vue-tsc": "^1.8.0" + } +} diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 0000000..e99ebc2 --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} \ No newline at end of file diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 0000000..18b08b7 --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/frontend/src/components/FileUpload.vue b/frontend/src/components/FileUpload.vue new file mode 100644 index 0000000..561c151 --- /dev/null +++ b/frontend/src/components/FileUpload.vue @@ -0,0 +1,615 @@ + + + diff --git a/frontend/src/components/HistoryModal.vue b/frontend/src/components/HistoryModal.vue new file mode 100644 index 0000000..58cf926 --- /dev/null +++ b/frontend/src/components/HistoryModal.vue @@ -0,0 +1,277 @@ + + + diff --git a/frontend/src/components/ui/Button.vue b/frontend/src/components/ui/Button.vue new file mode 100644 index 0000000..356757b --- /dev/null +++ b/frontend/src/components/ui/Button.vue @@ -0,0 +1,62 @@ + + + diff --git a/frontend/src/components/ui/Card.vue b/frontend/src/components/ui/Card.vue new file mode 100644 index 0000000..aaf59f9 --- /dev/null +++ b/frontend/src/components/ui/Card.vue @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/frontend/src/components/ui/Progress.vue b/frontend/src/components/ui/Progress.vue new file mode 100644 index 0000000..5b79aed --- /dev/null +++ b/frontend/src/components/ui/Progress.vue @@ -0,0 +1,20 @@ + + + \ No newline at end of file diff --git a/frontend/src/lib/fingerprint.ts b/frontend/src/lib/fingerprint.ts new file mode 100644 index 0000000..62d57db --- /dev/null +++ b/frontend/src/lib/fingerprint.ts @@ -0,0 +1,65 @@ +import FingerprintJS from "@fingerprintjs/fingerprintjs"; + +// FingerprintJS 实例缓存 +let fpInstance: any = null; + +// 初始化 FingerprintJS +async function initFingerprint() { + if (!fpInstance) { + fpInstance = await FingerprintJS.load(); + } + return fpInstance; +} + +// 生成指纹哈希 +export async function generateFingerprintHash(): Promise { + try { + const fp = await initFingerprint(); + const result = await fp.get(); + return result.visitorId; + } catch (error) { + console.warn("FingerprintJS failed, falling back to simple hash:", error); + // 降级方案:使用简单的浏览器信息生成哈希 + return await generateFallbackHash(); + } +} + +// 降级方案:简单的指纹生成 +async function generateFallbackHash(): Promise { + const data = { + userAgent: navigator.userAgent, + language: navigator.language, + screenResolution: `${screen.width}x${screen.height}`, + timezone: Intl.DateTimeFormat().resolvedOptions().timeZone, + colorDepth: screen.colorDepth, + pixelRatio: window.devicePixelRatio, + cookieEnabled: navigator.cookieEnabled, + }; + + const dataString = JSON.stringify(data); + const encoder = new TextEncoder(); + const dataBuffer = encoder.encode(dataString); + const hashBuffer = await crypto.subtle.digest("SHA-256", dataBuffer); + const hashArray = Array.from(new Uint8Array(hashBuffer)); + const hashHex = hashArray + .map((b) => b.toString(16).padStart(2, "0")) + .join(""); + + return hashHex; +} + +// 获取或生成用户指纹ID +export async function getUserFingerprintId(): Promise { + const storageKey = "tgstate_user_fingerprint"; + + // 尝试从localStorage获取已存储的指纹 + let fingerprintId = localStorage.getItem(storageKey); + + if (!fingerprintId) { + // 生成新的指纹ID + fingerprintId = await generateFingerprintHash(); + localStorage.setItem(storageKey, fingerprintId); + } + + return fingerprintId; +} diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts new file mode 100644 index 0000000..9bc3a1b --- /dev/null +++ b/frontend/src/lib/utils.ts @@ -0,0 +1,63 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} + +export function formatFileSize(bytes: number): string { + if (bytes === 0) return '0 Bytes' + + const k = 1024 + const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'] + const i = Math.floor(Math.log(bytes) / Math.log(k)) + + return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i] +} + +export function formatSpeed(bytesPerSecond: number): string { + return formatFileSize(bytesPerSecond) + '/s' +} + +export function formatTime(seconds: number): string { + if (seconds < 60) { + return `${Math.round(seconds)}s` + } else if (seconds < 3600) { + const minutes = Math.floor(seconds / 60) + const remainingSeconds = Math.round(seconds % 60) + return `${minutes}m ${remainingSeconds}s` + } else { + const hours = Math.floor(seconds / 3600) + const minutes = Math.floor((seconds % 3600) / 60) + return `${hours}h ${minutes}m` + } +} + +export function generateUploadId(): string { + return Date.now().toString(36) + Math.random().toString(36).substr(2) +} + +export async function copyToClipboard(text: string): Promise { + try { + if (navigator.clipboard && window.isSecureContext) { + await navigator.clipboard.writeText(text) + return true + } else { + // Fallback for older browsers + const textArea = document.createElement('textarea') + textArea.value = text + textArea.style.position = 'fixed' + textArea.style.left = '-999999px' + textArea.style.top = '-999999px' + document.body.appendChild(textArea) + textArea.focus() + textArea.select() + const result = document.execCommand('copy') + textArea.remove() + return result + } + } catch (err) { + console.error('Failed to copy text: ', err) + return false + } +} \ No newline at end of file diff --git a/frontend/src/main.ts b/frontend/src/main.ts new file mode 100644 index 0000000..5a6e246 --- /dev/null +++ b/frontend/src/main.ts @@ -0,0 +1,5 @@ +import { createApp } from 'vue' +import './style.css' +import App from './App.vue' + +createApp(App).mount('#app') \ No newline at end of file diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts new file mode 100644 index 0000000..f0c9e70 --- /dev/null +++ b/frontend/src/services/api.ts @@ -0,0 +1,146 @@ +import axios from "axios"; + +export interface UploadResponse { + code: number; + message: string; + imgUrl?: string; + proxyUrl?: string; + shortUrl?: string; + shortFileUrl?: string; + name?: string; + chunkId?: string; +} + +export interface MergeRequest { + uploadId: string; + fileName: string; + chunkIds: string[]; + fileSize: number; +} + +export interface FileRecord { + fileId: string; + filename: string; + ip: string; + time: string; + userFingerprint?: string; + shared: boolean; +} + +export interface PaginationInfo { + page: number; + pageSize: number; + total: number; + hasMore: boolean; +} + +export interface HistoryResponse { + code: number; + message: string; + data?: { + files: FileRecord[]; + pagination: PaginationInfo; + }; +} + +const api = axios.create({ + baseURL: "/", + timeout: 30000, +}); + +export const uploadFile = async ( + file: File, + userFingerprint?: string, + shared?: boolean, + onProgress?: (progress: number) => void +): Promise => { + const formData = new FormData(); + formData.append("file", file); + if (userFingerprint) { + formData.append("userFingerprint", userFingerprint); + } + if (shared !== undefined) { + formData.append("shared", shared.toString()); + } + + const response = await api.post("/api", formData, { + headers: { + "Content-Type": "multipart/form-data", + }, + onUploadProgress: (progressEvent) => { + if (progressEvent.total && onProgress) { + const progress = (progressEvent.loaded / progressEvent.total) * 100; + onProgress(progress); + } + }, + }); + + return response.data; +}; + +export const uploadChunk = async ( + chunk: Blob, + chunkIndex: number, + uploadId: string, + fileName: string, + userFingerprint?: string, + onProgress?: (progress: number) => void +): Promise => { + const formData = new FormData(); + formData.append("file", chunk, `${fileName}.chunk.${chunkIndex}`); + formData.append("chunkIndex", chunkIndex.toString()); + formData.append("uploadId", uploadId); + formData.append("fileName", fileName); + if (userFingerprint) { + formData.append("userFingerprint", userFingerprint); + } + + const response = await api.post("/api/chunk", formData, { + headers: { + "Content-Type": "multipart/form-data", + }, + onUploadProgress: (progressEvent) => { + if (progressEvent.total && onProgress) { + const progress = (progressEvent.loaded / progressEvent.total) * 100; + onProgress(progress); + } + }, + }); + + return response.data; +}; + +export const mergeChunks = async ( + request: MergeRequest & { userFingerprint?: string; shared?: boolean } +): Promise => { + const response = await api.post("/api/merge", request, { + headers: { + "Content-Type": "application/json", + }, + }); + + return response.data; +}; + +// 获取用户历史文件 +export const getUserHistory = async ( + userFingerprint: string, + page = 1, + pageSize = 20 +): Promise => { + const response = await api.get( + `/api/history?fingerprint=${encodeURIComponent(userFingerprint)}&page=${page}&pageSize=${pageSize}` + ); + return response.data; +}; + +// 获取广场文件 +export const getPlazaFiles = async ( + page = 1, + pageSize = 20 +): Promise => { + const response = await api.get( + `/api/plaza?page=${page}&pageSize=${pageSize}` + ); + return response.data; +}; diff --git a/frontend/src/style.css b/frontend/src/style.css new file mode 100644 index 0000000..e27c680 --- /dev/null +++ b/frontend/src/style.css @@ -0,0 +1,59 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + --primary: 221.2 83.2% 53.3%; + --primary-foreground: 210 40% 98%; + --secondary: 210 40% 96%; + --secondary-foreground: 222.2 84% 4.9%; + --muted: 210 40% 96%; + --muted-foreground: 215.4 16.3% 46.9%; + --accent: 210 40% 96%; + --accent-foreground: 222.2 84% 4.9%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --ring: 221.2 83.2% 53.3%; + --radius: 0.5rem; + } + + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + --primary: 217.2 91.2% 59.8%; + --primary-foreground: 222.2 84% 4.9%; + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 224.3 76.3% 94.1%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} \ No newline at end of file diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 0000000..615c9b7 --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,77 @@ +/** @type {import('tailwindcss').Config} */ +export default { + darkMode: ["class"], + content: [ + './pages/**/*.{ts,tsx,vue}', + './components/**/*.{ts,tsx,vue}', + './app/**/*.{ts,tsx,vue}', + './src/**/*.{ts,tsx,vue}', + ], + prefix: "", + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, + extend: { + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: "0" }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + }, + }, + }, + plugins: [require("tailwindcss-animate")], +} \ No newline at end of file diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..b68745b --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + + /* Path mapping */ + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], + "references": [{ "path": "./tsconfig.node.json" }] +} \ No newline at end of file diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 0000000..099658c --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} \ No newline at end of file diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..864cecd --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,50 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import path from 'path' + +export default defineConfig({ + plugins: [ + vue({ + script: { + defineModel: true, + propsDestructure: true + } + }) + ], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, + server: { + proxy: { + '/api': { + target: 'http://localhost:8088', + changeOrigin: true, + }, + '/d/': { + target: 'http://localhost:8088', + changeOrigin: true, + }, + '/s/': { + target: 'http://localhost:8088', + changeOrigin: true, + } + } + }, + build: { + outDir: '../assets/dist', + emptyOutDir: true, + rollupOptions: { + output: { + manualChunks: { + vendor: ['vue', 'axios'], + ui: ['lucide-vue-next'] + } + } + } + }, + esbuild: { + target: 'es2020' + } +}) \ No newline at end of file diff --git a/main.go b/main.go index 9242bbd..ef234e7 100644 --- a/main.go +++ b/main.go @@ -61,8 +61,14 @@ func web() { http.HandleFunc("/api", control.Middleware(control.UploadAPI)) http.HandleFunc("/api/chunk", control.Middleware(control.ChunkUploadAPI)) http.HandleFunc("/api/merge", control.Middleware(control.MergeChunksAPI)) + http.HandleFunc("/api/history", control.HistoryAPI) + http.HandleFunc("/api/plaza", control.PlazaAPI) http.HandleFunc("/files", control.Middleware(control.FilesAPI)) http.HandleFunc("/shortlinks", control.Middleware(control.ShortLinksAPI)) + + // 静态文件服务 + http.HandleFunc("/assets/", control.ServeDistFiles) + http.HandleFunc("/", control.Middleware(control.Index)) } From 5069b09a7b5b66ee63b28437037427b6edbd20e0 Mon Sep 17 00:00:00 2001 From: bestk <1138493417@qq.com> Date: Fri, 15 Aug 2025 15:17:38 +0800 Subject: [PATCH 17/26] fix timeout --- assets/dist/assets/index-BPZYI3YT.js | 1 - assets/dist/assets/index-BUrt7Nle.css | 1 - assets/dist/assets/index-DAOM3x7l.css | 1 + assets/dist/assets/index-fwhVyLpw.js | 8 ++++++++ assets/dist/assets/vendor-D_MnsSZ4.js | 22 ++++++++++++++++++++++ assets/dist/assets/vendor-pQYyzRmo.js | 22 ---------------------- assets/dist/index.html | 6 +++--- frontend/src/services/api.ts | 2 +- 8 files changed, 35 insertions(+), 28 deletions(-) delete mode 100644 assets/dist/assets/index-BPZYI3YT.js delete mode 100644 assets/dist/assets/index-BUrt7Nle.css create mode 100644 assets/dist/assets/index-DAOM3x7l.css create mode 100644 assets/dist/assets/index-fwhVyLpw.js create mode 100644 assets/dist/assets/vendor-D_MnsSZ4.js delete mode 100644 assets/dist/assets/vendor-pQYyzRmo.js diff --git a/assets/dist/assets/index-BPZYI3YT.js b/assets/dist/assets/index-BPZYI3YT.js deleted file mode 100644 index 0677162..0000000 --- a/assets/dist/assets/index-BPZYI3YT.js +++ /dev/null @@ -1 +0,0 @@ -import{a as Re,d as te,u as je,c as Le,b as N,o as S,m as Ge,r as Me,n as de,e as ue,f as x,g as Ee,h as B,i as K,j as O,w as q,k as ie,l as J,t as j,F as ye,p as xe,q as we,s as Oe}from"./vendor-pQYyzRmo.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))o(s);new MutationObserver(s=>{for(const n of s)if(n.type==="childList")for(const d of n.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&o(d)}).observe(document,{childList:!0,subtree:!0});function r(s){const n={};return s.integrity&&(n.integrity=s.integrity),s.referrerPolicy&&(n.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?n.credentials="include":s.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function o(s){if(s.ep)return;s.ep=!0;const n=r(s);fetch(s.href,n)}})();const be=Re.create({baseURL:"/",timeout:3e4}),Ve=async(e,t)=>{const r=new FormData;return r.append("file",e),(await be.post("/api",r,{headers:{"Content-Type":"multipart/form-data"},onUploadProgress:s=>{if(s.total&&t){const n=s.loaded/s.total*100;t(n)}}})).data},De=async(e,t,r,o,s)=>{const n=new FormData;return n.append("file",e,`${o}.chunk.${t}`),n.append("chunkIndex",t.toString()),n.append("uploadId",r),n.append("fileName",o),(await be.post("/api/chunk",n,{headers:{"Content-Type":"multipart/form-data"},onUploadProgress:l=>{if(l.total&&s){const m=l.loaded/l.total*100;s(m)}}})).data},Be=async e=>(await be.post("/api/merge",e,{headers:{"Content-Type":"application/json"}})).data;function Ae(e){var t,r,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var s=e.length;for(t=0;t{const t=He(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:o}=e;return{getClassGroupId:d=>{const l=d.split(he);return l[0]===""&&l.length!==1&&l.shift(),Ne(l,t)||qe(d)},getConflictingClassGroupIds:(d,l)=>{const m=r[d]||[];return l&&o[d]?[...m,...o[d]]:m}}},Ne=(e,t)=>{var d;if(e.length===0)return t.classGroupId;const r=e[0],o=t.nextPart.get(r),s=o?Ne(e.slice(1),o):void 0;if(s)return s;if(t.validators.length===0)return;const n=e.join(he);return(d=t.validators.find(({validator:l})=>l(n)))==null?void 0:d.classGroupId},ke=/^\[(.+)\]$/,qe=e=>{if(ke.test(e)){const t=ke.exec(e)[1],r=t==null?void 0:t.substring(0,t.indexOf(":"));if(r)return"arbitrary.."+r}},He=e=>{const{theme:t,prefix:r}=e,o={nextPart:new Map,validators:[]};return Ze(Object.entries(e.classGroups),r).forEach(([n,d])=>{me(d,o,n,t)}),o},me=(e,t,r,o)=>{e.forEach(s=>{if(typeof s=="string"){const n=s===""?t:Ce(t,s);n.classGroupId=r;return}if(typeof s=="function"){if(Ke(s)){me(s(o),t,r,o);return}t.validators.push({validator:s,classGroupId:r});return}Object.entries(s).forEach(([n,d])=>{me(d,Ce(t,n),r,o)})})},Ce=(e,t)=>{let r=e;return t.split(he).forEach(o=>{r.nextPart.has(o)||r.nextPart.set(o,{nextPart:new Map,validators:[]}),r=r.nextPart.get(o)}),r},Ke=e=>e.isThemeGetter,Ze=(e,t)=>t?e.map(([r,o])=>{const s=o.map(n=>typeof n=="string"?t+n:typeof n=="object"?Object.fromEntries(Object.entries(n).map(([d,l])=>[t+d,l])):n);return[r,s]}):e,Xe=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,r=new Map,o=new Map;const s=(n,d)=>{r.set(n,d),t++,t>e&&(t=0,o=r,r=new Map)};return{get(n){let d=r.get(n);if(d!==void 0)return d;if((d=o.get(n))!==void 0)return s(n,d),d},set(n,d){r.has(n)?r.set(n,d):s(n,d)}}},Te="!",Je=e=>{const{separator:t,experimentalParseClassName:r}=e,o=t.length===1,s=t[0],n=t.length,d=l=>{const m=[];let f=0,h=0,k;for(let g=0;gh?k-h:void 0;return{modifiers:m,hasImportantModifier:T,baseClassName:M,maybePostfixModifierPosition:y}};return r?l=>r({className:l,parseClassName:d}):d},Qe=e=>{if(e.length<=1)return e;const t=[];let r=[];return e.forEach(o=>{o[0]==="["?(t.push(...r.sort(),o),r=[]):r.push(o)}),t.push(...r.sort()),t},Ye=e=>({cache:Xe(e.cacheSize),parseClassName:Je(e),...We(e)}),et=/\s+/,tt=(e,t)=>{const{parseClassName:r,getClassGroupId:o,getConflictingClassGroupIds:s}=t,n=[],d=e.trim().split(et);let l="";for(let m=d.length-1;m>=0;m-=1){const f=d[m],{modifiers:h,hasImportantModifier:k,baseClassName:w,maybePostfixModifierPosition:T}=r(f);let M=!!T,y=o(M?w.substring(0,T):w);if(!y){if(!M){l=f+(l.length>0?" "+l:l);continue}if(y=o(w),!y){l=f+(l.length>0?" "+l:l);continue}M=!1}const g=Qe(h).join(":"),C=k?g+Te:g,_=C+y;if(n.includes(_))continue;n.push(_);const L=s(y,M);for(let U=0;U0?" "+l:l)}return l};function rt(){let e=0,t,r,o="";for(;e{if(typeof e=="string")return e;let t,r="";for(let o=0;ok(h),e());return r=Ye(f),o=r.cache.get,s=r.cache.set,n=l,l(m)}function l(m){const f=o(m);if(f)return f;const h=tt(m,r);return s(m,h),h}return function(){return n(rt.apply(null,arguments))}}const b=e=>{const t=r=>r[e]||[];return t.isThemeGetter=!0,t},Ie=/^\[(?:([a-z-]+):)?(.+)\]$/i,nt=/^\d+\/\d+$/,st=new Set(["px","full","screen"]),at=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,lt=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,it=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,ct=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,dt=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,E=e=>Z(e)||st.has(e)||nt.test(e),V=e=>X(e,"length",vt),Z=e=>!!e&&!Number.isNaN(Number(e)),ge=e=>X(e,"number",Z),Q=e=>!!e&&Number.isInteger(Number(e)),ut=e=>e.endsWith("%")&&Z(e.slice(0,-1)),u=e=>Ie.test(e),D=e=>at.test(e),pt=new Set(["length","size","percentage"]),ft=e=>X(e,pt,Ue),gt=e=>X(e,"position",Ue),mt=new Set(["image","url"]),bt=e=>X(e,mt,xt),ht=e=>X(e,"",yt),Y=()=>!0,X=(e,t,r)=>{const o=Ie.exec(e);return o?o[1]?typeof t=="string"?o[1]===t:t.has(o[1]):r(o[2]):!1},vt=e=>lt.test(e)&&!it.test(e),Ue=()=>!1,yt=e=>ct.test(e),xt=e=>dt.test(e),wt=()=>{const e=b("colors"),t=b("spacing"),r=b("blur"),o=b("brightness"),s=b("borderColor"),n=b("borderRadius"),d=b("borderSpacing"),l=b("borderWidth"),m=b("contrast"),f=b("grayscale"),h=b("hueRotate"),k=b("invert"),w=b("gap"),T=b("gradientColorStops"),M=b("gradientColorStopPositions"),y=b("inset"),g=b("margin"),C=b("opacity"),_=b("padding"),L=b("saturate"),U=b("scale"),W=b("sepia"),re=b("skew"),oe=b("space"),ne=b("translate"),c=()=>["auto","contain","none"],a=()=>["auto","hidden","clip","visible","scroll"],i=()=>["auto",u,t],p=()=>[u,t],z=()=>["",E,V],v=()=>["auto",Z,u],F=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],G=()=>["solid","dashed","dotted","double","none"],R=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],$=()=>["start","end","center","between","around","evenly","stretch"],I=()=>["","0",u],P=()=>["auto","avoid","all","avoid-page","page","left","right","column"],A=()=>[Z,u];return{cacheSize:500,separator:":",theme:{colors:[Y],spacing:[E,V],blur:["none","",D,u],brightness:A(),borderColor:[e],borderRadius:["none","","full",D,u],borderSpacing:p(),borderWidth:z(),contrast:A(),grayscale:I(),hueRotate:A(),invert:I(),gap:p(),gradientColorStops:[e],gradientColorStopPositions:[ut,V],inset:i(),margin:i(),opacity:A(),padding:p(),saturate:A(),scale:A(),sepia:I(),skew:A(),space:p(),translate:p()},classGroups:{aspect:[{aspect:["auto","square","video",u]}],container:["container"],columns:[{columns:[D]}],"break-after":[{"break-after":P()}],"break-before":[{"break-before":P()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...F(),u]}],overflow:[{overflow:a()}],"overflow-x":[{"overflow-x":a()}],"overflow-y":[{"overflow-y":a()}],overscroll:[{overscroll:c()}],"overscroll-x":[{"overscroll-x":c()}],"overscroll-y":[{"overscroll-y":c()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[y]}],"inset-x":[{"inset-x":[y]}],"inset-y":[{"inset-y":[y]}],start:[{start:[y]}],end:[{end:[y]}],top:[{top:[y]}],right:[{right:[y]}],bottom:[{bottom:[y]}],left:[{left:[y]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Q,u]}],basis:[{basis:i()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",u]}],grow:[{grow:I()}],shrink:[{shrink:I()}],order:[{order:["first","last","none",Q,u]}],"grid-cols":[{"grid-cols":[Y]}],"col-start-end":[{col:["auto",{span:["full",Q,u]},u]}],"col-start":[{"col-start":v()}],"col-end":[{"col-end":v()}],"grid-rows":[{"grid-rows":[Y]}],"row-start-end":[{row:["auto",{span:[Q,u]},u]}],"row-start":[{"row-start":v()}],"row-end":[{"row-end":v()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",u]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",u]}],gap:[{gap:[w]}],"gap-x":[{"gap-x":[w]}],"gap-y":[{"gap-y":[w]}],"justify-content":[{justify:["normal",...$()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...$(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...$(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[_]}],px:[{px:[_]}],py:[{py:[_]}],ps:[{ps:[_]}],pe:[{pe:[_]}],pt:[{pt:[_]}],pr:[{pr:[_]}],pb:[{pb:[_]}],pl:[{pl:[_]}],m:[{m:[g]}],mx:[{mx:[g]}],my:[{my:[g]}],ms:[{ms:[g]}],me:[{me:[g]}],mt:[{mt:[g]}],mr:[{mr:[g]}],mb:[{mb:[g]}],ml:[{ml:[g]}],"space-x":[{"space-x":[oe]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[oe]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",u,t]}],"min-w":[{"min-w":[u,t,"min","max","fit"]}],"max-w":[{"max-w":[u,t,"none","full","min","max","fit","prose",{screen:[D]},D]}],h:[{h:[u,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[u,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[u,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[u,t,"auto","min","max","fit"]}],"font-size":[{text:["base",D,V]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",ge]}],"font-family":[{font:[Y]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",u]}],"line-clamp":[{"line-clamp":["none",Z,ge]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",E,u]}],"list-image":[{"list-image":["none",u]}],"list-style-type":[{list:["none","disc","decimal",u]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[C]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[C]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...G(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",E,V]}],"underline-offset":[{"underline-offset":["auto",E,u]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:p()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",u]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",u]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[C]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...F(),gt]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",ft]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},bt]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[M]}],"gradient-via-pos":[{via:[M]}],"gradient-to-pos":[{to:[M]}],"gradient-from":[{from:[T]}],"gradient-via":[{via:[T]}],"gradient-to":[{to:[T]}],rounded:[{rounded:[n]}],"rounded-s":[{"rounded-s":[n]}],"rounded-e":[{"rounded-e":[n]}],"rounded-t":[{"rounded-t":[n]}],"rounded-r":[{"rounded-r":[n]}],"rounded-b":[{"rounded-b":[n]}],"rounded-l":[{"rounded-l":[n]}],"rounded-ss":[{"rounded-ss":[n]}],"rounded-se":[{"rounded-se":[n]}],"rounded-ee":[{"rounded-ee":[n]}],"rounded-es":[{"rounded-es":[n]}],"rounded-tl":[{"rounded-tl":[n]}],"rounded-tr":[{"rounded-tr":[n]}],"rounded-br":[{"rounded-br":[n]}],"rounded-bl":[{"rounded-bl":[n]}],"border-w":[{border:[l]}],"border-w-x":[{"border-x":[l]}],"border-w-y":[{"border-y":[l]}],"border-w-s":[{"border-s":[l]}],"border-w-e":[{"border-e":[l]}],"border-w-t":[{"border-t":[l]}],"border-w-r":[{"border-r":[l]}],"border-w-b":[{"border-b":[l]}],"border-w-l":[{"border-l":[l]}],"border-opacity":[{"border-opacity":[C]}],"border-style":[{border:[...G(),"hidden"]}],"divide-x":[{"divide-x":[l]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[l]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[C]}],"divide-style":[{divide:G()}],"border-color":[{border:[s]}],"border-color-x":[{"border-x":[s]}],"border-color-y":[{"border-y":[s]}],"border-color-s":[{"border-s":[s]}],"border-color-e":[{"border-e":[s]}],"border-color-t":[{"border-t":[s]}],"border-color-r":[{"border-r":[s]}],"border-color-b":[{"border-b":[s]}],"border-color-l":[{"border-l":[s]}],"divide-color":[{divide:[s]}],"outline-style":[{outline:["",...G()]}],"outline-offset":[{"outline-offset":[E,u]}],"outline-w":[{outline:[E,V]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:z()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[C]}],"ring-offset-w":[{"ring-offset":[E,V]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",D,ht]}],"shadow-color":[{shadow:[Y]}],opacity:[{opacity:[C]}],"mix-blend":[{"mix-blend":[...R(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":R()}],filter:[{filter:["","none"]}],blur:[{blur:[r]}],brightness:[{brightness:[o]}],contrast:[{contrast:[m]}],"drop-shadow":[{"drop-shadow":["","none",D,u]}],grayscale:[{grayscale:[f]}],"hue-rotate":[{"hue-rotate":[h]}],invert:[{invert:[k]}],saturate:[{saturate:[L]}],sepia:[{sepia:[W]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[r]}],"backdrop-brightness":[{"backdrop-brightness":[o]}],"backdrop-contrast":[{"backdrop-contrast":[m]}],"backdrop-grayscale":[{"backdrop-grayscale":[f]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[h]}],"backdrop-invert":[{"backdrop-invert":[k]}],"backdrop-opacity":[{"backdrop-opacity":[C]}],"backdrop-saturate":[{"backdrop-saturate":[L]}],"backdrop-sepia":[{"backdrop-sepia":[W]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[d]}],"border-spacing-x":[{"border-spacing-x":[d]}],"border-spacing-y":[{"border-spacing-y":[d]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",u]}],duration:[{duration:A()}],ease:[{ease:["linear","in","out","in-out",u]}],delay:[{delay:A()}],animate:[{animate:["none","spin","ping","pulse","bounce",u]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[U]}],"scale-x":[{"scale-x":[U]}],"scale-y":[{"scale-y":[U]}],rotate:[{rotate:[Q,u]}],"translate-x":[{"translate-x":[ne]}],"translate-y":[{"translate-y":[ne]}],"skew-x":[{"skew-x":[re]}],"skew-y":[{"skew-y":[re]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",u]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",u]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":p()}],"scroll-mx":[{"scroll-mx":p()}],"scroll-my":[{"scroll-my":p()}],"scroll-ms":[{"scroll-ms":p()}],"scroll-me":[{"scroll-me":p()}],"scroll-mt":[{"scroll-mt":p()}],"scroll-mr":[{"scroll-mr":p()}],"scroll-mb":[{"scroll-mb":p()}],"scroll-ml":[{"scroll-ml":p()}],"scroll-p":[{"scroll-p":p()}],"scroll-px":[{"scroll-px":p()}],"scroll-py":[{"scroll-py":p()}],"scroll-ps":[{"scroll-ps":p()}],"scroll-pe":[{"scroll-pe":p()}],"scroll-pt":[{"scroll-pt":p()}],"scroll-pr":[{"scroll-pr":p()}],"scroll-pb":[{"scroll-pb":p()}],"scroll-pl":[{"scroll-pl":p()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",u]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[E,V,ge]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},kt=ot(wt);function ve(...e){return kt(Pe(e))}function Ct(e){if(e===0)return"0 Bytes";const t=1024,r=["Bytes","KB","MB","GB","TB"],o=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/Math.pow(t,o)).toFixed(2))+" "+r[o]}function _t(e){return Ct(e)+"/s"}function zt(e){if(e<60)return`${Math.round(e)}s`;if(e<3600){const t=Math.floor(e/60),r=Math.round(e%60);return`${t}m ${r}s`}else{const t=Math.floor(e/3600),r=Math.floor(e%3600/60);return`${t}h ${r}m`}}function H(){return Date.now().toString(36)+Math.random().toString(36).substr(2)}async function St(e){try{if(navigator.clipboard&&window.isSecureContext)return await navigator.clipboard.writeText(e),!0;{const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.left="-999999px",t.style.top="-999999px",document.body.appendChild(t),t.focus(),t.select();const r=document.execCommand("copy");return t.remove(),r}}catch(t){return console.error("Failed to copy text: ",t),!1}}const _e=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,ze=Pe,Mt=(e,t)=>r=>{var o;if((t==null?void 0:t.variants)==null)return ze(e,r==null?void 0:r.class,r==null?void 0:r.className);const{variants:s,defaultVariants:n}=t,d=Object.keys(s).map(f=>{const h=r==null?void 0:r[f],k=n==null?void 0:n[f];if(h===null)return null;const w=_e(h)||_e(k);return s[f][w]}),l=r&&Object.entries(r).reduce((f,h)=>{let[k,w]=h;return w===void 0||(f[k]=w),f},{}),m=t==null||(o=t.compoundVariants)===null||o===void 0?void 0:o.reduce((f,h)=>{let{class:k,className:w,...T}=h;return Object.entries(T).every(M=>{let[y,g]=M;return Array.isArray(g)?g.includes({...n,...l}[y]):{...n,...l}[y]===g})?[...f,k,w]:f},[]);return ze(e,d,m,r==null?void 0:r.class,r==null?void 0:r.className)},At=["disabled"],ee=te({__name:"Button",props:{variant:{},size:{},disabled:{type:Boolean}},setup(e){const t=Mt("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),r=e,o=je(),s=Le(()=>ve(t({variant:r.variant,size:r.size}),o.class));return(n,d)=>(S(),N("button",Ge({class:s.value,disabled:n.disabled},n.$attrs),[Me(n.$slots,"default")],16,At))}}),Pt=te({__name:"Card",setup(e){return(t,r)=>(S(),N("div",{class:de(ue(ve)("rounded-lg border bg-card text-card-foreground shadow-sm",t.$attrs.class))},[Me(t.$slots,"default")],2))}}),Nt=te({__name:"Progress",props:{modelValue:{}},setup(e){return(t,r)=>(S(),N("div",{class:de(ue(ve)("relative h-4 w-full overflow-hidden rounded-full bg-secondary",t.$attrs.class))},[x("div",{class:"h-full w-full flex-1 bg-primary transition-all duration-300 ease-out",style:Ee({transform:`translateX(-${100-(t.modelValue||0)}%)`})},null,4)],2))}});var Tt=Object.defineProperty,$t=(e,t,r)=>t in e?Tt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Se=(e,t,r)=>$t(e,typeof t!="symbol"?t+"":t,r);const It={class:"w-full max-w-2xl mx-auto p-6"},Ut={key:0,class:"space-y-4 mb-6"},Ft={class:"flex justify-between items-center mb-2"},Rt={class:"font-medium text-gray-900 truncate flex-1 mr-4"},jt={class:"text-sm text-gray-500 whitespace-nowrap"},Lt={class:"mb-2"},Gt={class:"flex justify-between items-center text-xs text-gray-500"},Et={key:0},Ot={key:1,class:"space-y-4"},Vt={class:"flex items-start justify-between"},Dt={class:"flex-1"},Bt={class:"font-medium mb-2"},Wt={key:0,class:"mb-3"},qt=["href"],Ht={key:1,class:"flex flex-wrap gap-2"},Kt={key:2,class:"text-red-600"},ce=10*1024*1024,Zt=3,Xt=te({__name:"FileUpload",setup(e){const t=B(),r=B(),o=B([]),s=B(!1),n=B(!1),d=B([]),l=B([]),m=c=>{c.preventDefault(),s.value=!0},f=c=>{c.preventDefault(),s.value=!0},h=c=>{var a;c.preventDefault(),(a=t.value)!=null&&a.contains(c.relatedTarget)||(s.value=!1)},k=c=>{var i;c.preventDefault(),s.value=!1;const a=Array.from(((i=c.dataTransfer)==null?void 0:i.files)||[]);o.value=a},w=c=>{const a=c.target,i=Array.from(a.files||[]);o.value=i},T=c=>{const a=[".jpg",".jpeg",".png",".gif",".webp",".bmp",".svg"],i=c.toLowerCase().substring(c.lastIndexOf("."));return a.includes(i)},M=async(c,a)=>{await St(c)&&console.log(a)},y=async(c,a)=>{const i=`${a}`;await M(i,"HTML copied!")},g=async(c,a)=>{const i=`![${a}](${c})`;await M(i,"Markdown copied!")},C=c=>({id:H(),fileName:c,progress:0,status:"Starting upload...",speed:0,eta:0}),_=(c,a,i,p,z)=>{const v=d.value.find(F=>F.id===c);v&&(v.progress=a,i&&(v.status=i),p!==void 0&&(v.speed=p),z!==void 0&&(v.eta=z))},L=c=>{const a=d.value.findIndex(i=>i.id===c);a>-1&&d.value.splice(a,1)},U=c=>{l.value.unshift(c)},W=async c=>{const a=C(c.name);d.value.push(a);const i=Date.now();let p=0,z=i;try{const v=await Ve(c,F=>{const G=Date.now(),R=(G-z)/1e3,$=F-p;if(R>.5&&$>0){const I=$/100*c.size/R,P=100-F,A=P>0?P/100*c.size/I:0;_(a.id,F,"Uploading...",I,A),p=F,z=G}else _(a.id,F,"Uploading...")});if(v.code===1)_(a.id,100,"Upload complete!"),setTimeout(()=>{L(a.id),U({id:H(),fileName:c.name,success:!0,data:v})},500);else throw new Error(v.message||"Upload failed")}catch(v){L(a.id),U({id:H(),fileName:c.name,success:!1,error:v instanceof Error?v.message:"Upload failed"})}},re=async c=>{const a=Math.ceil(c.size/ce),i=H(),p=new Array(a),z=C(c.name);d.value.push(z);const v=new Array(a).fill(0),F=Date.now(),G=()=>{const $=v.reduce((pe,fe)=>pe+fe,0)/a,P=(Date.now()-F)/1e3,A=$/100*c.size/P,se=100-$,ae=se>0?se/100*c.size/A:0;_(z.id,$,"Uploading...",A,ae)};try{const R=new ne(Zt),$=[];for(let P=0;P{try{const ae=P*ce,pe=Math.min(ae+ce,c.size),fe=c.slice(ae,pe),le=await De(fe,P,i,c.name,Fe=>{v[P]=Fe,G()});if(le.code===1&&le.chunkId)p[P]=le.chunkId,v[P]=100,G();else throw new Error(le.message||"Chunk upload failed")}finally{se()}});$.push(A)}await Promise.all($),_(z.id,100,"Merging chunks...");const I=await Be({uploadId:i,fileName:c.name,chunkIds:p,fileSize:c.size});if(I.code===1)_(z.id,100,"Upload complete!"),setTimeout(()=>{L(z.id),U({id:H(),fileName:c.name,success:!0,data:I})},500);else throw new Error(I.message||"Merge failed")}catch(R){L(z.id),U({id:H(),fileName:c.name,success:!1,error:R instanceof Error?R.message:"Upload failed"})}},oe=async()=>{if(!(o.value.length===0||n.value)){n.value=!0;try{for(const c of o.value)c.size>ce?await re(c):await W(c)}finally{n.value=!1,o.value=[],r.value&&(r.value.value="")}}};class ne{constructor(a){Se(this,"permits"),Se(this,"waiting",[]),this.permits=a}async acquire(){return new Promise(a=>{this.permits>0?(this.permits--,a(()=>this.release())):this.waiting.push(()=>{this.permits--,a(()=>this.release())})})}release(){if(this.permits++,this.waiting.length>0){const a=this.waiting.shift();a&&a()}}}return(c,a)=>(S(),N("div",It,[a[7]||(a[7]=x("div",{class:"text-center mb-8"},[x("h1",{class:"text-3xl font-bold text-gray-900 mb-2"}," 📁 File Upload to Telegram "),x("p",{class:"text-gray-600"},"Secure, Fast, Permanent Storage")],-1)),K(Pt,{class:"p-6 mb-6"},{default:q(()=>[x("div",{ref_key:"dropZone",ref:t,class:de(["border-2 border-dashed rounded-lg p-8 text-center transition-all duration-300",s.value?"border-green-400 bg-green-50 scale-105":"border-blue-400 bg-blue-50 hover:border-blue-500 hover:bg-blue-100"]),onDragenter:ie(m,["prevent"]),onDragover:ie(f,["prevent"]),onDragleave:ie(h,["prevent"]),onDrop:ie(k,["prevent"])},[a[1]||(a[1]=x("div",{class:"text-4xl mb-4"},"📤",-1)),a[2]||(a[2]=x("p",{class:"text-gray-700 mb-4"},"Drag files here or click to select",-1)),x("input",{ref_key:"fileInput",ref:r,type:"file",multiple:"",class:"hidden",onChange:w},null,544),K(ee,{onClick:a[0]||(a[0]=()=>{var i;return(i=r.value)==null?void 0:i.click()}),variant:o.value.length>0?"secondary":"default",class:"mb-4"},{default:q(()=>[J(j(o.value.length>0?`${o.value.length} file(s) selected`:"Choose Files"),1)]),_:1},8,["variant"]),a[3]||(a[3]=x("div",{class:"flex justify-center gap-4 text-sm text-gray-500"},[x("span",null,"📊 Multiple Files"),x("span",null,"🔒 Secure"),x("span",null,"⚡ Fast")],-1))],34),K(ee,{onClick:oe,disabled:o.value.length===0||n.value,class:"w-full mt-4",size:"lg"},{default:q(()=>[J(j(n.value?"Uploading...":o.value.length===0?"🈳 No file":"⬆️ UPLOAD"),1)]),_:1},8,["disabled"])]),_:1}),d.value.length>0?(S(),N("div",Ut,[(S(!0),N(ye,null,xe(d.value,i=>(S(),N("div",{key:i.id,class:"bg-white rounded-lg border p-4 shadow-sm"},[x("div",Ft,[x("span",Rt,j(i.fileName),1),x("span",jt,j(Math.round(i.progress))+"% ",1)]),x("div",Lt,[K(Nt,{"model-value":i.progress,class:"h-2"},null,8,["model-value"])]),x("div",Gt,[x("span",null,j(i.status),1),i.speed&&i.eta?(S(),N("span",Et,j(ue(_t)(i.speed))+" • ETA: "+j(ue(zt)(i.eta)),1)):O("",!0)])]))),128))])):O("",!0),l.value.length>0?(S(),N("div",Ot,[(S(!0),N(ye,null,xe(l.value,i=>{var p,z;return S(),N("div",{key:i.id,class:de(["rounded-lg border-l-4 p-4 shadow-sm",i.success?"border-l-green-500 bg-green-50":"border-l-red-500 bg-red-50"])},[x("div",Vt,[x("div",Dt,[x("div",Bt,j(i.success?"✅":"❌")+" "+j(i.fileName),1),i.success&&((p=i.data)!=null&&p.shortFileUrl)?(S(),N("div",Wt,[x("a",{href:i.data.shortFileUrl,target:"_blank",class:"text-blue-600 hover:text-blue-800 underline break-all"},j(i.data.shortFileUrl),9,qt)])):O("",!0),i.success&&((z=i.data)!=null&&z.shortFileUrl)?(S(),N("div",Ht,[K(ee,{size:"sm",variant:"outline",onClick:v=>M(i.data.shortFileUrl,"Link copied!")},{default:q(()=>a[4]||(a[4]=[J(" Copy Link ",-1)])),_:2,__:[4]},1032,["onClick"]),T(i.fileName)?(S(),we(ee,{key:0,size:"sm",variant:"outline",onClick:v=>y(i.data.shortFileUrl,i.fileName)},{default:q(()=>a[5]||(a[5]=[J(" HTML ",-1)])),_:2,__:[5]},1032,["onClick"])):O("",!0),T(i.fileName)?(S(),we(ee,{key:1,size:"sm",variant:"outline",onClick:v=>g(i.data.shortFileUrl,i.fileName)},{default:q(()=>a[6]||(a[6]=[J(" Markdown ",-1)])),_:2,__:[6]},1032,["onClick"])):O("",!0)])):O("",!0),i.success?O("",!0):(S(),N("div",Kt,j(i.error),1))])])],2)}),128))])):O("",!0)]))}}),Jt={class:"min-h-screen bg-gray-50"},Qt=te({__name:"App",setup(e){return(t,r)=>(S(),N("div",Jt,[K(Xt)]))}});Oe(Qt).mount("#app"); diff --git a/assets/dist/assets/index-BUrt7Nle.css b/assets/dist/assets/index-BUrt7Nle.css deleted file mode 100644 index 40c216d..0000000 --- a/assets/dist/assets/index-BUrt7Nle.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 100%;--foreground: 222.2 84% 4.9%;--card: 0 0% 100%;--card-foreground: 222.2 84% 4.9%;--popover: 0 0% 100%;--popover-foreground: 222.2 84% 4.9%;--primary: 221.2 83.2% 53.3%;--primary-foreground: 210 40% 98%;--secondary: 210 40% 96%;--secondary-foreground: 222.2 84% 4.9%;--muted: 210 40% 96%;--muted-foreground: 215.4 16.3% 46.9%;--accent: 210 40% 96%;--accent-foreground: 222.2 84% 4.9%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 210 40% 98%;--border: 214.3 31.8% 91.4%;--input: 214.3 31.8% 91.4%;--ring: 221.2 83.2% 53.3%;--radius: .5rem}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.fixed{position:fixed}.relative{position:relative}.mx-auto{margin-left:auto;margin-right:auto}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mr-4{margin-right:1rem}.mt-4{margin-top:1rem}.flex{display:flex}.inline-flex{display:inline-flex}.hidden{display:none}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-2{height:.5rem}.h-4{height:1rem}.h-9{height:2.25rem}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.flex-1{flex:1 1 0%}.scale-105{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-4{gap:1rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.break-all{word-break:break-all}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.border{border-width:1px}.border-2{border-width:2px}.border-l-4{border-left-width:4px}.border-dashed{border-style:dashed}.border-blue-400{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.border-green-400{--tw-border-opacity: 1;border-color:rgb(74 222 128 / var(--tw-border-opacity, 1))}.border-input{border-color:hsl(var(--input))}.border-l-green-500{--tw-border-opacity: 1;border-left-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-l-red-500{--tw-border-opacity: 1;border-left-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.bg-background{background-color:hsl(var(--background))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-primary{background-color:hsl(var(--primary))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.text-center{text-align:center}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.duration-300{animation-duration:.3s}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.hover\:border-blue-500:hover{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-blue-100:hover{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5} diff --git a/assets/dist/assets/index-DAOM3x7l.css b/assets/dist/assets/index-DAOM3x7l.css new file mode 100644 index 0000000..eeccf1b --- /dev/null +++ b/assets/dist/assets/index-DAOM3x7l.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 100%;--foreground: 222.2 84% 4.9%;--card: 0 0% 100%;--card-foreground: 222.2 84% 4.9%;--popover: 0 0% 100%;--popover-foreground: 222.2 84% 4.9%;--primary: 221.2 83.2% 53.3%;--primary-foreground: 210 40% 98%;--secondary: 210 40% 96%;--secondary-foreground: 222.2 84% 4.9%;--muted: 210 40% 96%;--muted-foreground: 215.4 16.3% 46.9%;--accent: 210 40% 96%;--accent-foreground: 222.2 84% 4.9%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 210 40% 98%;--border: 214.3 31.8% 91.4%;--input: 214.3 31.8% 91.4%;--ring: 221.2 83.2% 53.3%;--radius: .5rem}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.right-0{right:0}.top-0{top:0}.z-50{z-index:50}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-4{margin-left:1rem}.mr-4{margin-right:1rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.flex{display:flex}.inline-flex{display:inline-flex}.hidden{display:none}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-2{height:.5rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-full{height:100%}.max-h-96{max-height:24rem}.max-h-\[80vh\]{max-height:80vh}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-4{width:1rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.flex-1{flex:1 1 0%}.scale-105{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-4{gap:1rem}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-4{border-left-width:4px}.border-dashed{border-style:dashed}.border-blue-400{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-green-400{--tw-border-opacity: 1;border-color:rgb(74 222 128 / var(--tw-border-opacity, 1))}.border-input{border-color:hsl(var(--input))}.border-transparent{border-color:transparent}.border-l-green-500{--tw-border-opacity: 1;border-left-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-l-red-500{--tw-border-opacity: 1;border-left-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.bg-background{background-color:hsl(var(--background))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-primary{background-color:hsl(var(--primary))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-opacity-50{--tw-bg-opacity: .5}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.duration-300{animation-duration:.3s}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.hover\:border-blue-500:hover{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-blue-100:hover{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-50:hover{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5} diff --git a/assets/dist/assets/index-fwhVyLpw.js b/assets/dist/assets/index-fwhVyLpw.js new file mode 100644 index 0000000..bea253e --- /dev/null +++ b/assets/dist/assets/index-fwhVyLpw.js @@ -0,0 +1,8 @@ +import{a as Jt,d as we,u as $t,c as Kt,b as V,o as P,m as Qt,r as St,n as ye,e as Ee,f as w,g as qt,h as D,w as nt,i as X,t as N,j as K,k as q,l as ae,F as Xe,p as Ye,q as Ce,s as er,v as tr,x as rr,y as ot,z as nr}from"./vendor-D_MnsSZ4.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const o of a)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function r(a){const o={};return a.integrity&&(o.integrity=a.integrity),a.referrerPolicy&&(o.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?o.credentials="include":a.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(a){if(a.ep)return;a.ep=!0;const o=r(a);fetch(a.href,o)}})();const Me=Jt.create({baseURL:"/",timeout:3e4}),or=async(e,t,r,n)=>{const a=new FormData;return a.append("file",e),t&&a.append("userFingerprint",t),r!==void 0&&a.append("shared",r.toString()),(await Me.post("/api",a,{headers:{"Content-Type":"multipart/form-data"},onUploadProgress:i=>{if(i.total&&n){const s=i.loaded/i.total*100;n(s)}}})).data},ar=async(e,t,r,n,a,o)=>{const i=new FormData;return i.append("file",e,`${n}.chunk.${t}`),i.append("chunkIndex",t.toString()),i.append("uploadId",r),i.append("fileName",n),a&&i.append("userFingerprint",a),(await Me.post("/api/chunk",i,{headers:{"Content-Type":"multipart/form-data"},onUploadProgress:l=>{if(l.total&&o){const c=l.loaded/l.total*100;o(c)}}})).data},ir=async e=>(await Me.post("/api/merge",e,{headers:{"Content-Type":"application/json"}})).data,sr=async(e,t=1,r=20)=>(await Me.get(`/api/history?fingerprint=${encodeURIComponent(e)}&page=${t}&pageSize=${r}`)).data,lr=async(e=1,t=20)=>(await Me.get(`/api/plaza?page=${e}&pageSize=${t}`)).data;function Ct(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(t=0;t{const t=dr(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:n}=e;return{getClassGroupId:i=>{const s=i.split(Qe);return s[0]===""&&s.length!==1&&s.shift(),Mt(s,t)||ur(i)},getConflictingClassGroupIds:(i,s)=>{const l=r[i]||[];return s&&n[i]?[...l,...n[i]]:l}}},Mt=(e,t)=>{var i;if(e.length===0)return t.classGroupId;const r=e[0],n=t.nextPart.get(r),a=n?Mt(e.slice(1),n):void 0;if(a)return a;if(t.validators.length===0)return;const o=e.join(Qe);return(i=t.validators.find(({validator:s})=>s(o)))==null?void 0:i.classGroupId},at=/^\[(.+)\]$/,ur=e=>{if(at.test(e)){const t=at.exec(e)[1],r=t==null?void 0:t.substring(0,t.indexOf(":"));if(r)return"arbitrary.."+r}},dr=e=>{const{theme:t,prefix:r}=e,n={nextPart:new Map,validators:[]};return pr(Object.entries(e.classGroups),r).forEach(([o,i])=>{Ue(i,n,o,t)}),n},Ue=(e,t,r,n)=>{e.forEach(a=>{if(typeof a=="string"){const o=a===""?t:it(t,a);o.classGroupId=r;return}if(typeof a=="function"){if(fr(a)){Ue(a(n),t,r,n);return}t.validators.push({validator:a,classGroupId:r});return}Object.entries(a).forEach(([o,i])=>{Ue(i,it(t,o),r,n)})})},it=(e,t)=>{let r=e;return t.split(Qe).forEach(n=>{r.nextPart.has(n)||r.nextPart.set(n,{nextPart:new Map,validators:[]}),r=r.nextPart.get(n)}),r},fr=e=>e.isThemeGetter,pr=(e,t)=>t?e.map(([r,n])=>{const a=n.map(o=>typeof o=="string"?t+o:typeof o=="object"?Object.fromEntries(Object.entries(o).map(([i,s])=>[t+i,s])):o);return[r,a]}):e,mr=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,r=new Map,n=new Map;const a=(o,i)=>{r.set(o,i),t++,t>e&&(t=0,n=r,r=new Map)};return{get(o){let i=r.get(o);if(i!==void 0)return i;if((i=n.get(o))!==void 0)return a(o,i),i},set(o,i){r.has(o)?r.set(o,i):a(o,i)}}},Ft="!",vr=e=>{const{separator:t,experimentalParseClassName:r}=e,n=t.length===1,a=t[0],o=t.length,i=s=>{const l=[];let c=0,d=0,u;for(let p=0;pd?u-d:void 0;return{modifiers:l,hasImportantModifier:y,baseClassName:S,maybePostfixModifierPosition:b}};return r?s=>r({className:s,parseClassName:i}):i},gr=e=>{if(e.length<=1)return e;const t=[];let r=[];return e.forEach(n=>{n[0]==="["?(t.push(...r.sort(),n),r=[]):r.push(n)}),t.push(...r.sort()),t},hr=e=>({cache:mr(e.cacheSize),parseClassName:vr(e),...cr(e)}),br=/\s+/,yr=(e,t)=>{const{parseClassName:r,getClassGroupId:n,getConflictingClassGroupIds:a}=t,o=[],i=e.trim().split(br);let s="";for(let l=i.length-1;l>=0;l-=1){const c=i[l],{modifiers:d,hasImportantModifier:u,baseClassName:g,maybePostfixModifierPosition:y}=r(c);let S=!!y,b=n(S?g.substring(0,y):g);if(!b){if(!S){s=c+(s.length>0?" "+s:s);continue}if(b=n(g),!b){s=c+(s.length>0?" "+s:s);continue}S=!1}const p=gr(d).join(":"),h=u?p+Ft:p,k=h+b;if(o.includes(k))continue;o.push(k);const A=a(b,S);for(let L=0;L0?" "+s:s)}return s};function wr(){let e=0,t,r,n="";for(;e{if(typeof e=="string")return e;let t,r="";for(let n=0;nu(d),e());return r=hr(c),n=r.cache.get,a=r.cache.set,o=s,s(l)}function s(l){const c=n(l);if(c)return c;const d=yr(l,r);return a(l,d),d}return function(){return o(wr.apply(null,arguments))}}const z=e=>{const t=r=>r[e]||[];return t.isThemeGetter=!0,t},It=/^\[(?:([a-z-]+):)?(.+)\]$/i,kr=/^\d+\/\d+$/,Sr=new Set(["px","full","screen"]),Cr=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Lr=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,Mr=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,Fr=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Pr=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,ne=e=>be(e)||Sr.has(e)||kr.test(e),ce=e=>xe(e,"length",Wr),be=e=>!!e&&!Number.isNaN(Number(e)),Ze=e=>xe(e,"number",be),ke=e=>!!e&&Number.isInteger(Number(e)),Ir=e=>e.endsWith("%")&&be(e.slice(0,-1)),x=e=>It.test(e),ue=e=>Cr.test(e),Vr=new Set(["length","size","percentage"]),Ar=e=>xe(e,Vr,Vt),zr=e=>xe(e,"position",Vt),Rr=new Set(["image","url"]),Tr=e=>xe(e,Rr,Nr),Gr=e=>xe(e,"",Er),Se=()=>!0,xe=(e,t,r)=>{const n=It.exec(e);return n?n[1]?typeof t=="string"?n[1]===t:t.has(n[1]):r(n[2]):!1},Wr=e=>Lr.test(e)&&!Mr.test(e),Vt=()=>!1,Er=e=>Fr.test(e),Nr=e=>Pr.test(e),_r=()=>{const e=z("colors"),t=z("spacing"),r=z("blur"),n=z("brightness"),a=z("borderColor"),o=z("borderRadius"),i=z("borderSpacing"),s=z("borderWidth"),l=z("contrast"),c=z("grayscale"),d=z("hueRotate"),u=z("invert"),g=z("gap"),y=z("gradientColorStops"),S=z("gradientColorStopPositions"),b=z("inset"),p=z("margin"),h=z("opacity"),k=z("padding"),A=z("saturate"),L=z("scale"),G=z("sepia"),_=z("skew"),j=z("space"),C=z("translate"),se=()=>["auto","contain","none"],le=()=>["auto","hidden","clip","visible","scroll"],re=()=>["auto",x,t],f=()=>[x,t],v=()=>["",ne,ce],m=()=>["auto",be,x],W=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],M=()=>["solid","dashed","dotted","double","none"],I=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],R=()=>["start","end","center","between","around","evenly","stretch"],H=()=>["","0",x],J=()=>["auto","avoid","all","avoid-page","page","left","right","column"],E=()=>[be,x];return{cacheSize:500,separator:":",theme:{colors:[Se],spacing:[ne,ce],blur:["none","",ue,x],brightness:E(),borderColor:[e],borderRadius:["none","","full",ue,x],borderSpacing:f(),borderWidth:v(),contrast:E(),grayscale:H(),hueRotate:E(),invert:H(),gap:f(),gradientColorStops:[e],gradientColorStopPositions:[Ir,ce],inset:re(),margin:re(),opacity:E(),padding:f(),saturate:E(),scale:E(),sepia:H(),skew:E(),space:f(),translate:f()},classGroups:{aspect:[{aspect:["auto","square","video",x]}],container:["container"],columns:[{columns:[ue]}],"break-after":[{"break-after":J()}],"break-before":[{"break-before":J()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...W(),x]}],overflow:[{overflow:le()}],"overflow-x":[{"overflow-x":le()}],"overflow-y":[{"overflow-y":le()}],overscroll:[{overscroll:se()}],"overscroll-x":[{"overscroll-x":se()}],"overscroll-y":[{"overscroll-y":se()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[b]}],"inset-x":[{"inset-x":[b]}],"inset-y":[{"inset-y":[b]}],start:[{start:[b]}],end:[{end:[b]}],top:[{top:[b]}],right:[{right:[b]}],bottom:[{bottom:[b]}],left:[{left:[b]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",ke,x]}],basis:[{basis:re()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",x]}],grow:[{grow:H()}],shrink:[{shrink:H()}],order:[{order:["first","last","none",ke,x]}],"grid-cols":[{"grid-cols":[Se]}],"col-start-end":[{col:["auto",{span:["full",ke,x]},x]}],"col-start":[{"col-start":m()}],"col-end":[{"col-end":m()}],"grid-rows":[{"grid-rows":[Se]}],"row-start-end":[{row:["auto",{span:[ke,x]},x]}],"row-start":[{"row-start":m()}],"row-end":[{"row-end":m()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",x]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",x]}],gap:[{gap:[g]}],"gap-x":[{"gap-x":[g]}],"gap-y":[{"gap-y":[g]}],"justify-content":[{justify:["normal",...R()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...R(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...R(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[k]}],px:[{px:[k]}],py:[{py:[k]}],ps:[{ps:[k]}],pe:[{pe:[k]}],pt:[{pt:[k]}],pr:[{pr:[k]}],pb:[{pb:[k]}],pl:[{pl:[k]}],m:[{m:[p]}],mx:[{mx:[p]}],my:[{my:[p]}],ms:[{ms:[p]}],me:[{me:[p]}],mt:[{mt:[p]}],mr:[{mr:[p]}],mb:[{mb:[p]}],ml:[{ml:[p]}],"space-x":[{"space-x":[j]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[j]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",x,t]}],"min-w":[{"min-w":[x,t,"min","max","fit"]}],"max-w":[{"max-w":[x,t,"none","full","min","max","fit","prose",{screen:[ue]},ue]}],h:[{h:[x,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[x,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[x,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[x,t,"auto","min","max","fit"]}],"font-size":[{text:["base",ue,ce]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Ze]}],"font-family":[{font:[Se]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",x]}],"line-clamp":[{"line-clamp":["none",be,Ze]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",ne,x]}],"list-image":[{"list-image":["none",x]}],"list-style-type":[{list:["none","disc","decimal",x]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[h]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[h]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...M(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",ne,ce]}],"underline-offset":[{"underline-offset":["auto",ne,x]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:f()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",x]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",x]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[h]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...W(),zr]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",Ar]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},Tr]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[S]}],"gradient-via-pos":[{via:[S]}],"gradient-to-pos":[{to:[S]}],"gradient-from":[{from:[y]}],"gradient-via":[{via:[y]}],"gradient-to":[{to:[y]}],rounded:[{rounded:[o]}],"rounded-s":[{"rounded-s":[o]}],"rounded-e":[{"rounded-e":[o]}],"rounded-t":[{"rounded-t":[o]}],"rounded-r":[{"rounded-r":[o]}],"rounded-b":[{"rounded-b":[o]}],"rounded-l":[{"rounded-l":[o]}],"rounded-ss":[{"rounded-ss":[o]}],"rounded-se":[{"rounded-se":[o]}],"rounded-ee":[{"rounded-ee":[o]}],"rounded-es":[{"rounded-es":[o]}],"rounded-tl":[{"rounded-tl":[o]}],"rounded-tr":[{"rounded-tr":[o]}],"rounded-br":[{"rounded-br":[o]}],"rounded-bl":[{"rounded-bl":[o]}],"border-w":[{border:[s]}],"border-w-x":[{"border-x":[s]}],"border-w-y":[{"border-y":[s]}],"border-w-s":[{"border-s":[s]}],"border-w-e":[{"border-e":[s]}],"border-w-t":[{"border-t":[s]}],"border-w-r":[{"border-r":[s]}],"border-w-b":[{"border-b":[s]}],"border-w-l":[{"border-l":[s]}],"border-opacity":[{"border-opacity":[h]}],"border-style":[{border:[...M(),"hidden"]}],"divide-x":[{"divide-x":[s]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[s]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[h]}],"divide-style":[{divide:M()}],"border-color":[{border:[a]}],"border-color-x":[{"border-x":[a]}],"border-color-y":[{"border-y":[a]}],"border-color-s":[{"border-s":[a]}],"border-color-e":[{"border-e":[a]}],"border-color-t":[{"border-t":[a]}],"border-color-r":[{"border-r":[a]}],"border-color-b":[{"border-b":[a]}],"border-color-l":[{"border-l":[a]}],"divide-color":[{divide:[a]}],"outline-style":[{outline:["",...M()]}],"outline-offset":[{"outline-offset":[ne,x]}],"outline-w":[{outline:[ne,ce]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:v()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[h]}],"ring-offset-w":[{"ring-offset":[ne,ce]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",ue,Gr]}],"shadow-color":[{shadow:[Se]}],opacity:[{opacity:[h]}],"mix-blend":[{"mix-blend":[...I(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":I()}],filter:[{filter:["","none"]}],blur:[{blur:[r]}],brightness:[{brightness:[n]}],contrast:[{contrast:[l]}],"drop-shadow":[{"drop-shadow":["","none",ue,x]}],grayscale:[{grayscale:[c]}],"hue-rotate":[{"hue-rotate":[d]}],invert:[{invert:[u]}],saturate:[{saturate:[A]}],sepia:[{sepia:[G]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[r]}],"backdrop-brightness":[{"backdrop-brightness":[n]}],"backdrop-contrast":[{"backdrop-contrast":[l]}],"backdrop-grayscale":[{"backdrop-grayscale":[c]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[d]}],"backdrop-invert":[{"backdrop-invert":[u]}],"backdrop-opacity":[{"backdrop-opacity":[h]}],"backdrop-saturate":[{"backdrop-saturate":[A]}],"backdrop-sepia":[{"backdrop-sepia":[G]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[i]}],"border-spacing-x":[{"border-spacing-x":[i]}],"border-spacing-y":[{"border-spacing-y":[i]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",x]}],duration:[{duration:E()}],ease:[{ease:["linear","in","out","in-out",x]}],delay:[{delay:E()}],animate:[{animate:["none","spin","ping","pulse","bounce",x]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[L]}],"scale-x":[{"scale-x":[L]}],"scale-y":[{"scale-y":[L]}],rotate:[{rotate:[ke,x]}],"translate-x":[{"translate-x":[C]}],"translate-y":[{"translate-y":[C]}],"skew-x":[{"skew-x":[_]}],"skew-y":[{"skew-y":[_]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",x]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",x]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":f()}],"scroll-mx":[{"scroll-mx":f()}],"scroll-my":[{"scroll-my":f()}],"scroll-ms":[{"scroll-ms":f()}],"scroll-me":[{"scroll-me":f()}],"scroll-mt":[{"scroll-mt":f()}],"scroll-mr":[{"scroll-mr":f()}],"scroll-mb":[{"scroll-mb":f()}],"scroll-ml":[{"scroll-ml":f()}],"scroll-p":[{"scroll-p":f()}],"scroll-px":[{"scroll-px":f()}],"scroll-py":[{"scroll-py":f()}],"scroll-ps":[{"scroll-ps":f()}],"scroll-pe":[{"scroll-pe":f()}],"scroll-pt":[{"scroll-pt":f()}],"scroll-pr":[{"scroll-pr":f()}],"scroll-pb":[{"scroll-pb":f()}],"scroll-pl":[{"scroll-pl":f()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",x]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[ne,ce,Ze]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},jr=xr(_r);function qe(...e){return jr(Lt(e))}function Zr(e){if(e===0)return"0 Bytes";const t=1024,r=["Bytes","KB","MB","GB","TB"],n=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/Math.pow(t,n)).toFixed(2))+" "+r[n]}function Dr(e){return Zr(e)+"/s"}function Or(e){if(e<60)return`${Math.round(e)}s`;if(e<3600){const t=Math.floor(e/60),r=Math.round(e%60);return`${t}m ${r}s`}else{const t=Math.floor(e/3600),r=Math.floor(e%3600/60);return`${t}h ${r}m`}}function me(){return Date.now().toString(36)+Math.random().toString(36).substr(2)}async function At(e){try{if(navigator.clipboard&&window.isSecureContext)return await navigator.clipboard.writeText(e),!0;{const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.left="-999999px",t.style.top="-999999px",document.body.appendChild(t),t.focus(),t.select();const r=document.execCommand("copy");return t.remove(),r}}catch(t){return console.error("Failed to copy text: ",t),!1}}var Je=function(){return Je=Object.assign||function(t){for(var r,n=1,a=arguments.length;n0&&o[o.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]=a+r?(a=i,[4,Hr()]):[3,3]):[3,4];case 2:s.sent(),s.label=3;case 3:return++o,[3,1];case 4:return[2,n]}})})}function Le(e){return e.then(void 0,function(){}),e}function Xr(e,t){for(var r=0,n=e.length;r=1)return Math.round(e/t)*t;var r=1/t;return Math.round(e*r)/r}function Ur(e){for(var t,r,n="Unexpected syntax '".concat(e,"'"),a=/^\s*([a-z-]*)(.*)$/i.exec(e),o=a[1]||void 0,i={},s=/([.:#][\w-]+|\[.+?\])/gi,l=function(g,y){i[g]=i[g]||[],i[g].push(y)};;){var c=s.exec(a[2]);if(!c)break;var d=c[0];switch(d[0]){case".":l("class",d.slice(1));break;case"#":l("id",d.slice(1));break;case"[":{var u=/^\[([\w-]+)([~|^$*]?=("(.*?)"|([\w-]+)))?(\s+[is])?\]$/.exec(d);if(u)l(u[1],(r=(t=u[4])!==null&&t!==void 0?t:u[5])!==null&&r!==void 0?r:"");else throw new Error(n);break}default:throw new Error(n)}}return[o,i]}function Jr(e){for(var t=new Uint8Array(e.length),r=0;r127)return new TextEncoder().encode(e);t[r]=n}return t}function de(e,t){var r=e[0]>>>16,n=e[0]&65535,a=e[1]>>>16,o=e[1]&65535,i=t[0]>>>16,s=t[0]&65535,l=t[1]>>>16,c=t[1]&65535,d=0,u=0,g=0,y=0;y+=o+c,g+=y>>>16,y&=65535,g+=a+l,u+=g>>>16,g&=65535,u+=n+s,d+=u>>>16,u&=65535,d+=r+i,d&=65535,e[0]=d<<16|u,e[1]=g<<16|y}function U(e,t){var r=e[0]>>>16,n=e[0]&65535,a=e[1]>>>16,o=e[1]&65535,i=t[0]>>>16,s=t[0]&65535,l=t[1]>>>16,c=t[1]&65535,d=0,u=0,g=0,y=0;y+=o*c,g+=y>>>16,y&=65535,g+=a*c,u+=g>>>16,g&=65535,g+=o*l,u+=g>>>16,g&=65535,u+=n*c,d+=u>>>16,u&=65535,u+=a*l,d+=u>>>16,u&=65535,u+=o*s,d+=u>>>16,u&=65535,d+=r*c+n*l+a*s+o*i,d&=65535,e[0]=d<<16|u,e[1]=g<<16|y}function ve(e,t){var r=e[0];t%=64,t===32?(e[0]=e[1],e[1]=r):t<32?(e[0]=r<>>32-t,e[1]=e[1]<>>32-t):(t-=32,e[0]=e[1]<>>32-t,e[1]=r<>>32-t)}function B(e,t){t%=64,t!==0&&(t<32?(e[0]=e[1]>>>32-t,e[1]=e[1]<>>1];T(e,t),U(e,$r),t[1]=e[0]>>>1,T(e,t),U(e,Kr),t[1]=e[0]>>>1,T(e,t)}var Re=[2277735313,289559509],Te=[1291169091,658871167],ut=[0,5],Qr=[0,1390208809],qr=[0,944331445];function en(e,t){var r=Jr(e);t=t||0;var n=[0,r.length],a=n[1]%16,o=n[1]-a,i=[0,t],s=[0,t],l=[0,0],c=[0,0],d;for(d=0;d>>0).toString(16)).slice(-8)+("00000000"+(i[1]>>>0).toString(16)).slice(-8)+("00000000"+(s[0]>>>0).toString(16)).slice(-8)+("00000000"+(s[1]>>>0).toString(16)).slice(-8)}function tn(e){var t;return Je({name:e.name,message:e.message,stack:(t=e.stack)===null||t===void 0?void 0:t.split(` +`)},e)}function rn(e){return/^function\s.*?\{\s*\[native code]\s*}$/.test(String(e))}function nn(e){return typeof e!="function"}function on(e,t){var r=Le(new Promise(function(n){var a=Date.now();st(e.bind(null,t),function(){for(var o=[],i=0;i=4}function sn(){var e=window,t=navigator;return O(["msWriteProfilerMark"in e,"MSStream"in e,"msLaunchUri"in t,"msSaveBlob"in t])>=3&&!Wt()}function Fe(){var e=window,t=navigator;return O(["webkitPersistentStorage"in t,"webkitTemporaryStorage"in t,(t.vendor||"").indexOf("Google")===0,"webkitResolveLocalFileSystemURL"in e,"BatteryManager"in e,"webkitMediaStream"in e,"webkitSpeechGrammar"in e])>=5}function Q(){var e=window,t=navigator;return O(["ApplePayError"in e,"CSSPrimitiveValue"in e,"Counter"in e,t.vendor.indexOf("Apple")===0,"RGBColor"in e,"WebKitMediaKeys"in e])>=4}function tt(){var e=window,t=e.HTMLElement,r=e.Document;return O(["safari"in e,!("ongestureend"in e),!("TouchEvent"in e),!("orientation"in e),t&&!("autocapitalize"in t.prototype),r&&"pointerLockElement"in r.prototype])>=4}function Pe(){var e=window;return rn(e.print)&&String(e.browser)==="[object WebPageNamespace]"}function Et(){var e,t,r=window;return O(["buildID"in navigator,"MozAppearance"in((t=(e=document.documentElement)===null||e===void 0?void 0:e.style)!==null&&t!==void 0?t:{}),"onmozfullscreenchange"in r,"mozInnerScreenX"in r,"CSSMozDocumentRule"in r,"CanvasCaptureMediaStream"in r])>=4}function ln(){var e=window;return O([!("MediaSettingsRange"in e),"RTCEncodedAudioFrame"in e,""+e.Intl=="[object Intl]",""+e.Reflect=="[object Reflect]"])>=3}function cn(){var e=window,t=e.URLPattern;return O(["union"in Set.prototype,"Iterator"in e,t&&"hasRegExpGroups"in t.prototype,"RGB8"in WebGLRenderingContext.prototype])>=3}function un(){var e=window;return O(["DOMRectList"in e,"RTCPeerConnectionIceEvent"in e,"SVGGeometryElement"in e,"ontransitioncancel"in e])>=3}function Ie(){var e=window,t=navigator,r=e.CSS,n=e.HTMLButtonElement;return O([!("getStorageUpdates"in t),n&&"popover"in n.prototype,"CSSCounterStyleRule"in e,r.supports("font-size-adjust: ex-height 0.5"),r.supports("text-transform: full-width")])>=4}function dn(){if(navigator.platform==="iPad")return!0;var e=screen,t=e.width/e.height;return O(["MediaSource"in window,!!Element.prototype.webkitRequestFullscreen,t>.65&&t<1.53])>=2}function fn(){var e=document;return e.fullscreenElement||e.msFullscreenElement||e.mozFullScreenElement||e.webkitFullscreenElement||null}function pn(){var e=document;return(e.exitFullscreen||e.msExitFullscreen||e.mozCancelFullScreen||e.webkitExitFullscreen).call(e)}function rt(){var e=Fe(),t=Et(),r=window,n=navigator,a="connection";return e?O([!("SharedWorker"in r),n[a]&&"ontypechange"in n[a],!("sinkId"in new Audio)])>=2:t?O(["onorientationchange"in r,"orientation"in r,/android/i.test(n.appVersion)])>=2:!1}function mn(){var e=navigator,t=window,r=Audio.prototype,n=t.visualViewport;return O(["srLatency"in r,"srChannelCount"in r,"devicePosture"in e,n&&"segments"in n,"getTextInformation"in Image.prototype])>=3}function vn(){return bn()?-4:gn()}function gn(){var e=window,t=e.OfflineAudioContext||e.webkitOfflineAudioContext;if(!t)return-2;if(hn())return-1;var r=4500,n=5e3,a=new t(1,n,44100),o=a.createOscillator();o.type="triangle",o.frequency.value=1e4;var i=a.createDynamicsCompressor();i.threshold.value=-50,i.knee.value=40,i.ratio.value=12,i.attack.value=0,i.release.value=.25,o.connect(i),i.connect(a.destination),o.start(0);var s=yn(a),l=s[0],c=s[1],d=Le(l.then(function(u){return wn(u.getChannelData(0).subarray(r))},function(u){if(u.name==="timeout"||u.name==="suspended")return-3;throw u}));return function(){return c(),d}}function hn(){return Q()&&!tt()&&!un()}function bn(){return Q()&&Ie()&&Pe()||Fe()&&mn()&&cn()}function yn(e){var t=3,r=500,n=500,a=5e3,o=function(){},i=new Promise(function(s,l){var c=!1,d=0,u=0;e.oncomplete=function(S){return s(S.renderedBuffer)};var g=function(){setTimeout(function(){return l(dt("timeout"))},Math.min(n,u+a-Date.now()))},y=function(){try{var S=e.startRendering();switch(Tt(S)&&Le(S),e.state){case"running":u=Date.now(),c&&g();break;case"suspended":document.hidden||d++,c&&d>=t?l(dt("suspended")):setTimeout(y,r);break}}catch(b){l(b)}};y(),o=function(){c||(c=!0,u>0&&g())}});return[i,o]}function wn(e){for(var t=0,r=0;r=0?"+":"").concat(n)}function Kn(){var e=new Date().getFullYear();return Math.max($(new Date(e,0,1).getTimezoneOffset()),$(new Date(e,6,1).getTimezoneOffset()))}function Qn(){try{return!!window.sessionStorage}catch{return!0}}function qn(){try{return!!window.localStorage}catch{return!0}}function eo(){if(!(Wt()||sn()))try{return!!window.indexedDB}catch{return!0}}function to(){return!!window.openDatabase}function ro(){return navigator.cpuClass}function no(){var e=navigator.platform;return e==="MacIntel"&&Q()&&!tt()?dn()?"iPad":"iPhone":e}function oo(){return navigator.vendor||""}function ao(){for(var e=[],t=0,r=["chrome","safari","__crWeb","__gCrWeb","yandex","__yb","__ybro","__firefox__","__edgeTrackingPreventionStatistics","webkit","oprt","samsungAr","ucweb","UCShellJava","puffinDevice"];tu.length*.6}),s.sort(),[2,s]}})})}function co(){return Q()||rt()}function uo(e){var t;return ee(this,void 0,void 0,function(){var r,n,a,o,l,i,s,l;return te(this,function(c){switch(c.label){case 0:for(r=document,n=r.createElement("div"),a=new Array(e.length),o={},pt(n),l=0;l')}function Mo(){return navigator.pdfViewerEnabled}function Fo(){var e=new Float32Array(1),t=new Uint8Array(e.buffer);return e[0]=1/0,e[0]=e[0]-e[0],t[3]}function Po(){var e=window.ApplePaySession;if(typeof(e==null?void 0:e.canMakePayments)!="function")return-1;if(Io())return-3;try{return e.canMakePayments()?1:0}catch(t){return Vo(t)}}var Io=Sn;function Vo(e){if(e instanceof Error&&e.name==="InvalidAccessError"&&/\bfrom\b.*\binsecure\b/i.test(e.message))return-2;throw e}function Ao(){var e,t=document.createElement("a"),r=(e=t.attributionSourceId)!==null&&e!==void 0?e:t.attributionsourceid;return r===void 0?void 0:String(r)}var _t=-1,jt=-2,zo=new Set([10752,2849,2884,2885,2886,2928,2929,2930,2931,2932,2960,2961,2962,2963,2964,2965,2966,2967,2968,2978,3024,3042,3088,3089,3106,3107,32773,32777,32777,32823,32824,32936,32937,32938,32939,32968,32969,32970,32971,3317,33170,3333,3379,3386,33901,33902,34016,34024,34076,3408,3410,3411,3412,3413,3414,3415,34467,34816,34817,34818,34819,34877,34921,34930,35660,35661,35724,35738,35739,36003,36004,36005,36347,36348,36349,37440,37441,37443,7936,7937,7938]),Ro=new Set([34047,35723,36063,34852,34853,34854,34229,36392,36795,38449]),To=["FRAGMENT_SHADER","VERTEX_SHADER"],Go=["LOW_FLOAT","MEDIUM_FLOAT","HIGH_FLOAT","LOW_INT","MEDIUM_INT","HIGH_INT"],Zt="WEBGL_debug_renderer_info",Wo="WEBGL_polygon_mode";function Eo(e){var t,r,n,a,o,i,s=e.cache,l=Dt(s);if(!l)return _t;if(!Ht(l))return jt;var c=Ot()?null:l.getExtension(Zt);return{version:((t=l.getParameter(l.VERSION))===null||t===void 0?void 0:t.toString())||"",vendor:((r=l.getParameter(l.VENDOR))===null||r===void 0?void 0:r.toString())||"",vendorUnmasked:c?(n=l.getParameter(c.UNMASKED_VENDOR_WEBGL))===null||n===void 0?void 0:n.toString():"",renderer:((a=l.getParameter(l.RENDERER))===null||a===void 0?void 0:a.toString())||"",rendererUnmasked:c?(o=l.getParameter(c.UNMASKED_RENDERER_WEBGL))===null||o===void 0?void 0:o.toString():"",shadingLanguageVersion:((i=l.getParameter(l.SHADING_LANGUAGE_VERSION))===null||i===void 0?void 0:i.toString())||""}}function No(e){var t=e.cache,r=Dt(t);if(!r)return _t;if(!Ht(r))return jt;var n=r.getSupportedExtensions(),a=r.getContextAttributes(),o=[],i=[],s=[],l=[],c=[];if(a)for(var d=0,u=Object.keys(a);d=.001))try{var e=new XMLHttpRequest;e.open("get","https://m1.openfpcdn.io/fingerprintjs/v".concat(Rt,"/npm-monitoring"),!0),e.send()}catch(t){console.error(t)}}function ta(e){var t;return e===void 0&&(e={}),ee(this,void 0,void 0,function(){var r,n,a;return te(this,function(o){switch(o.label){case 0:return(!((t=e.monitoring)!==null&&t!==void 0)||t)&&ea(),r=e.delayFallback,n=e.debug,[4,Qo(r)];case 1:return o.sent(),a=Bo({cache:{},debug:n}),[2,qo(a,n)]}})})}var ra={load:ta,hashComponents:Xt,componentsToDebugString:Bt};let Be=null;async function na(){return Be||(Be=await ra.load()),Be}async function oa(){try{return(await(await na()).get()).visitorId}catch(e){return console.warn("FingerprintJS failed, falling back to simple hash:",e),await aa()}}async function aa(){const e={userAgent:navigator.userAgent,language:navigator.language,screenResolution:`${screen.width}x${screen.height}`,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,colorDepth:screen.colorDepth,pixelRatio:window.devicePixelRatio,cookieEnabled:navigator.cookieEnabled},t=JSON.stringify(e),n=new TextEncoder().encode(t),a=await crypto.subtle.digest("SHA-256",n);return Array.from(new Uint8Array(a)).map(s=>s.toString(16).padStart(2,"0")).join("")}async function Yt(){const e="tgstate_user_fingerprint";let t=localStorage.getItem(e);return t||(t=await oa(),localStorage.setItem(e,t)),t}const wt=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,xt=Lt,ia=(e,t)=>r=>{var n;if((t==null?void 0:t.variants)==null)return xt(e,r==null?void 0:r.class,r==null?void 0:r.className);const{variants:a,defaultVariants:o}=t,i=Object.keys(a).map(c=>{const d=r==null?void 0:r[c],u=o==null?void 0:o[c];if(d===null)return null;const g=wt(d)||wt(u);return a[c][g]}),s=r&&Object.entries(r).reduce((c,d)=>{let[u,g]=d;return g===void 0||(c[u]=g),c},{}),l=t==null||(n=t.compoundVariants)===null||n===void 0?void 0:n.reduce((c,d)=>{let{class:u,className:g,...y}=d;return Object.entries(y).every(S=>{let[b,p]=S;return Array.isArray(p)?p.includes({...o,...s}[b]):{...o,...s}[b]===p})?[...c,u,g]:c},[]);return xt(e,i,l,r==null?void 0:r.class,r==null?void 0:r.className)},sa=["disabled"],ie=we({__name:"Button",props:{variant:{},size:{},disabled:{type:Boolean}},setup(e){const t=ia("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),r=e,n=$t(),a=Kt(()=>qe(t({variant:r.variant,size:r.size}),n.class));return(o,i)=>(P(),V("button",Qt({class:a.value,disabled:o.disabled},o.$attrs),[St(o.$slots,"default")],16,sa))}}),la=we({__name:"Card",setup(e){return(t,r)=>(P(),V("div",{class:ye(Ee(qe)("rounded-lg border bg-card text-card-foreground shadow-sm",t.$attrs.class))},[St(t.$slots,"default")],2))}}),ca=we({__name:"Progress",props:{modelValue:{}},setup(e){return(t,r)=>(P(),V("div",{class:ye(Ee(qe)("relative h-4 w-full overflow-hidden rounded-full bg-secondary",t.$attrs.class))},[w("div",{class:"h-full w-full flex-1 bg-primary transition-all duration-300 ease-out",style:qt({transform:`translateX(-${100-(t.modelValue||0)}%)`})},null,4)],2))}}),ua={class:"flex border-b border-gray-200 mb-4"},da={key:0,class:"text-center py-8"},fa={class:"mt-2 text-gray-600"},pa={key:1,class:"text-center py-8"},ma={class:"text-red-600"},va={key:2,class:"text-center py-8"},ga={class:"text-gray-600"},ha={key:3,class:"overflow-y-auto max-h-96"},ba={class:"space-y-3"},ya={class:"flex justify-between items-start"},wa={class:"flex-1"},xa={class:"flex items-center gap-2"},ka={class:"font-medium text-gray-900 truncate"},Sa={key:0,class:"text-xs bg-green-100 text-green-800 px-2 py-1 rounded-full"},Ca={class:"text-sm text-gray-500 mt-1"},La={class:"flex gap-2 ml-4"},Ma={key:0,class:"text-center mt-4"},Fa={key:1,class:"text-center mt-4 text-sm text-gray-500"},Pa=we({__name:"HistoryModal",props:{isOpen:{type:Boolean}},emits:["close"],setup(e,{emit:t}){const r=e,n=t,a=D(!1),o=D(""),i=D([]),s=D("history"),l=D({page:1,pageSize:20,total:0,hasMore:!1}),c=()=>{n("close")},d=async(b=1)=>{a.value=!0,o.value="";try{let p;if(s.value==="history"){const h=await Yt();p=await sr(h,b,l.value.pageSize)}else p=await lr(b,l.value.pageSize);if(p.code===0&&p.data){const h=p.data.files||[];b===1?i.value=h:i.value.push(...h),l.value=p.data.pagination}else o.value=p.message||"Failed to load data"}catch(p){o.value="Network error occurred",console.error("Failed to load data:",p)}finally{a.value=!1}},u=()=>{l.value.hasMore&&!a.value&&d(l.value.page+1)},g=b=>new Date(b).toLocaleString(),y=async(b,p,h)=>{const k=`${window.location.origin}/d/${b}`;if(await At(k)){const L=h.target,G=L.textContent,_=L.style.backgroundColor,j=L.style.color;L.style.backgroundColor="#10b981",L.style.color="white",L.textContent=p,setTimeout(()=>{L.textContent=G,L.style.backgroundColor=_,L.style.color=j},1e3)}},S=b=>{const p=`${window.location.origin}/d/${b}`;window.open(p,"_blank")};return nt(s,()=>{i.value=[],l.value.page=1,d(1)}),nt(()=>r.isOpen,b=>{b&&d(1)}),(b,p)=>b.isOpen?(P(),V("div",{key:0,class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",onClick:c},[w("div",{class:"bg-white rounded-lg p-6 max-w-4xl w-full mx-4 max-h-[80vh] overflow-hidden",onClick:p[3]||(p[3]=Ce(()=>{},["stop"]))},[w("div",{class:"flex justify-between items-center mb-4"},[p[4]||(p[4]=w("h2",{class:"text-xl font-bold text-gray-900"},"📁 File Explorer",-1)),w("button",{onClick:c,class:"text-gray-500 hover:text-gray-700 text-2xl"}," × ")]),w("div",ua,[w("button",{onClick:p[0]||(p[0]=h=>s.value="history"),class:ye(["px-4 py-2 font-medium text-sm border-b-2 transition-colors",s.value==="history"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," 📁 My Files ",2),w("button",{onClick:p[1]||(p[1]=h=>s.value="plaza"),class:ye(["px-4 py-2 font-medium text-sm border-b-2 transition-colors",s.value==="plaza"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," 🌍 Plaza ",2)]),a.value&&i.value.length===0?(P(),V("div",da,[p[5]||(p[5]=w("div",{class:"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-500 mx-auto"},null,-1)),w("p",fa," Loading "+N(s.value==="history"?"history":"plaza files")+"... ",1)])):o.value?(P(),V("div",pa,[w("p",ma,N(o.value),1),K(ie,{onClick:p[2]||(p[2]=()=>d(1)),class:"mt-4"},{default:q(()=>p[6]||(p[6]=[ae("Retry",-1)])),_:1,__:[6]})])):i.value.length===0?(P(),V("div",va,[p[7]||(p[7]=w("div",{class:"text-4xl mb-4"},"📂",-1)),w("p",ga,N(s.value==="history"?"No upload history found":"No shared files in plaza"),1)])):(P(),V("div",ha,[w("div",ba,[(P(!0),V(Xe,null,Ye(i.value,h=>(P(),V("div",{key:h.fileId,class:"border rounded-lg p-4 hover:bg-gray-50 transition-colors"},[w("div",ya,[w("div",wa,[w("div",xa,[w("h3",ka,N(h.filename),1),h.shared?(P(),V("span",Sa," 🌍 Shared ")):X("",!0)]),w("p",Ca,N(g(h.time)),1)]),w("div",La,[K(ie,{size:"sm",variant:"outline",onClick:k=>y(h.fileId||"","Copied!",k)},{default:q(()=>p[8]||(p[8]=[ae(" Copy Link ",-1)])),_:2,__:[8]},1032,["onClick"]),K(ie,{size:"sm",variant:"outline",onClick:k=>S(h.fileId)},{default:q(()=>p[9]||(p[9]=[ae(" Open ",-1)])),_:2,__:[9]},1032,["onClick"])])])]))),128))]),l.value.hasMore?(P(),V("div",Ma,[K(ie,{onClick:u,disabled:a.value,variant:"outline",class:"w-full"},{default:q(()=>[ae(N(a.value?"Loading...":"Load More"),1)]),_:1},8,["disabled"])])):X("",!0),i.value.length>0?(P(),V("div",Fa," Showing "+N(i.value.length)+" of "+N(l.value.total)+" files ",1)):X("",!0)]))])])):X("",!0)}});var Ia=Object.defineProperty,Va=(e,t,r)=>t in e?Ia(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,kt=(e,t,r)=>Va(e,typeof t!="symbol"?t+"":t,r);const Aa={class:"w-full max-w-2xl mx-auto p-6"},za={class:"relative text-center mb-8"},Ra={key:0,class:"flex items-center justify-center gap-2 mt-4"},Ta={key:0,class:"space-y-4 mb-6"},Ga={class:"flex justify-between items-center mb-2"},Wa={class:"font-medium text-gray-900 truncate flex-1 mr-4"},Ea={class:"text-sm text-gray-500 whitespace-nowrap"},Na={class:"mb-2"},_a={class:"flex justify-between items-center text-xs text-gray-500"},ja={key:0},Za={key:1,class:"space-y-4"},Da={class:"flex items-start justify-between"},Oa={class:"flex-1"},Ha={class:"font-medium mb-2"},Ba={key:0,class:"mb-3"},Xa=["href"],Ya={key:1,class:"flex flex-wrap gap-2"},Ua={key:2,class:"text-red-600"},Ge=10*1024*1024,Ja=3,$a=we({__name:"FileUpload",setup(e){const t=D(),r=D(),n=D([]),a=D(!1),o=D(!1),i=D([]),s=D([]),l=D(!1),c=D(""),d=D(!1),u=f=>{f.preventDefault(),a.value=!0},g=f=>{f.preventDefault(),a.value=!0},y=f=>{var v;f.preventDefault(),(v=t.value)!=null&&v.contains(f.relatedTarget)||(a.value=!1)},S=f=>{var m;f.preventDefault(),a.value=!1;const v=Array.from(((m=f.dataTransfer)==null?void 0:m.files)||[]);n.value=v},b=f=>{const v=f.target,m=Array.from(v.files||[]);n.value=m},p=f=>{const v=[".jpg",".jpeg",".png",".gif",".webp",".bmp",".svg"],m=f.toLowerCase().substring(f.lastIndexOf("."));return v.includes(m)},h=async(f,v,m)=>{if(await At(f)&&(m!=null&&m.target)){const M=m.target,I=M.textContent,R=M.style.backgroundColor,H=M.style.color;M.style.backgroundColor="#10b981",M.style.color="white",M.textContent=v,setTimeout(()=>{M.textContent=I,M.style.backgroundColor=R,M.style.color=H},1e3)}else console.error("Copy faild")},k=async(f,v,m)=>{const W=`${v}`;await h(W,"HTML copied!",m)},A=async(f,v,m)=>{const W=`![${v}](${f})`;await h(W,"Markdown copied!",m)},L=f=>({id:me(),fileName:f,progress:0,status:"Starting upload...",speed:0,eta:0}),G=(f,v,m,W,M)=>{const I=i.value.find(R=>R.id===f);I&&(I.progress=v,m&&(I.status=m),W!==void 0&&(I.speed=W),M!==void 0&&(I.eta=M))},_=f=>{const v=i.value.findIndex(m=>m.id===f);v>-1&&i.value.splice(v,1)},j=f=>{s.value.unshift(f)},C=async f=>{const v=L(f.name);i.value.push(v);const m=Date.now();let W=0,M=m;try{const I=await or(f,c.value,d.value,R=>{const H=Date.now(),J=(H-M)/1e3,E=R-W;if(J>.5&&E>0){const fe=E/100*f.size/J,Y=100-R,pe=Y>0?Y/100*f.size/fe:0;G(v.id,R,"Uploading...",fe,pe),W=R,M=H}else G(v.id,R,"Uploading...")});if(I.code===0)G(v.id,100,"Upload complete!"),setTimeout(()=>{_(v.id),j({id:me(),fileName:f.name,success:!0,data:I})},500);else throw new Error(I.message||"Upload failed")}catch(I){_(v.id),j({id:me(),fileName:f.name,success:!1,error:I instanceof Error?I.message:"Upload failed"})}},se=async f=>{const v=Math.ceil(f.size/Ge),m=me(),W=new Array(v),M=L(f.name);i.value.push(M);const I=new Array(v).fill(0),R=Date.now(),H=()=>{const E=I.reduce((_e,je)=>_e+je,0)/v,Y=(Date.now()-R)/1e3,pe=E/100*f.size/Y,Ve=100-E,Ae=Ve>0?Ve/100*f.size/pe:0;G(M.id,E,"Uploading...",pe,Ae)};try{const J=new re(Ja),E=[];for(let Y=0;Y{try{const Ae=Y*Ge,_e=Math.min(Ae+Ge,f.size),je=f.slice(Ae,_e),ze=await ar(je,Y,m,f.name,c.value,Ut=>{I[Y]=Ut,H()});if(ze.code===0&&ze.chunkId)W[Y]=ze.chunkId,I[Y]=100,H();else throw new Error(ze.message||"Chunk upload failed")}finally{Ve()}});E.push(pe)}await Promise.all(E),G(M.id,100,"Merging chunks...");const fe=await ir({uploadId:m,fileName:f.name,chunkIds:W,fileSize:f.size,userFingerprint:c.value,shared:d.value});if(fe.code===0)G(M.id,100,"Upload complete!"),setTimeout(()=>{_(M.id),j({id:me(),fileName:f.name,success:!0,data:fe})},500);else throw new Error(fe.message||"Merge failed")}catch(J){_(M.id),j({id:me(),fileName:f.name,success:!1,error:J instanceof Error?J.message:"Upload failed"})}},le=async()=>{if(!(n.value.length===0||o.value)){o.value=!0;try{for(const f of n.value)f.size>Ge?await se(f):await C(f)}finally{o.value=!1,n.value=[],d.value=!1,r.value&&(r.value.value="")}}};class re{constructor(v){kt(this,"permits"),kt(this,"waiting",[]),this.permits=v}async acquire(){return new Promise(v=>{this.permits>0?(this.permits--,v(()=>this.release())):this.waiting.push(()=>{this.permits--,v(()=>this.release())})})}release(){if(this.permits++,this.waiting.length>0){const v=this.waiting.shift();v&&v()}}}return er(async()=>{try{c.value=await Yt(),console.log("User fingerprint initialized:",c.value)}catch(f){console.error("Failed to initialize user fingerprint:",f)}}),(f,v)=>(P(),V("div",Aa,[w("div",za,[w("button",{onClick:v[0]||(v[0]=m=>l.value=!0),class:"absolute top-0 right-0 p-2 text-gray-600 hover:text-blue-600 hover:bg-blue-50 rounded-lg transition-colors",title:"Upload History"},v[4]||(v[4]=[w("svg",{class:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[w("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"})],-1)])),v[5]||(v[5]=w("h1",{class:"text-3xl font-bold text-gray-900 mb-2"}," 📁 File Upload to Telegram ",-1)),v[6]||(v[6]=w("p",{class:"text-gray-600"},"Secure, Fast, Permanent Storage",-1))]),K(la,{class:"p-6 mb-6"},{default:q(()=>[w("div",{ref_key:"dropZone",ref:t,class:ye(["border-2 border-dashed rounded-lg p-8 text-center transition-all duration-300",a.value?"border-green-400 bg-green-50 scale-105":"border-blue-400 bg-blue-50 hover:border-blue-500 hover:bg-blue-100"]),onDragenter:Ce(u,["prevent"]),onDragover:Ce(g,["prevent"]),onDragleave:Ce(y,["prevent"]),onDrop:Ce(S,["prevent"])},[v[7]||(v[7]=w("div",{class:"text-4xl mb-4"},"📤",-1)),v[8]||(v[8]=w("p",{class:"text-gray-700 mb-4"},"Drag files here or click to select",-1)),w("input",{ref_key:"fileInput",ref:r,type:"file",multiple:"",class:"hidden",onChange:b},null,544),K(ie,{onClick:v[1]||(v[1]=()=>{var m;return(m=r.value)==null?void 0:m.click()}),variant:n.value.length>0?"secondary":"default",class:"mb-4"},{default:q(()=>[ae(N(n.value.length>0?`${n.value.length} file(s) selected`:"Choose Files"),1)]),_:1},8,["variant"]),v[9]||(v[9]=w("div",{class:"flex justify-center gap-4 text-sm text-gray-500"},[w("span",null,"📊 Multiple Files"),w("span",null,"🔒 Secure"),w("span",null,"⚡ Fast")],-1))],34),n.value.length>0?(P(),V("div",Ra,[tr(w("input",{id:"shareToPlaza",type:"checkbox","onUpdate:modelValue":v[2]||(v[2]=m=>d.value=m),class:"w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500"},null,512),[[rr,d.value]]),v[10]||(v[10]=w("label",{for:"shareToPlaza",class:"text-sm text-gray-700 cursor-pointer"}," 🌍 Share to Plaza (Public) ",-1))])):X("",!0),K(ie,{onClick:le,disabled:n.value.length===0||o.value,class:"w-full mt-4",size:"lg"},{default:q(()=>[ae(N(o.value?"Uploading...":n.value.length===0?"🈳 No file":"⬆️ UPLOAD"),1)]),_:1},8,["disabled"])]),_:1}),i.value.length>0?(P(),V("div",Ta,[(P(!0),V(Xe,null,Ye(i.value,m=>(P(),V("div",{key:m.id,class:"bg-white rounded-lg border p-4 shadow-sm"},[w("div",Ga,[w("span",Wa,N(m.fileName),1),w("span",Ea,N(Math.round(m.progress))+"% ",1)]),w("div",Na,[K(ca,{"model-value":m.progress,class:"h-2"},null,8,["model-value"])]),w("div",_a,[w("span",null,N(m.status),1),m.speed&&m.eta?(P(),V("span",ja,N(Ee(Dr)(m.speed))+" • ETA: "+N(Ee(Or)(m.eta)),1)):X("",!0)])]))),128))])):X("",!0),s.value.length>0?(P(),V("div",Za,[(P(!0),V(Xe,null,Ye(s.value,m=>{var W,M;return P(),V("div",{key:m.id,class:ye(["rounded-lg border-l-4 p-4 shadow-sm",m.success?"border-l-green-500 bg-green-50":"border-l-red-500 bg-red-50"])},[w("div",Da,[w("div",Oa,[w("div",Ha,N(m.success?"✅":"❌")+" "+N(m.fileName),1),m.success&&((W=m.data)!=null&&W.shortFileUrl)?(P(),V("div",Ba,[w("a",{href:m.data.shortFileUrl,target:"_blank",class:"text-blue-600 hover:text-blue-800 underline break-all"},N(m.data.shortFileUrl),9,Xa)])):X("",!0),m.success&&((M=m.data)!=null&&M.shortFileUrl)?(P(),V("div",Ya,[K(ie,{size:"sm",variant:"outline",onClick:I=>{var R;return h(((R=m==null?void 0:m.data)==null?void 0:R.shortFileUrl)||"","Link copied!",I)}},{default:q(()=>v[11]||(v[11]=[ae(" Copy Link ",-1)])),_:2,__:[11]},1032,["onClick"]),p(m.fileName)?(P(),ot(ie,{key:0,size:"sm",variant:"outline",onClick:I=>{var R;return k(((R=m==null?void 0:m.data)==null?void 0:R.shortFileUrl)||"",m.fileName,I)}},{default:q(()=>v[12]||(v[12]=[ae(" HTML ",-1)])),_:2,__:[12]},1032,["onClick"])):X("",!0),p(m.fileName)?(P(),ot(ie,{key:1,size:"sm",variant:"outline",onClick:I=>{var R;return A(((R=m==null?void 0:m.data)==null?void 0:R.shortFileUrl)||"",m.fileName,I)}},{default:q(()=>v[13]||(v[13]=[ae(" Markdown ",-1)])),_:2,__:[13]},1032,["onClick"])):X("",!0)])):X("",!0),m.success?X("",!0):(P(),V("div",Ua,N(m.error),1))])])],2)}),128))])):X("",!0),K(Pa,{"is-open":l.value,onClose:v[3]||(v[3]=m=>l.value=!1)},null,8,["is-open"])]))}}),Ka={class:"min-h-screen bg-gray-50"},Qa=we({__name:"App",setup(e){return(t,r)=>(P(),V("div",Ka,[K($a)]))}});nr(Qa).mount("#app"); diff --git a/assets/dist/assets/vendor-D_MnsSZ4.js b/assets/dist/assets/vendor-D_MnsSZ4.js new file mode 100644 index 0000000..d92b10c --- /dev/null +++ b/assets/dist/assets/vendor-D_MnsSZ4.js @@ -0,0 +1,22 @@ +/** +* @vue/shared v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function ds(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const q={},ct=[],Ne=()=>{},uo=()=>!1,hn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),hs=e=>e.startsWith("onUpdate:"),ie=Object.assign,ps=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},ao=Object.prototype.hasOwnProperty,V=(e,t)=>ao.call(e,t),D=Array.isArray,ft=e=>Ut(e)==="[object Map]",pn=e=>Ut(e)==="[object Set]",$s=e=>Ut(e)==="[object Date]",U=e=>typeof e=="function",X=e=>typeof e=="string",Se=e=>typeof e=="symbol",J=e=>e!==null&&typeof e=="object",vr=e=>(J(e)||U(e))&&U(e.then)&&U(e.catch),Fr=Object.prototype.toString,Ut=e=>Fr.call(e),ho=e=>Ut(e).slice(8,-1),Nr=e=>Ut(e)==="[object Object]",ms=e=>X(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Tt=ds(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),mn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},po=/-(\w)/g,We=mn(e=>e.replace(po,(t,n)=>n?n.toUpperCase():"")),mo=/\B([A-Z])/g,it=mn(e=>e.replace(mo,"-$1").toLowerCase()),Dr=mn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Nn=mn(e=>e?`on${Dr(e)}`:""),Ke=(e,t)=>!Object.is(e,t),Yt=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},go=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Vs;const gn=()=>Vs||(Vs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function gs(e){if(D(e)){const t={};for(let n=0;n{if(n){const s=n.split(yo);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function bs(e){let t="";if(X(e))t=e;else if(D(e))for(let n=0;nbn(n,t))}const Lr=e=>!!(e&&e.__v_isRef===!0),Ro=e=>X(e)?e:e==null?"":D(e)||J(e)&&(e.toString===Fr||!U(e.toString))?Lr(e)?Ro(e.value):JSON.stringify(e,Ur,2):String(e),Ur=(e,t)=>Lr(t)?Ur(e,t.value):ft(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[Dn(s,i)+" =>"]=r,n),{})}:pn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Dn(n))}:Se(t)?Dn(t):J(t)&&!D(t)&&!Nr(t)?String(t):t,Dn=(e,t="")=>{var n;return Se(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let de;class To{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=de,!t&&de&&(this.index=(de.scopes||(de.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(de=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(At){let t=At;for(At=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Ot;){let t=Ot;for(Ot=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function $r(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Vr(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),ws(s),Ao(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Jn(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(kr(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function kr(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ft)||(e.globalVersion=Ft,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Jn(e))))return;e.flags|=2;const t=e.dep,n=z,s=xe;z=e,xe=!0;try{$r(e);const r=e.fn(e._value);(t.version===0||Ke(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{z=n,xe=s,Vr(e),e.flags&=-3}}function ws(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)ws(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Ao(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let xe=!0;const qr=[];function Be(){qr.push(xe),xe=!1}function He(){const e=qr.pop();xe=e===void 0?!0:e}function ks(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=z;z=void 0;try{t()}finally{z=n}}}let Ft=0;class Co{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 xs{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(!z||!xe||z===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==z)n=this.activeLink=new Co(z,this),z.deps?(n.prevDep=z.depsTail,z.depsTail.nextDep=n,z.depsTail=n):z.deps=z.depsTail=n,Kr(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=z.depsTail,n.nextDep=void 0,z.depsTail.nextDep=n,z.depsTail=n,z.deps===n&&(z.deps=s)}return n}trigger(t){this.version++,Ft++,this.notify(t)}notify(t){ys();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{_s()}}}function Kr(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Kr(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Gn=new WeakMap,nt=Symbol(""),Xn=Symbol(""),Nt=Symbol("");function te(e,t,n){if(xe&&z){let s=Gn.get(e);s||Gn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new xs),r.map=s,r.key=n),r.track()}}function Ue(e,t,n,s,r,i){const o=Gn.get(e);if(!o){Ft++;return}const l=c=>{c&&c.trigger()};if(ys(),t==="clear")o.forEach(l);else{const c=D(e),a=c&&ms(n);if(c&&n==="length"){const f=Number(s);o.forEach((h,y)=>{(y==="length"||y===Nt||!Se(y)&&y>=f)&&l(h)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),a&&l(o.get(Nt)),t){case"add":c?a&&l(o.get("length")):(l(o.get(nt)),ft(e)&&l(o.get(Xn)));break;case"delete":c||(l(o.get(nt)),ft(e)&&l(o.get(Xn)));break;case"set":ft(e)&&l(o.get(nt));break}}_s()}function ot(e){const t=$(e);return t===e?t:(te(t,"iterate",Nt),we(e)?t:t.map(ee))}function yn(e){return te(e=$(e),"iterate",Nt),e}const Po={__proto__:null,[Symbol.iterator](){return Mn(this,Symbol.iterator,ee)},concat(...e){return ot(this).concat(...e.map(t=>D(t)?ot(t):t))},entries(){return Mn(this,"entries",e=>(e[1]=ee(e[1]),e))},every(e,t){return Me(this,"every",e,t,void 0,arguments)},filter(e,t){return Me(this,"filter",e,t,n=>n.map(ee),arguments)},find(e,t){return Me(this,"find",e,t,ee,arguments)},findIndex(e,t){return Me(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Me(this,"findLast",e,t,ee,arguments)},findLastIndex(e,t){return Me(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Me(this,"forEach",e,t,void 0,arguments)},includes(...e){return Ln(this,"includes",e)},indexOf(...e){return Ln(this,"indexOf",e)},join(e){return ot(this).join(e)},lastIndexOf(...e){return Ln(this,"lastIndexOf",e)},map(e,t){return Me(this,"map",e,t,void 0,arguments)},pop(){return xt(this,"pop")},push(...e){return xt(this,"push",e)},reduce(e,...t){return qs(this,"reduce",e,t)},reduceRight(e,...t){return qs(this,"reduceRight",e,t)},shift(){return xt(this,"shift")},some(e,t){return Me(this,"some",e,t,void 0,arguments)},splice(...e){return xt(this,"splice",e)},toReversed(){return ot(this).toReversed()},toSorted(e){return ot(this).toSorted(e)},toSpliced(...e){return ot(this).toSpliced(...e)},unshift(...e){return xt(this,"unshift",e)},values(){return Mn(this,"values",ee)}};function Mn(e,t,n){const s=yn(e),r=s[t]();return s!==e&&!we(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const vo=Array.prototype;function Me(e,t,n,s,r,i){const o=yn(e),l=o!==e&&!we(e),c=o[t];if(c!==vo[t]){const h=c.apply(e,i);return l?ee(h):h}let a=n;o!==e&&(l?a=function(h,y){return n.call(this,ee(h),y,e)}:n.length>2&&(a=function(h,y){return n.call(this,h,y,e)}));const f=c.call(o,a,s);return l&&r?r(f):f}function qs(e,t,n,s){const r=yn(e);let i=n;return r!==e&&(we(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,ee(l),c,e)}),r[t](i,...s)}function Ln(e,t,n){const s=$(e);te(s,"iterate",Nt);const r=s[t](...n);return(r===-1||r===!1)&&Ts(n[0])?(n[0]=$(n[0]),s[t](...n)):r}function xt(e,t,n=[]){Be(),ys();const s=$(e)[t].apply(e,n);return _s(),He(),s}const Fo=ds("__proto__,__v_isRef,__isVue"),Wr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Se));function No(e){Se(e)||(e=String(e));const t=$(this);return te(t,"has",e),t.hasOwnProperty(e)}class zr{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Vo:Yr:i?Xr:Gr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=D(t);if(!r){let c;if(o&&(c=Po[n]))return c;if(n==="hasOwnProperty")return No}const l=Reflect.get(t,n,re(t)?t:s);return(Se(n)?Wr.has(n):Fo(n))||(r||te(t,"get",n),i)?l:re(l)?o&&ms(n)?l:l.value:J(l)?r?Zr(l):Es(l):l}}class Jr extends zr{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=ze(i);if(!we(s)&&!ze(s)&&(i=$(i),s=$(s)),!D(t)&&re(i)&&!re(s))return c?!1:(i.value=s,!0)}const o=D(t)&&ms(n)?Number(n)e,Jt=e=>Reflect.getPrototypeOf(e);function Uo(e,t,n){return function(...s){const r=this.__v_raw,i=$(r),o=ft(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,a=r[e](...s),f=n?Yn:t?rn:ee;return!t&&te(i,"iterate",c?Xn:nt),{next(){const{value:h,done:y}=a.next();return y?{value:h,done:y}:{value:l?[f(h[0]),f(h[1])]:f(h),done:y}},[Symbol.iterator](){return this}}}}function Gt(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function jo(e,t){const n={get(r){const i=this.__v_raw,o=$(i),l=$(r);e||(Ke(r,l)&&te(o,"get",r),te(o,"get",l));const{has:c}=Jt(o),a=t?Yn:e?rn:ee;if(c.call(o,r))return a(i.get(r));if(c.call(o,l))return a(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&te($(r),"iterate",nt),Reflect.get(r,"size",r)},has(r){const i=this.__v_raw,o=$(i),l=$(r);return e||(Ke(r,l)&&te(o,"has",r),te(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=$(l),a=t?Yn:e?rn:ee;return!e&&te(c,"iterate",nt),l.forEach((f,h)=>r.call(i,a(f),a(h),o))}};return ie(n,e?{add:Gt("add"),set:Gt("set"),delete:Gt("delete"),clear:Gt("clear")}:{add(r){!t&&!we(r)&&!ze(r)&&(r=$(r));const i=$(this);return Jt(i).has.call(i,r)||(i.add(r),Ue(i,"add",r,r)),this},set(r,i){!t&&!we(i)&&!ze(i)&&(i=$(i));const o=$(this),{has:l,get:c}=Jt(o);let a=l.call(o,r);a||(r=$(r),a=l.call(o,r));const f=c.call(o,r);return o.set(r,i),a?Ke(i,f)&&Ue(o,"set",r,i):Ue(o,"add",r,i),this},delete(r){const i=$(this),{has:o,get:l}=Jt(i);let c=o.call(i,r);c||(r=$(r),c=o.call(i,r)),l&&l.call(i,r);const a=i.delete(r);return c&&Ue(i,"delete",r,void 0),a},clear(){const r=$(this),i=r.size!==0,o=r.clear();return i&&Ue(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=Uo(r,e,t)}),n}function Ss(e,t){const n=jo(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(V(n,r)&&r in s?n:s,r,i)}const Bo={get:Ss(!1,!1)},Ho={get:Ss(!1,!0)},$o={get:Ss(!0,!1)};const Gr=new WeakMap,Xr=new WeakMap,Yr=new WeakMap,Vo=new WeakMap;function ko(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function qo(e){return e.__v_skip||!Object.isExtensible(e)?0:ko(ho(e))}function Es(e){return ze(e)?e:Rs(e,!1,Io,Bo,Gr)}function Ko(e){return Rs(e,!1,Lo,Ho,Xr)}function Zr(e){return Rs(e,!0,Mo,$o,Yr)}function Rs(e,t,n,s,r){if(!J(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=qo(e);if(i===0)return e;const o=r.get(e);if(o)return o;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function ut(e){return ze(e)?ut(e.__v_raw):!!(e&&e.__v_isReactive)}function ze(e){return!!(e&&e.__v_isReadonly)}function we(e){return!!(e&&e.__v_isShallow)}function Ts(e){return e?!!e.__v_raw:!1}function $(e){const t=e&&e.__v_raw;return t?$(t):e}function Wo(e){return!V(e,"__v_skip")&&Object.isExtensible(e)&&zn(e,"__v_skip",!0),e}const ee=e=>J(e)?Es(e):e,rn=e=>J(e)?Zr(e):e;function re(e){return e?e.__v_isRef===!0:!1}function mu(e){return zo(e,!1)}function zo(e,t){return re(e)?e:new Jo(e,t)}class Jo{constructor(t,n){this.dep=new xs,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:$(t),this._value=n?t:ee(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||we(t)||ze(t);t=s?t:$(t),Ke(t,n)&&(this._rawValue=t,this._value=s?t:ee(t),this.dep.trigger())}}function Go(e){return re(e)?e.value:e}const Xo={get:(e,t,n)=>t==="__v_raw"?e:Go(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return re(r)&&!re(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Qr(e){return ut(e)?e:new Proxy(e,Xo)}class Yo{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new xs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ft-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&z!==this)return Hr(this,!0),!0}get value(){const t=this.dep.track();return kr(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Zo(e,t,n=!1){let s,r;return U(e)?s=e:(s=e.get,r=e.set),new Yo(s,r,n)}const Xt={},on=new WeakMap;let et;function Qo(e,t=!1,n=et){if(n){let s=on.get(n);s||on.set(n,s=[]),s.push(e)}}function el(e,t,n=q){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,a=P=>r?P:we(P)||r===!1||r===0?je(P,1):je(P);let f,h,y,R,x=!1,T=!1;if(re(e)?(h=()=>e.value,x=we(e)):ut(e)?(h=()=>a(e),x=!0):D(e)?(T=!0,x=e.some(P=>ut(P)||we(P)),h=()=>e.map(P=>{if(re(P))return P.value;if(ut(P))return a(P);if(U(P))return c?c(P,2):P()})):U(e)?t?h=c?()=>c(e,2):e:h=()=>{if(y){Be();try{y()}finally{He()}}const P=et;et=f;try{return c?c(e,3,[R]):e(R)}finally{et=P}}:h=Ne,t&&r){const P=h,B=r===!0?1/0:r;h=()=>je(P(),B)}const C=Oo(),N=()=>{f.stop(),C&&C.active&&ps(C.effects,f)};if(i&&t){const P=t;t=(...B)=>{P(...B),N()}}let M=T?new Array(e.length).fill(Xt):Xt;const j=P=>{if(!(!(f.flags&1)||!f.dirty&&!P))if(t){const B=f.run();if(r||x||(T?B.some((Q,Z)=>Ke(Q,M[Z])):Ke(B,M))){y&&y();const Q=et;et=f;try{const Z=[B,M===Xt?void 0:T&&M[0]===Xt?[]:M,R];M=B,c?c(t,3,Z):t(...Z)}finally{et=Q}}}else f.run()};return l&&l(j),f=new jr(h),f.scheduler=o?()=>o(j,!1):j,R=P=>Qo(P,!1,f),y=f.onStop=()=>{const P=on.get(f);if(P){if(c)c(P,4);else for(const B of P)B();on.delete(f)}},t?s?j(!0):M=f.run():o?o(j.bind(null,!0),!0):f.run(),N.pause=f.pause.bind(f),N.resume=f.resume.bind(f),N.stop=N,N}function je(e,t=1/0,n){if(t<=0||!J(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,re(e))je(e.value,t,n);else if(D(e))for(let s=0;s{je(s,t,n)});else if(Nr(e)){for(const s in e)je(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&je(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function jt(e,t,n,s){try{return s?e(...s):e()}catch(r){_n(r,t,n)}}function Ie(e,t,n,s){if(U(e)){const r=jt(e,t,n,s);return r&&vr(r)&&r.catch(i=>{_n(i,t,n)}),r}if(D(e)){const r=[];for(let i=0;i>>1,r=ce[s],i=Dt(r);i=Dt(n)?ce.push(e):ce.splice(sl(t),0,e),e.flags|=1,ti()}}function ti(){ln||(ln=ei.then(si))}function rl(e){D(e)?at.push(...e):ke&&e.id===-1?ke.splice(lt+1,0,e):e.flags&1||(at.push(e),e.flags|=1),ti()}function Ks(e,t,n=ve+1){for(;nDt(n)-Dt(s));if(at.length=0,ke){ke.push(...t);return}for(ke=t,lt=0;lte.id==null?e.flags&2?-1:1/0:e.id;function si(e){try{for(ve=0;ve{s._d&&er(-1);const i=cn(t);let o;try{o=e(...r)}finally{cn(i),s._d&&er(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function gu(e,t){if(se===null)return e;const n=En(se),s=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport;function As(e,t){e.shapeFlag&6&&e.component?(e.transition=t,As(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}/*! #__NO_SIDE_EFFECTS__ */function bu(e,t){return U(e)?ie({name:e.name},t,{setup:e}):e}function ii(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Ct(e,t,n,s,r=!1){if(D(e)){e.forEach((x,T)=>Ct(x,t&&(D(t)?t[T]:t),n,s,r));return}if(dt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Ct(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?En(s.component):s.el,o=r?null:i,{i:l,r:c}=e,a=t&&t.r,f=l.refs===q?l.refs={}:l.refs,h=l.setupState,y=$(h),R=h===q?()=>!1:x=>V(y,x);if(a!=null&&a!==c&&(X(a)?(f[a]=null,R(a)&&(h[a]=null)):re(a)&&(a.value=null)),U(c))jt(c,l,12,[o,f]);else{const x=X(c),T=re(c);if(x||T){const C=()=>{if(e.f){const N=x?R(c)?h[c]:f[c]:c.value;r?D(N)&&ps(N,i):D(N)?N.includes(i)||N.push(i):x?(f[c]=[i],R(c)&&(h[c]=f[c])):(c.value=[i],e.k&&(f[e.k]=c.value))}else x?(f[c]=o,R(c)&&(h[c]=o)):T&&(c.value=o,e.k&&(f[e.k]=o))};o?(C.id=-1,be(C,n)):C()}}}gn().requestIdleCallback;gn().cancelIdleCallback;const dt=e=>!!e.type.__asyncLoader,oi=e=>e.type.__isKeepAlive;function cl(e,t){li(e,"a",t)}function fl(e,t){li(e,"da",t)}function li(e,t,n=fe){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(wn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)oi(r.parent.vnode)&&ul(s,t,n,r),r=r.parent}}function ul(e,t,n,s){const r=wn(t,e,s,!0);ci(()=>{ps(s[t],r)},n)}function wn(e,t,n=fe,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{Be();const l=Bt(n),c=Ie(t,n,e,o);return l(),He(),c});return s?r.unshift(i):r.push(i),i}}const Ve=e=>(t,n=fe)=>{(!Mt||e==="sp")&&wn(e,(...s)=>t(...s),n)},al=Ve("bm"),dl=Ve("m"),hl=Ve("bu"),pl=Ve("u"),ml=Ve("bum"),ci=Ve("um"),gl=Ve("sp"),bl=Ve("rtg"),yl=Ve("rtc");function _l(e,t=fe){wn("ec",e,t)}const wl=Symbol.for("v-ndc");function yu(e,t,n,s){let r;const i=n,o=D(e);if(o||X(e)){const l=o&&ut(e);let c=!1,a=!1;l&&(c=!we(e),a=ze(e),e=yn(e)),r=new Array(e.length);for(let f=0,h=e.length;ft(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,a=l.length;cvs(t)?!(t.type===$e||t.type===_e&&!fi(t.children)):!0)?e:null}const Zn=e=>e?Fi(e)?En(e):Zn(e.parent):null,Pt=ie(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=>Zn(e.parent),$root:e=>Zn(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ai(e),$forceUpdate:e=>e.f||(e.f=()=>{Os(e.update)}),$nextTick:e=>e.n||(e.n=nl.bind(e.proxy)),$watch:e=>kl.bind(e)}),Un=(e,t)=>e!==q&&!e.__isScriptSetup&&V(e,t),xl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const R=o[t];if(R!==void 0)switch(R){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(Un(s,t))return o[t]=1,s[t];if(r!==q&&V(r,t))return o[t]=2,r[t];if((a=e.propsOptions[0])&&V(a,t))return o[t]=3,i[t];if(n!==q&&V(n,t))return o[t]=4,n[t];Qn&&(o[t]=0)}}const f=Pt[t];let h,y;if(f)return t==="$attrs"&&te(e.attrs,"get",""),f(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==q&&V(n,t))return o[t]=4,n[t];if(y=c.config.globalProperties,V(y,t))return y[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return Un(r,t)?(r[t]=n,!0):s!==q&&V(s,t)?(s[t]=n,!0):V(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==q&&V(e,o)||Un(t,o)||(l=i[0])&&V(l,o)||V(s,o)||V(Pt,o)||V(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:V(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function wu(){return Sl().attrs}function Sl(e){const t=vi();return t.setupContext||(t.setupContext=Di(t))}function Ws(e){return D(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Qn=!0;function El(e){const t=ai(e),n=e.proxy,s=e.ctx;Qn=!1,t.beforeCreate&&zs(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:a,created:f,beforeMount:h,mounted:y,beforeUpdate:R,updated:x,activated:T,deactivated:C,beforeDestroy:N,beforeUnmount:M,destroyed:j,unmounted:P,render:B,renderTracked:Q,renderTriggered:Z,errorCaptured:me,serverPrefetch:Je,expose:Ge,inheritAttrs:bt,components:qt,directives:Kt,filters:vn}=t;if(a&&Rl(a,s,null),o)for(const G in o){const K=o[G];U(K)&&(s[G]=K.bind(n))}if(r){const G=r.call(n,n);J(G)&&(e.data=Es(G))}if(Qn=!0,i)for(const G in i){const K=i[G],Xe=U(K)?K.bind(n,n):U(K.get)?K.get.bind(n,n):Ne,Wt=!U(K)&&U(K.set)?K.set.bind(n):Ne,Ye=fc({get:Xe,set:Wt});Object.defineProperty(s,G,{enumerable:!0,configurable:!0,get:()=>Ye.value,set:Re=>Ye.value=Re})}if(l)for(const G in l)ui(l[G],s,n,G);if(c){const G=U(c)?c.call(n):c;Reflect.ownKeys(G).forEach(K=>{vl(K,G[K])})}f&&zs(f,e,"c");function oe(G,K){D(K)?K.forEach(Xe=>G(Xe.bind(n))):K&&G(K.bind(n))}if(oe(al,h),oe(dl,y),oe(hl,R),oe(pl,x),oe(cl,T),oe(fl,C),oe(_l,me),oe(yl,Q),oe(bl,Z),oe(ml,M),oe(ci,P),oe(gl,Je),D(Ge))if(Ge.length){const G=e.exposed||(e.exposed={});Ge.forEach(K=>{Object.defineProperty(G,K,{get:()=>n[K],set:Xe=>n[K]=Xe,enumerable:!0})})}else e.exposed||(e.exposed={});B&&e.render===Ne&&(e.render=B),bt!=null&&(e.inheritAttrs=bt),qt&&(e.components=qt),Kt&&(e.directives=Kt),Je&&ii(e)}function Rl(e,t,n=Ne){D(e)&&(e=es(e));for(const s in e){const r=e[s];let i;J(r)?"default"in r?i=Zt(r.from||s,r.default,!0):i=Zt(r.from||s):i=Zt(r),re(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function zs(e,t,n){Ie(D(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function ui(e,t,n,s){let r=s.includes(".")?Ri(n,s):()=>n[s];if(X(e)){const i=t[e];U(i)&&Bn(r,i)}else if(U(e))Bn(r,e.bind(n));else if(J(e))if(D(e))e.forEach(i=>ui(i,t,n,s));else{const i=U(e.handler)?e.handler.bind(n):t[e.handler];U(i)&&Bn(r,i,e)}}function ai(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(a=>fn(c,a,o,!0)),fn(c,t,o)),J(t)&&i.set(t,c),c}function fn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&fn(e,i,n,!0),r&&r.forEach(o=>fn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Tl[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Tl={data:Js,props:Gs,emits:Gs,methods:Rt,computed:Rt,beforeCreate:le,created:le,beforeMount:le,mounted:le,beforeUpdate:le,updated:le,beforeDestroy:le,beforeUnmount:le,destroyed:le,unmounted:le,activated:le,deactivated:le,errorCaptured:le,serverPrefetch:le,components:Rt,directives:Rt,watch:Al,provide:Js,inject:Ol};function Js(e,t){return t?e?function(){return ie(U(e)?e.call(this,this):e,U(t)?t.call(this,this):t)}:t:e}function Ol(e,t){return Rt(es(e),es(t))}function es(e){if(D(e)){const t={};for(let n=0;n1)return n&&U(t)?t.call(s&&s.proxy):t}}const hi={},pi=()=>Object.create(hi),mi=e=>Object.getPrototypeOf(e)===hi;function Fl(e,t,n,s=!1){const r={},i=pi();e.propsDefaults=Object.create(null),gi(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Ko(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Nl(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=$(r),[c]=e.propsOptions;let a=!1;if((s||o>0)&&!(o&16)){if(o&8){const f=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[y,R]=bi(h,t,!0);ie(o,y),R&&l.push(...R)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!i&&!c)return J(e)&&s.set(e,ct),ct;if(D(i))for(let f=0;fe==="_"||e==="__"||e==="_ctx"||e==="$stable",Ps=e=>D(e)?e.map(Fe):[Fe(e)],Il=(e,t,n)=>{if(t._n)return t;const s=il((...r)=>Ps(t(...r)),n);return s._c=!1,s},yi=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Cs(r))continue;const i=e[r];if(U(i))t[r]=Il(r,i,s);else if(i!=null){const o=Ps(i);t[r]=()=>o}}},_i=(e,t)=>{const n=Ps(t);e.slots.default=()=>n},wi=(e,t,n)=>{for(const s in t)(n||!Cs(s))&&(e[s]=t[s])},Ml=(e,t,n)=>{const s=e.slots=pi();if(e.vnode.shapeFlag&32){const r=t.__;r&&zn(s,"__",r,!0);const i=t._;i?(wi(s,t,n),n&&zn(s,"_",i,!0)):yi(t,s)}else t&&_i(e,t)},Ll=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=q;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:wi(r,t,n):(i=!t.$stable,yi(t,r)),o=t}else t&&(_i(e,t),o={default:1});if(i)for(const l in r)!Cs(l)&&o[l]==null&&delete r[l]},be=Xl;function Ul(e){return jl(e)}function jl(e,t){const n=gn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:a,setElementText:f,parentNode:h,nextSibling:y,setScopeId:R=Ne,insertStaticContent:x}=e,T=(u,d,m,_=null,g=null,b=null,O=void 0,E=null,S=!!d.dynamicChildren)=>{if(u===d)return;u&&!St(u,d)&&(_=zt(u),Re(u,g,b,!0),u=null),d.patchFlag===-2&&(S=!1,d.dynamicChildren=null);const{type:w,ref:F,shapeFlag:A}=d;switch(w){case Sn:C(u,d,m,_);break;case $e:N(u,d,m,_);break;case Hn:u==null&&M(d,m,_,O);break;case _e:qt(u,d,m,_,g,b,O,E,S);break;default:A&1?B(u,d,m,_,g,b,O,E,S):A&6?Kt(u,d,m,_,g,b,O,E,S):(A&64||A&128)&&w.process(u,d,m,_,g,b,O,E,S,_t)}F!=null&&g?Ct(F,u&&u.ref,b,d||u,!d):F==null&&u&&u.ref!=null&&Ct(u.ref,null,b,u,!0)},C=(u,d,m,_)=>{if(u==null)s(d.el=l(d.children),m,_);else{const g=d.el=u.el;d.children!==u.children&&a(g,d.children)}},N=(u,d,m,_)=>{u==null?s(d.el=c(d.children||""),m,_):d.el=u.el},M=(u,d,m,_)=>{[u.el,u.anchor]=x(u.children,d,m,_,u.el,u.anchor)},j=({el:u,anchor:d},m,_)=>{let g;for(;u&&u!==d;)g=y(u),s(u,m,_),u=g;s(d,m,_)},P=({el:u,anchor:d})=>{let m;for(;u&&u!==d;)m=y(u),r(u),u=m;r(d)},B=(u,d,m,_,g,b,O,E,S)=>{d.type==="svg"?O="svg":d.type==="math"&&(O="mathml"),u==null?Q(d,m,_,g,b,O,E,S):Je(u,d,g,b,O,E,S)},Q=(u,d,m,_,g,b,O,E)=>{let S,w;const{props:F,shapeFlag:A,transition:v,dirs:I}=u;if(S=u.el=o(u.type,b,F&&F.is,F),A&8?f(S,u.children):A&16&&me(u.children,S,null,_,g,jn(u,b),O,E),I&&Ze(u,null,_,"created"),Z(S,u,u.scopeId,O,_),F){for(const W in F)W!=="value"&&!Tt(W)&&i(S,W,null,F[W],b,_);"value"in F&&i(S,"value",null,F.value,b),(w=F.onVnodeBeforeMount)&&Ce(w,_,u)}I&&Ze(u,null,_,"beforeMount");const H=Bl(g,v);H&&v.beforeEnter(S),s(S,d,m),((w=F&&F.onVnodeMounted)||H||I)&&be(()=>{w&&Ce(w,_,u),H&&v.enter(S),I&&Ze(u,null,_,"mounted")},g)},Z=(u,d,m,_,g)=>{if(m&&R(u,m),_)for(let b=0;b<_.length;b++)R(u,_[b]);if(g){let b=g.subTree;if(d===b||Oi(b.type)&&(b.ssContent===d||b.ssFallback===d)){const O=g.vnode;Z(u,O,O.scopeId,O.slotScopeIds,g.parent)}}},me=(u,d,m,_,g,b,O,E,S=0)=>{for(let w=S;w{const E=d.el=u.el;let{patchFlag:S,dynamicChildren:w,dirs:F}=d;S|=u.patchFlag&16;const A=u.props||q,v=d.props||q;let I;if(m&&Qe(m,!1),(I=v.onVnodeBeforeUpdate)&&Ce(I,m,d,u),F&&Ze(d,u,m,"beforeUpdate"),m&&Qe(m,!0),(A.innerHTML&&v.innerHTML==null||A.textContent&&v.textContent==null)&&f(E,""),w?Ge(u.dynamicChildren,w,E,m,_,jn(d,g),b):O||K(u,d,E,null,m,_,jn(d,g),b,!1),S>0){if(S&16)bt(E,A,v,m,g);else if(S&2&&A.class!==v.class&&i(E,"class",null,v.class,g),S&4&&i(E,"style",A.style,v.style,g),S&8){const H=d.dynamicProps;for(let W=0;W{I&&Ce(I,m,d,u),F&&Ze(d,u,m,"updated")},_)},Ge=(u,d,m,_,g,b,O)=>{for(let E=0;E{if(d!==m){if(d!==q)for(const b in d)!Tt(b)&&!(b in m)&&i(u,b,d[b],null,g,_);for(const b in m){if(Tt(b))continue;const O=m[b],E=d[b];O!==E&&b!=="value"&&i(u,b,E,O,g,_)}"value"in m&&i(u,"value",d.value,m.value,g)}},qt=(u,d,m,_,g,b,O,E,S)=>{const w=d.el=u?u.el:l(""),F=d.anchor=u?u.anchor:l("");let{patchFlag:A,dynamicChildren:v,slotScopeIds:I}=d;I&&(E=E?E.concat(I):I),u==null?(s(w,m,_),s(F,m,_),me(d.children||[],m,F,g,b,O,E,S)):A>0&&A&64&&v&&u.dynamicChildren?(Ge(u.dynamicChildren,v,m,g,b,O,E),(d.key!=null||g&&d===g.subTree)&&xi(u,d,!0)):K(u,d,m,F,g,b,O,E,S)},Kt=(u,d,m,_,g,b,O,E,S)=>{d.slotScopeIds=E,u==null?d.shapeFlag&512?g.ctx.activate(d,m,_,O,S):vn(d,m,_,g,b,O,S):Ms(u,d,S)},vn=(u,d,m,_,g,b,O)=>{const E=u.component=rc(u,_,g);if(oi(u)&&(E.ctx.renderer=_t),ic(E,!1,O),E.asyncDep){if(g&&g.registerDep(E,oe,O),!u.el){const S=E.subTree=De($e);N(null,S,d,m),u.placeholder=S.el}}else oe(E,u,d,m,g,b,O)},Ms=(u,d,m)=>{const _=d.component=u.component;if(Jl(u,d,m))if(_.asyncDep&&!_.asyncResolved){G(_,d,m);return}else _.next=d,_.update();else d.el=u.el,_.vnode=d},oe=(u,d,m,_,g,b,O)=>{const E=()=>{if(u.isMounted){let{next:A,bu:v,u:I,parent:H,vnode:W}=u;{const Oe=Si(u);if(Oe){A&&(A.el=W.el,G(u,A,O)),Oe.asyncDep.then(()=>{u.isUnmounted||E()});return}}let k=A,ue;Qe(u,!1),A?(A.el=W.el,G(u,A,O)):A=W,v&&Yt(v),(ue=A.props&&A.props.onVnodeBeforeUpdate)&&Ce(ue,H,A,W),Qe(u,!0);const ae=Zs(u),Te=u.subTree;u.subTree=ae,T(Te,ae,h(Te.el),zt(Te),u,g,b),A.el=ae.el,k===null&&Gl(u,ae.el),I&&be(I,g),(ue=A.props&&A.props.onVnodeUpdated)&&be(()=>Ce(ue,H,A,W),g)}else{let A;const{el:v,props:I}=d,{bm:H,m:W,parent:k,root:ue,type:ae}=u,Te=dt(d);Qe(u,!1),H&&Yt(H),!Te&&(A=I&&I.onVnodeBeforeMount)&&Ce(A,k,d),Qe(u,!0);{ue.ce&&ue.ce._def.shadowRoot!==!1&&ue.ce._injectChildStyle(ae);const Oe=u.subTree=Zs(u);T(null,Oe,m,_,u,g,b),d.el=Oe.el}if(W&&be(W,g),!Te&&(A=I&&I.onVnodeMounted)){const Oe=d;be(()=>Ce(A,k,Oe),g)}(d.shapeFlag&256||k&&dt(k.vnode)&&k.vnode.shapeFlag&256)&&u.a&&be(u.a,g),u.isMounted=!0,d=m=_=null}};u.scope.on();const S=u.effect=new jr(E);u.scope.off();const w=u.update=S.run.bind(S),F=u.job=S.runIfDirty.bind(S);F.i=u,F.id=u.uid,S.scheduler=()=>Os(F),Qe(u,!0),w()},G=(u,d,m)=>{d.component=u;const _=u.vnode.props;u.vnode=d,u.next=null,Nl(u,d.props,_,m),Ll(u,d.children,m),Be(),Ks(u),He()},K=(u,d,m,_,g,b,O,E,S=!1)=>{const w=u&&u.children,F=u?u.shapeFlag:0,A=d.children,{patchFlag:v,shapeFlag:I}=d;if(v>0){if(v&128){Wt(w,A,m,_,g,b,O,E,S);return}else if(v&256){Xe(w,A,m,_,g,b,O,E,S);return}}I&8?(F&16&&yt(w,g,b),A!==w&&f(m,A)):F&16?I&16?Wt(w,A,m,_,g,b,O,E,S):yt(w,g,b,!0):(F&8&&f(m,""),I&16&&me(A,m,_,g,b,O,E,S))},Xe=(u,d,m,_,g,b,O,E,S)=>{u=u||ct,d=d||ct;const w=u.length,F=d.length,A=Math.min(w,F);let v;for(v=0;vF?yt(u,g,b,!0,!1,A):me(d,m,_,g,b,O,E,S,A)},Wt=(u,d,m,_,g,b,O,E,S)=>{let w=0;const F=d.length;let A=u.length-1,v=F-1;for(;w<=A&&w<=v;){const I=u[w],H=d[w]=S?qe(d[w]):Fe(d[w]);if(St(I,H))T(I,H,m,null,g,b,O,E,S);else break;w++}for(;w<=A&&w<=v;){const I=u[A],H=d[v]=S?qe(d[v]):Fe(d[v]);if(St(I,H))T(I,H,m,null,g,b,O,E,S);else break;A--,v--}if(w>A){if(w<=v){const I=v+1,H=Iv)for(;w<=A;)Re(u[w],g,b,!0),w++;else{const I=w,H=w,W=new Map;for(w=H;w<=v;w++){const ge=d[w]=S?qe(d[w]):Fe(d[w]);ge.key!=null&&W.set(ge.key,w)}let k,ue=0;const ae=v-H+1;let Te=!1,Oe=0;const wt=new Array(ae);for(w=0;w=ae){Re(ge,g,b,!0);continue}let Ae;if(ge.key!=null)Ae=W.get(ge.key);else for(k=H;k<=v;k++)if(wt[k-H]===0&&St(ge,d[k])){Ae=k;break}Ae===void 0?Re(ge,g,b,!0):(wt[Ae-H]=w+1,Ae>=Oe?Oe=Ae:Te=!0,T(ge,d[Ae],m,null,g,b,O,E,S),ue++)}const js=Te?Hl(wt):ct;for(k=js.length-1,w=ae-1;w>=0;w--){const ge=H+w,Ae=d[ge],Bs=d[ge+1],Hs=ge+1{const{el:b,type:O,transition:E,children:S,shapeFlag:w}=u;if(w&6){Ye(u.component.subTree,d,m,_);return}if(w&128){u.suspense.move(d,m,_);return}if(w&64){O.move(u,d,m,_t);return}if(O===_e){s(b,d,m);for(let A=0;AE.enter(b),g);else{const{leave:A,delayLeave:v,afterLeave:I}=E,H=()=>{u.ctx.isUnmounted?r(b):s(b,d,m)},W=()=>{A(b,()=>{H(),I&&I()})};v?v(b,H,W):W()}else s(b,d,m)},Re=(u,d,m,_=!1,g=!1)=>{const{type:b,props:O,ref:E,children:S,dynamicChildren:w,shapeFlag:F,patchFlag:A,dirs:v,cacheIndex:I}=u;if(A===-2&&(g=!1),E!=null&&(Be(),Ct(E,null,m,u,!0),He()),I!=null&&(d.renderCache[I]=void 0),F&256){d.ctx.deactivate(u);return}const H=F&1&&v,W=!dt(u);let k;if(W&&(k=O&&O.onVnodeBeforeUnmount)&&Ce(k,d,u),F&6)fo(u.component,m,_);else{if(F&128){u.suspense.unmount(m,_);return}H&&Ze(u,null,d,"beforeUnmount"),F&64?u.type.remove(u,d,m,_t,_):w&&!w.hasOnce&&(b!==_e||A>0&&A&64)?yt(w,d,m,!1,!0):(b===_e&&A&384||!g&&F&16)&&yt(S,d,m),_&&Ls(u)}(W&&(k=O&&O.onVnodeUnmounted)||H)&&be(()=>{k&&Ce(k,d,u),H&&Ze(u,null,d,"unmounted")},m)},Ls=u=>{const{type:d,el:m,anchor:_,transition:g}=u;if(d===_e){co(m,_);return}if(d===Hn){P(u);return}const b=()=>{r(m),g&&!g.persisted&&g.afterLeave&&g.afterLeave()};if(u.shapeFlag&1&&g&&!g.persisted){const{leave:O,delayLeave:E}=g,S=()=>O(m,b);E?E(u.el,b,S):S()}else b()},co=(u,d)=>{let m;for(;u!==d;)m=y(u),r(u),u=m;r(d)},fo=(u,d,m)=>{const{bum:_,scope:g,job:b,subTree:O,um:E,m:S,a:w,parent:F,slots:{__:A}}=u;Ys(S),Ys(w),_&&Yt(_),F&&D(A)&&A.forEach(v=>{F.renderCache[v]=void 0}),g.stop(),b&&(b.flags|=8,Re(O,u,d,m)),E&&be(E,d),be(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},yt=(u,d,m,_=!1,g=!1,b=0)=>{for(let O=b;O{if(u.shapeFlag&6)return zt(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=y(u.anchor||u.el),m=d&&d[ol];return m?y(m):d};let Fn=!1;const Us=(u,d,m)=>{u==null?d._vnode&&Re(d._vnode,null,null,!0):T(d._vnode||null,u,d,null,null,null,m),d._vnode=u,Fn||(Fn=!0,Ks(),ni(),Fn=!1)},_t={p:T,um:Re,m:Ye,r:Ls,mt:vn,mc:me,pc:K,pbc:Ge,n:zt,o:e};return{render:Us,hydrate:void 0,createApp:Pl(Us)}}function jn({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 Qe({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Bl(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function xi(e,t,n=!1){const s=e.children,r=t.children;if(D(s)&&D(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Si(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Si(t)}function Ys(e){if(e)for(let t=0;tZt($l);function Bn(e,t,n){return Ei(e,t,n)}function Ei(e,t,n=q){const{immediate:s,deep:r,flush:i,once:o}=n,l=ie({},n),c=t&&s||!t&&i!=="post";let a;if(Mt){if(i==="sync"){const R=Vl();a=R.__watcherHandles||(R.__watcherHandles=[])}else if(!c){const R=()=>{};return R.stop=Ne,R.resume=Ne,R.pause=Ne,R}}const f=fe;l.call=(R,x,T)=>Ie(R,f,x,T);let h=!1;i==="post"?l.scheduler=R=>{be(R,f&&f.suspense)}:i!=="sync"&&(h=!0,l.scheduler=(R,x)=>{x?R():Os(R)}),l.augmentJob=R=>{t&&(R.flags|=4),h&&(R.flags|=2,f&&(R.id=f.uid,R.i=f))};const y=el(e,t,l);return Mt&&(a?a.push(y):c&&y()),y}function kl(e,t,n){const s=this.proxy,r=X(e)?e.includes(".")?Ri(s,e):()=>s[e]:e.bind(s,s);let i;U(t)?i=t:(i=t.handler,n=t);const o=Bt(this),l=Ei(r,i.bind(s),n);return o(),l}function Ri(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${We(t)}Modifiers`]||e[`${it(t)}Modifiers`];function Kl(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||q;let r=n;const i=t.startsWith("update:"),o=i&&ql(s,t.slice(7));o&&(o.trim&&(r=n.map(f=>X(f)?f.trim():f)),o.number&&(r=n.map(go)));let l,c=s[l=Nn(t)]||s[l=Nn(We(t))];!c&&i&&(c=s[l=Nn(it(t))]),c&&Ie(c,e,6,r);const a=s[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ie(a,e,6,r)}}function Ti(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!U(e)){const c=a=>{const f=Ti(a,t,!0);f&&(l=!0,ie(o,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(J(e)&&s.set(e,null),null):(D(i)?i.forEach(c=>o[c]=null):ie(o,i),J(e)&&s.set(e,o),o)}function xn(e,t){return!e||!hn(t)?!1:(t=t.slice(2).replace(/Once$/,""),V(e,t[0].toLowerCase()+t.slice(1))||V(e,it(t))||V(e,t))}function Zs(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:a,renderCache:f,props:h,data:y,setupState:R,ctx:x,inheritAttrs:T}=e,C=cn(e);let N,M;try{if(n.shapeFlag&4){const P=r||s,B=P;N=Fe(a.call(B,P,f,h,R,y,x)),M=l}else{const P=t;N=Fe(P.length>1?P(h,{attrs:l,slots:o,emit:c}):P(h,null)),M=t.props?l:Wl(l)}}catch(P){vt.length=0,_n(P,e,1),N=De($e)}let j=N;if(M&&T!==!1){const P=Object.keys(M),{shapeFlag:B}=j;P.length&&B&7&&(i&&P.some(hs)&&(M=zl(M,i)),j=pt(j,M,!1,!0))}return n.dirs&&(j=pt(j,null,!1,!0),j.dirs=j.dirs?j.dirs.concat(n.dirs):n.dirs),n.transition&&As(j,n.transition),N=j,cn(C),N}const Wl=e=>{let t;for(const n in e)(n==="class"||n==="style"||hn(n))&&((t||(t={}))[n]=e[n]);return t},zl=(e,t)=>{const n={};for(const s in e)(!hs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Jl(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,a=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Qs(s,o,a):!!o;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function Xl(e,t){t&&t.pendingBranch?D(e)?t.effects.push(...e):t.effects.push(e):rl(e)}const _e=Symbol.for("v-fgt"),Sn=Symbol.for("v-txt"),$e=Symbol.for("v-cmt"),Hn=Symbol.for("v-stc"),vt=[];let ye=null;function ns(e=!1){vt.push(ye=e?null:[])}function Yl(){vt.pop(),ye=vt[vt.length-1]||null}let It=1;function er(e,t=!1){It+=e,e<0&&ye&&t&&(ye.hasOnce=!0)}function Ai(e){return e.dynamicChildren=It>0?ye||ct:null,Yl(),It>0&&ye&&ye.push(e),e}function xu(e,t,n,s,r,i){return Ai(Pi(e,t,n,s,r,i,!0))}function ss(e,t,n,s,r){return Ai(De(e,t,n,s,r,!0))}function vs(e){return e?e.__v_isVNode===!0:!1}function St(e,t){return e.type===t.type&&e.key===t.key}const Ci=({key:e})=>e??null,Qt=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?X(e)||re(e)||U(e)?{i:se,r:e,k:t,f:!!n}:e:null);function Pi(e,t=null,n=null,s=0,r=null,i=e===_e?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ci(t),ref:t&&Qt(t),scopeId:ri,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:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:se};return l?(Fs(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=X(n)?8:16),It>0&&!o&&ye&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&ye.push(c),c}const De=Zl;function Zl(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===wl)&&(e=$e),vs(e)){const l=pt(e,t,!0);return n&&Fs(l,n),It>0&&!i&&ye&&(l.shapeFlag&6?ye[ye.indexOf(e)]=l:ye.push(l)),l.patchFlag=-2,l}if(cc(e)&&(e=e.__vccOpts),t){t=Ql(t);let{class:l,style:c}=t;l&&!X(l)&&(t.class=bs(l)),J(c)&&(Ts(c)&&!D(c)&&(c=ie({},c)),t.style=gs(c))}const o=X(e)?1:Oi(e)?128:ll(e)?64:J(e)?4:U(e)?2:0;return Pi(e,t,n,s,r,o,i,!0)}function Ql(e){return e?Ts(e)||mi(e)?ie({},e):e:null}function pt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,a=t?tc(r||{},t):r,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&Ci(a),ref:t&&t.ref?n&&i?D(i)?i.concat(Qt(t)):[i,Qt(t)]:Qt(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==_e?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&pt(e.ssContent),ssFallback:e.ssFallback&&pt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&As(f,c.clone(f)),f}function ec(e=" ",t=0){return De(Sn,null,e,t)}function Su(e="",t=!1){return t?(ns(),ss($e,null,e)):De($e,null,e)}function Fe(e){return e==null||typeof e=="boolean"?De($e):D(e)?De(_e,null,e.slice()):vs(e)?qe(e):De(Sn,null,String(e))}function qe(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:pt(e)}function Fs(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(D(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Fs(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!mi(t)?t._ctx=se:r===3&&se&&(se.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else U(t)?(t={default:t,_ctx:se},n=32):(t=String(t),s&64?(n=16,t=[ec(t)]):n=8);e.children=t,e.shapeFlag|=n}function tc(...e){const t={};for(let n=0;nfe||se;let un,rs;{const e=gn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};un=t("__VUE_INSTANCE_SETTERS__",n=>fe=n),rs=t("__VUE_SSR_SETTERS__",n=>Mt=n)}const Bt=e=>{const t=fe;return un(e),e.scope.on(),()=>{e.scope.off(),un(t)}},tr=()=>{fe&&fe.scope.off(),un(null)};function Fi(e){return e.vnode.shapeFlag&4}let Mt=!1;function ic(e,t=!1,n=!1){t&&rs(t);const{props:s,children:r}=e.vnode,i=Fi(e);Fl(e,s,i,t),Ml(e,r,n||t);const o=i?oc(e,t):void 0;return t&&rs(!1),o}function oc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,xl);const{setup:s}=n;if(s){Be();const r=e.setupContext=s.length>1?Di(e):null,i=Bt(e),o=jt(s,e,0,[e.props,r]),l=vr(o);if(He(),i(),(l||e.sp)&&!dt(e)&&ii(e),l){if(o.then(tr,tr),t)return o.then(c=>{nr(e,c)}).catch(c=>{_n(c,e,0)});e.asyncDep=o}else nr(e,o)}else Ni(e)}function nr(e,t,n){U(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:J(t)&&(e.setupState=Qr(t)),Ni(e)}function Ni(e,t,n){const s=e.type;e.render||(e.render=s.render||Ne);{const r=Bt(e);Be();try{El(e)}finally{He(),r()}}}const lc={get(e,t){return te(e,"get",""),e[t]}};function Di(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,lc),slots:e.slots,emit:e.emit,expose:t}}function En(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Qr(Wo(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Pt)return Pt[n](e)},has(t,n){return n in t||n in Pt}})):e.proxy}function cc(e){return U(e)&&"__vccOpts"in e}const fc=(e,t)=>Zo(e,t,Mt),uc="3.5.18";/** +* @vue/runtime-dom v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let is;const sr=typeof window<"u"&&window.trustedTypes;if(sr)try{is=sr.createPolicy("vue",{createHTML:e=>e})}catch{}const Ii=is?e=>is.createHTML(e):e=>e,ac="http://www.w3.org/2000/svg",dc="http://www.w3.org/1998/Math/MathML",Le=typeof document<"u"?document:null,rr=Le&&Le.createElement("template"),hc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Le.createElementNS(ac,e):t==="mathml"?Le.createElementNS(dc,e):n?Le.createElement(e,{is:n}):Le.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Le.createTextNode(e),createComment:e=>Le.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Le.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{rr.innerHTML=Ii(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=rr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},pc=Symbol("_vtc");function mc(e,t,n){const s=e[pc];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const ir=Symbol("_vod"),gc=Symbol("_vsh"),bc=Symbol(""),yc=/(^|;)\s*display\s*:/;function _c(e,t,n){const s=e.style,r=X(n);let i=!1;if(n&&!r){if(t)if(X(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&en(s,l,"")}else for(const o in t)n[o]==null&&en(s,o,"");for(const o in n)o==="display"&&(i=!0),en(s,o,n[o])}else if(r){if(t!==n){const o=s[bc];o&&(n+=";"+o),s.cssText=n,i=yc.test(n)}}else t&&e.removeAttribute("style");ir in e&&(e[ir]=i?s.display:"",e[gc]&&(s.display="none"))}const or=/\s*!important$/;function en(e,t,n){if(D(n))n.forEach(s=>en(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=wc(e,t);or.test(n)?e.setProperty(it(s),n.replace(or,""),"important"):e[s]=n}}const lr=["Webkit","Moz","ms"],$n={};function wc(e,t){const n=$n[t];if(n)return n;let s=We(t);if(s!=="filter"&&s in e)return $n[t]=s;s=Dr(s);for(let r=0;rVn||(Rc.then(()=>Vn=0),Vn=Date.now());function Oc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Ie(Ac(s,n.value),t,5,[s])};return n.value=e,n.attached=Tc(),n}function Ac(e,t){if(D(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const hr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Cc=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?mc(e,s,o):t==="style"?_c(e,n,s):hn(t)?hs(t)||Sc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Pc(e,t,s,o))?(ur(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&fr(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!X(s))?ur(e,We(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),fr(e,t,s,o))};function Pc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&hr(t)&&U(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return hr(t)&&X(n)?!1:t in e}const pr=e=>{const t=e.props["onUpdate:modelValue"]||!1;return D(t)?n=>Yt(t,n):t},kn=Symbol("_assign"),Eu={deep:!0,created(e,t,n){e[kn]=pr(n),Mi(e,"change",()=>{const s=e._modelValue,r=vc(e),i=e.checked,o=e[kn];if(D(s)){const l=Mr(s,r),c=l!==-1;if(i&&!c)o(s.concat(r));else if(!i&&c){const a=[...s];a.splice(l,1),o(a)}}else if(pn(s)){const l=new Set(s);i?l.add(r):l.delete(r),o(l)}else o(Li(e,i))})},mounted:mr,beforeUpdate(e,t,n){e[kn]=pr(n),mr(e,t,n)}};function mr(e,{value:t,oldValue:n},s){e._modelValue=t;let r;if(D(t))r=Mr(t,s.props.value)>-1;else if(pn(t))r=t.has(s.props.value);else{if(t===n)return;r=bn(t,Li(e,!0))}e.checked!==r&&(e.checked=r)}function vc(e){return"_value"in e?e._value:e.value}function Li(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Fc=["ctrl","shift","alt","meta"],Nc={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)=>Fc.some(n=>e[`${n}Key`]&&!t.includes(n))},Ru=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const t=Ic().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Lc(s);if(!r)return;const i=t._component;!U(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Mc(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function Mc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Lc(e){return X(e)?document.querySelector(e):e}function Ui(e,t){return function(){return e.apply(t,arguments)}}const{toString:Uc}=Object.prototype,{getPrototypeOf:Ns}=Object,{iterator:Rn,toStringTag:ji}=Symbol,Tn=(e=>t=>{const n=Uc.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Ee=e=>(e=e.toLowerCase(),t=>Tn(t)===e),On=e=>t=>typeof t===e,{isArray:mt}=Array,Lt=On("undefined");function Ht(e){return e!==null&&!Lt(e)&&e.constructor!==null&&!Lt(e.constructor)&&he(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Bi=Ee("ArrayBuffer");function jc(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Bi(e.buffer),t}const Bc=On("string"),he=On("function"),Hi=On("number"),$t=e=>e!==null&&typeof e=="object",Hc=e=>e===!0||e===!1,tn=e=>{if(Tn(e)!=="object")return!1;const t=Ns(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(ji in e)&&!(Rn in e)},$c=e=>{if(!$t(e)||Ht(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Vc=Ee("Date"),kc=Ee("File"),qc=Ee("Blob"),Kc=Ee("FileList"),Wc=e=>$t(e)&&he(e.pipe),zc=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||he(e.append)&&((t=Tn(e))==="formdata"||t==="object"&&he(e.toString)&&e.toString()==="[object FormData]"))},Jc=Ee("URLSearchParams"),[Gc,Xc,Yc,Zc]=["ReadableStream","Request","Response","Headers"].map(Ee),Qc=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Vt(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let s,r;if(typeof e!="object"&&(e=[e]),mt(e))for(s=0,r=e.length;s0;)if(r=n[s],t===r.toLowerCase())return r;return null}const tt=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Vi=e=>!Lt(e)&&e!==tt;function os(){const{caseless:e}=Vi(this)&&this||{},t={},n=(s,r)=>{const i=e&&$i(t,r)||r;tn(t[i])&&tn(s)?t[i]=os(t[i],s):tn(s)?t[i]=os({},s):mt(s)?t[i]=s.slice():t[i]=s};for(let s=0,r=arguments.length;s(Vt(t,(r,i)=>{n&&he(r)?e[i]=Ui(r,n):e[i]=r},{allOwnKeys:s}),e),tf=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),nf=(e,t,n,s)=>{e.prototype=Object.create(t.prototype,s),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},sf=(e,t,n,s)=>{let r,i,o;const l={};if(t=t||{},e==null)return t;do{for(r=Object.getOwnPropertyNames(e),i=r.length;i-- >0;)o=r[i],(!s||s(o,e,t))&&!l[o]&&(t[o]=e[o],l[o]=!0);e=n!==!1&&Ns(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},rf=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const s=e.indexOf(t,n);return s!==-1&&s===n},of=e=>{if(!e)return null;if(mt(e))return e;let t=e.length;if(!Hi(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},lf=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Ns(Uint8Array)),cf=(e,t)=>{const s=(e&&e[Rn]).call(e);let r;for(;(r=s.next())&&!r.done;){const i=r.value;t.call(e,i[0],i[1])}},ff=(e,t)=>{let n;const s=[];for(;(n=e.exec(t))!==null;)s.push(n);return s},uf=Ee("HTMLFormElement"),af=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,s,r){return s.toUpperCase()+r}),br=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),df=Ee("RegExp"),ki=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),s={};Vt(n,(r,i)=>{let o;(o=t(r,i,e))!==!1&&(s[i]=o||r)}),Object.defineProperties(e,s)},hf=e=>{ki(e,(t,n)=>{if(he(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const s=e[n];if(he(s)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},pf=(e,t)=>{const n={},s=r=>{r.forEach(i=>{n[i]=!0})};return mt(e)?s(e):s(String(e).split(t)),n},mf=()=>{},gf=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function bf(e){return!!(e&&he(e.append)&&e[ji]==="FormData"&&e[Rn])}const yf=e=>{const t=new Array(10),n=(s,r)=>{if($t(s)){if(t.indexOf(s)>=0)return;if(Ht(s))return s;if(!("toJSON"in s)){t[r]=s;const i=mt(s)?[]:{};return Vt(s,(o,l)=>{const c=n(o,r+1);!Lt(c)&&(i[l]=c)}),t[r]=void 0,i}}return s};return n(e,0)},_f=Ee("AsyncFunction"),wf=e=>e&&($t(e)||he(e))&&he(e.then)&&he(e.catch),qi=((e,t)=>e?setImmediate:t?((n,s)=>(tt.addEventListener("message",({source:r,data:i})=>{r===tt&&i===n&&s.length&&s.shift()()},!1),r=>{s.push(r),tt.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",he(tt.postMessage)),xf=typeof queueMicrotask<"u"?queueMicrotask.bind(tt):typeof process<"u"&&process.nextTick||qi,Sf=e=>e!=null&&he(e[Rn]),p={isArray:mt,isArrayBuffer:Bi,isBuffer:Ht,isFormData:zc,isArrayBufferView:jc,isString:Bc,isNumber:Hi,isBoolean:Hc,isObject:$t,isPlainObject:tn,isEmptyObject:$c,isReadableStream:Gc,isRequest:Xc,isResponse:Yc,isHeaders:Zc,isUndefined:Lt,isDate:Vc,isFile:kc,isBlob:qc,isRegExp:df,isFunction:he,isStream:Wc,isURLSearchParams:Jc,isTypedArray:lf,isFileList:Kc,forEach:Vt,merge:os,extend:ef,trim:Qc,stripBOM:tf,inherits:nf,toFlatObject:sf,kindOf:Tn,kindOfTest:Ee,endsWith:rf,toArray:of,forEachEntry:cf,matchAll:ff,isHTMLForm:uf,hasOwnProperty:br,hasOwnProp:br,reduceDescriptors:ki,freezeMethods:hf,toObjectSet:pf,toCamelCase:af,noop:mf,toFiniteNumber:gf,findKey:$i,global:tt,isContextDefined:Vi,isSpecCompliantForm:bf,toJSONObject:yf,isAsyncFn:_f,isThenable:wf,setImmediate:qi,asap:xf,isIterable:Sf};function L(e,t,n,s,r){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),s&&(this.request=s),r&&(this.response=r,this.status=r.status?r.status:null)}p.inherits(L,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:p.toJSONObject(this.config),code:this.code,status:this.status}}});const Ki=L.prototype,Wi={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{Wi[e]={value:e}});Object.defineProperties(L,Wi);Object.defineProperty(Ki,"isAxiosError",{value:!0});L.from=(e,t,n,s,r,i)=>{const o=Object.create(Ki);return p.toFlatObject(e,o,function(c){return c!==Error.prototype},l=>l!=="isAxiosError"),L.call(o,e.message,t,n,s,r),o.cause=e,o.name=e.name,i&&Object.assign(o,i),o};const Ef=null;function ls(e){return p.isPlainObject(e)||p.isArray(e)}function zi(e){return p.endsWith(e,"[]")?e.slice(0,-2):e}function yr(e,t,n){return e?e.concat(t).map(function(r,i){return r=zi(r),!n&&i?"["+r+"]":r}).join(n?".":""):t}function Rf(e){return p.isArray(e)&&!e.some(ls)}const Tf=p.toFlatObject(p,{},null,function(t){return/^is[A-Z]/.test(t)});function An(e,t,n){if(!p.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=p.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(T,C){return!p.isUndefined(C[T])});const s=n.metaTokens,r=n.visitor||f,i=n.dots,o=n.indexes,c=(n.Blob||typeof Blob<"u"&&Blob)&&p.isSpecCompliantForm(t);if(!p.isFunction(r))throw new TypeError("visitor must be a function");function a(x){if(x===null)return"";if(p.isDate(x))return x.toISOString();if(p.isBoolean(x))return x.toString();if(!c&&p.isBlob(x))throw new L("Blob is not supported. Use a Buffer instead.");return p.isArrayBuffer(x)||p.isTypedArray(x)?c&&typeof Blob=="function"?new Blob([x]):Buffer.from(x):x}function f(x,T,C){let N=x;if(x&&!C&&typeof x=="object"){if(p.endsWith(T,"{}"))T=s?T:T.slice(0,-2),x=JSON.stringify(x);else if(p.isArray(x)&&Rf(x)||(p.isFileList(x)||p.endsWith(T,"[]"))&&(N=p.toArray(x)))return T=zi(T),N.forEach(function(j,P){!(p.isUndefined(j)||j===null)&&t.append(o===!0?yr([T],P,i):o===null?T:T+"[]",a(j))}),!1}return ls(x)?!0:(t.append(yr(C,T,i),a(x)),!1)}const h=[],y=Object.assign(Tf,{defaultVisitor:f,convertValue:a,isVisitable:ls});function R(x,T){if(!p.isUndefined(x)){if(h.indexOf(x)!==-1)throw Error("Circular reference detected in "+T.join("."));h.push(x),p.forEach(x,function(N,M){(!(p.isUndefined(N)||N===null)&&r.call(t,N,p.isString(M)?M.trim():M,T,y))===!0&&R(N,T?T.concat(M):[M])}),h.pop()}}if(!p.isObject(e))throw new TypeError("data must be an object");return R(e),t}function _r(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(s){return t[s]})}function Ds(e,t){this._pairs=[],e&&An(e,this,t)}const Ji=Ds.prototype;Ji.append=function(t,n){this._pairs.push([t,n])};Ji.toString=function(t){const n=t?function(s){return t.call(this,s,_r)}:_r;return this._pairs.map(function(r){return n(r[0])+"="+n(r[1])},"").join("&")};function Of(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Gi(e,t,n){if(!t)return e;const s=n&&n.encode||Of;p.isFunction(n)&&(n={serialize:n});const r=n&&n.serialize;let i;if(r?i=r(t,n):i=p.isURLSearchParams(t)?t.toString():new Ds(t,n).toString(s),i){const o=e.indexOf("#");o!==-1&&(e=e.slice(0,o)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}class wr{constructor(){this.handlers=[]}use(t,n,s){return this.handlers.push({fulfilled:t,rejected:n,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){p.forEach(this.handlers,function(s){s!==null&&t(s)})}}const Xi={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Af=typeof URLSearchParams<"u"?URLSearchParams:Ds,Cf=typeof FormData<"u"?FormData:null,Pf=typeof Blob<"u"?Blob:null,vf={isBrowser:!0,classes:{URLSearchParams:Af,FormData:Cf,Blob:Pf},protocols:["http","https","file","blob","url","data"]},Is=typeof window<"u"&&typeof document<"u",cs=typeof navigator=="object"&&navigator||void 0,Ff=Is&&(!cs||["ReactNative","NativeScript","NS"].indexOf(cs.product)<0),Nf=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Df=Is&&window.location.href||"http://localhost",If=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Is,hasStandardBrowserEnv:Ff,hasStandardBrowserWebWorkerEnv:Nf,navigator:cs,origin:Df},Symbol.toStringTag,{value:"Module"})),ne={...If,...vf};function Mf(e,t){return An(e,new ne.classes.URLSearchParams,{visitor:function(n,s,r,i){return ne.isNode&&p.isBuffer(n)?(this.append(s,n.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)},...t})}function Lf(e){return p.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Uf(e){const t={},n=Object.keys(e);let s;const r=n.length;let i;for(s=0;s=n.length;return o=!o&&p.isArray(r)?r.length:o,c?(p.hasOwnProp(r,o)?r[o]=[r[o],s]:r[o]=s,!l):((!r[o]||!p.isObject(r[o]))&&(r[o]=[]),t(n,s,r[o],i)&&p.isArray(r[o])&&(r[o]=Uf(r[o])),!l)}if(p.isFormData(e)&&p.isFunction(e.entries)){const n={};return p.forEachEntry(e,(s,r)=>{t(Lf(s),r,n,0)}),n}return null}function jf(e,t,n){if(p.isString(e))try{return(t||JSON.parse)(e),p.trim(e)}catch(s){if(s.name!=="SyntaxError")throw s}return(n||JSON.stringify)(e)}const kt={transitional:Xi,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const s=n.getContentType()||"",r=s.indexOf("application/json")>-1,i=p.isObject(t);if(i&&p.isHTMLForm(t)&&(t=new FormData(t)),p.isFormData(t))return r?JSON.stringify(Yi(t)):t;if(p.isArrayBuffer(t)||p.isBuffer(t)||p.isStream(t)||p.isFile(t)||p.isBlob(t)||p.isReadableStream(t))return t;if(p.isArrayBufferView(t))return t.buffer;if(p.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let l;if(i){if(s.indexOf("application/x-www-form-urlencoded")>-1)return Mf(t,this.formSerializer).toString();if((l=p.isFileList(t))||s.indexOf("multipart/form-data")>-1){const c=this.env&&this.env.FormData;return An(l?{"files[]":t}:t,c&&new c,this.formSerializer)}}return i||r?(n.setContentType("application/json",!1),jf(t)):t}],transformResponse:[function(t){const n=this.transitional||kt.transitional,s=n&&n.forcedJSONParsing,r=this.responseType==="json";if(p.isResponse(t)||p.isReadableStream(t))return t;if(t&&p.isString(t)&&(s&&!this.responseType||r)){const o=!(n&&n.silentJSONParsing)&&r;try{return JSON.parse(t)}catch(l){if(o)throw l.name==="SyntaxError"?L.from(l,L.ERR_BAD_RESPONSE,this,null,this.response):l}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ne.classes.FormData,Blob:ne.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};p.forEach(["delete","get","head","post","put","patch"],e=>{kt.headers[e]={}});const Bf=p.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Hf=e=>{const t={};let n,s,r;return e&&e.split(` +`).forEach(function(o){r=o.indexOf(":"),n=o.substring(0,r).trim().toLowerCase(),s=o.substring(r+1).trim(),!(!n||t[n]&&Bf[n])&&(n==="set-cookie"?t[n]?t[n].push(s):t[n]=[s]:t[n]=t[n]?t[n]+", "+s:s)}),t},xr=Symbol("internals");function Et(e){return e&&String(e).trim().toLowerCase()}function nn(e){return e===!1||e==null?e:p.isArray(e)?e.map(nn):String(e)}function $f(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=n.exec(e);)t[s[1]]=s[2];return t}const Vf=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function qn(e,t,n,s,r){if(p.isFunction(s))return s.call(this,t,n);if(r&&(t=n),!!p.isString(t)){if(p.isString(s))return t.indexOf(s)!==-1;if(p.isRegExp(s))return s.test(t)}}function kf(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,s)=>n.toUpperCase()+s)}function qf(e,t){const n=p.toCamelCase(" "+t);["get","set","has"].forEach(s=>{Object.defineProperty(e,s+n,{value:function(r,i,o){return this[s].call(this,t,r,i,o)},configurable:!0})})}let pe=class{constructor(t){t&&this.set(t)}set(t,n,s){const r=this;function i(l,c,a){const f=Et(c);if(!f)throw new Error("header name must be a non-empty string");const h=p.findKey(r,f);(!h||r[h]===void 0||a===!0||a===void 0&&r[h]!==!1)&&(r[h||c]=nn(l))}const o=(l,c)=>p.forEach(l,(a,f)=>i(a,f,c));if(p.isPlainObject(t)||t instanceof this.constructor)o(t,n);else if(p.isString(t)&&(t=t.trim())&&!Vf(t))o(Hf(t),n);else if(p.isObject(t)&&p.isIterable(t)){let l={},c,a;for(const f of t){if(!p.isArray(f))throw TypeError("Object iterator must return a key-value pair");l[a=f[0]]=(c=l[a])?p.isArray(c)?[...c,f[1]]:[c,f[1]]:f[1]}o(l,n)}else t!=null&&i(n,t,s);return this}get(t,n){if(t=Et(t),t){const s=p.findKey(this,t);if(s){const r=this[s];if(!n)return r;if(n===!0)return $f(r);if(p.isFunction(n))return n.call(this,r,s);if(p.isRegExp(n))return n.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=Et(t),t){const s=p.findKey(this,t);return!!(s&&this[s]!==void 0&&(!n||qn(this,this[s],s,n)))}return!1}delete(t,n){const s=this;let r=!1;function i(o){if(o=Et(o),o){const l=p.findKey(s,o);l&&(!n||qn(s,s[l],l,n))&&(delete s[l],r=!0)}}return p.isArray(t)?t.forEach(i):i(t),r}clear(t){const n=Object.keys(this);let s=n.length,r=!1;for(;s--;){const i=n[s];(!t||qn(this,this[i],i,t,!0))&&(delete this[i],r=!0)}return r}normalize(t){const n=this,s={};return p.forEach(this,(r,i)=>{const o=p.findKey(s,i);if(o){n[o]=nn(r),delete n[i];return}const l=t?kf(i):String(i).trim();l!==i&&delete n[i],n[l]=nn(r),s[l]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return p.forEach(this,(s,r)=>{s!=null&&s!==!1&&(n[r]=t&&p.isArray(s)?s.join(", "):s)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const s=new this(t);return n.forEach(r=>s.set(r)),s}static accessor(t){const s=(this[xr]=this[xr]={accessors:{}}).accessors,r=this.prototype;function i(o){const l=Et(o);s[l]||(qf(r,o),s[l]=!0)}return p.isArray(t)?t.forEach(i):i(t),this}};pe.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);p.reduceDescriptors(pe.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(s){this[n]=s}}});p.freezeMethods(pe);function Kn(e,t){const n=this||kt,s=t||n,r=pe.from(s.headers);let i=s.data;return p.forEach(e,function(l){i=l.call(n,i,r.normalize(),t?t.status:void 0)}),r.normalize(),i}function Zi(e){return!!(e&&e.__CANCEL__)}function gt(e,t,n){L.call(this,e??"canceled",L.ERR_CANCELED,t,n),this.name="CanceledError"}p.inherits(gt,L,{__CANCEL__:!0});function Qi(e,t,n){const s=n.config.validateStatus;!n.status||!s||s(n.status)?e(n):t(new L("Request failed with status code "+n.status,[L.ERR_BAD_REQUEST,L.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function Kf(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function Wf(e,t){e=e||10;const n=new Array(e),s=new Array(e);let r=0,i=0,o;return t=t!==void 0?t:1e3,function(c){const a=Date.now(),f=s[i];o||(o=a),n[r]=c,s[r]=a;let h=i,y=0;for(;h!==r;)y+=n[h++],h=h%e;if(r=(r+1)%e,r===i&&(i=(i+1)%e),a-o{n=f,r=null,i&&(clearTimeout(i),i=null),e(...a)};return[(...a)=>{const f=Date.now(),h=f-n;h>=s?o(a,f):(r=a,i||(i=setTimeout(()=>{i=null,o(r)},s-h)))},()=>r&&o(r)]}const an=(e,t,n=3)=>{let s=0;const r=Wf(50,250);return zf(i=>{const o=i.loaded,l=i.lengthComputable?i.total:void 0,c=o-s,a=r(c),f=o<=l;s=o;const h={loaded:o,total:l,progress:l?o/l:void 0,bytes:c,rate:a||void 0,estimated:a&&l&&f?(l-o)/a:void 0,event:i,lengthComputable:l!=null,[t?"download":"upload"]:!0};e(h)},n)},Sr=(e,t)=>{const n=e!=null;return[s=>t[0]({lengthComputable:n,total:e,loaded:s}),t[1]]},Er=e=>(...t)=>p.asap(()=>e(...t)),Jf=ne.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,ne.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(ne.origin),ne.navigator&&/(msie|trident)/i.test(ne.navigator.userAgent)):()=>!0,Gf=ne.hasStandardBrowserEnv?{write(e,t,n,s,r,i){const o=[e+"="+encodeURIComponent(t)];p.isNumber(n)&&o.push("expires="+new Date(n).toGMTString()),p.isString(s)&&o.push("path="+s),p.isString(r)&&o.push("domain="+r),i===!0&&o.push("secure"),document.cookie=o.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function Xf(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Yf(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function eo(e,t,n){let s=!Xf(t);return e&&(s||n==!1)?Yf(e,t):t}const Rr=e=>e instanceof pe?{...e}:e;function rt(e,t){t=t||{};const n={};function s(a,f,h,y){return p.isPlainObject(a)&&p.isPlainObject(f)?p.merge.call({caseless:y},a,f):p.isPlainObject(f)?p.merge({},f):p.isArray(f)?f.slice():f}function r(a,f,h,y){if(p.isUndefined(f)){if(!p.isUndefined(a))return s(void 0,a,h,y)}else return s(a,f,h,y)}function i(a,f){if(!p.isUndefined(f))return s(void 0,f)}function o(a,f){if(p.isUndefined(f)){if(!p.isUndefined(a))return s(void 0,a)}else return s(void 0,f)}function l(a,f,h){if(h in t)return s(a,f);if(h in e)return s(void 0,a)}const c={url:i,method:i,data:i,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:l,headers:(a,f,h)=>r(Rr(a),Rr(f),h,!0)};return p.forEach(Object.keys({...e,...t}),function(f){const h=c[f]||r,y=h(e[f],t[f],f);p.isUndefined(y)&&h!==l||(n[f]=y)}),n}const to=e=>{const t=rt({},e);let{data:n,withXSRFToken:s,xsrfHeaderName:r,xsrfCookieName:i,headers:o,auth:l}=t;t.headers=o=pe.from(o),t.url=Gi(eo(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),l&&o.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):"")));let c;if(p.isFormData(n)){if(ne.hasStandardBrowserEnv||ne.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if((c=o.getContentType())!==!1){const[a,...f]=c?c.split(";").map(h=>h.trim()).filter(Boolean):[];o.setContentType([a||"multipart/form-data",...f].join("; "))}}if(ne.hasStandardBrowserEnv&&(s&&p.isFunction(s)&&(s=s(t)),s||s!==!1&&Jf(t.url))){const a=r&&i&&Gf.read(i);a&&o.set(r,a)}return t},Zf=typeof XMLHttpRequest<"u",Qf=Zf&&function(e){return new Promise(function(n,s){const r=to(e);let i=r.data;const o=pe.from(r.headers).normalize();let{responseType:l,onUploadProgress:c,onDownloadProgress:a}=r,f,h,y,R,x;function T(){R&&R(),x&&x(),r.cancelToken&&r.cancelToken.unsubscribe(f),r.signal&&r.signal.removeEventListener("abort",f)}let C=new XMLHttpRequest;C.open(r.method.toUpperCase(),r.url,!0),C.timeout=r.timeout;function N(){if(!C)return;const j=pe.from("getAllResponseHeaders"in C&&C.getAllResponseHeaders()),B={data:!l||l==="text"||l==="json"?C.responseText:C.response,status:C.status,statusText:C.statusText,headers:j,config:e,request:C};Qi(function(Z){n(Z),T()},function(Z){s(Z),T()},B),C=null}"onloadend"in C?C.onloadend=N:C.onreadystatechange=function(){!C||C.readyState!==4||C.status===0&&!(C.responseURL&&C.responseURL.indexOf("file:")===0)||setTimeout(N)},C.onabort=function(){C&&(s(new L("Request aborted",L.ECONNABORTED,e,C)),C=null)},C.onerror=function(){s(new L("Network Error",L.ERR_NETWORK,e,C)),C=null},C.ontimeout=function(){let P=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const B=r.transitional||Xi;r.timeoutErrorMessage&&(P=r.timeoutErrorMessage),s(new L(P,B.clarifyTimeoutError?L.ETIMEDOUT:L.ECONNABORTED,e,C)),C=null},i===void 0&&o.setContentType(null),"setRequestHeader"in C&&p.forEach(o.toJSON(),function(P,B){C.setRequestHeader(B,P)}),p.isUndefined(r.withCredentials)||(C.withCredentials=!!r.withCredentials),l&&l!=="json"&&(C.responseType=r.responseType),a&&([y,x]=an(a,!0),C.addEventListener("progress",y)),c&&C.upload&&([h,R]=an(c),C.upload.addEventListener("progress",h),C.upload.addEventListener("loadend",R)),(r.cancelToken||r.signal)&&(f=j=>{C&&(s(!j||j.type?new gt(null,e,C):j),C.abort(),C=null)},r.cancelToken&&r.cancelToken.subscribe(f),r.signal&&(r.signal.aborted?f():r.signal.addEventListener("abort",f)));const M=Kf(r.url);if(M&&ne.protocols.indexOf(M)===-1){s(new L("Unsupported protocol "+M+":",L.ERR_BAD_REQUEST,e));return}C.send(i||null)})},eu=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let s=new AbortController,r;const i=function(a){if(!r){r=!0,l();const f=a instanceof Error?a:this.reason;s.abort(f instanceof L?f:new gt(f instanceof Error?f.message:f))}};let o=t&&setTimeout(()=>{o=null,i(new L(`timeout ${t} of ms exceeded`,L.ETIMEDOUT))},t);const l=()=>{e&&(o&&clearTimeout(o),o=null,e.forEach(a=>{a.unsubscribe?a.unsubscribe(i):a.removeEventListener("abort",i)}),e=null)};e.forEach(a=>a.addEventListener("abort",i));const{signal:c}=s;return c.unsubscribe=()=>p.asap(l),c}},tu=function*(e,t){let n=e.byteLength;if(n{const r=nu(e,t);let i=0,o,l=c=>{o||(o=!0,s&&s(c))};return new ReadableStream({async pull(c){try{const{done:a,value:f}=await r.next();if(a){l(),c.close();return}let h=f.byteLength;if(n){let y=i+=h;n(y)}c.enqueue(new Uint8Array(f))}catch(a){throw l(a),a}},cancel(c){return l(c),r.return()}},{highWaterMark:2})},Cn=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",no=Cn&&typeof ReadableStream=="function",ru=Cn&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),so=(e,...t)=>{try{return!!e(...t)}catch{return!1}},iu=no&&so(()=>{let e=!1;const t=new Request(ne.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),Or=64*1024,fs=no&&so(()=>p.isReadableStream(new Response("").body)),dn={stream:fs&&(e=>e.body)};Cn&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!dn[t]&&(dn[t]=p.isFunction(e[t])?n=>n[t]():(n,s)=>{throw new L(`Response type '${t}' is not supported`,L.ERR_NOT_SUPPORT,s)})})})(new Response);const ou=async e=>{if(e==null)return 0;if(p.isBlob(e))return e.size;if(p.isSpecCompliantForm(e))return(await new Request(ne.origin,{method:"POST",body:e}).arrayBuffer()).byteLength;if(p.isArrayBufferView(e)||p.isArrayBuffer(e))return e.byteLength;if(p.isURLSearchParams(e)&&(e=e+""),p.isString(e))return(await ru(e)).byteLength},lu=async(e,t)=>{const n=p.toFiniteNumber(e.getContentLength());return n??ou(t)},cu=Cn&&(async e=>{let{url:t,method:n,data:s,signal:r,cancelToken:i,timeout:o,onDownloadProgress:l,onUploadProgress:c,responseType:a,headers:f,withCredentials:h="same-origin",fetchOptions:y}=to(e);a=a?(a+"").toLowerCase():"text";let R=eu([r,i&&i.toAbortSignal()],o),x;const T=R&&R.unsubscribe&&(()=>{R.unsubscribe()});let C;try{if(c&&iu&&n!=="get"&&n!=="head"&&(C=await lu(f,s))!==0){let B=new Request(t,{method:"POST",body:s,duplex:"half"}),Q;if(p.isFormData(s)&&(Q=B.headers.get("content-type"))&&f.setContentType(Q),B.body){const[Z,me]=Sr(C,an(Er(c)));s=Tr(B.body,Or,Z,me)}}p.isString(h)||(h=h?"include":"omit");const N="credentials"in Request.prototype;x=new Request(t,{...y,signal:R,method:n.toUpperCase(),headers:f.normalize().toJSON(),body:s,duplex:"half",credentials:N?h:void 0});let M=await fetch(x,y);const j=fs&&(a==="stream"||a==="response");if(fs&&(l||j&&T)){const B={};["status","statusText","headers"].forEach(Je=>{B[Je]=M[Je]});const Q=p.toFiniteNumber(M.headers.get("content-length")),[Z,me]=l&&Sr(Q,an(Er(l),!0))||[];M=new Response(Tr(M.body,Or,Z,()=>{me&&me(),T&&T()}),B)}a=a||"text";let P=await dn[p.findKey(dn,a)||"text"](M,e);return!j&&T&&T(),await new Promise((B,Q)=>{Qi(B,Q,{data:P,headers:pe.from(M.headers),status:M.status,statusText:M.statusText,config:e,request:x})})}catch(N){throw T&&T(),N&&N.name==="TypeError"&&/Load failed|fetch/i.test(N.message)?Object.assign(new L("Network Error",L.ERR_NETWORK,e,x),{cause:N.cause||N}):L.from(N,N&&N.code,e,x)}}),us={http:Ef,xhr:Qf,fetch:cu};p.forEach(us,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const Ar=e=>`- ${e}`,fu=e=>p.isFunction(e)||e===null||e===!1,ro={getAdapter:e=>{e=p.isArray(e)?e:[e];const{length:t}=e;let n,s;const r={};for(let i=0;i`adapter ${l} `+(c===!1?"is not supported by the environment":"is not available in the build"));let o=t?i.length>1?`since : +`+i.map(Ar).join(` +`):" "+Ar(i[0]):"as no adapter specified";throw new L("There is no suitable adapter to dispatch the request "+o,"ERR_NOT_SUPPORT")}return s},adapters:us};function Wn(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new gt(null,e)}function Cr(e){return Wn(e),e.headers=pe.from(e.headers),e.data=Kn.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ro.getAdapter(e.adapter||kt.adapter)(e).then(function(s){return Wn(e),s.data=Kn.call(e,e.transformResponse,s),s.headers=pe.from(s.headers),s},function(s){return Zi(s)||(Wn(e),s&&s.response&&(s.response.data=Kn.call(e,e.transformResponse,s.response),s.response.headers=pe.from(s.response.headers))),Promise.reject(s)})}const io="1.11.0",Pn={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Pn[e]=function(s){return typeof s===e||"a"+(t<1?"n ":" ")+e}});const Pr={};Pn.transitional=function(t,n,s){function r(i,o){return"[Axios v"+io+"] Transitional option '"+i+"'"+o+(s?". "+s:"")}return(i,o,l)=>{if(t===!1)throw new L(r(o," has been removed"+(n?" in "+n:"")),L.ERR_DEPRECATED);return n&&!Pr[o]&&(Pr[o]=!0,console.warn(r(o," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(i,o,l):!0}};Pn.spelling=function(t){return(n,s)=>(console.warn(`${s} is likely a misspelling of ${t}`),!0)};function uu(e,t,n){if(typeof e!="object")throw new L("options must be an object",L.ERR_BAD_OPTION_VALUE);const s=Object.keys(e);let r=s.length;for(;r-- >0;){const i=s[r],o=t[i];if(o){const l=e[i],c=l===void 0||o(l,i,e);if(c!==!0)throw new L("option "+i+" must be "+c,L.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new L("Unknown option "+i,L.ERR_BAD_OPTION)}}const sn={assertOptions:uu,validators:Pn},Pe=sn.validators;let st=class{constructor(t){this.defaults=t||{},this.interceptors={request:new wr,response:new wr}}async request(t,n){try{return await this._request(t,n)}catch(s){if(s instanceof Error){let r={};Error.captureStackTrace?Error.captureStackTrace(r):r=new Error;const i=r.stack?r.stack.replace(/^.+\n/,""):"";try{s.stack?i&&!String(s.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(s.stack+=` +`+i):s.stack=i}catch{}}throw s}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=rt(this.defaults,n);const{transitional:s,paramsSerializer:r,headers:i}=n;s!==void 0&&sn.assertOptions(s,{silentJSONParsing:Pe.transitional(Pe.boolean),forcedJSONParsing:Pe.transitional(Pe.boolean),clarifyTimeoutError:Pe.transitional(Pe.boolean)},!1),r!=null&&(p.isFunction(r)?n.paramsSerializer={serialize:r}:sn.assertOptions(r,{encode:Pe.function,serialize:Pe.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),sn.assertOptions(n,{baseUrl:Pe.spelling("baseURL"),withXsrfToken:Pe.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let o=i&&p.merge(i.common,i[n.method]);i&&p.forEach(["delete","get","head","post","put","patch","common"],x=>{delete i[x]}),n.headers=pe.concat(o,i);const l=[];let c=!0;this.interceptors.request.forEach(function(T){typeof T.runWhen=="function"&&T.runWhen(n)===!1||(c=c&&T.synchronous,l.unshift(T.fulfilled,T.rejected))});const a=[];this.interceptors.response.forEach(function(T){a.push(T.fulfilled,T.rejected)});let f,h=0,y;if(!c){const x=[Cr.bind(this),void 0];for(x.unshift(...l),x.push(...a),y=x.length,f=Promise.resolve(n);h{if(!s._listeners)return;let i=s._listeners.length;for(;i-- >0;)s._listeners[i](r);s._listeners=null}),this.promise.then=r=>{let i;const o=new Promise(l=>{s.subscribe(l),i=l}).then(r);return o.cancel=function(){s.unsubscribe(i)},o},t(function(i,o,l){s.reason||(s.reason=new gt(i,o,l),n(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=s=>{t.abort(s)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new oo(function(r){t=r}),cancel:t}}};function du(e){return function(n){return e.apply(null,n)}}function hu(e){return p.isObject(e)&&e.isAxiosError===!0}const as={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(as).forEach(([e,t])=>{as[t]=e});function lo(e){const t=new st(e),n=Ui(st.prototype.request,t);return p.extend(n,st.prototype,t,{allOwnKeys:!0}),p.extend(n,t,null,{allOwnKeys:!0}),n.create=function(r){return lo(rt(e,r))},n}const Y=lo(kt);Y.Axios=st;Y.CanceledError=gt;Y.CancelToken=au;Y.isCancel=Zi;Y.VERSION=io;Y.toFormData=An;Y.AxiosError=L;Y.Cancel=Y.CanceledError;Y.all=function(t){return Promise.all(t)};Y.spread=du;Y.isAxiosError=hu;Y.mergeConfig=rt;Y.AxiosHeaders=pe;Y.formToJSON=e=>Yi(p.isHTMLForm(e)?new FormData(e):e);Y.getAdapter=ro.getAdapter;Y.HttpStatusCode=as;Y.default=Y;const{Axios:Cu,AxiosError:Pu,CanceledError:vu,isCancel:Fu,CancelToken:Nu,VERSION:Du,all:Iu,Cancel:Mu,isAxiosError:Lu,spread:Uu,toFormData:ju,AxiosHeaders:Bu,HttpStatusCode:Hu,formToJSON:$u,getAdapter:Vu,mergeConfig:ku}=Y;export{_e as F,Y as a,xu as b,fc as c,bu as d,Go as e,Pi as f,gs as g,mu as h,Su as i,De as j,il as k,ec as l,tc as m,bs as n,ns as o,yu as p,Ru as q,_u as r,dl as s,Ro as t,wu as u,gu as v,Bn as w,Eu as x,ss as y,Tu as z}; diff --git a/assets/dist/assets/vendor-pQYyzRmo.js b/assets/dist/assets/vendor-pQYyzRmo.js deleted file mode 100644 index 6972148..0000000 --- a/assets/dist/assets/vendor-pQYyzRmo.js +++ /dev/null @@ -1,22 +0,0 @@ -/** -* @vue/shared v3.5.18 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function cs(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const J={},ct=[],Fe=()=>{},no=()=>!1,an=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),fs=e=>e.startsWith("onUpdate:"),re=Object.assign,us=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},so=Object.prototype.hasOwnProperty,q=(e,t)=>so.call(e,t),I=Array.isArray,ft=e=>dn(e)==="[object Map]",Rr=e=>dn(e)==="[object Set]",j=e=>typeof e=="function",X=e=>typeof e=="string",He=e=>typeof e=="symbol",G=e=>e!==null&&typeof e=="object",Tr=e=>(G(e)||j(e))&&j(e.then)&&j(e.catch),Or=Object.prototype.toString,dn=e=>Or.call(e),ro=e=>dn(e).slice(8,-1),Ar=e=>dn(e)==="[object Object]",as=e=>X(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Tt=cs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),hn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},io=/-(\w)/g,We=hn(e=>e.replace(io,(t,n)=>n?n.toUpperCase():"")),oo=/\B([A-Z])/g,it=hn(e=>e.replace(oo,"-$1").toLowerCase()),Cr=hn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Cn=hn(e=>e?`on${Cr(e)}`:""),ke=(e,t)=>!Object.is(e,t),vn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},lo=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let js;const pn=()=>js||(js=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ds(e){if(I(e)){const t={};for(let n=0;n{if(n){const s=n.split(fo);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function hs(e){let t="";if(X(e))t=e;else if(I(e))for(let n=0;n!!(e&&e.__v_isRef===!0),mo=e=>X(e)?e:e==null?"":I(e)||G(e)&&(e.toString===Or||!j(e.toString))?Pr(e)?mo(e.value):JSON.stringify(e,Fr,2):String(e),Fr=(e,t)=>Pr(t)?Fr(e,t.value):ft(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[Pn(s,i)+" =>"]=r,n),{})}:Rr(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Pn(n))}:He(t)?Pn(t):G(t)&&!I(t)&&!Ar(t)?String(t):t,Pn=(e,t="")=>{var n;return He(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.5.18 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let ae;class go{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=ae,!t&&ae&&(this.index=(ae.scopes||(ae.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(ae=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(At){let t=At;for(At=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Ot;){let t=Ot;for(Ot=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Mr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Lr(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),gs(s),yo(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Vn(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ur(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ur(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ft)||(e.globalVersion=Ft,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Vn(e))))return;e.flags|=2;const t=e.dep,n=W,s=xe;W=e,xe=!0;try{Mr(e);const r=e.fn(e._value);(t.version===0||ke(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{W=n,xe=s,Lr(e),e.flags&=-3}}function gs(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)gs(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function yo(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let xe=!0;const jr=[];function Ue(){jr.push(xe),xe=!1}function je(){const e=jr.pop();xe=e===void 0?!0:e}function Bs(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=W;W=void 0;try{t()}finally{W=n}}}let Ft=0;class _o{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 bs{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(!W||!xe||W===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==W)n=this.activeLink=new _o(W,this),W.deps?(n.prevDep=W.depsTail,W.depsTail.nextDep=n,W.depsTail=n):W.deps=W.depsTail=n,Br(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=W.depsTail,n.nextDep=void 0,W.depsTail.nextDep=n,W.depsTail=n,W.deps===n&&(W.deps=s)}return n}trigger(t){this.version++,Ft++,this.notify(t)}notify(t){ps();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{ms()}}}function Br(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Br(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const kn=new WeakMap,nt=Symbol(""),Wn=Symbol(""),Nt=Symbol("");function te(e,t,n){if(xe&&W){let s=kn.get(e);s||kn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new bs),r.map=s,r.key=n),r.track()}}function Le(e,t,n,s,r,i){const o=kn.get(e);if(!o){Ft++;return}const l=c=>{c&&c.trigger()};if(ps(),t==="clear")o.forEach(l);else{const c=I(e),a=c&&as(n);if(c&&n==="length"){const f=Number(s);o.forEach((h,y)=>{(y==="length"||y===Nt||!He(y)&&y>=f)&&l(h)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),a&&l(o.get(Nt)),t){case"add":c?a&&l(o.get("length")):(l(o.get(nt)),ft(e)&&l(o.get(Wn)));break;case"delete":c||(l(o.get(nt)),ft(e)&&l(o.get(Wn)));break;case"set":ft(e)&&l(o.get(nt));break}}ms()}function ot(e){const t=$(e);return t===e?t:(te(t,"iterate",Nt),we(e)?t:t.map(ee))}function mn(e){return te(e=$(e),"iterate",Nt),e}const wo={__proto__:null,[Symbol.iterator](){return Nn(this,Symbol.iterator,ee)},concat(...e){return ot(this).concat(...e.map(t=>I(t)?ot(t):t))},entries(){return Nn(this,"entries",e=>(e[1]=ee(e[1]),e))},every(e,t){return Ie(this,"every",e,t,void 0,arguments)},filter(e,t){return Ie(this,"filter",e,t,n=>n.map(ee),arguments)},find(e,t){return Ie(this,"find",e,t,ee,arguments)},findIndex(e,t){return Ie(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ie(this,"findLast",e,t,ee,arguments)},findLastIndex(e,t){return Ie(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ie(this,"forEach",e,t,void 0,arguments)},includes(...e){return Dn(this,"includes",e)},indexOf(...e){return Dn(this,"indexOf",e)},join(e){return ot(this).join(e)},lastIndexOf(...e){return Dn(this,"lastIndexOf",e)},map(e,t){return Ie(this,"map",e,t,void 0,arguments)},pop(){return xt(this,"pop")},push(...e){return xt(this,"push",e)},reduce(e,...t){return Hs(this,"reduce",e,t)},reduceRight(e,...t){return Hs(this,"reduceRight",e,t)},shift(){return xt(this,"shift")},some(e,t){return Ie(this,"some",e,t,void 0,arguments)},splice(...e){return xt(this,"splice",e)},toReversed(){return ot(this).toReversed()},toSorted(e){return ot(this).toSorted(e)},toSpliced(...e){return ot(this).toSpliced(...e)},unshift(...e){return xt(this,"unshift",e)},values(){return Nn(this,"values",ee)}};function Nn(e,t,n){const s=mn(e),r=s[t]();return s!==e&&!we(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const xo=Array.prototype;function Ie(e,t,n,s,r,i){const o=mn(e),l=o!==e&&!we(e),c=o[t];if(c!==xo[t]){const h=c.apply(e,i);return l?ee(h):h}let a=n;o!==e&&(l?a=function(h,y){return n.call(this,ee(h),y,e)}:n.length>2&&(a=function(h,y){return n.call(this,h,y,e)}));const f=c.call(o,a,s);return l&&r?r(f):f}function Hs(e,t,n,s){const r=mn(e);let i=n;return r!==e&&(we(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,ee(l),c,e)}),r[t](i,...s)}function Dn(e,t,n){const s=$(e);te(s,"iterate",Nt);const r=s[t](...n);return(r===-1||r===!1)&&xs(n[0])?(n[0]=$(n[0]),s[t](...n)):r}function xt(e,t,n=[]){Ue(),ps();const s=$(e)[t].apply(e,n);return ms(),je(),s}const So=cs("__proto__,__v_isRef,__isVue"),Hr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(He));function Eo(e){He(e)||(e=String(e));const t=$(this);return te(t,"has",e),t.hasOwnProperty(e)}class $r{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Do:kr:i?Vr:Kr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=I(t);if(!r){let c;if(o&&(c=wo[n]))return c;if(n==="hasOwnProperty")return Eo}const l=Reflect.get(t,n,se(t)?t:s);return(He(n)?Hr.has(n):So(n))||(r||te(t,"get",n),i)?l:se(l)?o&&as(n)?l:l.value:G(l)?r?Wr(l):_s(l):l}}class qr extends $r{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=Je(i);if(!we(s)&&!Je(s)&&(i=$(i),s=$(s)),!I(t)&&se(i)&&!se(s))return c?!1:(i.value=s,!0)}const o=I(t)&&as(n)?Number(n)e,Jt=e=>Reflect.getPrototypeOf(e);function Co(e,t,n){return function(...s){const r=this.__v_raw,i=$(r),o=ft(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,a=r[e](...s),f=n?Jn:t?nn:ee;return!t&&te(i,"iterate",c?Wn:nt),{next(){const{value:h,done:y}=a.next();return y?{value:h,done:y}:{value:l?[f(h[0]),f(h[1])]:f(h),done:y}},[Symbol.iterator](){return this}}}}function zt(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function vo(e,t){const n={get(r){const i=this.__v_raw,o=$(i),l=$(r);e||(ke(r,l)&&te(o,"get",r),te(o,"get",l));const{has:c}=Jt(o),a=t?Jn:e?nn:ee;if(c.call(o,r))return a(i.get(r));if(c.call(o,l))return a(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&te($(r),"iterate",nt),Reflect.get(r,"size",r)},has(r){const i=this.__v_raw,o=$(i),l=$(r);return e||(ke(r,l)&&te(o,"has",r),te(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=$(l),a=t?Jn:e?nn:ee;return!e&&te(c,"iterate",nt),l.forEach((f,h)=>r.call(i,a(f),a(h),o))}};return re(n,e?{add:zt("add"),set:zt("set"),delete:zt("delete"),clear:zt("clear")}:{add(r){!t&&!we(r)&&!Je(r)&&(r=$(r));const i=$(this);return Jt(i).has.call(i,r)||(i.add(r),Le(i,"add",r,r)),this},set(r,i){!t&&!we(i)&&!Je(i)&&(i=$(i));const o=$(this),{has:l,get:c}=Jt(o);let a=l.call(o,r);a||(r=$(r),a=l.call(o,r));const f=c.call(o,r);return o.set(r,i),a?ke(i,f)&&Le(o,"set",r,i):Le(o,"add",r,i),this},delete(r){const i=$(this),{has:o,get:l}=Jt(i);let c=o.call(i,r);c||(r=$(r),c=o.call(i,r)),l&&l.call(i,r);const a=i.delete(r);return c&&Le(i,"delete",r,void 0),a},clear(){const r=$(this),i=r.size!==0,o=r.clear();return i&&Le(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=Co(r,e,t)}),n}function ys(e,t){const n=vo(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(q(n,r)&&r in s?n:s,r,i)}const Po={get:ys(!1,!1)},Fo={get:ys(!1,!0)},No={get:ys(!0,!1)};const Kr=new WeakMap,Vr=new WeakMap,kr=new WeakMap,Do=new WeakMap;function Io(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Mo(e){return e.__v_skip||!Object.isExtensible(e)?0:Io(ro(e))}function _s(e){return Je(e)?e:ws(e,!1,To,Po,Kr)}function Lo(e){return ws(e,!1,Ao,Fo,Vr)}function Wr(e){return ws(e,!0,Oo,No,kr)}function ws(e,t,n,s,r){if(!G(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=Mo(e);if(i===0)return e;const o=r.get(e);if(o)return o;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function ut(e){return Je(e)?ut(e.__v_raw):!!(e&&e.__v_isReactive)}function Je(e){return!!(e&&e.__v_isReadonly)}function we(e){return!!(e&&e.__v_isShallow)}function xs(e){return e?!!e.__v_raw:!1}function $(e){const t=e&&e.__v_raw;return t?$(t):e}function Uo(e){return!q(e,"__v_skip")&&Object.isExtensible(e)&&Kn(e,"__v_skip",!0),e}const ee=e=>G(e)?_s(e):e,nn=e=>G(e)?Wr(e):e;function se(e){return e?e.__v_isRef===!0:!1}function ou(e){return jo(e,!1)}function jo(e,t){return se(e)?e:new Bo(e,t)}class Bo{constructor(t,n){this.dep=new bs,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:$(t),this._value=n?t:ee(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||we(t)||Je(t);t=s?t:$(t),ke(t,n)&&(this._rawValue=t,this._value=s?t:ee(t),this.dep.trigger())}}function Ho(e){return se(e)?e.value:e}const $o={get:(e,t,n)=>t==="__v_raw"?e:Ho(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return se(r)&&!se(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Jr(e){return ut(e)?e:new Proxy(e,$o)}class qo{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new bs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ft-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&W!==this)return Ir(this,!0),!0}get value(){const t=this.dep.track();return Ur(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Ko(e,t,n=!1){let s,r;return j(e)?s=e:(s=e.get,r=e.set),new qo(s,r,n)}const Gt={},sn=new WeakMap;let et;function Vo(e,t=!1,n=et){if(n){let s=sn.get(n);s||sn.set(n,s=[]),s.push(e)}}function ko(e,t,n=J){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,a=v=>r?v:we(v)||r===!1||r===0?Ve(v,1):Ve(v);let f,h,y,R,x=!1,T=!1;if(se(e)?(h=()=>e.value,x=we(e)):ut(e)?(h=()=>a(e),x=!0):I(e)?(T=!0,x=e.some(v=>ut(v)||we(v)),h=()=>e.map(v=>{if(se(v))return v.value;if(ut(v))return a(v);if(j(v))return c?c(v,2):v()})):j(e)?t?h=c?()=>c(e,2):e:h=()=>{if(y){Ue();try{y()}finally{je()}}const v=et;et=f;try{return c?c(e,3,[R]):e(R)}finally{et=v}}:h=Fe,t&&r){const v=h,B=r===!0?1/0:r;h=()=>Ve(v(),B)}const C=bo(),N=()=>{f.stop(),C&&C.active&&us(C.effects,f)};if(i&&t){const v=t;t=(...B)=>{v(...B),N()}}let M=T?new Array(e.length).fill(Gt):Gt;const U=v=>{if(!(!(f.flags&1)||!f.dirty&&!v))if(t){const B=f.run();if(r||x||(T?B.some((Q,Z)=>ke(Q,M[Z])):ke(B,M))){y&&y();const Q=et;et=f;try{const Z=[B,M===Gt?void 0:T&&M[0]===Gt?[]:M,R];M=B,c?c(t,3,Z):t(...Z)}finally{et=Q}}}else f.run()};return l&&l(U),f=new Nr(h),f.scheduler=o?()=>o(U,!1):U,R=v=>Vo(v,!1,f),y=f.onStop=()=>{const v=sn.get(f);if(v){if(c)c(v,4);else for(const B of v)B();sn.delete(f)}},t?s?U(!0):M=f.run():o?o(U.bind(null,!0),!0):f.run(),N.pause=f.pause.bind(f),N.resume=f.resume.bind(f),N.stop=N,N}function Ve(e,t=1/0,n){if(t<=0||!G(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,se(e))Ve(e.value,t,n);else if(I(e))for(let s=0;s{Ve(s,t,n)});else if(Ar(e)){for(const s in e)Ve(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Ve(e[s],t,n)}return e}/** -* @vue/runtime-core v3.5.18 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Ut(e,t,n,s){try{return s?e(...s):e()}catch(r){gn(r,t,n)}}function De(e,t,n,s){if(j(e)){const r=Ut(e,t,n,s);return r&&Tr(r)&&r.catch(i=>{gn(i,t,n)}),r}if(I(e)){const r=[];for(let i=0;i>>1,r=le[s],i=Dt(r);i=Dt(n)?le.push(e):le.splice(zo(t),0,e),e.flags|=1,Gr()}}function Gr(){rn||(rn=zr.then(Yr))}function Go(e){I(e)?at.push(...e):qe&&e.id===-1?qe.splice(lt+1,0,e):e.flags&1||(at.push(e),e.flags|=1),Gr()}function $s(e,t,n=ve+1){for(;nDt(n)-Dt(s));if(at.length=0,qe){qe.push(...t);return}for(qe=t,lt=0;lte.id==null?e.flags&2?-1:1/0:e.id;function Yr(e){try{for(ve=0;ve{s._d&&Xs(-1);const i=on(t);let o;try{o=e(...r)}finally{on(i),s._d&&Xs(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Ze(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;oe.__isTeleport;function Es(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Es(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}/*! #__NO_SIDE_EFFECTS__ */function lu(e,t){return j(e)?re({name:e.name},t,{setup:e}):e}function Qr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Ct(e,t,n,s,r=!1){if(I(e)){e.forEach((x,T)=>Ct(x,t&&(I(t)?t[T]:t),n,s,r));return}if(dt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Ct(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?Cs(s.component):s.el,o=r?null:i,{i:l,r:c}=e,a=t&&t.r,f=l.refs===J?l.refs={}:l.refs,h=l.setupState,y=$(h),R=h===J?()=>!1:x=>q(y,x);if(a!=null&&a!==c&&(X(a)?(f[a]=null,R(a)&&(h[a]=null)):se(a)&&(a.value=null)),j(c))Ut(c,l,12,[o,f]);else{const x=X(c),T=se(c);if(x||T){const C=()=>{if(e.f){const N=x?R(c)?h[c]:f[c]:c.value;r?I(N)&&us(N,i):I(N)?N.includes(i)||N.push(i):x?(f[c]=[i],R(c)&&(h[c]=f[c])):(c.value=[i],e.k&&(f[e.k]=c.value))}else x?(f[c]=o,R(c)&&(h[c]=o)):T&&(c.value=o,e.k&&(f[e.k]=o))};o?(C.id=-1,be(C,n)):C()}}}pn().requestIdleCallback;pn().cancelIdleCallback;const dt=e=>!!e.type.__asyncLoader,ei=e=>e.type.__isKeepAlive;function Qo(e,t){ti(e,"a",t)}function el(e,t){ti(e,"da",t)}function ti(e,t,n=ce){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(bn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)ei(r.parent.vnode)&&tl(s,t,n,r),r=r.parent}}function tl(e,t,n,s){const r=bn(t,e,s,!0);ni(()=>{us(s[t],r)},n)}function bn(e,t,n=ce,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{Ue();const l=jt(n),c=De(t,n,e,o);return l(),je(),c});return s?r.unshift(i):r.push(i),i}}const $e=e=>(t,n=ce)=>{(!Mt||e==="sp")&&bn(e,(...s)=>t(...s),n)},nl=$e("bm"),sl=$e("m"),rl=$e("bu"),il=$e("u"),ol=$e("bum"),ni=$e("um"),ll=$e("sp"),cl=$e("rtg"),fl=$e("rtc");function ul(e,t=ce){bn("ec",e,t)}const al=Symbol.for("v-ndc");function cu(e,t,n,s){let r;const i=n,o=I(e);if(o||X(e)){const l=o&&ut(e);let c=!1,a=!1;l&&(c=!we(e),a=Je(e),e=mn(e)),r=new Array(e.length);for(let f=0,h=e.length;ft(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,a=l.length;cOs(t)?!(t.type===Be||t.type===_e&&!si(t.children)):!0)?e:null}const zn=e=>e?Ti(e)?Cs(e):zn(e.parent):null,vt=re(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=>zn(e.parent),$root:e=>zn(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ii(e),$forceUpdate:e=>e.f||(e.f=()=>{Ss(e.update)}),$nextTick:e=>e.n||(e.n=Jo.bind(e.proxy)),$watch:e=>Il.bind(e)}),In=(e,t)=>e!==J&&!e.__isScriptSetup&&q(e,t),dl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const R=o[t];if(R!==void 0)switch(R){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(In(s,t))return o[t]=1,s[t];if(r!==J&&q(r,t))return o[t]=2,r[t];if((a=e.propsOptions[0])&&q(a,t))return o[t]=3,i[t];if(n!==J&&q(n,t))return o[t]=4,n[t];Gn&&(o[t]=0)}}const f=vt[t];let h,y;if(f)return t==="$attrs"&&te(e.attrs,"get",""),f(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==J&&q(n,t))return o[t]=4,n[t];if(y=c.config.globalProperties,q(y,t))return y[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return In(r,t)?(r[t]=n,!0):s!==J&&q(s,t)?(s[t]=n,!0):q(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==J&&q(e,o)||In(t,o)||(l=i[0])&&q(l,o)||q(s,o)||q(vt,o)||q(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:q(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function uu(){return hl().attrs}function hl(e){const t=Ri();return t.setupContext||(t.setupContext=Ai(t))}function qs(e){return I(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Gn=!0;function pl(e){const t=ii(e),n=e.proxy,s=e.ctx;Gn=!1,t.beforeCreate&&Ks(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:a,created:f,beforeMount:h,mounted:y,beforeUpdate:R,updated:x,activated:T,deactivated:C,beforeDestroy:N,beforeUnmount:M,destroyed:U,unmounted:v,render:B,renderTracked:Q,renderTriggered:Z,errorCaptured:me,serverPrefetch:ze,expose:Ge,inheritAttrs:bt,components:Kt,directives:Vt,filters:On}=t;if(a&&ml(a,s,null),o)for(const z in o){const V=o[z];j(V)&&(s[z]=V.bind(n))}if(r){const z=r.call(n,n);G(z)&&(e.data=_s(z))}if(Gn=!0,i)for(const z in i){const V=i[z],Xe=j(V)?V.bind(n,n):j(V.get)?V.get.bind(n,n):Fe,kt=!j(V)&&j(V.set)?V.set.bind(n):Fe,Ye=ec({get:Xe,set:kt});Object.defineProperty(s,z,{enumerable:!0,configurable:!0,get:()=>Ye.value,set:Ee=>Ye.value=Ee})}if(l)for(const z in l)ri(l[z],s,n,z);if(c){const z=j(c)?c.call(n):c;Reflect.ownKeys(z).forEach(V=>{xl(V,z[V])})}f&&Ks(f,e,"c");function ie(z,V){I(V)?V.forEach(Xe=>z(Xe.bind(n))):V&&z(V.bind(n))}if(ie(nl,h),ie(sl,y),ie(rl,R),ie(il,x),ie(Qo,T),ie(el,C),ie(ul,me),ie(fl,Q),ie(cl,Z),ie(ol,M),ie(ni,v),ie(ll,ze),I(Ge))if(Ge.length){const z=e.exposed||(e.exposed={});Ge.forEach(V=>{Object.defineProperty(z,V,{get:()=>n[V],set:Xe=>n[V]=Xe,enumerable:!0})})}else e.exposed||(e.exposed={});B&&e.render===Fe&&(e.render=B),bt!=null&&(e.inheritAttrs=bt),Kt&&(e.components=Kt),Vt&&(e.directives=Vt),ze&&Qr(e)}function ml(e,t,n=Fe){I(e)&&(e=Xn(e));for(const s in e){const r=e[s];let i;G(r)?"default"in r?i=Xt(r.from||s,r.default,!0):i=Xt(r.from||s):i=Xt(r),se(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Ks(e,t,n){De(I(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function ri(e,t,n,s){let r=s.includes(".")?yi(n,s):()=>n[s];if(X(e)){const i=t[e];j(i)&&Ln(r,i)}else if(j(e))Ln(r,e.bind(n));else if(G(e))if(I(e))e.forEach(i=>ri(i,t,n,s));else{const i=j(e.handler)?e.handler.bind(n):t[e.handler];j(i)&&Ln(r,i,e)}}function ii(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(a=>ln(c,a,o,!0)),ln(c,t,o)),G(t)&&i.set(t,c),c}function ln(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&ln(e,i,n,!0),r&&r.forEach(o=>ln(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=gl[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const gl={data:Vs,props:ks,emits:ks,methods:Rt,computed:Rt,beforeCreate:oe,created:oe,beforeMount:oe,mounted:oe,beforeUpdate:oe,updated:oe,beforeDestroy:oe,beforeUnmount:oe,destroyed:oe,unmounted:oe,activated:oe,deactivated:oe,errorCaptured:oe,serverPrefetch:oe,components:Rt,directives:Rt,watch:yl,provide:Vs,inject:bl};function Vs(e,t){return t?e?function(){return re(j(e)?e.call(this,this):e,j(t)?t.call(this,this):t)}:t:e}function bl(e,t){return Rt(Xn(e),Xn(t))}function Xn(e){if(I(e)){const t={};for(let n=0;n1)return n&&j(t)?t.call(s&&s.proxy):t}}const li={},ci=()=>Object.create(li),fi=e=>Object.getPrototypeOf(e)===li;function Sl(e,t,n,s=!1){const r={},i=ci();e.propsDefaults=Object.create(null),ui(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Lo(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function El(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=$(r),[c]=e.propsOptions;let a=!1;if((s||o>0)&&!(o&16)){if(o&8){const f=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[y,R]=ai(h,t,!0);re(o,y),R&&l.push(...R)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!i&&!c)return G(e)&&s.set(e,ct),ct;if(I(i))for(let f=0;fe==="_"||e==="__"||e==="_ctx"||e==="$stable",Ts=e=>I(e)?e.map(Pe):[Pe(e)],Tl=(e,t,n)=>{if(t._n)return t;const s=Xo((...r)=>Ts(t(...r)),n);return s._c=!1,s},di=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Rs(r))continue;const i=e[r];if(j(i))t[r]=Tl(r,i,s);else if(i!=null){const o=Ts(i);t[r]=()=>o}}},hi=(e,t)=>{const n=Ts(t);e.slots.default=()=>n},pi=(e,t,n)=>{for(const s in t)(n||!Rs(s))&&(e[s]=t[s])},Ol=(e,t,n)=>{const s=e.slots=ci();if(e.vnode.shapeFlag&32){const r=t.__;r&&Kn(s,"__",r,!0);const i=t._;i?(pi(s,t,n),n&&Kn(s,"_",i,!0)):di(t,s)}else t&&hi(e,t)},Al=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=J;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:pi(r,t,n):(i=!t.$stable,di(t,r)),o=t}else t&&(hi(e,t),o={default:1});if(i)for(const l in r)!Rs(l)&&o[l]==null&&delete r[l]},be=$l;function Cl(e){return vl(e)}function vl(e,t){const n=pn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:a,setElementText:f,parentNode:h,nextSibling:y,setScopeId:R=Fe,insertStaticContent:x}=e,T=(u,d,m,_=null,g=null,b=null,O=void 0,E=null,S=!!d.dynamicChildren)=>{if(u===d)return;u&&!St(u,d)&&(_=Wt(u),Ee(u,g,b,!0),u=null),d.patchFlag===-2&&(S=!1,d.dynamicChildren=null);const{type:w,ref:F,shapeFlag:A}=d;switch(w){case _n:C(u,d,m,_);break;case Be:N(u,d,m,_);break;case Un:u==null&&M(d,m,_,O);break;case _e:Kt(u,d,m,_,g,b,O,E,S);break;default:A&1?B(u,d,m,_,g,b,O,E,S):A&6?Vt(u,d,m,_,g,b,O,E,S):(A&64||A&128)&&w.process(u,d,m,_,g,b,O,E,S,_t)}F!=null&&g?Ct(F,u&&u.ref,b,d||u,!d):F==null&&u&&u.ref!=null&&Ct(u.ref,null,b,u,!0)},C=(u,d,m,_)=>{if(u==null)s(d.el=l(d.children),m,_);else{const g=d.el=u.el;d.children!==u.children&&a(g,d.children)}},N=(u,d,m,_)=>{u==null?s(d.el=c(d.children||""),m,_):d.el=u.el},M=(u,d,m,_)=>{[u.el,u.anchor]=x(u.children,d,m,_,u.el,u.anchor)},U=({el:u,anchor:d},m,_)=>{let g;for(;u&&u!==d;)g=y(u),s(u,m,_),u=g;s(d,m,_)},v=({el:u,anchor:d})=>{let m;for(;u&&u!==d;)m=y(u),r(u),u=m;r(d)},B=(u,d,m,_,g,b,O,E,S)=>{d.type==="svg"?O="svg":d.type==="math"&&(O="mathml"),u==null?Q(d,m,_,g,b,O,E,S):ze(u,d,g,b,O,E,S)},Q=(u,d,m,_,g,b,O,E)=>{let S,w;const{props:F,shapeFlag:A,transition:P,dirs:D}=u;if(S=u.el=o(u.type,b,F&&F.is,F),A&8?f(S,u.children):A&16&&me(u.children,S,null,_,g,Mn(u,b),O,E),D&&Ze(u,null,_,"created"),Z(S,u,u.scopeId,O,_),F){for(const k in F)k!=="value"&&!Tt(k)&&i(S,k,null,F[k],b,_);"value"in F&&i(S,"value",null,F.value,b),(w=F.onVnodeBeforeMount)&&Ae(w,_,u)}D&&Ze(u,null,_,"beforeMount");const H=Pl(g,P);H&&P.beforeEnter(S),s(S,d,m),((w=F&&F.onVnodeMounted)||H||D)&&be(()=>{w&&Ae(w,_,u),H&&P.enter(S),D&&Ze(u,null,_,"mounted")},g)},Z=(u,d,m,_,g)=>{if(m&&R(u,m),_)for(let b=0;b<_.length;b++)R(u,_[b]);if(g){let b=g.subTree;if(d===b||wi(b.type)&&(b.ssContent===d||b.ssFallback===d)){const O=g.vnode;Z(u,O,O.scopeId,O.slotScopeIds,g.parent)}}},me=(u,d,m,_,g,b,O,E,S=0)=>{for(let w=S;w{const E=d.el=u.el;let{patchFlag:S,dynamicChildren:w,dirs:F}=d;S|=u.patchFlag&16;const A=u.props||J,P=d.props||J;let D;if(m&&Qe(m,!1),(D=P.onVnodeBeforeUpdate)&&Ae(D,m,d,u),F&&Ze(d,u,m,"beforeUpdate"),m&&Qe(m,!0),(A.innerHTML&&P.innerHTML==null||A.textContent&&P.textContent==null)&&f(E,""),w?Ge(u.dynamicChildren,w,E,m,_,Mn(d,g),b):O||V(u,d,E,null,m,_,Mn(d,g),b,!1),S>0){if(S&16)bt(E,A,P,m,g);else if(S&2&&A.class!==P.class&&i(E,"class",null,P.class,g),S&4&&i(E,"style",A.style,P.style,g),S&8){const H=d.dynamicProps;for(let k=0;k{D&&Ae(D,m,d,u),F&&Ze(d,u,m,"updated")},_)},Ge=(u,d,m,_,g,b,O)=>{for(let E=0;E{if(d!==m){if(d!==J)for(const b in d)!Tt(b)&&!(b in m)&&i(u,b,d[b],null,g,_);for(const b in m){if(Tt(b))continue;const O=m[b],E=d[b];O!==E&&b!=="value"&&i(u,b,E,O,g,_)}"value"in m&&i(u,"value",d.value,m.value,g)}},Kt=(u,d,m,_,g,b,O,E,S)=>{const w=d.el=u?u.el:l(""),F=d.anchor=u?u.anchor:l("");let{patchFlag:A,dynamicChildren:P,slotScopeIds:D}=d;D&&(E=E?E.concat(D):D),u==null?(s(w,m,_),s(F,m,_),me(d.children||[],m,F,g,b,O,E,S)):A>0&&A&64&&P&&u.dynamicChildren?(Ge(u.dynamicChildren,P,m,g,b,O,E),(d.key!=null||g&&d===g.subTree)&&mi(u,d,!0)):V(u,d,m,F,g,b,O,E,S)},Vt=(u,d,m,_,g,b,O,E,S)=>{d.slotScopeIds=E,u==null?d.shapeFlag&512?g.ctx.activate(d,m,_,O,S):On(d,m,_,g,b,O,S):Ns(u,d,S)},On=(u,d,m,_,g,b,O)=>{const E=u.component=Gl(u,_,g);if(ei(u)&&(E.ctx.renderer=_t),Xl(E,!1,O),E.asyncDep){if(g&&g.registerDep(E,ie,O),!u.el){const S=E.subTree=Ne(Be);N(null,S,d,m),u.placeholder=S.el}}else ie(E,u,d,m,g,b,O)},Ns=(u,d,m)=>{const _=d.component=u.component;if(Bl(u,d,m))if(_.asyncDep&&!_.asyncResolved){z(_,d,m);return}else _.next=d,_.update();else d.el=u.el,_.vnode=d},ie=(u,d,m,_,g,b,O)=>{const E=()=>{if(u.isMounted){let{next:A,bu:P,u:D,parent:H,vnode:k}=u;{const Te=gi(u);if(Te){A&&(A.el=k.el,z(u,A,O)),Te.asyncDep.then(()=>{u.isUnmounted||E()});return}}let K=A,fe;Qe(u,!1),A?(A.el=k.el,z(u,A,O)):A=k,P&&vn(P),(fe=A.props&&A.props.onVnodeBeforeUpdate)&&Ae(fe,H,A,k),Qe(u,!0);const ue=zs(u),Re=u.subTree;u.subTree=ue,T(Re,ue,h(Re.el),Wt(Re),u,g,b),A.el=ue.el,K===null&&Hl(u,ue.el),D&&be(D,g),(fe=A.props&&A.props.onVnodeUpdated)&&be(()=>Ae(fe,H,A,k),g)}else{let A;const{el:P,props:D}=d,{bm:H,m:k,parent:K,root:fe,type:ue}=u,Re=dt(d);Qe(u,!1),H&&vn(H),!Re&&(A=D&&D.onVnodeBeforeMount)&&Ae(A,K,d),Qe(u,!0);{fe.ce&&fe.ce._def.shadowRoot!==!1&&fe.ce._injectChildStyle(ue);const Te=u.subTree=zs(u);T(null,Te,m,_,u,g,b),d.el=Te.el}if(k&&be(k,g),!Re&&(A=D&&D.onVnodeMounted)){const Te=d;be(()=>Ae(A,K,Te),g)}(d.shapeFlag&256||K&&dt(K.vnode)&&K.vnode.shapeFlag&256)&&u.a&&be(u.a,g),u.isMounted=!0,d=m=_=null}};u.scope.on();const S=u.effect=new Nr(E);u.scope.off();const w=u.update=S.run.bind(S),F=u.job=S.runIfDirty.bind(S);F.i=u,F.id=u.uid,S.scheduler=()=>Ss(F),Qe(u,!0),w()},z=(u,d,m)=>{d.component=u;const _=u.vnode.props;u.vnode=d,u.next=null,El(u,d.props,_,m),Al(u,d.children,m),Ue(),$s(u),je()},V=(u,d,m,_,g,b,O,E,S=!1)=>{const w=u&&u.children,F=u?u.shapeFlag:0,A=d.children,{patchFlag:P,shapeFlag:D}=d;if(P>0){if(P&128){kt(w,A,m,_,g,b,O,E,S);return}else if(P&256){Xe(w,A,m,_,g,b,O,E,S);return}}D&8?(F&16&&yt(w,g,b),A!==w&&f(m,A)):F&16?D&16?kt(w,A,m,_,g,b,O,E,S):yt(w,g,b,!0):(F&8&&f(m,""),D&16&&me(A,m,_,g,b,O,E,S))},Xe=(u,d,m,_,g,b,O,E,S)=>{u=u||ct,d=d||ct;const w=u.length,F=d.length,A=Math.min(w,F);let P;for(P=0;PF?yt(u,g,b,!0,!1,A):me(d,m,_,g,b,O,E,S,A)},kt=(u,d,m,_,g,b,O,E,S)=>{let w=0;const F=d.length;let A=u.length-1,P=F-1;for(;w<=A&&w<=P;){const D=u[w],H=d[w]=S?Ke(d[w]):Pe(d[w]);if(St(D,H))T(D,H,m,null,g,b,O,E,S);else break;w++}for(;w<=A&&w<=P;){const D=u[A],H=d[P]=S?Ke(d[P]):Pe(d[P]);if(St(D,H))T(D,H,m,null,g,b,O,E,S);else break;A--,P--}if(w>A){if(w<=P){const D=P+1,H=DP)for(;w<=A;)Ee(u[w],g,b,!0),w++;else{const D=w,H=w,k=new Map;for(w=H;w<=P;w++){const ge=d[w]=S?Ke(d[w]):Pe(d[w]);ge.key!=null&&k.set(ge.key,w)}let K,fe=0;const ue=P-H+1;let Re=!1,Te=0;const wt=new Array(ue);for(w=0;w=ue){Ee(ge,g,b,!0);continue}let Oe;if(ge.key!=null)Oe=k.get(ge.key);else for(K=H;K<=P;K++)if(wt[K-H]===0&&St(ge,d[K])){Oe=K;break}Oe===void 0?Ee(ge,g,b,!0):(wt[Oe-H]=w+1,Oe>=Te?Te=Oe:Re=!0,T(ge,d[Oe],m,null,g,b,O,E,S),fe++)}const Ms=Re?Fl(wt):ct;for(K=Ms.length-1,w=ue-1;w>=0;w--){const ge=H+w,Oe=d[ge],Ls=d[ge+1],Us=ge+1{const{el:b,type:O,transition:E,children:S,shapeFlag:w}=u;if(w&6){Ye(u.component.subTree,d,m,_);return}if(w&128){u.suspense.move(d,m,_);return}if(w&64){O.move(u,d,m,_t);return}if(O===_e){s(b,d,m);for(let A=0;AE.enter(b),g);else{const{leave:A,delayLeave:P,afterLeave:D}=E,H=()=>{u.ctx.isUnmounted?r(b):s(b,d,m)},k=()=>{A(b,()=>{H(),D&&D()})};P?P(b,H,k):k()}else s(b,d,m)},Ee=(u,d,m,_=!1,g=!1)=>{const{type:b,props:O,ref:E,children:S,dynamicChildren:w,shapeFlag:F,patchFlag:A,dirs:P,cacheIndex:D}=u;if(A===-2&&(g=!1),E!=null&&(Ue(),Ct(E,null,m,u,!0),je()),D!=null&&(d.renderCache[D]=void 0),F&256){d.ctx.deactivate(u);return}const H=F&1&&P,k=!dt(u);let K;if(k&&(K=O&&O.onVnodeBeforeUnmount)&&Ae(K,d,u),F&6)to(u.component,m,_);else{if(F&128){u.suspense.unmount(m,_);return}H&&Ze(u,null,d,"beforeUnmount"),F&64?u.type.remove(u,d,m,_t,_):w&&!w.hasOnce&&(b!==_e||A>0&&A&64)?yt(w,d,m,!1,!0):(b===_e&&A&384||!g&&F&16)&&yt(S,d,m),_&&Ds(u)}(k&&(K=O&&O.onVnodeUnmounted)||H)&&be(()=>{K&&Ae(K,d,u),H&&Ze(u,null,d,"unmounted")},m)},Ds=u=>{const{type:d,el:m,anchor:_,transition:g}=u;if(d===_e){eo(m,_);return}if(d===Un){v(u);return}const b=()=>{r(m),g&&!g.persisted&&g.afterLeave&&g.afterLeave()};if(u.shapeFlag&1&&g&&!g.persisted){const{leave:O,delayLeave:E}=g,S=()=>O(m,b);E?E(u.el,b,S):S()}else b()},eo=(u,d)=>{let m;for(;u!==d;)m=y(u),r(u),u=m;r(d)},to=(u,d,m)=>{const{bum:_,scope:g,job:b,subTree:O,um:E,m:S,a:w,parent:F,slots:{__:A}}=u;Js(S),Js(w),_&&vn(_),F&&I(A)&&A.forEach(P=>{F.renderCache[P]=void 0}),g.stop(),b&&(b.flags|=8,Ee(O,u,d,m)),E&&be(E,d),be(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},yt=(u,d,m,_=!1,g=!1,b=0)=>{for(let O=b;O{if(u.shapeFlag&6)return Wt(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=y(u.anchor||u.el),m=d&&d[Yo];return m?y(m):d};let An=!1;const Is=(u,d,m)=>{u==null?d._vnode&&Ee(d._vnode,null,null,!0):T(d._vnode||null,u,d,null,null,null,m),d._vnode=u,An||(An=!0,$s(),Xr(),An=!1)},_t={p:T,um:Ee,m:Ye,r:Ds,mt:On,mc:me,pc:V,pbc:Ge,n:Wt,o:e};return{render:Is,hydrate:void 0,createApp:wl(Is)}}function Mn({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 Qe({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Pl(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function mi(e,t,n=!1){const s=e.children,r=t.children;if(I(s)&&I(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function gi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:gi(t)}function Js(e){if(e)for(let t=0;tXt(Nl);function Ln(e,t,n){return bi(e,t,n)}function bi(e,t,n=J){const{immediate:s,deep:r,flush:i,once:o}=n,l=re({},n),c=t&&s||!t&&i!=="post";let a;if(Mt){if(i==="sync"){const R=Dl();a=R.__watcherHandles||(R.__watcherHandles=[])}else if(!c){const R=()=>{};return R.stop=Fe,R.resume=Fe,R.pause=Fe,R}}const f=ce;l.call=(R,x,T)=>De(R,f,x,T);let h=!1;i==="post"?l.scheduler=R=>{be(R,f&&f.suspense)}:i!=="sync"&&(h=!0,l.scheduler=(R,x)=>{x?R():Ss(R)}),l.augmentJob=R=>{t&&(R.flags|=4),h&&(R.flags|=2,f&&(R.id=f.uid,R.i=f))};const y=ko(e,t,l);return Mt&&(a?a.push(y):c&&y()),y}function Il(e,t,n){const s=this.proxy,r=X(e)?e.includes(".")?yi(s,e):()=>s[e]:e.bind(s,s);let i;j(t)?i=t:(i=t.handler,n=t);const o=jt(this),l=bi(r,i.bind(s),n);return o(),l}function yi(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${We(t)}Modifiers`]||e[`${it(t)}Modifiers`];function Ll(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||J;let r=n;const i=t.startsWith("update:"),o=i&&Ml(s,t.slice(7));o&&(o.trim&&(r=n.map(f=>X(f)?f.trim():f)),o.number&&(r=n.map(lo)));let l,c=s[l=Cn(t)]||s[l=Cn(We(t))];!c&&i&&(c=s[l=Cn(it(t))]),c&&De(c,e,6,r);const a=s[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,De(a,e,6,r)}}function _i(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!j(e)){const c=a=>{const f=_i(a,t,!0);f&&(l=!0,re(o,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(G(e)&&s.set(e,null),null):(I(i)?i.forEach(c=>o[c]=null):re(o,i),G(e)&&s.set(e,o),o)}function yn(e,t){return!e||!an(t)?!1:(t=t.slice(2).replace(/Once$/,""),q(e,t[0].toLowerCase()+t.slice(1))||q(e,it(t))||q(e,t))}function zs(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:a,renderCache:f,props:h,data:y,setupState:R,ctx:x,inheritAttrs:T}=e,C=on(e);let N,M;try{if(n.shapeFlag&4){const v=r||s,B=v;N=Pe(a.call(B,v,f,h,R,y,x)),M=l}else{const v=t;N=Pe(v.length>1?v(h,{attrs:l,slots:o,emit:c}):v(h,null)),M=t.props?l:Ul(l)}}catch(v){Pt.length=0,gn(v,e,1),N=Ne(Be)}let U=N;if(M&&T!==!1){const v=Object.keys(M),{shapeFlag:B}=U;v.length&&B&7&&(i&&v.some(fs)&&(M=jl(M,i)),U=pt(U,M,!1,!0))}return n.dirs&&(U=pt(U,null,!1,!0),U.dirs=U.dirs?U.dirs.concat(n.dirs):n.dirs),n.transition&&Es(U,n.transition),N=U,on(C),N}const Ul=e=>{let t;for(const n in e)(n==="class"||n==="style"||an(n))&&((t||(t={}))[n]=e[n]);return t},jl=(e,t)=>{const n={};for(const s in e)(!fs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Bl(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,a=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Gs(s,o,a):!!o;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function $l(e,t){t&&t.pendingBranch?I(e)?t.effects.push(...e):t.effects.push(e):Go(e)}const _e=Symbol.for("v-fgt"),_n=Symbol.for("v-txt"),Be=Symbol.for("v-cmt"),Un=Symbol.for("v-stc"),Pt=[];let ye=null;function Zn(e=!1){Pt.push(ye=e?null:[])}function ql(){Pt.pop(),ye=Pt[Pt.length-1]||null}let It=1;function Xs(e,t=!1){It+=e,e<0&&ye&&t&&(ye.hasOnce=!0)}function xi(e){return e.dynamicChildren=It>0?ye||ct:null,ql(),It>0&&ye&&ye.push(e),e}function au(e,t,n,s,r,i){return xi(Ei(e,t,n,s,r,i,!0))}function Qn(e,t,n,s,r){return xi(Ne(e,t,n,s,r,!0))}function Os(e){return e?e.__v_isVNode===!0:!1}function St(e,t){return e.type===t.type&&e.key===t.key}const Si=({key:e})=>e??null,Yt=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?X(e)||se(e)||j(e)?{i:de,r:e,k:t,f:!!n}:e:null);function Ei(e,t=null,n=null,s=0,r=null,i=e===_e?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Si(t),ref:t&&Yt(t),scopeId:Zr,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:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:de};return l?(As(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=X(n)?8:16),It>0&&!o&&ye&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&ye.push(c),c}const Ne=Kl;function Kl(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===al)&&(e=Be),Os(e)){const l=pt(e,t,!0);return n&&As(l,n),It>0&&!i&&ye&&(l.shapeFlag&6?ye[ye.indexOf(e)]=l:ye.push(l)),l.patchFlag=-2,l}if(Ql(e)&&(e=e.__vccOpts),t){t=Vl(t);let{class:l,style:c}=t;l&&!X(l)&&(t.class=hs(l)),G(c)&&(xs(c)&&!I(c)&&(c=re({},c)),t.style=ds(c))}const o=X(e)?1:wi(e)?128:Zo(e)?64:G(e)?4:j(e)?2:0;return Ei(e,t,n,s,r,o,i,!0)}function Vl(e){return e?xs(e)||fi(e)?re({},e):e:null}function pt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,a=t?Wl(r||{},t):r,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&Si(a),ref:t&&t.ref?n&&i?I(i)?i.concat(Yt(t)):[i,Yt(t)]:Yt(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==_e?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&pt(e.ssContent),ssFallback:e.ssFallback&&pt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Es(f,c.clone(f)),f}function kl(e=" ",t=0){return Ne(_n,null,e,t)}function du(e="",t=!1){return t?(Zn(),Qn(Be,null,e)):Ne(Be,null,e)}function Pe(e){return e==null||typeof e=="boolean"?Ne(Be):I(e)?Ne(_e,null,e.slice()):Os(e)?Ke(e):Ne(_n,null,String(e))}function Ke(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:pt(e)}function As(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(I(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),As(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!fi(t)?t._ctx=de:r===3&&de&&(de.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else j(t)?(t={default:t,_ctx:de},n=32):(t=String(t),s&64?(n=16,t=[kl(t)]):n=8);e.children=t,e.shapeFlag|=n}function Wl(...e){const t={};for(let n=0;nce||de;let cn,es;{const e=pn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};cn=t("__VUE_INSTANCE_SETTERS__",n=>ce=n),es=t("__VUE_SSR_SETTERS__",n=>Mt=n)}const jt=e=>{const t=ce;return cn(e),e.scope.on(),()=>{e.scope.off(),cn(t)}},Ys=()=>{ce&&ce.scope.off(),cn(null)};function Ti(e){return e.vnode.shapeFlag&4}let Mt=!1;function Xl(e,t=!1,n=!1){t&&es(t);const{props:s,children:r}=e.vnode,i=Ti(e);Sl(e,s,i,t),Ol(e,r,n||t);const o=i?Yl(e,t):void 0;return t&&es(!1),o}function Yl(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,dl);const{setup:s}=n;if(s){Ue();const r=e.setupContext=s.length>1?Ai(e):null,i=jt(e),o=Ut(s,e,0,[e.props,r]),l=Tr(o);if(je(),i(),(l||e.sp)&&!dt(e)&&Qr(e),l){if(o.then(Ys,Ys),t)return o.then(c=>{Zs(e,c)}).catch(c=>{gn(c,e,0)});e.asyncDep=o}else Zs(e,o)}else Oi(e)}function Zs(e,t,n){j(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:G(t)&&(e.setupState=Jr(t)),Oi(e)}function Oi(e,t,n){const s=e.type;e.render||(e.render=s.render||Fe);{const r=jt(e);Ue();try{pl(e)}finally{je(),r()}}}const Zl={get(e,t){return te(e,"get",""),e[t]}};function Ai(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Zl),slots:e.slots,emit:e.emit,expose:t}}function Cs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Jr(Uo(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in vt)return vt[n](e)},has(t,n){return n in t||n in vt}})):e.proxy}function Ql(e){return j(e)&&"__vccOpts"in e}const ec=(e,t)=>Ko(e,t,Mt),tc="3.5.18";/** -* @vue/runtime-dom v3.5.18 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let ts;const Qs=typeof window<"u"&&window.trustedTypes;if(Qs)try{ts=Qs.createPolicy("vue",{createHTML:e=>e})}catch{}const Ci=ts?e=>ts.createHTML(e):e=>e,nc="http://www.w3.org/2000/svg",sc="http://www.w3.org/1998/Math/MathML",Me=typeof document<"u"?document:null,er=Me&&Me.createElement("template"),rc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Me.createElementNS(nc,e):t==="mathml"?Me.createElementNS(sc,e):n?Me.createElement(e,{is:n}):Me.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Me.createTextNode(e),createComment:e=>Me.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Me.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{er.innerHTML=Ci(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=er.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ic=Symbol("_vtc");function oc(e,t,n){const s=e[ic];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const tr=Symbol("_vod"),lc=Symbol("_vsh"),cc=Symbol(""),fc=/(^|;)\s*display\s*:/;function uc(e,t,n){const s=e.style,r=X(n);let i=!1;if(n&&!r){if(t)if(X(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Zt(s,l,"")}else for(const o in t)n[o]==null&&Zt(s,o,"");for(const o in n)o==="display"&&(i=!0),Zt(s,o,n[o])}else if(r){if(t!==n){const o=s[cc];o&&(n+=";"+o),s.cssText=n,i=fc.test(n)}}else t&&e.removeAttribute("style");tr in e&&(e[tr]=i?s.display:"",e[lc]&&(s.display="none"))}const nr=/\s*!important$/;function Zt(e,t,n){if(I(n))n.forEach(s=>Zt(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ac(e,t);nr.test(n)?e.setProperty(it(s),n.replace(nr,""),"important"):e[s]=n}}const sr=["Webkit","Moz","ms"],jn={};function ac(e,t){const n=jn[t];if(n)return n;let s=We(t);if(s!=="filter"&&s in e)return jn[t]=s;s=Cr(s);for(let r=0;rBn||(gc.then(()=>Bn=0),Bn=Date.now());function yc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;De(_c(s,n.value),t,5,[s])};return n.value=e,n.attached=bc(),n}function _c(e,t){if(I(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const fr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,wc=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?oc(e,s,o):t==="style"?uc(e,n,s):an(t)?fs(t)||pc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):xc(e,t,s,o))?(or(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ir(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!X(s))?or(e,We(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),ir(e,t,s,o))};function xc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&fr(t)&&j(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return fr(t)&&X(n)?!1:t in e}const Sc=["ctrl","shift","alt","meta"],Ec={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)=>Sc.some(n=>e[`${n}Key`]&&!t.includes(n))},hu=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const t=Tc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Ac(s);if(!r)return;const i=t._component;!j(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Oc(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function Oc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Ac(e){return X(e)?document.querySelector(e):e}function vi(e,t){return function(){return e.apply(t,arguments)}}const{toString:Cc}=Object.prototype,{getPrototypeOf:vs}=Object,{iterator:wn,toStringTag:Pi}=Symbol,xn=(e=>t=>{const n=Cc.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Se=e=>(e=e.toLowerCase(),t=>xn(t)===e),Sn=e=>t=>typeof t===e,{isArray:mt}=Array,Lt=Sn("undefined");function Bt(e){return e!==null&&!Lt(e)&&e.constructor!==null&&!Lt(e.constructor)&&he(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Fi=Se("ArrayBuffer");function vc(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Fi(e.buffer),t}const Pc=Sn("string"),he=Sn("function"),Ni=Sn("number"),Ht=e=>e!==null&&typeof e=="object",Fc=e=>e===!0||e===!1,Qt=e=>{if(xn(e)!=="object")return!1;const t=vs(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Pi in e)&&!(wn in e)},Nc=e=>{if(!Ht(e)||Bt(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Dc=Se("Date"),Ic=Se("File"),Mc=Se("Blob"),Lc=Se("FileList"),Uc=e=>Ht(e)&&he(e.pipe),jc=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||he(e.append)&&((t=xn(e))==="formdata"||t==="object"&&he(e.toString)&&e.toString()==="[object FormData]"))},Bc=Se("URLSearchParams"),[Hc,$c,qc,Kc]=["ReadableStream","Request","Response","Headers"].map(Se),Vc=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function $t(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let s,r;if(typeof e!="object"&&(e=[e]),mt(e))for(s=0,r=e.length;s0;)if(r=n[s],t===r.toLowerCase())return r;return null}const tt=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Ii=e=>!Lt(e)&&e!==tt;function ns(){const{caseless:e}=Ii(this)&&this||{},t={},n=(s,r)=>{const i=e&&Di(t,r)||r;Qt(t[i])&&Qt(s)?t[i]=ns(t[i],s):Qt(s)?t[i]=ns({},s):mt(s)?t[i]=s.slice():t[i]=s};for(let s=0,r=arguments.length;s($t(t,(r,i)=>{n&&he(r)?e[i]=vi(r,n):e[i]=r},{allOwnKeys:s}),e),Wc=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Jc=(e,t,n,s)=>{e.prototype=Object.create(t.prototype,s),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},zc=(e,t,n,s)=>{let r,i,o;const l={};if(t=t||{},e==null)return t;do{for(r=Object.getOwnPropertyNames(e),i=r.length;i-- >0;)o=r[i],(!s||s(o,e,t))&&!l[o]&&(t[o]=e[o],l[o]=!0);e=n!==!1&&vs(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},Gc=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const s=e.indexOf(t,n);return s!==-1&&s===n},Xc=e=>{if(!e)return null;if(mt(e))return e;let t=e.length;if(!Ni(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},Yc=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&vs(Uint8Array)),Zc=(e,t)=>{const s=(e&&e[wn]).call(e);let r;for(;(r=s.next())&&!r.done;){const i=r.value;t.call(e,i[0],i[1])}},Qc=(e,t)=>{let n;const s=[];for(;(n=e.exec(t))!==null;)s.push(n);return s},ef=Se("HTMLFormElement"),tf=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,s,r){return s.toUpperCase()+r}),ar=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),nf=Se("RegExp"),Mi=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),s={};$t(n,(r,i)=>{let o;(o=t(r,i,e))!==!1&&(s[i]=o||r)}),Object.defineProperties(e,s)},sf=e=>{Mi(e,(t,n)=>{if(he(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const s=e[n];if(he(s)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},rf=(e,t)=>{const n={},s=r=>{r.forEach(i=>{n[i]=!0})};return mt(e)?s(e):s(String(e).split(t)),n},of=()=>{},lf=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function cf(e){return!!(e&&he(e.append)&&e[Pi]==="FormData"&&e[wn])}const ff=e=>{const t=new Array(10),n=(s,r)=>{if(Ht(s)){if(t.indexOf(s)>=0)return;if(Bt(s))return s;if(!("toJSON"in s)){t[r]=s;const i=mt(s)?[]:{};return $t(s,(o,l)=>{const c=n(o,r+1);!Lt(c)&&(i[l]=c)}),t[r]=void 0,i}}return s};return n(e,0)},uf=Se("AsyncFunction"),af=e=>e&&(Ht(e)||he(e))&&he(e.then)&&he(e.catch),Li=((e,t)=>e?setImmediate:t?((n,s)=>(tt.addEventListener("message",({source:r,data:i})=>{r===tt&&i===n&&s.length&&s.shift()()},!1),r=>{s.push(r),tt.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",he(tt.postMessage)),df=typeof queueMicrotask<"u"?queueMicrotask.bind(tt):typeof process<"u"&&process.nextTick||Li,hf=e=>e!=null&&he(e[wn]),p={isArray:mt,isArrayBuffer:Fi,isBuffer:Bt,isFormData:jc,isArrayBufferView:vc,isString:Pc,isNumber:Ni,isBoolean:Fc,isObject:Ht,isPlainObject:Qt,isEmptyObject:Nc,isReadableStream:Hc,isRequest:$c,isResponse:qc,isHeaders:Kc,isUndefined:Lt,isDate:Dc,isFile:Ic,isBlob:Mc,isRegExp:nf,isFunction:he,isStream:Uc,isURLSearchParams:Bc,isTypedArray:Yc,isFileList:Lc,forEach:$t,merge:ns,extend:kc,trim:Vc,stripBOM:Wc,inherits:Jc,toFlatObject:zc,kindOf:xn,kindOfTest:Se,endsWith:Gc,toArray:Xc,forEachEntry:Zc,matchAll:Qc,isHTMLForm:ef,hasOwnProperty:ar,hasOwnProp:ar,reduceDescriptors:Mi,freezeMethods:sf,toObjectSet:rf,toCamelCase:tf,noop:of,toFiniteNumber:lf,findKey:Di,global:tt,isContextDefined:Ii,isSpecCompliantForm:cf,toJSONObject:ff,isAsyncFn:uf,isThenable:af,setImmediate:Li,asap:df,isIterable:hf};function L(e,t,n,s,r){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),s&&(this.request=s),r&&(this.response=r,this.status=r.status?r.status:null)}p.inherits(L,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:p.toJSONObject(this.config),code:this.code,status:this.status}}});const Ui=L.prototype,ji={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{ji[e]={value:e}});Object.defineProperties(L,ji);Object.defineProperty(Ui,"isAxiosError",{value:!0});L.from=(e,t,n,s,r,i)=>{const o=Object.create(Ui);return p.toFlatObject(e,o,function(c){return c!==Error.prototype},l=>l!=="isAxiosError"),L.call(o,e.message,t,n,s,r),o.cause=e,o.name=e.name,i&&Object.assign(o,i),o};const pf=null;function ss(e){return p.isPlainObject(e)||p.isArray(e)}function Bi(e){return p.endsWith(e,"[]")?e.slice(0,-2):e}function dr(e,t,n){return e?e.concat(t).map(function(r,i){return r=Bi(r),!n&&i?"["+r+"]":r}).join(n?".":""):t}function mf(e){return p.isArray(e)&&!e.some(ss)}const gf=p.toFlatObject(p,{},null,function(t){return/^is[A-Z]/.test(t)});function En(e,t,n){if(!p.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=p.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(T,C){return!p.isUndefined(C[T])});const s=n.metaTokens,r=n.visitor||f,i=n.dots,o=n.indexes,c=(n.Blob||typeof Blob<"u"&&Blob)&&p.isSpecCompliantForm(t);if(!p.isFunction(r))throw new TypeError("visitor must be a function");function a(x){if(x===null)return"";if(p.isDate(x))return x.toISOString();if(p.isBoolean(x))return x.toString();if(!c&&p.isBlob(x))throw new L("Blob is not supported. Use a Buffer instead.");return p.isArrayBuffer(x)||p.isTypedArray(x)?c&&typeof Blob=="function"?new Blob([x]):Buffer.from(x):x}function f(x,T,C){let N=x;if(x&&!C&&typeof x=="object"){if(p.endsWith(T,"{}"))T=s?T:T.slice(0,-2),x=JSON.stringify(x);else if(p.isArray(x)&&mf(x)||(p.isFileList(x)||p.endsWith(T,"[]"))&&(N=p.toArray(x)))return T=Bi(T),N.forEach(function(U,v){!(p.isUndefined(U)||U===null)&&t.append(o===!0?dr([T],v,i):o===null?T:T+"[]",a(U))}),!1}return ss(x)?!0:(t.append(dr(C,T,i),a(x)),!1)}const h=[],y=Object.assign(gf,{defaultVisitor:f,convertValue:a,isVisitable:ss});function R(x,T){if(!p.isUndefined(x)){if(h.indexOf(x)!==-1)throw Error("Circular reference detected in "+T.join("."));h.push(x),p.forEach(x,function(N,M){(!(p.isUndefined(N)||N===null)&&r.call(t,N,p.isString(M)?M.trim():M,T,y))===!0&&R(N,T?T.concat(M):[M])}),h.pop()}}if(!p.isObject(e))throw new TypeError("data must be an object");return R(e),t}function hr(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(s){return t[s]})}function Ps(e,t){this._pairs=[],e&&En(e,this,t)}const Hi=Ps.prototype;Hi.append=function(t,n){this._pairs.push([t,n])};Hi.toString=function(t){const n=t?function(s){return t.call(this,s,hr)}:hr;return this._pairs.map(function(r){return n(r[0])+"="+n(r[1])},"").join("&")};function bf(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function $i(e,t,n){if(!t)return e;const s=n&&n.encode||bf;p.isFunction(n)&&(n={serialize:n});const r=n&&n.serialize;let i;if(r?i=r(t,n):i=p.isURLSearchParams(t)?t.toString():new Ps(t,n).toString(s),i){const o=e.indexOf("#");o!==-1&&(e=e.slice(0,o)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}class pr{constructor(){this.handlers=[]}use(t,n,s){return this.handlers.push({fulfilled:t,rejected:n,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){p.forEach(this.handlers,function(s){s!==null&&t(s)})}}const qi={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},yf=typeof URLSearchParams<"u"?URLSearchParams:Ps,_f=typeof FormData<"u"?FormData:null,wf=typeof Blob<"u"?Blob:null,xf={isBrowser:!0,classes:{URLSearchParams:yf,FormData:_f,Blob:wf},protocols:["http","https","file","blob","url","data"]},Fs=typeof window<"u"&&typeof document<"u",rs=typeof navigator=="object"&&navigator||void 0,Sf=Fs&&(!rs||["ReactNative","NativeScript","NS"].indexOf(rs.product)<0),Ef=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Rf=Fs&&window.location.href||"http://localhost",Tf=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Fs,hasStandardBrowserEnv:Sf,hasStandardBrowserWebWorkerEnv:Ef,navigator:rs,origin:Rf},Symbol.toStringTag,{value:"Module"})),ne={...Tf,...xf};function Of(e,t){return En(e,new ne.classes.URLSearchParams,{visitor:function(n,s,r,i){return ne.isNode&&p.isBuffer(n)?(this.append(s,n.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)},...t})}function Af(e){return p.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Cf(e){const t={},n=Object.keys(e);let s;const r=n.length;let i;for(s=0;s=n.length;return o=!o&&p.isArray(r)?r.length:o,c?(p.hasOwnProp(r,o)?r[o]=[r[o],s]:r[o]=s,!l):((!r[o]||!p.isObject(r[o]))&&(r[o]=[]),t(n,s,r[o],i)&&p.isArray(r[o])&&(r[o]=Cf(r[o])),!l)}if(p.isFormData(e)&&p.isFunction(e.entries)){const n={};return p.forEachEntry(e,(s,r)=>{t(Af(s),r,n,0)}),n}return null}function vf(e,t,n){if(p.isString(e))try{return(t||JSON.parse)(e),p.trim(e)}catch(s){if(s.name!=="SyntaxError")throw s}return(n||JSON.stringify)(e)}const qt={transitional:qi,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const s=n.getContentType()||"",r=s.indexOf("application/json")>-1,i=p.isObject(t);if(i&&p.isHTMLForm(t)&&(t=new FormData(t)),p.isFormData(t))return r?JSON.stringify(Ki(t)):t;if(p.isArrayBuffer(t)||p.isBuffer(t)||p.isStream(t)||p.isFile(t)||p.isBlob(t)||p.isReadableStream(t))return t;if(p.isArrayBufferView(t))return t.buffer;if(p.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let l;if(i){if(s.indexOf("application/x-www-form-urlencoded")>-1)return Of(t,this.formSerializer).toString();if((l=p.isFileList(t))||s.indexOf("multipart/form-data")>-1){const c=this.env&&this.env.FormData;return En(l?{"files[]":t}:t,c&&new c,this.formSerializer)}}return i||r?(n.setContentType("application/json",!1),vf(t)):t}],transformResponse:[function(t){const n=this.transitional||qt.transitional,s=n&&n.forcedJSONParsing,r=this.responseType==="json";if(p.isResponse(t)||p.isReadableStream(t))return t;if(t&&p.isString(t)&&(s&&!this.responseType||r)){const o=!(n&&n.silentJSONParsing)&&r;try{return JSON.parse(t)}catch(l){if(o)throw l.name==="SyntaxError"?L.from(l,L.ERR_BAD_RESPONSE,this,null,this.response):l}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ne.classes.FormData,Blob:ne.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};p.forEach(["delete","get","head","post","put","patch"],e=>{qt.headers[e]={}});const Pf=p.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Ff=e=>{const t={};let n,s,r;return e&&e.split(` -`).forEach(function(o){r=o.indexOf(":"),n=o.substring(0,r).trim().toLowerCase(),s=o.substring(r+1).trim(),!(!n||t[n]&&Pf[n])&&(n==="set-cookie"?t[n]?t[n].push(s):t[n]=[s]:t[n]=t[n]?t[n]+", "+s:s)}),t},mr=Symbol("internals");function Et(e){return e&&String(e).trim().toLowerCase()}function en(e){return e===!1||e==null?e:p.isArray(e)?e.map(en):String(e)}function Nf(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=n.exec(e);)t[s[1]]=s[2];return t}const Df=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Hn(e,t,n,s,r){if(p.isFunction(s))return s.call(this,t,n);if(r&&(t=n),!!p.isString(t)){if(p.isString(s))return t.indexOf(s)!==-1;if(p.isRegExp(s))return s.test(t)}}function If(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,s)=>n.toUpperCase()+s)}function Mf(e,t){const n=p.toCamelCase(" "+t);["get","set","has"].forEach(s=>{Object.defineProperty(e,s+n,{value:function(r,i,o){return this[s].call(this,t,r,i,o)},configurable:!0})})}let pe=class{constructor(t){t&&this.set(t)}set(t,n,s){const r=this;function i(l,c,a){const f=Et(c);if(!f)throw new Error("header name must be a non-empty string");const h=p.findKey(r,f);(!h||r[h]===void 0||a===!0||a===void 0&&r[h]!==!1)&&(r[h||c]=en(l))}const o=(l,c)=>p.forEach(l,(a,f)=>i(a,f,c));if(p.isPlainObject(t)||t instanceof this.constructor)o(t,n);else if(p.isString(t)&&(t=t.trim())&&!Df(t))o(Ff(t),n);else if(p.isObject(t)&&p.isIterable(t)){let l={},c,a;for(const f of t){if(!p.isArray(f))throw TypeError("Object iterator must return a key-value pair");l[a=f[0]]=(c=l[a])?p.isArray(c)?[...c,f[1]]:[c,f[1]]:f[1]}o(l,n)}else t!=null&&i(n,t,s);return this}get(t,n){if(t=Et(t),t){const s=p.findKey(this,t);if(s){const r=this[s];if(!n)return r;if(n===!0)return Nf(r);if(p.isFunction(n))return n.call(this,r,s);if(p.isRegExp(n))return n.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=Et(t),t){const s=p.findKey(this,t);return!!(s&&this[s]!==void 0&&(!n||Hn(this,this[s],s,n)))}return!1}delete(t,n){const s=this;let r=!1;function i(o){if(o=Et(o),o){const l=p.findKey(s,o);l&&(!n||Hn(s,s[l],l,n))&&(delete s[l],r=!0)}}return p.isArray(t)?t.forEach(i):i(t),r}clear(t){const n=Object.keys(this);let s=n.length,r=!1;for(;s--;){const i=n[s];(!t||Hn(this,this[i],i,t,!0))&&(delete this[i],r=!0)}return r}normalize(t){const n=this,s={};return p.forEach(this,(r,i)=>{const o=p.findKey(s,i);if(o){n[o]=en(r),delete n[i];return}const l=t?If(i):String(i).trim();l!==i&&delete n[i],n[l]=en(r),s[l]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return p.forEach(this,(s,r)=>{s!=null&&s!==!1&&(n[r]=t&&p.isArray(s)?s.join(", "):s)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` -`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const s=new this(t);return n.forEach(r=>s.set(r)),s}static accessor(t){const s=(this[mr]=this[mr]={accessors:{}}).accessors,r=this.prototype;function i(o){const l=Et(o);s[l]||(Mf(r,o),s[l]=!0)}return p.isArray(t)?t.forEach(i):i(t),this}};pe.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);p.reduceDescriptors(pe.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(s){this[n]=s}}});p.freezeMethods(pe);function $n(e,t){const n=this||qt,s=t||n,r=pe.from(s.headers);let i=s.data;return p.forEach(e,function(l){i=l.call(n,i,r.normalize(),t?t.status:void 0)}),r.normalize(),i}function Vi(e){return!!(e&&e.__CANCEL__)}function gt(e,t,n){L.call(this,e??"canceled",L.ERR_CANCELED,t,n),this.name="CanceledError"}p.inherits(gt,L,{__CANCEL__:!0});function ki(e,t,n){const s=n.config.validateStatus;!n.status||!s||s(n.status)?e(n):t(new L("Request failed with status code "+n.status,[L.ERR_BAD_REQUEST,L.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function Lf(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function Uf(e,t){e=e||10;const n=new Array(e),s=new Array(e);let r=0,i=0,o;return t=t!==void 0?t:1e3,function(c){const a=Date.now(),f=s[i];o||(o=a),n[r]=c,s[r]=a;let h=i,y=0;for(;h!==r;)y+=n[h++],h=h%e;if(r=(r+1)%e,r===i&&(i=(i+1)%e),a-o{n=f,r=null,i&&(clearTimeout(i),i=null),e(...a)};return[(...a)=>{const f=Date.now(),h=f-n;h>=s?o(a,f):(r=a,i||(i=setTimeout(()=>{i=null,o(r)},s-h)))},()=>r&&o(r)]}const fn=(e,t,n=3)=>{let s=0;const r=Uf(50,250);return jf(i=>{const o=i.loaded,l=i.lengthComputable?i.total:void 0,c=o-s,a=r(c),f=o<=l;s=o;const h={loaded:o,total:l,progress:l?o/l:void 0,bytes:c,rate:a||void 0,estimated:a&&l&&f?(l-o)/a:void 0,event:i,lengthComputable:l!=null,[t?"download":"upload"]:!0};e(h)},n)},gr=(e,t)=>{const n=e!=null;return[s=>t[0]({lengthComputable:n,total:e,loaded:s}),t[1]]},br=e=>(...t)=>p.asap(()=>e(...t)),Bf=ne.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,ne.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(ne.origin),ne.navigator&&/(msie|trident)/i.test(ne.navigator.userAgent)):()=>!0,Hf=ne.hasStandardBrowserEnv?{write(e,t,n,s,r,i){const o=[e+"="+encodeURIComponent(t)];p.isNumber(n)&&o.push("expires="+new Date(n).toGMTString()),p.isString(s)&&o.push("path="+s),p.isString(r)&&o.push("domain="+r),i===!0&&o.push("secure"),document.cookie=o.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function $f(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function qf(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function Wi(e,t,n){let s=!$f(t);return e&&(s||n==!1)?qf(e,t):t}const yr=e=>e instanceof pe?{...e}:e;function rt(e,t){t=t||{};const n={};function s(a,f,h,y){return p.isPlainObject(a)&&p.isPlainObject(f)?p.merge.call({caseless:y},a,f):p.isPlainObject(f)?p.merge({},f):p.isArray(f)?f.slice():f}function r(a,f,h,y){if(p.isUndefined(f)){if(!p.isUndefined(a))return s(void 0,a,h,y)}else return s(a,f,h,y)}function i(a,f){if(!p.isUndefined(f))return s(void 0,f)}function o(a,f){if(p.isUndefined(f)){if(!p.isUndefined(a))return s(void 0,a)}else return s(void 0,f)}function l(a,f,h){if(h in t)return s(a,f);if(h in e)return s(void 0,a)}const c={url:i,method:i,data:i,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:l,headers:(a,f,h)=>r(yr(a),yr(f),h,!0)};return p.forEach(Object.keys({...e,...t}),function(f){const h=c[f]||r,y=h(e[f],t[f],f);p.isUndefined(y)&&h!==l||(n[f]=y)}),n}const Ji=e=>{const t=rt({},e);let{data:n,withXSRFToken:s,xsrfHeaderName:r,xsrfCookieName:i,headers:o,auth:l}=t;t.headers=o=pe.from(o),t.url=$i(Wi(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),l&&o.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):"")));let c;if(p.isFormData(n)){if(ne.hasStandardBrowserEnv||ne.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if((c=o.getContentType())!==!1){const[a,...f]=c?c.split(";").map(h=>h.trim()).filter(Boolean):[];o.setContentType([a||"multipart/form-data",...f].join("; "))}}if(ne.hasStandardBrowserEnv&&(s&&p.isFunction(s)&&(s=s(t)),s||s!==!1&&Bf(t.url))){const a=r&&i&&Hf.read(i);a&&o.set(r,a)}return t},Kf=typeof XMLHttpRequest<"u",Vf=Kf&&function(e){return new Promise(function(n,s){const r=Ji(e);let i=r.data;const o=pe.from(r.headers).normalize();let{responseType:l,onUploadProgress:c,onDownloadProgress:a}=r,f,h,y,R,x;function T(){R&&R(),x&&x(),r.cancelToken&&r.cancelToken.unsubscribe(f),r.signal&&r.signal.removeEventListener("abort",f)}let C=new XMLHttpRequest;C.open(r.method.toUpperCase(),r.url,!0),C.timeout=r.timeout;function N(){if(!C)return;const U=pe.from("getAllResponseHeaders"in C&&C.getAllResponseHeaders()),B={data:!l||l==="text"||l==="json"?C.responseText:C.response,status:C.status,statusText:C.statusText,headers:U,config:e,request:C};ki(function(Z){n(Z),T()},function(Z){s(Z),T()},B),C=null}"onloadend"in C?C.onloadend=N:C.onreadystatechange=function(){!C||C.readyState!==4||C.status===0&&!(C.responseURL&&C.responseURL.indexOf("file:")===0)||setTimeout(N)},C.onabort=function(){C&&(s(new L("Request aborted",L.ECONNABORTED,e,C)),C=null)},C.onerror=function(){s(new L("Network Error",L.ERR_NETWORK,e,C)),C=null},C.ontimeout=function(){let v=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const B=r.transitional||qi;r.timeoutErrorMessage&&(v=r.timeoutErrorMessage),s(new L(v,B.clarifyTimeoutError?L.ETIMEDOUT:L.ECONNABORTED,e,C)),C=null},i===void 0&&o.setContentType(null),"setRequestHeader"in C&&p.forEach(o.toJSON(),function(v,B){C.setRequestHeader(B,v)}),p.isUndefined(r.withCredentials)||(C.withCredentials=!!r.withCredentials),l&&l!=="json"&&(C.responseType=r.responseType),a&&([y,x]=fn(a,!0),C.addEventListener("progress",y)),c&&C.upload&&([h,R]=fn(c),C.upload.addEventListener("progress",h),C.upload.addEventListener("loadend",R)),(r.cancelToken||r.signal)&&(f=U=>{C&&(s(!U||U.type?new gt(null,e,C):U),C.abort(),C=null)},r.cancelToken&&r.cancelToken.subscribe(f),r.signal&&(r.signal.aborted?f():r.signal.addEventListener("abort",f)));const M=Lf(r.url);if(M&&ne.protocols.indexOf(M)===-1){s(new L("Unsupported protocol "+M+":",L.ERR_BAD_REQUEST,e));return}C.send(i||null)})},kf=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let s=new AbortController,r;const i=function(a){if(!r){r=!0,l();const f=a instanceof Error?a:this.reason;s.abort(f instanceof L?f:new gt(f instanceof Error?f.message:f))}};let o=t&&setTimeout(()=>{o=null,i(new L(`timeout ${t} of ms exceeded`,L.ETIMEDOUT))},t);const l=()=>{e&&(o&&clearTimeout(o),o=null,e.forEach(a=>{a.unsubscribe?a.unsubscribe(i):a.removeEventListener("abort",i)}),e=null)};e.forEach(a=>a.addEventListener("abort",i));const{signal:c}=s;return c.unsubscribe=()=>p.asap(l),c}},Wf=function*(e,t){let n=e.byteLength;if(n{const r=Jf(e,t);let i=0,o,l=c=>{o||(o=!0,s&&s(c))};return new ReadableStream({async pull(c){try{const{done:a,value:f}=await r.next();if(a){l(),c.close();return}let h=f.byteLength;if(n){let y=i+=h;n(y)}c.enqueue(new Uint8Array(f))}catch(a){throw l(a),a}},cancel(c){return l(c),r.return()}},{highWaterMark:2})},Rn=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",zi=Rn&&typeof ReadableStream=="function",Gf=Rn&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),Gi=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Xf=zi&&Gi(()=>{let e=!1;const t=new Request(ne.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),wr=64*1024,is=zi&&Gi(()=>p.isReadableStream(new Response("").body)),un={stream:is&&(e=>e.body)};Rn&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!un[t]&&(un[t]=p.isFunction(e[t])?n=>n[t]():(n,s)=>{throw new L(`Response type '${t}' is not supported`,L.ERR_NOT_SUPPORT,s)})})})(new Response);const Yf=async e=>{if(e==null)return 0;if(p.isBlob(e))return e.size;if(p.isSpecCompliantForm(e))return(await new Request(ne.origin,{method:"POST",body:e}).arrayBuffer()).byteLength;if(p.isArrayBufferView(e)||p.isArrayBuffer(e))return e.byteLength;if(p.isURLSearchParams(e)&&(e=e+""),p.isString(e))return(await Gf(e)).byteLength},Zf=async(e,t)=>{const n=p.toFiniteNumber(e.getContentLength());return n??Yf(t)},Qf=Rn&&(async e=>{let{url:t,method:n,data:s,signal:r,cancelToken:i,timeout:o,onDownloadProgress:l,onUploadProgress:c,responseType:a,headers:f,withCredentials:h="same-origin",fetchOptions:y}=Ji(e);a=a?(a+"").toLowerCase():"text";let R=kf([r,i&&i.toAbortSignal()],o),x;const T=R&&R.unsubscribe&&(()=>{R.unsubscribe()});let C;try{if(c&&Xf&&n!=="get"&&n!=="head"&&(C=await Zf(f,s))!==0){let B=new Request(t,{method:"POST",body:s,duplex:"half"}),Q;if(p.isFormData(s)&&(Q=B.headers.get("content-type"))&&f.setContentType(Q),B.body){const[Z,me]=gr(C,fn(br(c)));s=_r(B.body,wr,Z,me)}}p.isString(h)||(h=h?"include":"omit");const N="credentials"in Request.prototype;x=new Request(t,{...y,signal:R,method:n.toUpperCase(),headers:f.normalize().toJSON(),body:s,duplex:"half",credentials:N?h:void 0});let M=await fetch(x,y);const U=is&&(a==="stream"||a==="response");if(is&&(l||U&&T)){const B={};["status","statusText","headers"].forEach(ze=>{B[ze]=M[ze]});const Q=p.toFiniteNumber(M.headers.get("content-length")),[Z,me]=l&&gr(Q,fn(br(l),!0))||[];M=new Response(_r(M.body,wr,Z,()=>{me&&me(),T&&T()}),B)}a=a||"text";let v=await un[p.findKey(un,a)||"text"](M,e);return!U&&T&&T(),await new Promise((B,Q)=>{ki(B,Q,{data:v,headers:pe.from(M.headers),status:M.status,statusText:M.statusText,config:e,request:x})})}catch(N){throw T&&T(),N&&N.name==="TypeError"&&/Load failed|fetch/i.test(N.message)?Object.assign(new L("Network Error",L.ERR_NETWORK,e,x),{cause:N.cause||N}):L.from(N,N&&N.code,e,x)}}),os={http:pf,xhr:Vf,fetch:Qf};p.forEach(os,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const xr=e=>`- ${e}`,eu=e=>p.isFunction(e)||e===null||e===!1,Xi={getAdapter:e=>{e=p.isArray(e)?e:[e];const{length:t}=e;let n,s;const r={};for(let i=0;i`adapter ${l} `+(c===!1?"is not supported by the environment":"is not available in the build"));let o=t?i.length>1?`since : -`+i.map(xr).join(` -`):" "+xr(i[0]):"as no adapter specified";throw new L("There is no suitable adapter to dispatch the request "+o,"ERR_NOT_SUPPORT")}return s},adapters:os};function qn(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new gt(null,e)}function Sr(e){return qn(e),e.headers=pe.from(e.headers),e.data=$n.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Xi.getAdapter(e.adapter||qt.adapter)(e).then(function(s){return qn(e),s.data=$n.call(e,e.transformResponse,s),s.headers=pe.from(s.headers),s},function(s){return Vi(s)||(qn(e),s&&s.response&&(s.response.data=$n.call(e,e.transformResponse,s.response),s.response.headers=pe.from(s.response.headers))),Promise.reject(s)})}const Yi="1.11.0",Tn={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Tn[e]=function(s){return typeof s===e||"a"+(t<1?"n ":" ")+e}});const Er={};Tn.transitional=function(t,n,s){function r(i,o){return"[Axios v"+Yi+"] Transitional option '"+i+"'"+o+(s?". "+s:"")}return(i,o,l)=>{if(t===!1)throw new L(r(o," has been removed"+(n?" in "+n:"")),L.ERR_DEPRECATED);return n&&!Er[o]&&(Er[o]=!0,console.warn(r(o," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(i,o,l):!0}};Tn.spelling=function(t){return(n,s)=>(console.warn(`${s} is likely a misspelling of ${t}`),!0)};function tu(e,t,n){if(typeof e!="object")throw new L("options must be an object",L.ERR_BAD_OPTION_VALUE);const s=Object.keys(e);let r=s.length;for(;r-- >0;){const i=s[r],o=t[i];if(o){const l=e[i],c=l===void 0||o(l,i,e);if(c!==!0)throw new L("option "+i+" must be "+c,L.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new L("Unknown option "+i,L.ERR_BAD_OPTION)}}const tn={assertOptions:tu,validators:Tn},Ce=tn.validators;let st=class{constructor(t){this.defaults=t||{},this.interceptors={request:new pr,response:new pr}}async request(t,n){try{return await this._request(t,n)}catch(s){if(s instanceof Error){let r={};Error.captureStackTrace?Error.captureStackTrace(r):r=new Error;const i=r.stack?r.stack.replace(/^.+\n/,""):"";try{s.stack?i&&!String(s.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(s.stack+=` -`+i):s.stack=i}catch{}}throw s}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=rt(this.defaults,n);const{transitional:s,paramsSerializer:r,headers:i}=n;s!==void 0&&tn.assertOptions(s,{silentJSONParsing:Ce.transitional(Ce.boolean),forcedJSONParsing:Ce.transitional(Ce.boolean),clarifyTimeoutError:Ce.transitional(Ce.boolean)},!1),r!=null&&(p.isFunction(r)?n.paramsSerializer={serialize:r}:tn.assertOptions(r,{encode:Ce.function,serialize:Ce.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),tn.assertOptions(n,{baseUrl:Ce.spelling("baseURL"),withXsrfToken:Ce.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let o=i&&p.merge(i.common,i[n.method]);i&&p.forEach(["delete","get","head","post","put","patch","common"],x=>{delete i[x]}),n.headers=pe.concat(o,i);const l=[];let c=!0;this.interceptors.request.forEach(function(T){typeof T.runWhen=="function"&&T.runWhen(n)===!1||(c=c&&T.synchronous,l.unshift(T.fulfilled,T.rejected))});const a=[];this.interceptors.response.forEach(function(T){a.push(T.fulfilled,T.rejected)});let f,h=0,y;if(!c){const x=[Sr.bind(this),void 0];for(x.unshift(...l),x.push(...a),y=x.length,f=Promise.resolve(n);h{if(!s._listeners)return;let i=s._listeners.length;for(;i-- >0;)s._listeners[i](r);s._listeners=null}),this.promise.then=r=>{let i;const o=new Promise(l=>{s.subscribe(l),i=l}).then(r);return o.cancel=function(){s.unsubscribe(i)},o},t(function(i,o,l){s.reason||(s.reason=new gt(i,o,l),n(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=s=>{t.abort(s)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new Zi(function(r){t=r}),cancel:t}}};function su(e){return function(n){return e.apply(null,n)}}function ru(e){return p.isObject(e)&&e.isAxiosError===!0}const ls={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(ls).forEach(([e,t])=>{ls[t]=e});function Qi(e){const t=new st(e),n=vi(st.prototype.request,t);return p.extend(n,st.prototype,t,{allOwnKeys:!0}),p.extend(n,t,null,{allOwnKeys:!0}),n.create=function(r){return Qi(rt(e,r))},n}const Y=Qi(qt);Y.Axios=st;Y.CanceledError=gt;Y.CancelToken=nu;Y.isCancel=Vi;Y.VERSION=Yi;Y.toFormData=En;Y.AxiosError=L;Y.Cancel=Y.CanceledError;Y.all=function(t){return Promise.all(t)};Y.spread=su;Y.isAxiosError=ru;Y.mergeConfig=rt;Y.AxiosHeaders=pe;Y.formToJSON=e=>Ki(p.isHTMLForm(e)?new FormData(e):e);Y.getAdapter=Xi.getAdapter;Y.HttpStatusCode=ls;Y.default=Y;const{Axios:bu,AxiosError:yu,CanceledError:_u,isCancel:wu,CancelToken:xu,VERSION:Su,all:Eu,Cancel:Ru,isAxiosError:Tu,spread:Ou,toFormData:Au,AxiosHeaders:Cu,HttpStatusCode:vu,formToJSON:Pu,getAdapter:Fu,mergeConfig:Nu}=Y;export{_e as F,Y as a,au as b,ec as c,lu as d,Ho as e,Ei as f,ds as g,ou as h,Ne as i,du as j,hu as k,kl as l,Wl as m,hs as n,Zn as o,cu as p,Qn as q,fu as r,pu as s,mo as t,uu as u,Xo as w}; diff --git a/assets/dist/index.html b/assets/dist/index.html index 16f159c..9f780a0 100644 --- a/assets/dist/index.html +++ b/assets/dist/index.html @@ -7,9 +7,9 @@ File Upload to Telegram - - - + + +
diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index f0c9e70..24544c7 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -45,7 +45,7 @@ export interface HistoryResponse { const api = axios.create({ baseURL: "/", - timeout: 30000, + timeout: 60000 * 60, }); export const uploadFile = async ( From a6324c3cbdf594163ce03c7375c43002cd8656af Mon Sep 17 00:00:00 2001 From: bestk <1138493417@qq.com> Date: Fri, 15 Aug 2025 15:42:41 +0800 Subject: [PATCH 18/26] feat: add beaudar --- frontend/index.html | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/frontend/index.html b/frontend/index.html index be6f08a..72c6b07 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -5,11 +5,25 @@ File Upload to Telegram - - + + +
- \ No newline at end of file + From 3d6550f2e2ad0de1cbd57948b4d5c61ba54dfbfb Mon Sep 17 00:00:00 2001 From: bestk <1138493417@qq.com> Date: Fri, 15 Aug 2025 16:02:40 +0800 Subject: [PATCH 19/26] feat: add giscus --- GISCUS_SETUP.md | 112 ++ frontend/pnpm-lock.yaml | 2096 ++++++++++++++++++++ frontend/src/components/FileUpload.vue | 7 + frontend/src/components/GiscusComments.vue | 48 + frontend/src/config/giscus.ts | 49 + 5 files changed, 2312 insertions(+) create mode 100644 GISCUS_SETUP.md create mode 100644 frontend/pnpm-lock.yaml create mode 100644 frontend/src/components/GiscusComments.vue create mode 100644 frontend/src/config/giscus.ts diff --git a/GISCUS_SETUP.md b/GISCUS_SETUP.md new file mode 100644 index 0000000..4ccafe7 --- /dev/null +++ b/GISCUS_SETUP.md @@ -0,0 +1,112 @@ +# Giscus 评论系统配置指南 + +Giscus 是基于 GitHub Discussions 的评论系统,功能强大且易于配置。 + +## 配置步骤 + +### 1. 准备 GitHub 仓库 +- 确保你有一个公开的 GitHub 仓库 +- 在仓库设置中启用 Discussions 功能: + - 进入仓库 → Settings → General + - 在 Features 部分勾选 "Discussions" + +### 2. 安装 Giscus GitHub App +- 访问 [Giscus GitHub App](https://github.com/apps/giscus) +- 点击 "Install" 安装到你的 GitHub 账户 +- 选择要安装的仓库(建议选择 "All repositories" 或选择特定仓库) + +### 3. 获取配置参数 +- 访问 [giscus.app](https://giscus.app/zh-CN) +- 按照页面指引填写你的仓库信息 +- 选择合适的配置选项 +- 复制生成的配置参数 + +### 4. 修改配置文件 +编辑 `frontend/src/config/giscus.ts` 文件: + +```typescript +export const giscusConfig = { + // 你的 GitHub 仓库 + repo: 'your-username/your-repo', // 例如:'octocat/Hello-World' + + // 从 giscus.app 获取的仓库 ID + repoId: 'R_kgDOH...', + + // Discussion 分类 + category: 'General', + + // 从 giscus.app 获取的分类 ID + categoryId: 'DIC_kwDOH...', + + // 其他配置可根据需要调整 + mapping: 'pathname', + strict: false, + reactionsEnabled: true, + emitMetadata: false, + inputPosition: 'top', + theme: 'light', + lang: 'zh-CN', + enabled: true, +} +``` + +### 5. 主题选项 +可选的主题包括: +- `light` - 浅色主题(默认) +- `dark` - 深色主题 +- `preferred_color_scheme` - 跟随系统主题 +- `transparent_dark` - 透明深色主题 +- `dark_dimmed` - 暗淡深色主题 +- `dark_high_contrast` - 高对比度深色主题 +- `light_high_contrast` - 高对比度浅色主题 +- `dark_protanopia` - 深色红绿色盲友好主题 +- `light_protanopia` - 浅色红绿色盲友好主题 +- `dark_tritanopia` - 深色蓝黄色盲友好主题 +- `light_tritanopia` - 浅色蓝黄色盲友好主题 + +### 6. 页面映射选项 +- `pathname` - 使用页面路径作为 discussion 标题(推荐) +- `url` - 使用页面完整 URL 作为 discussion 标题 +- `title` - 使用页面标题作为 discussion 标题 +- `og:title` - 使用页面 og:title 作为 discussion 标题 +- `specific` - 使用特定术语 +- `number` - 使用特定 discussion 编号 + +## Giscus 的优势 + +1. **基于 Discussions** - 比 Issues 更适合评论讨论 +2. **功能丰富** - 支持 reactions、回复、编辑等 +3. **无需数据库** - 所有数据存储在 GitHub +4. **SEO 友好** - 评论内容可被搜索引擎索引 +5. **多主题支持** - 包括无障碍友好主题 +6. **实时更新** - 支持实时评论更新 + +## 注意事项 + +1. **仓库必须是公开的** - Giscus 需要访问公开仓库的 Discussions +2. **启用 Discussions 功能** - 确保仓库的 Discussions 功能已启用 +3. **GitHub App 权限** - 确保 Giscus App 有权限访问你的仓库 +4. **首次加载** - 第一次访问时可能需要几秒钟加载评论系统 + +## 禁用评论系统 + +如果不需要评论功能,可以在配置文件中设置: +```typescript +enabled: false +``` + +## 故障排除 + +如果评论系统无法正常显示: +1. 检查仓库名称和 ID 是否正确 +2. 确认仓库是公开的且启用了 Discussions +3. 确认已安装 Giscus GitHub App +4. 检查分类和分类 ID 是否正确 +5. 检查浏览器控制台是否有错误信息 +6. 确认网络可以访问 giscus.app + +## 更多信息 + +- [Giscus 官网](https://giscus.app/zh-CN) +- [Giscus GitHub 仓库](https://github.com/giscus/giscus) +- [GitHub Discussions 文档](https://docs.github.com/en/discussions) \ No newline at end of file diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml new file mode 100644 index 0000000..59717f9 --- /dev/null +++ b/frontend/pnpm-lock.yaml @@ -0,0 +1,2096 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@fingerprintjs/fingerprintjs': + specifier: ^4.6.2 + version: 4.6.2 + '@vueuse/core': + specifier: ^10.7.0 + version: 10.11.1(vue@3.5.18(typescript@5.9.2)) + axios: + specifier: ^1.6.0 + version: 1.11.0 + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.1 + clsx: + specifier: ^2.0.0 + version: 2.1.1 + lucide-vue-next: + specifier: ^0.294.0 + version: 0.294.0(vue@3.5.18(typescript@5.9.2)) + radix-vue: + specifier: ^1.9.0 + version: 1.9.17(vue@3.5.18(typescript@5.9.2)) + tailwind-merge: + specifier: ^2.2.0 + version: 2.6.0 + vue: + specifier: ^3.4.0 + version: 3.5.18(typescript@5.9.2) + devDependencies: + '@types/node': + specifier: ^20.10.0 + version: 20.19.10 + '@vitejs/plugin-vue': + specifier: ^5.0.0 + version: 5.2.4(vite@5.4.19(@types/node@20.19.10))(vue@3.5.18(typescript@5.9.2)) + autoprefixer: + specifier: ^10.4.16 + version: 10.4.21(postcss@8.5.6) + postcss: + specifier: ^8.4.32 + version: 8.5.6 + tailwindcss: + specifier: ^3.4.0 + version: 3.4.17 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.17) + typescript: + specifier: ^5.2.0 + version: 5.9.2 + vite: + specifier: ^5.0.0 + version: 5.4.19(@types/node@20.19.10) + vue-tsc: + specifier: ^1.8.0 + version: 1.8.27(typescript@5.9.2) + +packages: + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.3': + resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.28.2': + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@fingerprintjs/fingerprintjs@4.6.2': + resolution: {integrity: sha512-g8mXuqcFKbgH2CZKwPfVtsUJDHyvcgIABQI7Y0tzWEFXpGxJaXuAuzlifT2oTakjDBLTK4Gaa9/5PERDhqUjtw==} + + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + + '@floating-ui/dom@1.7.3': + resolution: {integrity: sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==} + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + + '@floating-ui/vue@1.1.8': + resolution: {integrity: sha512-SNJAa1jbT8Gh1LvWw2uIIViLL0saV2bCY59ISCvJzhbut5DSb2H3LKUK49Xkd7SixTNHKX4LFu59nbwIXt9jjQ==} + + '@internationalized/date@3.8.2': + resolution: {integrity: sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==} + + '@internationalized/number@3.6.4': + resolution: {integrity: sha512-P+/h+RDaiX8EGt3shB9AYM1+QgkvHmJ5rKi4/59k4sg9g58k9rqsRW0WxRO7jCoHyvVbFRRFKmVTdFYdehrxHg==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.30': + resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@rollup/rollup-android-arm-eabi@4.46.2': + resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.46.2': + resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.46.2': + resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.46.2': + resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.46.2': + resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.46.2': + resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.46.2': + resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.46.2': + resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.46.2': + resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.46.2': + resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.46.2': + resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.46.2': + resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.46.2': + resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.46.2': + resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.46.2': + resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} + cpu: [x64] + os: [win32] + + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + + '@tanstack/virtual-core@3.13.12': + resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==} + + '@tanstack/vue-virtual@3.13.12': + resolution: {integrity: sha512-vhF7kEU9EXWXh+HdAwKJ2m3xaOnTTmgcdXcF2pim8g4GvI7eRrk2YRuV5nUlZnd/NbCIX4/Ja2OZu5EjJL06Ww==} + peerDependencies: + vue: ^2.7.0 || ^3.0.0 + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/node@20.19.10': + resolution: {integrity: sha512-iAFpG6DokED3roLSP0K+ybeDdIX6Bc0Vd3mLW5uDqThPWtNos3E+EqOM11mPQHKzfWHqEBuLjIlsBQQ8CsISmQ==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + '@vitejs/plugin-vue@5.2.4': + resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.2.25 + + '@volar/language-core@1.11.1': + resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} + + '@volar/source-map@1.11.1': + resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==} + + '@volar/typescript@1.11.1': + resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} + + '@vue/compiler-core@3.5.18': + resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==} + + '@vue/compiler-dom@3.5.18': + resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==} + + '@vue/compiler-sfc@3.5.18': + resolution: {integrity: sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==} + + '@vue/compiler-ssr@3.5.18': + resolution: {integrity: sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==} + + '@vue/language-core@1.8.27': + resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/reactivity@3.5.18': + resolution: {integrity: sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==} + + '@vue/runtime-core@3.5.18': + resolution: {integrity: sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==} + + '@vue/runtime-dom@3.5.18': + resolution: {integrity: sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==} + + '@vue/server-renderer@3.5.18': + resolution: {integrity: sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==} + peerDependencies: + vue: 3.5.18 + + '@vue/shared@3.5.18': + resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==} + + '@vueuse/core@10.11.1': + resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} + + '@vueuse/metadata@10.11.1': + resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} + + '@vueuse/shared@10.11.1': + resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + autoprefixer@10.4.21: + resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + axios@1.11.0: + resolution: {integrity: sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.25.2: + resolution: {integrity: sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + caniuse-lite@1.0.30001735: + resolution: {integrity: sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + computeds@0.0.1: + resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + electron-to-chromium@1.5.202: + resolution: {integrity: sha512-NxbYjRmiHcHXV1Ws3fWUW+SLb62isauajk45LUJ/HgIOkUA7jLZu/X2Iif+X9FBNK8QkF9Zb4Q2mcwXCcY30mg==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lucide-vue-next@0.294.0: + resolution: {integrity: sha512-bcUuGyLJoq9ExyozROMezdaczK2loP3emYb8PvS7HhZ56rUJVOv5hJgTmWfrfr8vJE7J69ImoMyPTwmUHF198w==} + peerDependencies: + vue: '>=3.0.1' + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + muggle-string@0.3.1: + resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanoid@5.1.5: + resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} + engines: {node: ^18 || >=20} + hasBin: true + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + radix-vue@1.9.17: + resolution: {integrity: sha512-mVCu7I2vXt1L2IUYHTt0sZMz7s1K2ZtqKeTIxG3yC5mMFfLBG4FtE1FDeRMpDd+Hhg/ybi9+iXmAP1ISREndoQ==} + peerDependencies: + vue: '>= 3.2.0' + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.46.2: + resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tailwind-merge@2.6.0: + resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + + tailwindcss-animate@1.0.7: + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} + engines: {node: '>=14.0.0'} + hasBin: true + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vite@5.4.19: + resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + 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 + + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-template-compiler@2.7.16: + resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} + + vue-tsc@1.8.27: + resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==} + hasBin: true + peerDependencies: + typescript: '*' + + vue@3.5.18: + resolution: {integrity: sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + engines: {node: '>= 14.6'} + hasBin: true + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/parser@7.28.3': + dependencies: + '@babel/types': 7.28.2 + + '@babel/types@7.28.2': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@fingerprintjs/fingerprintjs@4.6.2': + dependencies: + tslib: 2.8.1 + + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.3': + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/utils@0.2.10': {} + + '@floating-ui/vue@1.1.8(vue@3.5.18(typescript@5.9.2))': + dependencies: + '@floating-ui/dom': 1.7.3 + '@floating-ui/utils': 0.2.10 + vue-demi: 0.14.10(vue@3.5.18(typescript@5.9.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@internationalized/date@3.8.2': + dependencies: + '@swc/helpers': 0.5.17 + + '@internationalized/number@3.6.4': + dependencies: + '@swc/helpers': 0.5.17 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.30 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.30': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@rollup/rollup-android-arm-eabi@4.46.2': + optional: true + + '@rollup/rollup-android-arm64@4.46.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.46.2': + optional: true + + '@rollup/rollup-darwin-x64@4.46.2': + optional: true + + '@rollup/rollup-freebsd-arm64@4.46.2': + optional: true + + '@rollup/rollup-freebsd-x64@4.46.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.46.2': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.46.2': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-x64-musl@4.46.2': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.46.2': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.46.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.46.2': + optional: true + + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + + '@tanstack/virtual-core@3.13.12': {} + + '@tanstack/vue-virtual@3.13.12(vue@3.5.18(typescript@5.9.2))': + dependencies: + '@tanstack/virtual-core': 3.13.12 + vue: 3.5.18(typescript@5.9.2) + + '@types/estree@1.0.8': {} + + '@types/node@20.19.10': + dependencies: + undici-types: 6.21.0 + + '@types/web-bluetooth@0.0.20': {} + + '@vitejs/plugin-vue@5.2.4(vite@5.4.19(@types/node@20.19.10))(vue@3.5.18(typescript@5.9.2))': + dependencies: + vite: 5.4.19(@types/node@20.19.10) + vue: 3.5.18(typescript@5.9.2) + + '@volar/language-core@1.11.1': + dependencies: + '@volar/source-map': 1.11.1 + + '@volar/source-map@1.11.1': + dependencies: + muggle-string: 0.3.1 + + '@volar/typescript@1.11.1': + dependencies: + '@volar/language-core': 1.11.1 + path-browserify: 1.0.1 + + '@vue/compiler-core@3.5.18': + dependencies: + '@babel/parser': 7.28.3 + '@vue/shared': 3.5.18 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.18': + dependencies: + '@vue/compiler-core': 3.5.18 + '@vue/shared': 3.5.18 + + '@vue/compiler-sfc@3.5.18': + dependencies: + '@babel/parser': 7.28.3 + '@vue/compiler-core': 3.5.18 + '@vue/compiler-dom': 3.5.18 + '@vue/compiler-ssr': 3.5.18 + '@vue/shared': 3.5.18 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.5.6 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.18': + dependencies: + '@vue/compiler-dom': 3.5.18 + '@vue/shared': 3.5.18 + + '@vue/language-core@1.8.27(typescript@5.9.2)': + dependencies: + '@volar/language-core': 1.11.1 + '@volar/source-map': 1.11.1 + '@vue/compiler-dom': 3.5.18 + '@vue/shared': 3.5.18 + computeds: 0.0.1 + minimatch: 9.0.5 + muggle-string: 0.3.1 + path-browserify: 1.0.1 + vue-template-compiler: 2.7.16 + optionalDependencies: + typescript: 5.9.2 + + '@vue/reactivity@3.5.18': + dependencies: + '@vue/shared': 3.5.18 + + '@vue/runtime-core@3.5.18': + dependencies: + '@vue/reactivity': 3.5.18 + '@vue/shared': 3.5.18 + + '@vue/runtime-dom@3.5.18': + dependencies: + '@vue/reactivity': 3.5.18 + '@vue/runtime-core': 3.5.18 + '@vue/shared': 3.5.18 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.18(vue@3.5.18(typescript@5.9.2))': + dependencies: + '@vue/compiler-ssr': 3.5.18 + '@vue/shared': 3.5.18 + vue: 3.5.18(typescript@5.9.2) + + '@vue/shared@3.5.18': {} + + '@vueuse/core@10.11.1(vue@3.5.18(typescript@5.9.2))': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.11.1 + '@vueuse/shared': 10.11.1(vue@3.5.18(typescript@5.9.2)) + vue-demi: 0.14.10(vue@3.5.18(typescript@5.9.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@10.11.1': {} + + '@vueuse/shared@10.11.1(vue@3.5.18(typescript@5.9.2))': + dependencies: + vue-demi: 0.14.10(vue@3.5.18(typescript@5.9.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@5.0.2: {} + + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + + asynckit@0.4.0: {} + + autoprefixer@10.4.21(postcss@8.5.6): + dependencies: + browserslist: 4.25.2 + caniuse-lite: 1.0.30001735 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + axios@1.11.0: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.25.2: + dependencies: + caniuse-lite: 1.0.30001735 + electron-to-chromium: 1.5.202 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.25.2) + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + camelcase-css@2.0.1: {} + + caniuse-lite@1.0.30001735: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + clsx@2.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@4.1.1: {} + + computeds@0.0.1: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + csstype@3.1.3: {} + + de-indent@1.0.2: {} + + defu@6.1.4: {} + + delayed-stream@1.0.0: {} + + didyoumean@1.2.2: {} + + dlv@1.1.3: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + electron-to-chromium@1.5.202: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + entities@4.5.0: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + esbuild@0.21.5: + 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 + + escalade@3.2.0: {} + + estree-walker@2.0.2: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + follow-redirects@1.15.11: {} + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + fraction.js@4.3.7: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-intrinsic@1.3.0: + 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 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + gopd@1.2.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@1.21.7: {} + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + lru-cache@10.4.3: {} + + lucide-vue-next@0.294.0(vue@3.5.18(typescript@5.9.2)): + dependencies: + vue: 3.5.18(typescript@5.9.2) + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + math-intrinsics@1.1.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minipass@7.1.2: {} + + muggle-string@0.3.1: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.11: {} + + nanoid@5.1.5: {} + + node-releases@2.0.19: {} + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + package-json-from-dist@1.0.1: {} + + path-browserify@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pify@2.3.0: {} + + pirates@4.0.7: {} + + postcss-import@15.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.0.1(postcss@8.5.6): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.6 + + postcss-load-config@4.0.2(postcss@8.5.6): + dependencies: + lilconfig: 3.1.3 + yaml: 2.8.1 + optionalDependencies: + postcss: 8.5.6 + + postcss-nested@6.2.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + proxy-from-env@1.1.0: {} + + queue-microtask@1.2.3: {} + + radix-vue@1.9.17(vue@3.5.18(typescript@5.9.2)): + dependencies: + '@floating-ui/dom': 1.7.3 + '@floating-ui/vue': 1.1.8(vue@3.5.18(typescript@5.9.2)) + '@internationalized/date': 3.8.2 + '@internationalized/number': 3.6.4 + '@tanstack/vue-virtual': 3.13.12(vue@3.5.18(typescript@5.9.2)) + '@vueuse/core': 10.11.1(vue@3.5.18(typescript@5.9.2)) + '@vueuse/shared': 10.11.1(vue@3.5.18(typescript@5.9.2)) + aria-hidden: 1.2.6 + defu: 6.1.4 + fast-deep-equal: 3.1.3 + nanoid: 5.1.5 + vue: 3.5.18(typescript@5.9.2) + transitivePeerDependencies: + - '@vue/composition-api' + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.1.0: {} + + rollup@4.46.2: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.46.2 + '@rollup/rollup-android-arm64': 4.46.2 + '@rollup/rollup-darwin-arm64': 4.46.2 + '@rollup/rollup-darwin-x64': 4.46.2 + '@rollup/rollup-freebsd-arm64': 4.46.2 + '@rollup/rollup-freebsd-x64': 4.46.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 + '@rollup/rollup-linux-arm-musleabihf': 4.46.2 + '@rollup/rollup-linux-arm64-gnu': 4.46.2 + '@rollup/rollup-linux-arm64-musl': 4.46.2 + '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 + '@rollup/rollup-linux-ppc64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-musl': 4.46.2 + '@rollup/rollup-linux-s390x-gnu': 4.46.2 + '@rollup/rollup-linux-x64-gnu': 4.46.2 + '@rollup/rollup-linux-x64-musl': 4.46.2 + '@rollup/rollup-win32-arm64-msvc': 4.46.2 + '@rollup/rollup-win32-ia32-msvc': 4.46.2 + '@rollup/rollup-win32-x64-msvc': 4.46.2 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + semver@7.7.2: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@4.1.0: {} + + source-map-js@1.2.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + ts-interface-checker: 0.1.13 + + supports-preserve-symlinks-flag@1.0.0: {} + + tailwind-merge@2.6.0: {} + + tailwindcss-animate@1.0.7(tailwindcss@3.4.17): + dependencies: + tailwindcss: 3.4.17 + + tailwindcss@3.4.17: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-import: 15.1.0(postcss@8.5.6) + postcss-js: 4.0.1(postcss@8.5.6) + postcss-load-config: 4.0.2(postcss@8.5.6) + postcss-nested: 6.2.0(postcss@8.5.6) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-interface-checker@0.1.13: {} + + tslib@2.8.1: {} + + typescript@5.9.2: {} + + undici-types@6.21.0: {} + + update-browserslist-db@1.1.3(browserslist@4.25.2): + dependencies: + browserslist: 4.25.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + util-deprecate@1.0.2: {} + + vite@5.4.19(@types/node@20.19.10): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.6 + rollup: 4.46.2 + optionalDependencies: + '@types/node': 20.19.10 + fsevents: 2.3.3 + + vue-demi@0.14.10(vue@3.5.18(typescript@5.9.2)): + dependencies: + vue: 3.5.18(typescript@5.9.2) + + vue-template-compiler@2.7.16: + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + vue-tsc@1.8.27(typescript@5.9.2): + dependencies: + '@volar/typescript': 1.11.1 + '@vue/language-core': 1.8.27(typescript@5.9.2) + semver: 7.7.2 + typescript: 5.9.2 + + vue@3.5.18(typescript@5.9.2): + dependencies: + '@vue/compiler-dom': 3.5.18 + '@vue/compiler-sfc': 3.5.18 + '@vue/runtime-dom': 3.5.18 + '@vue/server-renderer': 3.5.18(vue@3.5.18(typescript@5.9.2)) + '@vue/shared': 3.5.18 + optionalDependencies: + typescript: 5.9.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + yaml@2.8.1: {} diff --git a/frontend/src/components/FileUpload.vue b/frontend/src/components/FileUpload.vue index 561c151..70cbf43 100644 --- a/frontend/src/components/FileUpload.vue +++ b/frontend/src/components/FileUpload.vue @@ -215,6 +215,12 @@ + + +
+

💬 Comments & Feedback

+ +
@@ -237,6 +243,7 @@ import Button from "@/components/ui/Button.vue"; import Card from "@/components/ui/Card.vue"; import Progress from "@/components/ui/Progress.vue"; import HistoryModal from "@/components/HistoryModal.vue"; +import GiscusComments from "@/components/GiscusComments.vue"; const CHUNK_SIZE = 10 * 1024 * 1024; // 10MB const MAX_CONCURRENT_UPLOADS = 3; diff --git a/frontend/src/components/GiscusComments.vue b/frontend/src/components/GiscusComments.vue new file mode 100644 index 0000000..a7850cc --- /dev/null +++ b/frontend/src/components/GiscusComments.vue @@ -0,0 +1,48 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/config/giscus.ts b/frontend/src/config/giscus.ts new file mode 100644 index 0000000..9121450 --- /dev/null +++ b/frontend/src/config/giscus.ts @@ -0,0 +1,49 @@ +// Giscus 评论系统配置 +export const giscusConfig = { + // 你的 GitHub 仓库,格式:用户名/仓库名 + repo: "bestk/tgState", + + // 仓库 ID (从 giscus.app 获取) + repoId: "R_kgDONBiMHA", + + // Discussion 分类 (从 giscus.app 获取) + category: "General", + + // Discussion 分类 ID (从 giscus.app 获取) + categoryId: "DIC_kwDONBiMHM4CuNL-", + + // 页面 ↔️ discussion 映射关系 + // 'pathname' - 使用页面路径 + // 'url' - 使用页面完整 URL + // 'title' - 使用页面标题 + // 'og:title' - 使用页面 og:title + mapping: "pathname" as const, + + // 是否启用严格标题匹配 + strict: false, + + // 是否启用 reactions + reactionsEnabled: true, + + // 是否发出 reactions + emitMetadata: false, + + // 输入框位置 + // 'top' - 在评论上方 + // 'bottom' - 在评论下方 + inputPosition: "top" as const, + + // 主题 + // 'light' - 浅色主题 + // 'dark' - 深色主题 + // 'preferred_color_scheme' - 跟随系统主题 + // 'transparent_dark' - 透明深色主题 + // 'dark_dimmed' - 暗淡深色主题 + theme: "light" as const, + + // 语言 + lang: "en" as const, + + // 是否启用评论系统 + enabled: true, +}; From 3776daebdf1da09db4211c489bc0af4843bdb39e Mon Sep 17 00:00:00 2001 From: bestk <1138493417@qq.com> Date: Fri, 15 Aug 2025 16:13:22 +0800 Subject: [PATCH 20/26] feat: add giscus --- .gitignore | 4 ++- frontend/.env.example | 12 +++++++++ frontend/src/config/giscus.ts | 46 +++++++++++++++++------------------ frontend/src/vite-env.d.ts | 20 +++++++++++++++ frontend/tsconfig.json | 1 + 5 files changed, 59 insertions(+), 24 deletions(-) create mode 100644 frontend/.env.example create mode 100644 frontend/src/vite-env.d.ts diff --git a/.gitignore b/.gitignore index c12d903..ecc479a 100644 --- a/.gitignore +++ b/.gitignore @@ -31,4 +31,6 @@ tmp/* __debug_bin.exe* -node_modules/ \ No newline at end of file +node_modules/ + +.env \ No newline at end of file diff --git a/frontend/.env.example b/frontend/.env.example new file mode 100644 index 0000000..9423817 --- /dev/null +++ b/frontend/.env.example @@ -0,0 +1,12 @@ +VITE_GISCUS_REPO=your-username/repo +VITE_GISCUS_REPO_ID=get from giscus.app +VITE_GISCUS_CATEGORY=General +VITE_GISCUS_CATEGORY_ID=DIC_kwDONBiMHM4CuNL- +VITE_GISCUS_MAPPING=pathname +VITE_GISCUS_STRICT=false +VITE_GISCUS_REACTIONS_ENABLED=true +VITE_GISCUS_EMIT_METADATA=false +VITE_GISCUS_INPUT_POSITION=top +VITE_GISCUS_THEME=light +VITE_GISCUS_LANG=en +VITE_GISCUS_ENABLED=true \ No newline at end of file diff --git a/frontend/src/config/giscus.ts b/frontend/src/config/giscus.ts index 9121450..fc95976 100644 --- a/frontend/src/config/giscus.ts +++ b/frontend/src/config/giscus.ts @@ -1,49 +1,49 @@ // Giscus 评论系统配置 export const giscusConfig = { // 你的 GitHub 仓库,格式:用户名/仓库名 - repo: "bestk/tgState", + repo: import.meta.env.VITE_GISCUS_REPO || 'your-username/repo', // 仓库 ID (从 giscus.app 获取) - repoId: "R_kgDONBiMHA", + repoId: import.meta.env.VITE_GISCUS_REPO_ID, // Discussion 分类 (从 giscus.app 获取) - category: "General", + category: import.meta.env.VITE_GISCUS_CATEGORY || "General", // Discussion 分类 ID (从 giscus.app 获取) - categoryId: "DIC_kwDONBiMHM4CuNL-", + categoryId: import.meta.env.VITE_GISCUS_CATEGORY_ID || "DIC_kwDONBiMHM4CuNL-", // 页面 ↔️ discussion 映射关系 - // 'pathname' - 使用页面路径 - // 'url' - 使用页面完整 URL - // 'title' - 使用页面标题 - // 'og:title' - 使用页面 og:title - mapping: "pathname" as const, + mapping: (import.meta.env.VITE_GISCUS_MAPPING || "pathname") as + | "pathname" + | "url" + | "title" + | "og:title", // 是否启用严格标题匹配 - strict: false, + strict: import.meta.env.VITE_GISCUS_STRICT === "true", // 是否启用 reactions - reactionsEnabled: true, + reactionsEnabled: import.meta.env.VITE_GISCUS_REACTIONS_ENABLED !== "false", // 是否发出 reactions - emitMetadata: false, + emitMetadata: import.meta.env.VITE_GISCUS_EMIT_METADATA === "true", // 输入框位置 - // 'top' - 在评论上方 - // 'bottom' - 在评论下方 - inputPosition: "top" as const, + inputPosition: (import.meta.env.VITE_GISCUS_INPUT_POSITION || "top") as + | "top" + | "bottom", // 主题 - // 'light' - 浅色主题 - // 'dark' - 深色主题 - // 'preferred_color_scheme' - 跟随系统主题 - // 'transparent_dark' - 透明深色主题 - // 'dark_dimmed' - 暗淡深色主题 - theme: "light" as const, + theme: (import.meta.env.VITE_GISCUS_THEME || "light") as + | "light" + | "dark" + | "preferred_color_scheme" + | "transparent_dark" + | "dark_dimmed", // 语言 - lang: "en" as const, + lang: (import.meta.env.VITE_GISCUS_LANG || "en") as string, // 是否启用评论系统 - enabled: true, + enabled: import.meta.env.VITE_GISCUS_ENABLED !== "false", }; diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts new file mode 100644 index 0000000..daa2258 --- /dev/null +++ b/frontend/src/vite-env.d.ts @@ -0,0 +1,20 @@ +/// + +interface ImportMetaEnv { + readonly VITE_GISCUS_REPO: string + readonly VITE_GISCUS_REPO_ID: string + readonly VITE_GISCUS_CATEGORY: string + readonly VITE_GISCUS_CATEGORY_ID: string + readonly VITE_GISCUS_MAPPING: string + readonly VITE_GISCUS_STRICT: string + readonly VITE_GISCUS_REACTIONS_ENABLED: string + readonly VITE_GISCUS_EMIT_METADATA: string + readonly VITE_GISCUS_INPUT_POSITION: string + readonly VITE_GISCUS_THEME: string + readonly VITE_GISCUS_LANG: string + readonly VITE_GISCUS_ENABLED: string +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} \ No newline at end of file diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index b68745b..4311465 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -27,5 +27,6 @@ } }, "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], + "types": ["vite/client"], "references": [{ "path": "./tsconfig.node.json" }] } \ No newline at end of file From 7fc7de5fed555a21c75c77d6d1f41c9ce4baaeab Mon Sep 17 00:00:00 2001 From: bestk <1138493417@qq.com> Date: Fri, 15 Aug 2025 16:17:45 +0800 Subject: [PATCH 21/26] feat: add giscus --- frontend/index.html | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/frontend/index.html b/frontend/index.html index 72c6b07..be6f08a 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -5,25 +5,11 @@ File Upload to Telegram - - - + +
- + \ No newline at end of file From e8713ae2f2df5cc68491578e6731e7698c178f0c Mon Sep 17 00:00:00 2001 From: bestk <1138493417@qq.com> Date: Fri, 15 Aug 2025 17:23:37 +0800 Subject: [PATCH 22/26] =?UTF-8?q?feat:=20=F0=9F=90=B1=20Cat=20in=20box?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/index.html | 12 +- frontend/src/components/Cat.vue | 109 +++++++++++++++++ frontend/src/components/FileUpload.vue | 161 +++++++++++++++---------- 3 files changed, 213 insertions(+), 69 deletions(-) create mode 100644 frontend/src/components/Cat.vue diff --git a/frontend/index.html b/frontend/index.html index be6f08a..55e192e 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -5,11 +5,17 @@ File Upload to Telegram - - + +
- \ No newline at end of file + diff --git a/frontend/src/components/Cat.vue b/frontend/src/components/Cat.vue new file mode 100644 index 0000000..594a1ad --- /dev/null +++ b/frontend/src/components/Cat.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/frontend/src/components/FileUpload.vue b/frontend/src/components/FileUpload.vue index 70cbf43..21c5b0a 100644 --- a/frontend/src/components/FileUpload.vue +++ b/frontend/src/components/FileUpload.vue @@ -1,5 +1,5 @@