From 79f23d13ad0dd0f4856fde0aeb9a54836cebf914 Mon Sep 17 00:00:00 2001 From: sky22333 Date: Sun, 12 Jul 2026 01:19:44 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=89=8D=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/demo/demo.png | Bin 0 -> 57698 bytes .github/demo/demo1.jpg | Bin 80952 -> 0 bytes .github/workflows/release.yml | 12 + .gitignore | 25 +- Dockerfile | 9 + README.md | 10 +- src/handlers/search.go | 20 +- src/main.go | 84 +- src/main_test.go | 29 +- src/public/favicon.ico | Bin 2092 -> 0 bytes src/public/images.html | 961 ---------------- src/public/index.html | 832 -------------- src/public/search.html | 1501 ------------------------ src/utils/ratelimiter.go | 5 +- web/.gitignore | 24 + web/README.md | 9 + web/index.html | 14 + web/package-lock.json | 1723 ++++++++++++++++++++++++++++ web/package.json | 34 + web/public/favicon.svg | 1 + web/public/icons.svg | 24 + web/src/App.vue | 14 + web/src/api.ts | 137 +++ web/src/components/AppShell.vue | 120 ++ web/src/components/PageHero.vue | 19 + web/src/components/ThemeToggle.vue | 28 + web/src/components/ui/Button.vue | 45 + web/src/components/ui/Input.vue | 28 + web/src/components/ui/Switch.vue | 40 + web/src/components/ui/Textarea.vue | 26 + web/src/fonts/syne-600.woff2.css | 29 + web/src/lib/utils.ts | 80 ++ web/src/main.ts | 10 + web/src/pages/HomePage.vue | 178 +++ web/src/pages/ImagesPage.vue | 176 +++ web/src/pages/SearchPage.vue | 400 +++++++ web/src/router/index.ts | 37 + web/src/style.css | 233 ++++ web/tsconfig.app.json | 18 + web/tsconfig.json | 13 + web/tsconfig.node.json | 23 + web/vite.config.ts | 23 + 42 files changed, 3641 insertions(+), 3353 deletions(-) create mode 100644 .github/demo/demo.png delete mode 100644 .github/demo/demo1.jpg delete mode 100644 src/public/favicon.ico delete mode 100644 src/public/images.html delete mode 100644 src/public/index.html delete mode 100644 src/public/search.html create mode 100644 web/.gitignore create mode 100644 web/README.md create mode 100644 web/index.html create mode 100644 web/package-lock.json create mode 100644 web/package.json create mode 100644 web/public/favicon.svg create mode 100644 web/public/icons.svg create mode 100644 web/src/App.vue create mode 100644 web/src/api.ts create mode 100644 web/src/components/AppShell.vue create mode 100644 web/src/components/PageHero.vue create mode 100644 web/src/components/ThemeToggle.vue create mode 100644 web/src/components/ui/Button.vue create mode 100644 web/src/components/ui/Input.vue create mode 100644 web/src/components/ui/Switch.vue create mode 100644 web/src/components/ui/Textarea.vue create mode 100644 web/src/fonts/syne-600.woff2.css create mode 100644 web/src/lib/utils.ts create mode 100644 web/src/main.ts create mode 100644 web/src/pages/HomePage.vue create mode 100644 web/src/pages/ImagesPage.vue create mode 100644 web/src/pages/SearchPage.vue create mode 100644 web/src/router/index.ts create mode 100644 web/src/style.css create mode 100644 web/tsconfig.app.json create mode 100644 web/tsconfig.json create mode 100644 web/tsconfig.node.json create mode 100644 web/vite.config.ts diff --git a/.github/demo/demo.png b/.github/demo/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..4dbcaee676d54259c537e27a7e4349f98620b3b0 GIT binary patch literal 57698 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 literal 0 HcmV?d00001 diff --git a/.github/demo/demo1.jpg b/.github/demo/demo1.jpg deleted file mode 100644 index 099a4e9185543c1df7226985fd632a8d7bb4f056..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80952 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 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 25ef135..d3d2133 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,6 +25,18 @@ jobs: with: go-version-file: "src/go.mod" cache-dependency-path: "src/go.sum" + + - name: 设置 Node.js + uses: actions/setup-node@v6 + with: + node-version-file: web/package.json + cache-dependency-path: web/package-lock.json + + - name: 构建前端 + run: | + cd web + npm ci + npm run build - name: 获取版本号 id: version diff --git a/.gitignore b/.gitignore index f26d439..d9dfbad 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,26 @@ -.idea -.vscode +# IDE / OS +.idea/ +.vscode/ .DS_Store + +# Go build artifacts /hubproxy* *.exe +build/ + +# Frontend (web/) +web/node_modules/ +web/dist/ +web/dist-ssr/ +web/.tmp/ +web/*.local +web/npm-debug.log* +web/yarn-debug.log* +web/yarn-error.log* +web/pnpm-debug.log* + +# Frontend build output embedded by Go +src/dist/ + +# Logs +*.log diff --git a/Dockerfile b/Dockerfile index f81133b..b84d41b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,11 @@ +FROM node:24-alpine AS frontend + +WORKDIR /web +COPY web/package.json web/package-lock.json ./ +RUN npm ci +COPY web/ . +RUN npm run build + FROM golang:1.26-alpine AS builder ARG TARGETARCH @@ -8,6 +16,7 @@ COPY src/go.mod src/go.sum ./ RUN apk add --no-cache upx && go mod download COPY src/ . +COPY --from=frontend /src/dist ./dist RUN CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETARCH} go build -ldflags="-s -w -X main.Version=${VERSION}" -trimpath -o hubproxy . && upx -9 hubproxy diff --git a/README.md b/README.md index 87f892d..ae88cef 100644 --- a/README.md +++ b/README.md @@ -165,7 +165,7 @@ port = 5000 fileSize = 2147483648 # HTTP/2 多路复用,提升下载速度 enableH2C = false -# 是否启用前端静态页面 +# 是否启用前端页面(Vue SPA) enableFrontend = true [rateLimit] @@ -262,7 +262,7 @@ CONFIG_PATH=config.toml # 配置文件路径 SERVER_HOST=0.0.0.0 # 监听地址 SERVER_PORT=5000 # 监听端口 ENABLE_H2C=false # 是否启用 H2C -ENABLE_FRONTEND=true # 是否启用前端静态页面 +ENABLE_FRONTEND=true # 是否启用前端页面(Vue SPA) MAX_FILE_SIZE=2147483648 # GitHub 文件大小限制(字节) RATE_LIMIT=500 # 每周期请求数 RATE_PERIOD_HOURS=3 # 限流周期(小时) @@ -314,8 +314,4 @@ example.com { ## 界面预览 -![1](./.github/demo/demo1.jpg) - -## Star History - -[![Star History Chart](https://api.star-history.com/chart?repos=sky22333/hubproxy&type=date&legend=top-left)](https://www.star-history.com/?repos=sky22333%2Fhubproxy&type=date&legend=top-left) +![demo](.github/demo/demo.png) diff --git a/src/handlers/search.go b/src/handlers/search.go index f00d267..9d3a5dd 100644 --- a/src/handlers/search.go +++ b/src/handlers/search.go @@ -466,9 +466,9 @@ func sendErrorResponse(c *gin.Context, message string) { c.JSON(http.StatusBadRequest, gin.H{"error": message}) } -// RegisterSearchRoute 注册搜索相关路由 +// RegisterSearchRoute 注册搜索与标签相关 API 路由。 func RegisterSearchRoute(r *gin.Engine) { - r.GET("/search", func(c *gin.Context) { + r.GET("/api/search", func(c *gin.Context) { query := c.Query("q") if query == "" { sendErrorResponse(c, "搜索关键词不能为空") @@ -486,7 +486,7 @@ func RegisterSearchRoute(r *gin.Engine) { c.JSON(http.StatusOK, result) }) - r.GET("/tags/:namespace/:name", func(c *gin.Context) { + r.GET("/api/tags/:namespace/:name", func(c *gin.Context) { namespace := c.Param("namespace") name := c.Param("name") @@ -503,15 +503,9 @@ func RegisterSearchRoute(r *gin.Engine) { return } - if c.Query("page") != "" || c.Query("page_size") != "" { - c.JSON(http.StatusOK, gin.H{ - "tags": tags, - "has_more": hasMore, - "page": page, - "page_size": pageSize, - }) - } else { - c.JSON(http.StatusOK, tags) - } + c.JSON(http.StatusOK, TagPageResult{ + Tags: tags, + HasMore: hasMore, + }) }) } diff --git a/src/main.go b/src/main.go index d757d59..cd542cb 100644 --- a/src/main.go +++ b/src/main.go @@ -4,7 +4,9 @@ import ( "embed" "fmt" "log" + "mime" "net/http" + "path" "strings" "time" @@ -16,7 +18,7 @@ import ( "hubproxy/utils" ) -//go:embed public/* +//go:embed all:dist var staticFiles embed.FS var ( @@ -26,18 +28,63 @@ var ( var Version = "dev" +func init() { + for ext, typ := range map[string]string{ + ".js": "application/javascript; charset=utf-8", + ".mjs": "application/javascript; charset=utf-8", + ".woff": "font/woff", + ".woff2": "font/woff2", + ".map": "application/json", + } { + _ = mime.AddExtensionType(ext, typ) + } +} + +func contentTypeFor(filename string) string { + if ct := mime.TypeByExtension(path.Ext(filename)); ct != "" { + return ct + } + return "application/octet-stream" +} + func serveEmbedFile(c *gin.Context, filename string) { data, err := staticFiles.ReadFile(filename) if err != nil { c.Status(http.StatusNotFound) return } + c.Data(http.StatusOK, contentTypeFor(filename), data) +} - contentType := "text/html; charset=utf-8" - if strings.HasSuffix(filename, ".ico") { - contentType = "image/x-icon" +func serveSPA(c *gin.Context) { + serveEmbedFile(c, "dist/index.html") +} + +func registerFrontendRoutes(router *gin.Engine, enabled bool) { + if !enabled { + notFound := func(c *gin.Context) { c.Status(http.StatusNotFound) } + router.GET("/", notFound) + router.GET("/images", notFound) + router.GET("/search", notFound) + router.GET("/assets/*filepath", notFound) + router.GET("/favicon.svg", notFound) + return } - c.Data(http.StatusOK, contentType, data) + + router.GET("/", serveSPA) + router.GET("/images", serveSPA) + router.GET("/search", serveSPA) + router.GET("/favicon.svg", func(c *gin.Context) { + serveEmbedFile(c, "dist/favicon.svg") + }) + router.GET("/assets/*filepath", func(c *gin.Context) { + filepath := strings.TrimPrefix(c.Param("filepath"), "/") + if filepath == "" || strings.Contains(filepath, "..") { + c.Status(http.StatusNotFound) + return + } + serveEmbedFile(c, path.Join("dist/assets", filepath)) + }) } func buildRouter(cfg *config.AppConfig) *gin.Engine { @@ -56,32 +103,7 @@ func buildRouter(cfg *config.AppConfig) *gin.Engine { initHealthRoutes(router) handlers.InitImageTarRoutes(router) - - if cfg.Server.EnableFrontend { - router.GET("/", func(c *gin.Context) { - serveEmbedFile(c, "public/index.html") - }) - router.GET("/public/*filepath", func(c *gin.Context) { - filepath := strings.TrimPrefix(c.Param("filepath"), "/") - serveEmbedFile(c, "public/"+filepath) - }) - router.GET("/images.html", func(c *gin.Context) { - serveEmbedFile(c, "public/images.html") - }) - router.GET("/search.html", func(c *gin.Context) { - serveEmbedFile(c, "public/search.html") - }) - router.GET("/favicon.ico", func(c *gin.Context) { - serveEmbedFile(c, "public/favicon.ico") - }) - } else { - router.GET("/", func(c *gin.Context) { c.Status(http.StatusNotFound) }) - router.GET("/public/*filepath", func(c *gin.Context) { c.Status(http.StatusNotFound) }) - router.GET("/images.html", func(c *gin.Context) { c.Status(http.StatusNotFound) }) - router.GET("/search.html", func(c *gin.Context) { c.Status(http.StatusNotFound) }) - router.GET("/favicon.ico", func(c *gin.Context) { c.Status(http.StatusNotFound) }) - } - + registerFrontendRoutes(router, cfg.Server.EnableFrontend) handlers.RegisterSearchRoute(router) router.Any("/token", handlers.ProxyDockerAuthGin) diff --git a/src/main_test.go b/src/main_test.go index 378a19c..be5952f 100644 --- a/src/main_test.go +++ b/src/main_test.go @@ -71,7 +71,7 @@ func TestFrontendDisabledRoutesReturnNotFound(t *testing.T) { enableFrontend = false `) - for _, path := range []string{"/", "/images.html", "/search.html", "/favicon.ico"} { + for _, path := range []string{"/", "/images", "/search", "/favicon.svg"} { w := performRequest(router, http.MethodGet, path, "") if w.Code != http.StatusNotFound { t.Fatalf("%s status = %d, want 404", path, w.Code) @@ -157,10 +157,13 @@ func TestDockerV2PingAndInvalidPath(t *testing.T) { } } -func TestSearchRouteRejectsMissingQuery(t *testing.T) { - router := newTestRouter(t, "") +func TestSearchAPIRejectsMissingQuery(t *testing.T) { + router := newTestRouter(t, ` +[server] +enableFrontend = false +`) - w := performRequest(router, http.MethodGet, "/search", "") + w := performRequest(router, http.MethodGet, "/api/search", "") if w.Code != http.StatusBadRequest { t.Fatalf("status = %d, want 400; body=%s", w.Code, w.Body.String()) } @@ -173,3 +176,21 @@ func TestSearchRouteRejectsMissingQuery(t *testing.T) { t.Fatalf("missing error response: %#v", got) } } + +func TestSearchServesSPAWhenFrontendEnabled(t *testing.T) { + router := newTestRouter(t, ` +[server] +enableFrontend = true +`) + + w := performRequest(router, http.MethodGet, "/search?q=nginx", "") + if w.Code != http.StatusOK { + t.Fatalf("status = %d, want 200; body=%s", w.Code, w.Body.String()) + } + if !strings.Contains(w.Header().Get("Content-Type"), "text/html") { + t.Fatalf("content-type = %q, want text/html", w.Header().Get("Content-Type")) + } + if !strings.Contains(w.Body.String(), `

`) { + t.Fatalf("SPA shell missing: %s", w.Body.String()) + } +} diff --git a/src/public/favicon.ico b/src/public/favicon.ico deleted file mode 100644 index 1ead7d63ee12249f8fc59a3d5daf02a3cdc51bba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2092 zcmV+{2-Ek8P)2D!_9fs*{!i&jWpdW`%BK+-L+`1-t?5a%6Oq z)Bsa}?m!6*m=?fDU`-y3u9LOEV4x`tY?!%Q#&Itu@~b=ys%}Nib-?Br7~IpyI-n0l zNIT$T%L#M^FbxTAJj=SfM%Lp| z>=BgDe=P84y)yUu^f{@HTW#nBwd2nl>Pfv6I6Z`p;fBU6avaN5vE{D}&psg{4Ml+W~&@3a=5Q?7Ep4mgzQcFUWhcCif76s%G~g0j+w zVKTm>gFZi7R}RW|{d`u%D}r!^LD%g>$Wl$AD*6w0kt8#fTk6dR{*IEv2y8X*oTzifbN zmC)!6ru^(S?2dt?(oq3qfu^q zt}0uit{0=DN;Wjr=u@@}jqZuH%?eu(14DZb151eG&E*?)7&|n|RjAO0F)=W-rxA5{ z(1sH<`hLd&8#T(yL%5;6m~O;Qwro>ZjZWok49#-K%TQA|&nuv)(=xW4tI??fHldmC zcq5jnaBU2XUe|GUPRQf8+4O#j114&e-xX5tYcVio z42-`b#DXHjI~v_Xa6s<}+|e0M1hy2=_*KEZd|e zKWB=E%N-I2ER23YHbNBEOk6wQ?0UnZ%40o)1kuIETUFdicD<%`1>>lDi*@nx>L&vMB}zubU$}I%ylPur!ei z?h5@wZo?Y-&l{G=O(m1_;1A0DO4Bs?aiKW>m_$KnCY!VIvMjZ^uCl(=iVI|d{AOi? ze%galCRe^xhymwGcyYZ1gZ7F0pjxsus^li$NpkT - - - - - - - - Docker离线镜像下载 - - - - - - -
-
-
-

Docker离线镜像下载

-

即点即下,无需等待打包,完全符合docker load加载标准

- -
-
- - 即时下载 -
-
- 🔄 - 流式传输 -
-
- 💾 - 无需等待 -
-
- 🏗️ - 多架构支持 -
-
-
- -
-

单镜像下载

- -
- -
-
- - -
- -
- - -
- 常用平台: linux/amd64, linux/arm64, linux/arm/v7 -
-
- -
- - -
- - -
-
- -
-

多个镜像批量下载

- -
- -
-
- - -
- -
- - -
- 所有镜像将使用相同的目标架构 -
-
- -
- - -
- - -
-
-
-
- - - - diff --git a/src/public/index.html b/src/public/index.html deleted file mode 100644 index beec1e9..0000000 --- a/src/public/index.html +++ /dev/null @@ -1,832 +0,0 @@ - - - - - - - - - Github、Docker加速 - - - - - - - -
-
-
-

GitHub 文件加速

-

- 快速下载GitHub上的文件和仓库,解决国内访问GitHub速度慢的问题,支持Docker镜像加速和Hugging Face仓库。 -

-
- -
-
-

- ⚡ 快速转换加速链接 -

-

- 输入GitHub文件链接,自动转换加速链接,可以直接在Github文件链接前加上本站域名使用。 -

-
- -
-
- - -
-
- -
-
- - 加速链接已生成 -
-
-
- - -
-
-
- -
-
-

- 🐳 Docker 镜像加速 -

-

- 支持多种镜像仓库,在镜像名称前添加本站域名即可加速下载。 -

-
- - -
-
-
- - - -
- 链接已复制到剪贴板 -
- - - - - - - diff --git a/src/public/search.html b/src/public/search.html deleted file mode 100644 index 7bf6d6a..0000000 --- a/src/public/search.html +++ /dev/null @@ -1,1501 +0,0 @@ - - - - - - - - - Docker镜像搜索 - - - - - - -
-
-

Docker镜像搜索

- -
-
- -
- -
-
-
- -
-
-

正在加载...

-
- - - -
-
- - -
- -
-
- -
- -
- - diff --git a/src/utils/ratelimiter.go b/src/utils/ratelimiter.go index 3512cc9..4741e40 100644 --- a/src/utils/ratelimiter.go +++ b/src/utils/ratelimiter.go @@ -212,8 +212,9 @@ func (i *IPRateLimiter) GetLimiter(ip string) (*rate.Limiter, bool) { func RateLimitMiddleware(limiter *IPRateLimiter) gin.HandlerFunc { return func(c *gin.Context) { path := c.Request.URL.Path - if path == "/" || path == "/favicon.ico" || path == "/images.html" || path == "/search.html" || - strings.HasPrefix(path, "/public/") { + if path == "/" || path == "/images" || path == "/search" || + path == "/favicon.svg" || + strings.HasPrefix(path, "/assets/") { c.Next() return } diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/web/README.md b/web/README.md new file mode 100644 index 0000000..fd3547d --- /dev/null +++ b/web/README.md @@ -0,0 +1,9 @@ +# HubProxy Web + +Vue 3 + Vite + Tailwind 前端。 + +```bash +npm install +npm run dev # 代理到 :5000 +npm run build # 输出到 ../src/dist +``` diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..e1ede59 --- /dev/null +++ b/web/index.html @@ -0,0 +1,14 @@ + + + + + + + + HubProxy + + +
+ + + diff --git a/web/package-lock.json b/web/package-lock.json new file mode 100644 index 0000000..e2282fa --- /dev/null +++ b/web/package-lock.json @@ -0,0 +1,1723 @@ +{ + "name": "web", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "web", + "version": "0.0.0", + "dependencies": { + "@fontsource-variable/manrope": "^5.2.8", + "@fontsource/syne": "^5.2.7", + "clsx": "^2.1.1", + "lucide-vue-next": "^0.577.0", + "tailwind-merge": "^3.6.0", + "vue": "^3.5.39", + "vue-router": "^4.6.4" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.3.2", + "@types/node": "^24.13.2", + "@vitejs/plugin-vue": "^6.0.7", + "@vue/tsconfig": "^0.9.1", + "tailwindcss": "^4.3.2", + "typescript": "~6.0.2", + "vite": "^8.1.1", + "vue-tsc": "^3.3.5" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@fontsource-variable/manrope": { + "version": "5.2.8", + "resolved": "https://registry.npmmirror.com/@fontsource-variable/manrope/-/manrope-5.2.8.tgz", + "integrity": "sha512-nc9lOuCRz73UHnovDE2bwXUdghE2SEOc7Aii0qGe3CLyE03W1a7VnY5Z6euRiapiKbCkGS+eXbY3s/kvWeGeSw==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/syne": { + "version": "5.2.7", + "resolved": "https://registry.npmmirror.com/@fontsource/syne/-/syne-5.2.7.tgz", + "integrity": "sha512-OgWgLPSbieiSfdFXgMs0l/rspIFzVoDZxw8wKj15n39epRqO5+Uv36c0MXNDcw2GuK/TIBgpC9G8VAgs+bVm7A==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "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, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@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, + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.139.0", + "resolved": "https://registry.npmmirror.com/@oxc-project/types/-/types-0.139.0.tgz", + "integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz", + "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz", + "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz", + "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz", + "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz", + "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz", + "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz", + "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz", + "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz", + "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz", + "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz", + "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz", + "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz", + "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz", + "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.5.tgz", + "integrity": "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/node/-/node-4.3.2.tgz", + "integrity": "sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "5.21.6", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.2" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide/-/oxide-4.3.2.tgz", + "integrity": "sha512-z8ZgnzX8gdNoWLBLqBPoh/sjnxkwvf9ZuWjnO0l0yIzbLa5/9S+eC5QxGZKRobVHIC3/1BoMWjHblqWjcgFgag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.2", + "@tailwindcss/oxide-darwin-arm64": "4.3.2", + "@tailwindcss/oxide-darwin-x64": "4.3.2", + "@tailwindcss/oxide-freebsd-x64": "4.3.2", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.2", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.2", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.2", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.2", + "@tailwindcss/oxide-linux-x64-musl": "4.3.2", + "@tailwindcss/oxide-wasm32-wasi": "4.3.2", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.2", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.2" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.2.tgz", + "integrity": "sha512-WHxqIuHpvZ5VtdX6GTl1Ik/Vp2YuN42Et+0CdeaVd/frQ9jAvGmvR8vLT+jk3e8/Q3x8kECB9+R17pgpp2BulA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.2.tgz", + "integrity": "sha512-GZypeUY/IDJW3877KeM+O67vbXr3MBnbtEL4aYhNErv/JWZhye2vGSWWG9tB6iiqR2MqRNkY8IOUy4NdSZV26w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.2.tgz", + "integrity": "sha512-UIIzmefR6KO1sDU7MzRqAxC8iBpft/VhkGjTjnhoS6k7Z3rQ9wEgA1ODSiyH/tcSYssulNm4Ci3hOeK1jH7ccQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.2.tgz", + "integrity": "sha512-GN+uAmcI6DNspnCDwtOAZrTz6oukJnp337qZvxqCGLd3BHBzJpO0ZbTLRvJNdztOeAmTzewewGIMPb0tk2R4WA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.2.tgz", + "integrity": "sha512-4ABn7qSbdHRwTiDiuWNegCyb5+2FJ4vKIKc3DmKrvAFw7MU1Lm11dIkTPwUaFdTzc7IsOpDbqBrlh0x6y36U/w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.2.tgz", + "integrity": "sha512-wDgEIGwoM8w8pufh9LVt1PahDgNdKXrLC2qfAnV3vAmococ9RWbxeAw4pxPttd/TsJfwjyLf90Dg1y9y8I6Emw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.2.tgz", + "integrity": "sha512-J5Nuk0uZQIiMTJj3LEx4sAA9tMFUoXQZFv1J6An+QGYe53HKRJuFDi0rpq/tuouCZeAbOBY3kQ6g8qeD4TUjtA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.2.tgz", + "integrity": "sha512-kqCZpSKOBEJO4mz7OqWoofBZeXTAwaVGPj0ErAj7CojmhKpWVWVOnrt9dE8odoIraZq4oj3ausM37kXi+Tow8w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.2.tgz", + "integrity": "sha512-cixpqbh2toJDmkuCRI68nXA8ZxNmdK9Y+9v5h3MC3ZQKy/0BO8AWzlkWyRM7JAFSGBlfig4YVTPsK6MVgqz1uw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.2.tgz", + "integrity": "sha512-4ec2Z/LOmRsAgU23CS4xeJfcJlmRg94A/XrbGRCF1gyU/zdDfRLYDVsS+ynSZCmGNxQ1jQriQOKMQeQxBA3Isw==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.2.tgz", + "integrity": "sha512-Zyr/M0+XcYZu3bZrUytc7TXvrk0ftWfl8gN2MwekNDzhqhKRUucMPSeOzM0o0wH5AWOU49BsKRrfKxI2atCPMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.2.tgz", + "integrity": "sha512-QI9BO7KlNZsp2GuO0jwAAj5jCDABOKXRkCk2XuKTSaNEFSdfzqswYVTtCHBNKHLsqyjFyFkqlDiwkNbTYSssMQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/@tailwindcss/vite/-/vite-4.3.2.tgz", + "integrity": "sha512-eHpMeX4JXfVNJDEcsouTeCBubJBTcTLigeaw/NTUW6PB5ATKKXdyonnXgTBX2VuRbjz1hjfz6C5XAhr52ImQXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.3.2", + "@tailwindcss/oxide": "4.3.2", + "tailwindcss": "4.3.2" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmmirror.com/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/node": { + "version": "24.13.3", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-24.13.3.tgz", + "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.7", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-6.0.7.tgz", + "integrity": "sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.28", + "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-2.4.28.tgz", + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.39", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.39.tgz", + "integrity": "sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@vue/shared": "3.5.39", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.39", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.39.tgz", + "integrity": "sha512-oQPigALqYbNxTNPvNgSOe+czwVExfbVF02lz8jP0S3AXJiu3jxYDygNUiqSep4ezzW8XgnubqH63My2A7JR/vg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.39", + "@vue/shared": "3.5.39" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.39", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.39.tgz", + "integrity": "sha512-d0ki86iOyN8LoZPBmk5SJWNwHP19CnDDCfuo//+2WJa2g5Ke0Jay983PIBIcSSzldC68I8DrD5GrHV3OSDfodg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@vue/compiler-core": "3.5.39", + "@vue/compiler-dom": "3.5.39", + "@vue/compiler-ssr": "3.5.39", + "@vue/shared": "3.5.39", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.15", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.39", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.39.tgz", + "integrity": "sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.39", + "@vue/shared": "3.5.39" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/language-core": { + "version": "3.3.7", + "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-3.3.7.tgz", + "integrity": "sha512-LzmkKinXAMMoh8Jfi/jMUSDUjuPdv8mynH5WJGKfXyZtDw3hQ6GBaoI6Bcnl/Xqlu32q/0Z6i/trp4VXykzyLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.2.1", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.4" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.39", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.39.tgz", + "integrity": "sha512-TpsuBJ9gGlZa5d23XcM2y8EXanz9dZeVDQBXRwzy46ItgvM+rWpzs+UVM0wcRLxGvcav0HE5jz2gNL53xlRAog==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.39" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.39", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.39.tgz", + "integrity": "sha512-9GLtNyRvPAUMbX+7ono0RC2j0guo2LXVi8LvcmAooImACUKm0oFf0jjwbX8/H0AE/t1nxhAkn8RSl9PMCzzxZw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.39", + "@vue/shared": "3.5.39" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.39", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.39.tgz", + "integrity": "sha512-7Y6aAGboKcXAZ3ECuUy7RrS5yy2r47dhTp2SKaJmYxjopImaVFaNa5Ne66NwGovsrxVAl5S5rwc7m22UG7Lmww==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.39", + "@vue/runtime-core": "3.5.39", + "@vue/shared": "3.5.39", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.39", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.39.tgz", + "integrity": "sha512-yZSakiAGw85rZfG7UM8akMnIF+FmeiNk47uvHf2nVBBSe+dIKUhZuZq9+XgJhbV3nS5Z4ALH23/MpXofW+mbcw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.39", + "@vue/shared": "3.5.39" + }, + "peerDependencies": { + "vue": "3.5.39" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.39", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.39.tgz", + "integrity": "sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==", + "license": "MIT" + }, + "node_modules/@vue/tsconfig": { + "version": "0.9.1", + "resolved": "https://registry.npmmirror.com/@vue/tsconfig/-/tsconfig-0.9.1.tgz", + "integrity": "sha512-buvjm+9NzLCJL29KY1j1991YYJ5e6275OiK+G4jtmfIb+z4POywbdm0wXusT9adVWqe0xqg70TbI7+mRx4uU9w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">= 5.8", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/alien-signals": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/alien-signals/-/alien-signals-3.2.1.tgz", + "integrity": "sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==", + "dev": true, + "license": "MIT" + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.21.6", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.21.6.tgz", + "integrity": "sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmmirror.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lucide-vue-next": { + "version": "0.577.0", + "resolved": "https://registry.npmmirror.com/lucide-vue-next/-/lucide-vue-next-0.577.0.tgz", + "integrity": "sha512-py05bAfv9SHVJqscbiOnjcnLlEmOffA58a+7XhZuFxrs6txe1E8VoR1ngWGTYO+9aVKABAz8l3ee3PqiQN9QPA==", + "license": "ISC", + "peerDependencies": { + "vue": ">=3.0.1" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.16", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.16.tgz", + "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rolldown": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/rolldown/-/rolldown-1.1.5.tgz", + "integrity": "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.139.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.5", + "@rolldown/binding-darwin-arm64": "1.1.5", + "@rolldown/binding-darwin-x64": "1.1.5", + "@rolldown/binding-freebsd-x64": "1.1.5", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", + "@rolldown/binding-linux-arm64-gnu": "1.1.5", + "@rolldown/binding-linux-arm64-musl": "1.1.5", + "@rolldown/binding-linux-ppc64-gnu": "1.1.5", + "@rolldown/binding-linux-s390x-gnu": "1.1.5", + "@rolldown/binding-linux-x64-gnu": "1.1.5", + "@rolldown/binding-linux-x64-musl": "1.1.5", + "@rolldown/binding-openharmony-arm64": "1.1.5", + "@rolldown/binding-wasm32-wasi": "1.1.5", + "@rolldown/binding-win32-arm64-msvc": "1.1.5", + "@rolldown/binding-win32-x64-msvc": "1.1.5" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tailwind-merge": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/tailwind-merge/-/tailwind-merge-3.6.0.tgz", + "integrity": "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-4.3.2.tgz", + "integrity": "sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "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==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.1.4", + "resolved": "https://registry.npmmirror.com/vite/-/vite-8.1.4.tgz", + "integrity": "sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.16", + "rolldown": "~1.1.4", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.3.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.39", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.39.tgz", + "integrity": "sha512-xmZCYabFGcirU8r0fTuvl/LICc1OU620rnqepaJDL/a141ZigkG7AyaxQLdqJ02ZRYzWe6YPaDHeQx7MfknQfA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.39", + "@vue/compiler-sfc": "3.5.39", + "@vue/runtime-dom": "3.5.39", + "@vue/server-renderer": "3.5.39", + "@vue/shared": "3.5.39" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.6.4", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.6.4.tgz", + "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/vue-tsc": { + "version": "3.3.7", + "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-3.3.7.tgz", + "integrity": "sha512-+C+rgD49wAQ5bUTl2sp5a8Bzg4YoldMNXM+g7CFe604MYcQ8PrZPMQhIjJSzKXtPBCa+C5ayMipqjbA7splekQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.28", + "@vue/language-core": "3.3.7" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + } + } +} diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..243ac2a --- /dev/null +++ b/web/package.json @@ -0,0 +1,34 @@ +{ + "name": "web", + "private": true, + "version": "0.0.0", + "type": "module", + "packageManager": "npm@11.12.1", + "engines": { + "node": ">=24" + }, + "scripts": { + "dev": "vite", + "build": "vue-tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@fontsource-variable/manrope": "^5.2.8", + "@fontsource/syne": "^5.2.7", + "clsx": "^2.1.1", + "lucide-vue-next": "^0.577.0", + "tailwind-merge": "^3.6.0", + "vue": "^3.5.39", + "vue-router": "^4.6.4" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.3.2", + "@types/node": "^24.13.2", + "@vitejs/plugin-vue": "^6.0.7", + "@vue/tsconfig": "^0.9.1", + "tailwindcss": "^4.3.2", + "typescript": "~6.0.2", + "vite": "^8.1.1", + "vue-tsc": "^3.3.5" + } +} diff --git a/web/public/favicon.svg b/web/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/web/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/icons.svg b/web/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/web/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/src/App.vue b/web/src/App.vue new file mode 100644 index 0000000..bcd4d75 --- /dev/null +++ b/web/src/App.vue @@ -0,0 +1,14 @@ + + + diff --git a/web/src/api.ts b/web/src/api.ts new file mode 100644 index 0000000..e508a80 --- /dev/null +++ b/web/src/api.ts @@ -0,0 +1,137 @@ +class ApiError extends Error { + status: number + + constructor(message: string, status: number) { + super(message) + this.name = 'ApiError' + this.status = status + } +} + +async function parseError(res: Response): Promise { + const contentType = res.headers.get('Content-Type') || '' + if (contentType.includes('application/json')) { + try { + const data = (await res.json()) as { error?: string; message?: string } + return data.error || data.message || `请求失败 (${res.status})` + } catch { + return `请求失败 (${res.status})` + } + } + try { + const text = await res.text() + return text || `请求失败 (${res.status})` + } catch { + return `请求失败 (${res.status})` + } +} + +async function getJSON(url: string, init?: RequestInit): Promise { + const res = await fetch(url, { + ...init, + headers: { + Accept: 'application/json', + ...(init?.headers || {}), + }, + cache: 'no-store', + }) + if (!res.ok) throw new ApiError(await parseError(res), res.status) + return (await res.json()) as T +} + +export interface PrepareDownloadResponse { + download_url: string +} + +export interface ImageInfoResponse { + success: boolean +} + +export interface Repository { + repo_name?: string + short_description?: string + is_official?: boolean + star_count?: number + pull_count?: number + namespace?: string +} + +export interface SearchResponse { + count: number + results: Repository[] +} + +export interface TagInfo { + name: string + last_updated?: string + full_size?: number + images?: Array<{ + architecture?: string + os?: string + variant?: string + size?: number + }> +} + +export interface TagPageResult { + tags: TagInfo[] + has_more: boolean +} + +export function prepareSingleDownload(params: { + image: string + platform?: string + compressed: boolean +}) { + const q = new URLSearchParams() + q.set('image', params.image) + q.set('mode', 'prepare') + q.set('compressed', String(params.compressed)) + if (params.platform?.trim()) q.set('platform', params.platform.trim()) + return getJSON(`/api/image/download?${q}`) +} + +export function fetchImageInfo(image: string) { + const q = new URLSearchParams({ image }) + return getJSON(`/api/image/info?${q}`) +} + +export function prepareBatchDownload(body: { + images: string[] + platform?: string + useCompressedLayers: boolean +}) { + return getJSON('/api/image/batch?mode=prepare', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(body), + }) +} + +export function searchImages(q: string, page: number, pageSize = 25) { + const params = new URLSearchParams({ + q, + page: String(page), + page_size: String(pageSize), + }) + return getJSON(`/api/search?${params}`) +} + +export function fetchTags(namespace: string, name: string, page: number, pageSize = 100) { + const params = new URLSearchParams({ + page: String(page), + page_size: String(pageSize), + }) + return getJSON( + `/api/tags/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}?${params}`, + ) +} + +export function triggerDownload(url: string) { + const link = document.createElement('a') + link.href = url + link.style.display = 'none' + document.body.appendChild(link) + link.click() + document.body.removeChild(link) +} diff --git a/web/src/components/AppShell.vue b/web/src/components/AppShell.vue new file mode 100644 index 0000000..552ee8f --- /dev/null +++ b/web/src/components/AppShell.vue @@ -0,0 +1,120 @@ + + + diff --git a/web/src/components/PageHero.vue b/web/src/components/PageHero.vue new file mode 100644 index 0000000..b6b3b38 --- /dev/null +++ b/web/src/components/PageHero.vue @@ -0,0 +1,19 @@ + + + diff --git a/web/src/components/ThemeToggle.vue b/web/src/components/ThemeToggle.vue new file mode 100644 index 0000000..e0c8755 --- /dev/null +++ b/web/src/components/ThemeToggle.vue @@ -0,0 +1,28 @@ + + + diff --git a/web/src/components/ui/Button.vue b/web/src/components/ui/Button.vue new file mode 100644 index 0000000..0b51b2c --- /dev/null +++ b/web/src/components/ui/Button.vue @@ -0,0 +1,45 @@ + + + diff --git a/web/src/components/ui/Input.vue b/web/src/components/ui/Input.vue new file mode 100644 index 0000000..6b4339a --- /dev/null +++ b/web/src/components/ui/Input.vue @@ -0,0 +1,28 @@ + + + diff --git a/web/src/components/ui/Switch.vue b/web/src/components/ui/Switch.vue new file mode 100644 index 0000000..70e090e --- /dev/null +++ b/web/src/components/ui/Switch.vue @@ -0,0 +1,40 @@ + + + diff --git a/web/src/components/ui/Textarea.vue b/web/src/components/ui/Textarea.vue new file mode 100644 index 0000000..f176da2 --- /dev/null +++ b/web/src/components/ui/Textarea.vue @@ -0,0 +1,26 @@ + + +