26.9:品牌统一(fileshare)+ 版本号改为日期式
Release 镜像 / 测试(推送前置门禁) (push) Failing after 12s
Release 镜像 / 多架构构建并推送 ACR (push) Skipped

- 数据库默认文件 filecodebox.db → fileshare.db(config.go 默认值与全部文档/编排同步)
- Go module filecodebox → fileshare(全部 import 同步,build/vet/test 全绿)
- 应用版本 APP_VERSION 2.5.6 → 26.9(health 接口已验证返回 26.9)
- deploy 编排统一:compose 项目名、Postgres 默认凭据、minio 桶名、env 注释
- JWT issuer、存储临时目录前缀、web 包名同步 fileshare
- CI:镜像 tag 以 APP_VERSION 为唯一版本源,main/tag 推送即发布
  ${VER} + latest;tag 触发时校验 tag 名与 APP_VERSION 一致,防错版
- 本地开发库文件已改名 fileshare.db(含 -shm/-wal 清理)
This commit is contained in:
SKYMirror committed 2026-09-05 06:32:18 +08:00
1 parent b5f06d09b3
commit 6f1a925833
63 files changed
+172 -167

No files matched your search

+4 -4
View File
@@ -27,7 +27,7 @@ server/
| 变量 | 必需 | 默认 | 说明 |
|---|---|---|---|
| `FCB_DB_DRIVER` | ❌ | `sqlite` | 数据库驱动:`sqlite` \| `postgres`(需求 ⑧) |
| `FCB_DB_DSN` | 视驱动 | `./data/filecodebox.db` | postgres:连接串(**必需**),如 `postgres://user:pass@host:5432/filecodebox?sslmode=disable`;sqlite:数据库文件路径(可空,自动创建 `data/` 目录) |
| `FCB_DB_DSN` | 视驱动 | `./data/fileshare.db` | postgres:连接串(**必需**),如 `postgres://user:pass@host:5432/fileshare?sslmode=disable`;sqlite:数据库文件路径(可空,自动创建 `data/` 目录) |
| `FCB_REDIS_ADDR` | ❌ | 空 | 为空时缓存降级为内存实现 |
| `FCB_LISTEN` | ❌ | `:8466` | 监听地址 |
| `FCB_STORAGE_ENGINE` | ❌ | `local` | `local` \| `s3` \| `webdav` |
@@ -36,7 +36,7 @@ server/
### 数据库模式(需求 ⑧)
- **SQLite(默认)**:`FCB_DB_DRIVER=sqlite`(或缺省)。零 DSN 零依赖启动,数据库文件
默认 `./data/filecodebox.db`(`FCB_DB_DSN` 可覆盖路径;父目录自动创建)。
默认 `./data/fileshare.db`(`FCB_DB_DSN` 可覆盖路径;父目录自动创建)。
连接参数:`busy_timeout=10s` + `WAL` 日志模式 + `foreign_keys=1`(通过 DSN pragma 注入)。
- **Postgres(可选)**:`FCB_DB_DRIVER=postgres` 且必须提供 `FCB_DB_DSN`,否则启动报错。
连接池沿用 v1 参数(32/8、1h 轮换)。
@@ -144,13 +144,13 @@ middleware.AuditRecordRequest(c, auditSvc, model.AuditResultSuccess, "")
## 本地开发
```bash
# 默认 SQLite 模式:零依赖,数据库落 ./data/filecodebox.db
# 默认 SQLite 模式:零依赖,数据库落 ./data/fileshare.db
go run ./cmd/server # 启动于 :8466
curl localhost:8466/api/v1/health
# Postgres 模式(可选)
export FCB_DB_DRIVER=postgres
export FCB_DB_DSN='postgres://postgres:postgres@localhost:5432/filecodebox?sslmode=disable'
export FCB_DB_DSN='postgres://postgres:postgres@localhost:5432/fileshare?sslmode=disable'
go run ./cmd/server
# 双方言单测:sqlite 始终执行;postgres 需真实实例(FCB_TEST_PG_DSN 指向测试库)
+10 -10
View File
@@ -15,19 +15,19 @@ import (
"github.com/gin-gonic/gin"
"filecodebox/internal/api"
"filecodebox/internal/audit"
"filecodebox/internal/cache"
"filecodebox/internal/config"
"filecodebox/internal/database"
"filecodebox/internal/janitor"
"filecodebox/internal/middleware"
"filecodebox/internal/settings"
"filecodebox/internal/storage"
"fileshare/internal/api"
"fileshare/internal/audit"
"fileshare/internal/cache"
"fileshare/internal/config"
"fileshare/internal/database"
"fileshare/internal/janitor"
"fileshare/internal/middleware"
"fileshare/internal/settings"
"fileshare/internal/storage"
)
// APP_VERSION 版本号,对齐参考仓库 VERSION。
const APP_VERSION = "2.5.6"
const APP_VERSION = "26.9"
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
+1 -1
View File
@@ -1,4 +1,4 @@
module filecodebox
module fileshare
go 1.27.1
+6 -6
View File
@@ -12,12 +12,12 @@ import (
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"filecodebox/internal/config"
"filecodebox/internal/middleware"
"filecodebox/internal/model"
"filecodebox/internal/response"
"filecodebox/internal/settings"
"filecodebox/internal/storage"
"fileshare/internal/config"
"fileshare/internal/middleware"
"fileshare/internal/model"
"fileshare/internal/response"
"fileshare/internal/settings"
"fileshare/internal/storage"
)
// minutesDuration 分钟数转 Duration(0 回退 1 分钟,对齐 main.go 语义)。
+4 -4
View File
@@ -16,10 +16,10 @@ import (
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"filecodebox/internal/middleware"
"filecodebox/internal/model"
"filecodebox/internal/response"
"filecodebox/internal/storage"
"fileshare/internal/middleware"
"fileshare/internal/model"
"fileshare/internal/response"
"fileshare/internal/storage"
)
// chunkExpireTTL 分片会话保留时长(M5:预留窗口由 24h 缩短为 2h;
+6 -6
View File
@@ -30,12 +30,12 @@ import (
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"filecodebox/internal/audit"
"filecodebox/internal/config"
"filecodebox/internal/middleware"
"filecodebox/internal/model"
"filecodebox/internal/response"
"filecodebox/internal/storage"
"fileshare/internal/audit"
"fileshare/internal/config"
"fileshare/internal/middleware"
"fileshare/internal/model"
"fileshare/internal/response"
"fileshare/internal/storage"
)
// apiError 统一的业务错误:handler 返回该错误并由 respondError 映射 HTTP 状态。
+2 -2
View File
@@ -6,8 +6,8 @@ import (
"testing"
"time"
"filecodebox/internal/config"
"filecodebox/internal/storage"
"fileshare/internal/config"
"fileshare/internal/storage"
)
// newTestConfig 构造测试配置(defaults 基线,无 KV 覆盖;需求 ⑧ 默认 sqlite,无需真实数据库)。
+7 -7
View File
@@ -15,13 +15,13 @@ import (
"github.com/gin-gonic/gin"
"filecodebox/internal/audit"
"filecodebox/internal/cache"
"filecodebox/internal/config"
"filecodebox/internal/database"
"filecodebox/internal/middleware"
"filecodebox/internal/settings"
"filecodebox/internal/storage"
"fileshare/internal/audit"
"fileshare/internal/cache"
"fileshare/internal/config"
"fileshare/internal/database"
"fileshare/internal/middleware"
"fileshare/internal/settings"
"fileshare/internal/storage"
)
// ============ 测试环境装配(真实 sqlite + 内存缓存 + 本地存储)============
+4 -4
View File
@@ -9,10 +9,10 @@ import (
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"filecodebox/internal/middleware"
"filecodebox/internal/model"
"filecodebox/internal/response"
"filecodebox/internal/storage"
"fileshare/internal/middleware"
"fileshare/internal/model"
"fileshare/internal/response"
"fileshare/internal/storage"
)
// presignSessionExpires 预签名会话有效期(对齐参考 PRESIGN_SESSION_EXPIRES=900 秒)。
+6 -6
View File
@@ -6,12 +6,12 @@ import (
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"filecodebox/internal/audit"
"filecodebox/internal/config"
"filecodebox/internal/middleware"
"filecodebox/internal/response"
"filecodebox/internal/settings"
"filecodebox/internal/storage"
"fileshare/internal/audit"
"fileshare/internal/config"
"fileshare/internal/middleware"
"fileshare/internal/response"
"fileshare/internal/settings"
"fileshare/internal/storage"
)
// Deps API 层共享依赖(main.go 装配后注入)。
+2 -2
View File
@@ -15,8 +15,8 @@ import (
"github.com/gin-gonic/gin"
"filecodebox/internal/model"
"filecodebox/internal/settings"
"fileshare/internal/model"
"fileshare/internal/settings"
)
// postJSON 以 JSON body 调用 POST 端点。
+2 -2
View File
@@ -7,8 +7,8 @@ import (
"github.com/gin-gonic/gin"
"filecodebox/internal/response"
"filecodebox/internal/settings"
"fileshare/internal/response"
"fileshare/internal/settings"
)
// fileSizeUnits 文件大小单位(对齐参考 FILE_SIZE_UNITS)。
+5 -5
View File
@@ -12,11 +12,11 @@ import (
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"filecodebox/internal/audit"
"filecodebox/internal/middleware"
"filecodebox/internal/model"
"filecodebox/internal/response"
"filecodebox/internal/storage"
"fileshare/internal/audit"
"fileshare/internal/middleware"
"fileshare/internal/model"
"fileshare/internal/response"
"fileshare/internal/storage"
)
// nowRFC3339 当前时间的 RFC3339 表示。
+2 -2
View File
@@ -8,8 +8,8 @@ import (
"github.com/gin-gonic/gin"
"filecodebox/internal/response"
web "filecodebox/web"
"fileshare/internal/response"
web "fileshare/web"
)
// registerWeb 注册前端静态资源与 SPA 回退(必须最后注册):
+1 -1
View File
@@ -12,7 +12,7 @@ import (
"gorm.io/gorm"
"filecodebox/internal/model"
"fileshare/internal/model"
)
// Service 审计日志服务。
+1 -1
View File
@@ -18,7 +18,7 @@ const (
AdminSessionExpireMax = 365 * 24 * 60 * 60 // 最大 365 天
// DefaultSQLitePath SQLite 模式默认数据库文件路径(相对运行目录,自动创建 data/)。
DefaultSQLitePath = "./data/filecodebox.db"
DefaultSQLitePath = "./data/fileshare.db"
)
// 数据库驱动常量(需求 ⑧:SQLite 默认、Postgres 可选)。
+2 -2
View File
@@ -19,8 +19,8 @@ import (
"gorm.io/gorm"
"gorm.io/gorm/logger"
"filecodebox/internal/config"
"filecodebox/internal/model"
"fileshare/internal/config"
"fileshare/internal/model"
)
// Options 连接选项(main.go 从 config.Env 装配)。
+2 -2
View File
@@ -18,8 +18,8 @@ import (
"gorm.io/gorm"
"filecodebox/internal/database"
"filecodebox/internal/model"
"fileshare/internal/database"
"fileshare/internal/model"
)
// pgTestDSN 返回 Postgres 测试连接串;未设置 FCB_TEST_PG_DSN 时返回空。
+2 -2
View File
@@ -12,8 +12,8 @@ import (
"gorm.io/gorm"
"filecodebox/internal/model"
"filecodebox/internal/storage"
"fileshare/internal/model"
"fileshare/internal/storage"
)
// chunkSessionMaxAge 未完成分片会话的最大保留时长(预留 TTL 为 2h,
+3 -3
View File
@@ -7,9 +7,9 @@ import (
"github.com/gin-gonic/gin"
"filecodebox/internal/audit"
"filecodebox/internal/model"
"filecodebox/internal/response"
"fileshare/internal/audit"
"fileshare/internal/model"
"fileshare/internal/response"
)
// auditHooks 审计钩子:由 API 层在响应前后填充与落库。
+2 -2
View File
@@ -10,8 +10,8 @@ import (
"github.com/gin-gonic/gin"
"filecodebox/internal/audit"
"filecodebox/internal/model"
"fileshare/internal/audit"
"fileshare/internal/model"
)
type captureSink struct {
+2 -2
View File
@@ -9,8 +9,8 @@ import (
"github.com/gin-gonic/gin"
"filecodebox/internal/audit"
"filecodebox/internal/model"
"fileshare/internal/audit"
"fileshare/internal/model"
)
// memSink 测试用内存落库实现。
+2 -2
View File
@@ -8,7 +8,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/golang-jwt/jwt/v5"
"filecodebox/internal/response"
"fileshare/internal/response"
)
// jwtClaims 自定义声明:对齐参考实现(payload 含 is_admin 与 exp)。
@@ -36,7 +36,7 @@ func SignAdminToken(secret string, expires time.Duration) (string, time.Time, er
RegisteredClaims: jwt.RegisteredClaims{
ExpiresAt: jwt.NewNumericDate(expiresAt),
IssuedAt: jwt.NewNumericDate(time.Now()),
Issuer: "filecodebox",
Issuer: "fileshare",
},
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"github.com/gin-gonic/gin"
"filecodebox/internal/response"
"fileshare/internal/response"
)
const testSecret = "unit-test-secret-0123456789abcdef"
+2 -2
View File
@@ -11,8 +11,8 @@ import (
"github.com/gin-gonic/gin"
"filecodebox/internal/cache"
"filecodebox/internal/response"
"fileshare/internal/cache"
"fileshare/internal/response"
)
// 限流类别(对齐参考 apps/base/utils.py 的 ip_limit)。
@@ -8,7 +8,7 @@ import (
"github.com/gin-gonic/gin"
"filecodebox/internal/cache"
"fileshare/internal/cache"
)
// failingCache 模拟缓存故障(Get/Incr 均返回非 ErrNotFound 错误)。
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"github.com/gin-gonic/gin"
"filecodebox/internal/cache"
"fileshare/internal/cache"
)
func rateLimitRouter(rl *RateLimiter, kind string) *gin.Engine {
+3 -3
View File
@@ -10,9 +10,9 @@ import (
"gorm.io/gorm"
"filecodebox/internal/config"
"filecodebox/internal/database"
"filecodebox/internal/settings"
"fileshare/internal/config"
"fileshare/internal/database"
"fileshare/internal/settings"
)
// pgTestDSN 返回 Postgres 测试连接串;未设置 FCB_TEST_PG_DSN 时跳过。
+1 -1
View File
@@ -9,7 +9,7 @@
// 4. schema 同步测试(config schema_test / settings schema_test)
package settings
import "filecodebox/internal/config"
import "fileshare/internal/config"
// —— 键名 re-export(与 config 包保持同一字符串,避免魔法值散落)——
const (
+2 -2
View File
@@ -12,8 +12,8 @@ import (
"gorm.io/gorm"
"filecodebox/internal/config"
"filecodebox/internal/model"
"fileshare/internal/config"
"fileshare/internal/model"
)
// settingsKey 数据库中的配置键(对齐参考实现)。
+2 -2
View File
@@ -30,10 +30,10 @@ type LocalStorage struct {
rootReal string
}
// NewLocalStorage 构造本地引擎。root 为空时使用系统临时目录下的 filecodebox_storage。
// NewLocalStorage 构造本地引擎。root 为空时使用系统临时目录下的 fileshare_storage。
func NewLocalStorage(root string) (*LocalStorage, error) {
if strings.TrimSpace(root) == "" {
root = filepath.Join(os.TempDir(), "filecodebox_storage")
root = filepath.Join(os.TempDir(), "fileshare_storage")
}
abs, err := filepath.Abs(root)
if err != nil {
+1 -1
View File
@@ -32,7 +32,7 @@ func sha256Hex(b []byte) string {
func TestLocalSaveOpenRange(t *testing.T) {
st := newTestLocal(t)
ctx := context.Background()
data := []byte("hello filecodebox 本地引擎 0123456789")
data := []byte("hello fileshare 本地引擎 0123456789")
n, err := st.SaveFile(ctx, bytes.NewReader(data), "2025/08/测试文件.bin")
if err != nil {
@@ -1 +1 @@
import{d as p,u as v,i as h,I as g,c as w,G as s,b as e,t as n,f as t,A as d,w as k,F as y,O as r,q as m,B as R,o as V}from"./index-DYsKpclu.js";import{_ as x}from"./SiteNav.vue_vue_type_script_setup_true_lang-CwaEJKIZ.js";import{u as A}from"./auth-B7MDTgxJ.js";import"./admin-DEOkRyTC.js";const B={class:"admin-shell"},C={class:"admin-aside"},b={class:"aside-title"},L=["aria-label"],N={class:"admin-main"},q=p({__name:"AdminLayout",setup(S){const{t:a}=v(),u=R(),o=A(),l=h();g(async()=>{o.isAuthed&&!o.checked&&await o.verify()});async function _(){await o.logout(),l.success(a("admin.nav.loggedOut")),u.replace({name:"admin-login"})}return(F,c)=>{const i=r("RouterLink"),f=r("RouterView");return V(),w(y,null,[s(x),e("div",B,[e("aside",C,[e("div",b,n(t(a)("admin.nav.title")),1),e("nav",{class:"aside-menu","aria-label":t(a)("admin.nav.menu")},[s(i,{to:{name:"admin-files"}},{default:d(()=>[m("📁 "+n(t(a)("admin.nav.files")),1)]),_:1}),s(i,{to:{name:"admin-audit"}},{default:d(()=>[m("🛡 "+n(t(a)("admin.nav.audit")),1)]),_:1}),s(i,{to:{name:"admin-settings"}},{default:d(()=>[m("⚙️ "+n(t(a)("admin.nav.settings")),1)]),_:1}),c[0]||(c[0]=e("div",{class:"aside-sep"},null,-1)),e("a",{href:"#",onClick:k(_,["prevent"])},"🚪 "+n(t(a)("admin.nav.logout")),1)],8,L)]),e("div",N,[s(f)])])],64)}}});export{q as default};
import{d as p,u as v,i as h,I as g,c as w,G as s,b as e,t as n,f as t,A as d,w as k,F as y,O as r,q as m,B as R,o as V}from"./index-BKnWAKao.js";import{_ as x}from"./SiteNav.vue_vue_type_script_setup_true_lang-D3yLF4uh.js";import{u as A}from"./auth-Cp2GGuZy.js";import"./admin-KnbIpHLF.js";const B={class:"admin-shell"},C={class:"admin-aside"},b={class:"aside-title"},L=["aria-label"],N={class:"admin-main"},q=p({__name:"AdminLayout",setup(S){const{t:a}=v(),u=R(),o=A(),l=h();g(async()=>{o.isAuthed&&!o.checked&&await o.verify()});async function _(){await o.logout(),l.success(a("admin.nav.loggedOut")),u.replace({name:"admin-login"})}return(F,c)=>{const i=r("RouterLink"),f=r("RouterView");return V(),w(y,null,[s(x),e("div",B,[e("aside",C,[e("div",b,n(t(a)("admin.nav.title")),1),e("nav",{class:"aside-menu","aria-label":t(a)("admin.nav.menu")},[s(i,{to:{name:"admin-files"}},{default:d(()=>[m("📁 "+n(t(a)("admin.nav.files")),1)]),_:1}),s(i,{to:{name:"admin-audit"}},{default:d(()=>[m("🛡 "+n(t(a)("admin.nav.audit")),1)]),_:1}),s(i,{to:{name:"admin-settings"}},{default:d(()=>[m("⚙️ "+n(t(a)("admin.nav.settings")),1)]),_:1}),c[0]||(c[0]=e("div",{class:"aside-sep"},null,-1)),e("a",{href:"#",onClick:k(_,["prevent"])},"🚪 "+n(t(a)("admin.nav.logout")),1)],8,L)]),e("div",N,[s(f)])])],64)}}});export{q as default};
@@ -1 +1 @@
import{d as U,u as I,i as M,I as S,c as u,b as t,t as a,f as l,C as r,Z as w,D as v,w as $,q as x,F as E,r as F,G as q,j as g,R as T,H as R,K as j,e as B,$ as H,s as _,o as c,_ as L}from"./index-DYsKpclu.js";import{e as O}from"./admin-DEOkRyTC.js";import{_ as G}from"./Pager.vue_vue_type_script_setup_true_lang-B3GeH0mY.js";const K={class:"toolbar"},P={class:"page-title"},Z={class:"page-sub"},J={value:""},Q={value:"upload"},W={value:"download"},X={value:""},Y={value:"success"},tt={value:"failed"},et={value:"denied"},at={class:"btn",type:"submit"},nt={key:0,class:"loading-block"},lt={key:1,class:"card empty"},st={key:2,class:"table-wrap"},it={class:"table"},ot=["title"],dt={class:"code-cell"},ut={class:"ip-cell"},ct=["title"],rt=U({__name:"AuditView",setup(mt){const{t:n}=I(),z=M(),p=g([]),b=g(0),f=g(!1),o=T({action:"",result:"",ip:"",start:"",end:""}),d=T({page:1,size:20});function h(s,i=!1){if(!s)return"";const e=new Date(s);return Number.isNaN(e.getTime())?"":(i&&e.setHours(23,59,59,999),e.toISOString())}async function m(){f.value=!0;try{const s=await O({page:d.page,size:d.size,action:o.action||void 0,result:o.result||void 0,ip:o.ip.trim()||void 0,startTime:h(o.start)||void 0,endTime:h(o.end,!0)||void 0});p.value=s.data,b.value=s.total}catch(s){z.error(s instanceof R?s.msg:n("admin.audit.loadFailed"))}finally{f.value=!1}}function D(){d.page=1,m()}function V(){o.action="",o.result="",o.ip="",o.start="",o.end="",d.page=1,m()}function k(s,i){d.page=s,d.size=i,m()}function A(s){return s==="upload"?n("admin.audit.actionUpload"):s==="download"?n("admin.audit.actionDownload"):s||"-"}function y(s){return s==="success"?{cls:"badge-success",text:n("common.success")}:s==="denied"?{cls:"badge-warn",text:n("common.denied")}:s==="failed"?{cls:"badge-danger",text:n("common.failed")}:{cls:"badge-muted",text:s||"-"}}function C(s){const i=[s.deviceOs,s.deviceBrowser].filter(Boolean),e=s.deviceType?` · ${s.deviceType}`:"";return i.length?i.join(" · ")+e:"-"}function N(s){const i=s.transferredBytes;if(i==null)return"-";const e=s.sizeBytes;return e!=null&&e!==i?`${_(i)} / ${_(e)}`:_(i)}return S(m),(s,i)=>(c(),u("div",null,[t("div",K,[t("div",null,[t("h2",P,a(l(n)("admin.audit.title")),1),t("p",Z,a(l(n)("admin.audit.subtitle")),1)])]),t("form",{class:"filter-bar",onSubmit:$(D,["prevent"])},[t("label",null,[t("span",null,a(l(n)("admin.audit.action")),1),r(t("select",{"onUpdate:modelValue":i[0]||(i[0]=e=>o.action=e),class:"select"},[t("option",J,a(l(n)("common.all")),1),t("option",Q,a(l(n)("admin.audit.actionUpload")),1),t("option",W,a(l(n)("admin.audit.actionDownload")),1)],512),[[w,o.action]])]),t("label",null,[t("span",null,a(l(n)("admin.audit.result")),1),r(t("select",{"onUpdate:modelValue":i[1]||(i[1]=e=>o.result=e),class:"select"},[t("option",X,a(l(n)("common.all")),1),t("option",Y,a(l(n)("common.success")),1),t("option",tt,a(l(n)("common.failed")),1),t("option",et,a(l(n)("common.denied")),1)],512),[[w,o.result]])]),t("label",null,[t("span",null,a(l(n)("admin.audit.filterIp")),1),r(t("input",{"onUpdate:modelValue":i[2]||(i[2]=e=>o.ip=e),class:"input",placeholder:"10.0.0.1",style:{"max-width":"150px"}},null,512),[[v,o.ip]])]),t("label",null,[t("span",null,a(l(n)("admin.audit.filterStart")),1),r(t("input",{"onUpdate:modelValue":i[3]||(i[3]=e=>o.start=e),class:"input",type:"datetime-local"},null,512),[[v,o.start]])]),t("label",null,[t("span",null,a(l(n)("admin.audit.filterEnd")),1),r(t("input",{"onUpdate:modelValue":i[4]||(i[4]=e=>o.end=e),class:"input",type:"datetime-local"},null,512),[[v,o.end]])]),t("button",at,a(l(n)("common.query")),1),t("button",{class:"btn btn-ghost",type:"button",onClick:V},a(l(n)("common.reset")),1)],32),f.value?(c(),u("div",nt,[i[5]||(i[5]=t("span",{class:"spin","aria-hidden":"true"},null,-1)),x(" "+a(l(n)("common.loading")),1)])):p.value.length?(c(),u("div",st,[t("table",it,[t("thead",null,[t("tr",null,[t("th",null,a(l(n)("admin.audit.colTime")),1),t("th",null,a(l(n)("admin.audit.colAction")),1),t("th",null,a(l(n)("admin.audit.colResult")),1),t("th",null,a(l(n)("admin.audit.colFile")),1),t("th",null,a(l(n)("admin.audit.colCode")),1),t("th",null,a(l(n)("admin.audit.colBytes")),1),t("th",null,a(l(n)("admin.audit.colIp")),1),t("th",null,a(l(n)("admin.audit.colDevice")),1),t("th",null,a(l(n)("admin.audit.colDuration")),1),t("th",null,a(l(n)("admin.audit.colUaError")),1)])]),t("tbody",null,[(c(!0),u(E,null,F(p.value,e=>(c(),u("tr",{key:e.id},[t("td",null,a(l(j)(e.createdAt)),1),t("td",null,[t("span",{class:B(["badge",e.action==="upload"?"":"badge-muted"])},a(A(e.action)),3)]),t("td",null,[t("span",{class:B(["badge",y(e.result).cls])},a(y(e.result).text),3)]),t("td",{class:"wrap",title:e.fileName},a(e.fileName||"-"),9,ot),t("td",dt,a(e.fileCode||"-"),1),t("td",null,a(N(e)),1),t("td",ut,a(e.ip||"-"),1),t("td",null,a(C(e)),1),t("td",null,a(l(H)(e.durationMs)),1),t("td",{class:"wrap ua-cell",title:e.errorMsg||e.userAgent},a(e.errorMsg||e.userAgent||"-"),9,ct)]))),128))])])])):(c(),u("div",lt,[i[6]||(i[6]=t(Line truncated
import{d as U,u as I,i as M,I as S,c as u,b as t,t as a,f as l,C as r,Z as w,D as v,w as $,q as x,F as E,r as F,G as q,j as g,R as T,H as R,K as j,e as B,$ as H,s as _,o as c,_ as L}from"./index-BKnWAKao.js";import{e as O}from"./admin-KnbIpHLF.js";import{_ as G}from"./Pager.vue_vue_type_script_setup_true_lang-DZv_x-2P.js";const K={class:"toolbar"},P={class:"page-title"},Z={class:"page-sub"},J={value:""},Q={value:"upload"},W={value:"download"},X={value:""},Y={value:"success"},tt={value:"failed"},et={value:"denied"},at={class:"btn",type:"submit"},nt={key:0,class:"loading-block"},lt={key:1,class:"card empty"},st={key:2,class:"table-wrap"},it={class:"table"},ot=["title"],dt={class:"code-cell"},ut={class:"ip-cell"},ct=["title"],rt=U({__name:"AuditView",setup(mt){const{t:n}=I(),z=M(),p=g([]),b=g(0),f=g(!1),o=T({action:"",result:"",ip:"",start:"",end:""}),d=T({page:1,size:20});function h(s,i=!1){if(!s)return"";const e=new Date(s);return Number.isNaN(e.getTime())?"":(i&&e.setHours(23,59,59,999),e.toISOString())}async function m(){f.value=!0;try{const s=await O({page:d.page,size:d.size,action:o.action||void 0,result:o.result||void 0,ip:o.ip.trim()||void 0,startTime:h(o.start)||void 0,endTime:h(o.end,!0)||void 0});p.value=s.data,b.value=s.total}catch(s){z.error(s instanceof R?s.msg:n("admin.audit.loadFailed"))}finally{f.value=!1}}function D(){d.page=1,m()}function V(){o.action="",o.result="",o.ip="",o.start="",o.end="",d.page=1,m()}function k(s,i){d.page=s,d.size=i,m()}function A(s){return s==="upload"?n("admin.audit.actionUpload"):s==="download"?n("admin.audit.actionDownload"):s||"-"}function y(s){return s==="success"?{cls:"badge-success",text:n("common.success")}:s==="denied"?{cls:"badge-warn",text:n("common.denied")}:s==="failed"?{cls:"badge-danger",text:n("common.failed")}:{cls:"badge-muted",text:s||"-"}}function C(s){const i=[s.deviceOs,s.deviceBrowser].filter(Boolean),e=s.deviceType?` · ${s.deviceType}`:"";return i.length?i.join(" · ")+e:"-"}function N(s){const i=s.transferredBytes;if(i==null)return"-";const e=s.sizeBytes;return e!=null&&e!==i?`${_(i)} / ${_(e)}`:_(i)}return S(m),(s,i)=>(c(),u("div",null,[t("div",K,[t("div",null,[t("h2",P,a(l(n)("admin.audit.title")),1),t("p",Z,a(l(n)("admin.audit.subtitle")),1)])]),t("form",{class:"filter-bar",onSubmit:$(D,["prevent"])},[t("label",null,[t("span",null,a(l(n)("admin.audit.action")),1),r(t("select",{"onUpdate:modelValue":i[0]||(i[0]=e=>o.action=e),class:"select"},[t("option",J,a(l(n)("common.all")),1),t("option",Q,a(l(n)("admin.audit.actionUpload")),1),t("option",W,a(l(n)("admin.audit.actionDownload")),1)],512),[[w,o.action]])]),t("label",null,[t("span",null,a(l(n)("admin.audit.result")),1),r(t("select",{"onUpdate:modelValue":i[1]||(i[1]=e=>o.result=e),class:"select"},[t("option",X,a(l(n)("common.all")),1),t("option",Y,a(l(n)("common.success")),1),t("option",tt,a(l(n)("common.failed")),1),t("option",et,a(l(n)("common.denied")),1)],512),[[w,o.result]])]),t("label",null,[t("span",null,a(l(n)("admin.audit.filterIp")),1),r(t("input",{"onUpdate:modelValue":i[2]||(i[2]=e=>o.ip=e),class:"input",placeholder:"10.0.0.1",style:{"max-width":"150px"}},null,512),[[v,o.ip]])]),t("label",null,[t("span",null,a(l(n)("admin.audit.filterStart")),1),r(t("input",{"onUpdate:modelValue":i[3]||(i[3]=e=>o.start=e),class:"input",type:"datetime-local"},null,512),[[v,o.start]])]),t("label",null,[t("span",null,a(l(n)("admin.audit.filterEnd")),1),r(t("input",{"onUpdate:modelValue":i[4]||(i[4]=e=>o.end=e),class:"input",type:"datetime-local"},null,512),[[v,o.end]])]),t("button",at,a(l(n)("common.query")),1),t("button",{class:"btn btn-ghost",type:"button",onClick:V},a(l(n)("common.reset")),1)],32),f.value?(c(),u("div",nt,[i[5]||(i[5]=t("span",{class:"spin","aria-hidden":"true"},null,-1)),x(" "+a(l(n)("common.loading")),1)])):p.value.length?(c(),u("div",st,[t("table",it,[t("thead",null,[t("tr",null,[t("th",null,a(l(n)("admin.audit.colTime")),1),t("th",null,a(l(n)("admin.audit.colAction")),1),t("th",null,a(l(n)("admin.audit.colResult")),1),t("th",null,a(l(n)("admin.audit.colFile")),1),t("th",null,a(l(n)("admin.audit.colCode")),1),t("th",null,a(l(n)("admin.audit.colBytes")),1),t("th",null,a(l(n)("admin.audit.colIp")),1),t("th",null,a(l(n)("admin.audit.colDevice")),1),t("th",null,a(l(n)("admin.audit.colDuration")),1),t("th",null,a(l(n)("admin.audit.colUaError")),1)])]),t("tbody",null,[(c(!0),u(E,null,F(p.value,e=>(c(),u("tr",{key:e.id},[t("td",null,a(l(j)(e.createdAt)),1),t("td",null,[t("span",{class:B(["badge",e.action==="upload"?"":"badge-muted"])},a(A(e.action)),3)]),t("td",null,[t("span",{class:B(["badge",y(e.result).cls])},a(y(e.result).text),3)]),t("td",{class:"wrap",title:e.fileName},a(e.fileName||"-"),9,ot),t("td",dt,a(e.fileCode||"-"),1),t("td",null,a(N(e)),1),t("td",ut,a(e.ip||"-"),1),t("td",null,a(C(e)),1),t("td",null,a(l(H)(e.durationMs)),1),t("td",{class:"wrap ua-cell",title:e.errorMsg||e.userAgent},a(e.errorMsg||e.userAgent||"-"),9,ct)]))),128))])])])):(c(),u("div",lt,[i[6]||(i[6]=t(Line truncated
@@ -1 +1 @@
import{d as R,u as V,i as z,j as y,I,J as $,z as E,A as O,N as W,b as c,C as j,D as G,f as h,c as l,q as x,t as u,F as C,r as A,w as T,e as M,g as S,h as H,B as K,o as r}from"./index-DYsKpclu.js";import{P as U}from"./PageShell-D87JkPkG.js";import{d as B,a as J,l as Q}from"./docsSource-BXkkn0HE.js";import{k as X}from"./markdown-B5D8JARp.js";import"./SiteNav.vue_vue_type_script_setup_true_lang-CwaEJKIZ.js";function Y(m,o){const n=m.toLowerCase().replace(/[^\p{L}\p{N}\s-]/gu,"").trim().replace(/\s+/g,"-")||"section";let d=n,i=2;for(;o.has(d);)d=`${n}-${i++}`;return o.add(d),d}const Z=new Set(["script","style","iframe","object","embed","form","link","meta","base","svg","math","frame","frameset","applet","template","noscript","title"]),tt=new Set(["srcdoc","sandbox","formaction","action","xlink:href","srcset","poster","background","dynsrc","lowsrc","data"]);function et(m,o){const n=m.trim();return o&&/^data:image\//i.test(n)?!0:/^(https?:|mailto:|\/|#|\.\/)/i.test(n)||!/^[a-z][a-z0-9+.-]*:/i.test(n)}function st(m){const o=new DOMParser().parseFromString(m,"text/html");for(const n of[...o.body.querySelectorAll("*")]){const d=n.tagName.toLowerCase();if(Z.has(d)){n.remove();continue}for(const i of[...n.attributes]){const e=i.name.toLowerCase();if(e.startsWith("on")||tt.has(e)){n.removeAttribute(i.name);continue}(e==="href"||e==="src"||e.endsWith(":src")||e.endsWith(":href"))&&!et(i.value,e==="src")&&n.removeAttribute(i.name)}}return o.body.innerHTML}function ot(m){const o=X.parse(m,{gfm:!0,breaks:!1}),n=new DOMParser().parseFromString(o,"text/html");for(const e of[...n.body.querySelectorAll("a[href]")]){const f=e.getAttribute("href")??"";/^https?:\/\//i.test(f)&&(e.setAttribute("target","_blank"),e.setAttribute("rel","noopener noreferrer"))}const d=new Set,i=[];for(const e of[...n.body.querySelectorAll("h1, h2, h3")]){const f=Number(e.tagName.substring(1)),p=(e.textContent??"").trim();if(!p)continue;const v=Y(p,d);e.setAttribute("id",v),f>=2&&i.push({id:v,text:p,level:f})}return{html:st(n.body.innerHTML),toc:i}}const nt={class:"docs-shell"},at={class:"docs-sidebar"},rt=["placeholder"],lt={key:0,class:"empty",style:{padding:"20px 8px"}},ct={class:"hint"},it=["aria-label"],ut=["onClick"],dt={key:0,class:"badge badge-muted",style:{"margin-left":"6px"}},ht={key:0,class:"hint",style:{padding:"0 11px"}},mt={key:1,class:"doc-toc"},ft={class:"toc-title"},pt=["href","onClick"],vt={class:"docs-content"},gt={key:0,class:"loading-block"},yt={key:1,class:"empty"},_t={style:{"font-weight":"600",color:"var(--c-text)"}},bt={class:"hint",style:{"max-width":"420px",margin:"0 auto"}},kt={key:2,class:"empty"},wt=["innerHTML"],At=R({__name:"DocsView",setup(m){const{t:o}=V(),n=W(),d=K(),i=z(),e=y([...B]),f=y(""),p=y(""),v=y(""),_=y([]),k=y(!1),b=y("");I(async()=>{const a=await J();a.length&&(e.value=[...B,...a]),L()});const N=()=>{if(typeof n.params.slug=="string")return n.params.slug;const a=n.query.p;return typeof a=="string"?a:""};async function L(){const a=N(),s=e.value;if(!s.length)return;const t=s.find(g=>g.slug===a)??s[0];if(t&&!(t.slug===f.value&&p.value)){f.value=t.slug,k.value=!0;try{p.value=await Q(t);const{html:g,toc:P}=ot(p.value);v.value=g,_.value=P}catch{v.value="",_.value=[],i.error(o("docs.loadFailed",{title:t.title}))}finally{k.value=!1}}}$(()=>n.fullPath,()=>{L()});function F(a){d.push({name:"docs-detail",params:{slug:a}})}function q(a){document.getElementById(a)?.scrollIntoView({behavior:"smooth"})}const D=H(()=>{const a=b.value.trim().toLowerCase();return a?e.value.map(s=>{const g=(s.embedded??"").toLowerCase().split(a).length-1+(s.title.toLowerCase().includes(a)?1:0);return{doc:s,hits:g}}).filter(s=>s.hits>0).sort((s,t)=>t.hits-s.hits):e.value.map(s=>({doc:s,hits:-1}))}),w=H(()=>b.value.trim().length>0);return(a,s)=>(r(),E(U,null,{default:O(()=>[c("div",nt,[c("aside",at,[j(c("input",{"onUpdate:modelValue":s[0]||(s[0]=t=>b.value=t),class:"input docs-search",placeholder:h(o)("docs.searchPlaceholder")},null,8,rt),[[G,b.value]]),e.value.length?(r(),l(C,{key:1},[c("nav",{class:"doc-list","aria-label":h(o)("docs.sidebar")},[(r(!0),l(C,null,A(D.value,t=>(r(),l("a",{key:t.doc.slug,class:M({active:t.doc.slug===f.value}),href:"#",onClick:T(g=>F(t.doc.slug),["prevent"])},[x(u(t.doc.title)+" ",1),w.value&&t.hits>0?(r(),l("span",dt,u(t.hits),1)):S("",!0)],10,ut))),128))],8,it),w.value&&!D.value.length?(r(),l("p",ht,u(h(o)("docs.noMatch")),1)):S("",!0),_.value.length&&!w.value?(r(),l("div",mt,[c("div",ft,u(h(o)("docs.tocTitle")),1),(r(!0),l(C,null,A(_.value,t=>(r(),l("a",{key:t.id,href:`#${t.id}`,class:M({"lvl-3":t.level>=3}),onClick:T(g=>q(t.id),["prevent"])},u(t.text),11,pt))),128))])):S("",!0)],64)):(r(),l("div",lt,[x(u(h(o)("docs.notGenerated")),1),s[1]||(s[1]=c("br",null,null,-1)),c("span",ct,u(h(o)("docs.buildHint")),1)]))]),c("article",vt,[k.value?(r(),l("div",gt,[s[2]||(s[2]=c("span",{class:"spin","aria-hidden":"true"},null,-1)),x(" "+u(h(o)("docs.loading")),1)])):e.value.length?v.value?(r(),l("div",{key:3,class:"markdoLine truncated
import{d as R,u as V,i as z,j as y,I,J as $,z as E,A as O,N as W,b as c,C as j,D as G,f as h,c as l,q as x,t as u,F as C,r as A,w as T,e as M,g as S,h as H,B as K,o as r}from"./index-BKnWAKao.js";import{P as U}from"./PageShell-CBo29Oot.js";import{d as B,a as J,l as Q}from"./docsSource-Df5ur5C4.js";import{k as X}from"./markdown-B5D8JARp.js";import"./SiteNav.vue_vue_type_script_setup_true_lang-D3yLF4uh.js";function Y(m,o){const n=m.toLowerCase().replace(/[^\p{L}\p{N}\s-]/gu,"").trim().replace(/\s+/g,"-")||"section";let d=n,i=2;for(;o.has(d);)d=`${n}-${i++}`;return o.add(d),d}const Z=new Set(["script","style","iframe","object","embed","form","link","meta","base","svg","math","frame","frameset","applet","template","noscript","title"]),tt=new Set(["srcdoc","sandbox","formaction","action","xlink:href","srcset","poster","background","dynsrc","lowsrc","data"]);function et(m,o){const n=m.trim();return o&&/^data:image\//i.test(n)?!0:/^(https?:|mailto:|\/|#|\.\/)/i.test(n)||!/^[a-z][a-z0-9+.-]*:/i.test(n)}function st(m){const o=new DOMParser().parseFromString(m,"text/html");for(const n of[...o.body.querySelectorAll("*")]){const d=n.tagName.toLowerCase();if(Z.has(d)){n.remove();continue}for(const i of[...n.attributes]){const e=i.name.toLowerCase();if(e.startsWith("on")||tt.has(e)){n.removeAttribute(i.name);continue}(e==="href"||e==="src"||e.endsWith(":src")||e.endsWith(":href"))&&!et(i.value,e==="src")&&n.removeAttribute(i.name)}}return o.body.innerHTML}function ot(m){const o=X.parse(m,{gfm:!0,breaks:!1}),n=new DOMParser().parseFromString(o,"text/html");for(const e of[...n.body.querySelectorAll("a[href]")]){const f=e.getAttribute("href")??"";/^https?:\/\//i.test(f)&&(e.setAttribute("target","_blank"),e.setAttribute("rel","noopener noreferrer"))}const d=new Set,i=[];for(const e of[...n.body.querySelectorAll("h1, h2, h3")]){const f=Number(e.tagName.substring(1)),p=(e.textContent??"").trim();if(!p)continue;const v=Y(p,d);e.setAttribute("id",v),f>=2&&i.push({id:v,text:p,level:f})}return{html:st(n.body.innerHTML),toc:i}}const nt={class:"docs-shell"},at={class:"docs-sidebar"},rt=["placeholder"],lt={key:0,class:"empty",style:{padding:"20px 8px"}},ct={class:"hint"},it=["aria-label"],ut=["onClick"],dt={key:0,class:"badge badge-muted",style:{"margin-left":"6px"}},ht={key:0,class:"hint",style:{padding:"0 11px"}},mt={key:1,class:"doc-toc"},ft={class:"toc-title"},pt=["href","onClick"],vt={class:"docs-content"},gt={key:0,class:"loading-block"},yt={key:1,class:"empty"},_t={style:{"font-weight":"600",color:"var(--c-text)"}},bt={class:"hint",style:{"max-width":"420px",margin:"0 auto"}},kt={key:2,class:"empty"},wt=["innerHTML"],At=R({__name:"DocsView",setup(m){const{t:o}=V(),n=W(),d=K(),i=z(),e=y([...B]),f=y(""),p=y(""),v=y(""),_=y([]),k=y(!1),b=y("");I(async()=>{const a=await J();a.length&&(e.value=[...B,...a]),L()});const N=()=>{if(typeof n.params.slug=="string")return n.params.slug;const a=n.query.p;return typeof a=="string"?a:""};async function L(){const a=N(),s=e.value;if(!s.length)return;const t=s.find(g=>g.slug===a)??s[0];if(t&&!(t.slug===f.value&&p.value)){f.value=t.slug,k.value=!0;try{p.value=await Q(t);const{html:g,toc:P}=ot(p.value);v.value=g,_.value=P}catch{v.value="",_.value=[],i.error(o("docs.loadFailed",{title:t.title}))}finally{k.value=!1}}}$(()=>n.fullPath,()=>{L()});function F(a){d.push({name:"docs-detail",params:{slug:a}})}function q(a){document.getElementById(a)?.scrollIntoView({behavior:"smooth"})}const D=H(()=>{const a=b.value.trim().toLowerCase();return a?e.value.map(s=>{const g=(s.embedded??"").toLowerCase().split(a).length-1+(s.title.toLowerCase().includes(a)?1:0);return{doc:s,hits:g}}).filter(s=>s.hits>0).sort((s,t)=>t.hits-s.hits):e.value.map(s=>({doc:s,hits:-1}))}),w=H(()=>b.value.trim().length>0);return(a,s)=>(r(),E(U,null,{default:O(()=>[c("div",nt,[c("aside",at,[j(c("input",{"onUpdate:modelValue":s[0]||(s[0]=t=>b.value=t),class:"input docs-search",placeholder:h(o)("docs.searchPlaceholder")},null,8,rt),[[G,b.value]]),e.value.length?(r(),l(C,{key:1},[c("nav",{class:"doc-list","aria-label":h(o)("docs.sidebar")},[(r(!0),l(C,null,A(D.value,t=>(r(),l("a",{key:t.doc.slug,class:M({active:t.doc.slug===f.value}),href:"#",onClick:T(g=>F(t.doc.slug),["prevent"])},[x(u(t.doc.title)+" ",1),w.value&&t.hits>0?(r(),l("span",dt,u(t.hits),1)):S("",!0)],10,ut))),128))],8,it),w.value&&!D.value.length?(r(),l("p",ht,u(h(o)("docs.noMatch")),1)):S("",!0),_.value.length&&!w.value?(r(),l("div",mt,[c("div",ft,u(h(o)("docs.tocTitle")),1),(r(!0),l(C,null,A(_.value,t=>(r(),l("a",{key:t.id,href:`#${t.id}`,class:M({"lvl-3":t.level>=3}),onClick:T(g=>q(t.id),["prevent"])},u(t.text),11,pt))),128))])):S("",!0)],64)):(r(),l("div",lt,[x(u(h(o)("docs.notGenerated")),1),s[1]||(s[1]=c("br",null,null,-1)),c("span",ct,u(h(o)("docs.buildHint")),1)]))]),c("article",vt,[k.value?(r(),l("div",gt,[s[2]||(s[2]=c("span",{class:"spin","aria-hidden":"true"},null,-1)),x(" "+u(h(o)("docs.loading")),1)])):e.value.length?v.value?(r(),l("div",{key:3,class:"markdoLine truncated
@@ -1 +1 @@
import{d as N,I as V,P as Y,z as J,c as f,w as $,b as e,t as a,Q as X,n as Z,g as L,T as ee,o as p,u as te,a as ne,i as ie,f as l,C as S,D as T,q as z,F as se,r as le,G as D,A as ae,j as _,R as A,H as x,e as B,s as oe,K as E,k as w,p as de,M as ce}from"./index-DYsKpclu.js";import{a as ue,b as re,c as me,d as pe}from"./admin-DEOkRyTC.js";import{p as fe}from"./share-CqDDLJWI.js";import{_ as he}from"./Pager.vue_vue_type_script_setup_true_lang-B3GeH0mY.js";const be=["aria-label"],ve={class:"modal-title"},ge=N({__name:"AppModal",props:{open:{type:Boolean},title:{},width:{}},emits:["close"],setup(h,{emit:t}){const k=h,d=t;function r(b){b.key==="Escape"&&k.open&&d("close")}return V(()=>document.addEventListener("keydown",r)),Y(()=>document.removeEventListener("keydown",r)),(b,g)=>(p(),J(ee,{to:"body"},[h.open?(p(),f("div",{key:0,class:"modal-overlay",onClick:g[0]||(g[0]=$(m=>d("close"),["self"]))},[e("div",{class:"modal",style:Z(h.width?{maxWidth:h.width}:void 0),role:"dialog","aria-modal":"true","aria-label":h.title},[e("h3",ve,a(h.title),1),X(b.$slots,"default")],12,be)])):L("",!0)]))}}),ye={class:"toolbar"},_e={class:"page-title"},xe={class:"page-sub"},ke=["placeholder"],Ce={class:"btn",type:"submit"},Se=["disabled","title"],Te={key:0,class:"loading-block"},$e={key:1,class:"card empty"},Fe={key:2,class:"table-wrap"},ze={class:"table"},De={style:{width:"36px"}},Ae=["checked"],Be={style:{"min-width":"210px"}},Ee=["checked","onChange"],we={class:"code-cell"},Ne=["title"],Ve={class:"row-actions"},Le=["onClick"],Me=["onClick"],Ue=["onClick"],Ie=["onClick"],Re=["onClick"],He={class:"field"},Pe={class:"field"},Oe={class:"field"},je=["value"],qe={class:"modal-actions"},Ke=["disabled"],Je=N({__name:"FilesView",setup(h){const{t}=te(),k=ne(),d=ie(),r=_([]),b=_(0),g=_(!1),m=A({page:1,size:10,keyword:""}),c=_(new Set);async function v(){g.value=!0;try{const n=await ue({...m});r.value=n.data,b.value=n.total,c.value=new Set}catch(n){d.error(n instanceof x?n.msg:t("admin.files.loadFailed"))}finally{g.value=!1}}function M(){m.page=1,v()}function U(n,i){m.page=n,m.size=i,v()}function I(n){const i=new Set(c.value);i.has(n)?i.delete(n):i.add(n),c.value=i}const F=()=>r.value.length>0&&r.value.every(n=>c.value.has(n.id));function R(){c.value=F()?new Set:new Set(r.value.map(n=>n.id))}async function H(n){if(window.confirm(t("admin.files.confirmDelete",{name:n.name||n.code})))try{await me(n.id),d.success(t("admin.files.deleteSuccess")),v()}catch(i){d.error(i instanceof x?i.msg:t("admin.files.deleteFailed"))}}async function P(){if(c.value.size&&window.confirm(t("admin.files.confirmBatchDelete",{count:c.value.size})))try{await re([...c.value]),d.success(t("admin.files.batchDeleteSuccess")),v()}catch(n){d.error(n instanceof x?n.msg:t("admin.files.batchDeleteFailed"))}}const y=_(!1),C=_(!1),o=A({id:0,code:"",expired_at:"",expired_count:null,original:null});function O(n){o.id=n.id,o.code=n.code,o.original=n,o.expired_at=n.expiredAt?j(n.expiredAt):"",o.expired_count=n.expiredCount,y.value=!0}function j(n){const i=new Date(n);if(Number.isNaN(i.getTime()))return"";const s=u=>`${u}`.padStart(2,"0");return`${i.getFullYear()}-${s(i.getMonth()+1)}-${s(i.getDate())}T${s(i.getHours())}:${s(i.getMinutes())}`}async function q(){const n=o.original;if(!n)return;const i={id:o.id};o.code.trim()&&o.code.trim()!==n.code&&(i.code=o.code.trim());const s=o.expired_count;if(s!==null&&s!==n.expiredCount&&(i.expired_count=s),o.expired_at){const u=new Date(o.expired_at).toISOString();u!==n.expiredAt&&(i.expired_at=u)}if(Object.keys(i).length===1){d.info(t("admin.files.nothingChanged")),y.value=!1;return}C.value=!0;try{await pe(i),d.success(t("admin.files.updateSuccess")),y.value=!1,v()}catch(u){d.error(u instanceof x?u.msg:t("admin.files.updateFailed"))}finally{C.value=!1}}async function K(n){await w(de(n.code,k.shareLinkBase))?d.success(t("admin.files.linkCopied")):d.error(t("common.copyFailed"))}async function W(n){await w(n.code)?d.success(t("admin.files.codeCopied")):d.error(t("common.copyFailed"))}async function G(n){try{const i=await fe(n.code);ce(new Blob([i],{type:"text/plain;charset=utf-8"}),n.name||`${n.code}.txt`)}catch(i){d.error(i instanceof x?i.msg:t("admin.files.fetchTextFailed"))}}function Q(n){return n.expiredCount===null||n.expiredCount<0?t("admin.files.remainingUnlimited"):t("admin.files.remainingCount",{n:n.expiredCount})}return V(v),(n,i)=>(p(),f("div",null,[e("div",ye,[e("div",null,[e("h2",_e,a(l(t)("admin.files.title")),1),e("p",xe,a(l(t)("admin.files.totalRecords",{total:b.value})),1)]),e("form",{class:"toolbar-actions",onSubmit:$(M,["prevent"])},[S(e("input",{"onUpdate:modelValue":i[0]||(i[0]=s=>m.keyword=s),class:"input",placeholder:l(t)("admin.files.searchPlaceholder"),style:{"max-width":"220px"}},null,8,ke),[[T,m.keyword]]),e("button",Ce,a(l(t)("common.search")),1),e("button",{class:"btn btn-ghost",type:"button",onClick:v},a(l(t)("common.refresh")),1),e("button",{class:"btn btn-danger-ghost",type:"button",disabled:!c.value.size,title:cLine truncated
import{d as N,I as V,P as Y,z as J,c as f,w as $,b as e,t as a,Q as X,n as Z,g as L,T as ee,o as p,u as te,a as ne,i as ie,f as l,C as S,D as T,q as z,F as se,r as le,G as D,A as ae,j as _,R as A,H as x,e as B,s as oe,K as E,k as w,p as de,M as ce}from"./index-BKnWAKao.js";import{a as ue,b as re,c as me,d as pe}from"./admin-KnbIpHLF.js";import{p as fe}from"./share-B-zR67vw.js";import{_ as he}from"./Pager.vue_vue_type_script_setup_true_lang-DZv_x-2P.js";const be=["aria-label"],ve={class:"modal-title"},ge=N({__name:"AppModal",props:{open:{type:Boolean},title:{},width:{}},emits:["close"],setup(h,{emit:t}){const k=h,d=t;function r(b){b.key==="Escape"&&k.open&&d("close")}return V(()=>document.addEventListener("keydown",r)),Y(()=>document.removeEventListener("keydown",r)),(b,g)=>(p(),J(ee,{to:"body"},[h.open?(p(),f("div",{key:0,class:"modal-overlay",onClick:g[0]||(g[0]=$(m=>d("close"),["self"]))},[e("div",{class:"modal",style:Z(h.width?{maxWidth:h.width}:void 0),role:"dialog","aria-modal":"true","aria-label":h.title},[e("h3",ve,a(h.title),1),X(b.$slots,"default")],12,be)])):L("",!0)]))}}),ye={class:"toolbar"},_e={class:"page-title"},xe={class:"page-sub"},ke=["placeholder"],Ce={class:"btn",type:"submit"},Se=["disabled","title"],Te={key:0,class:"loading-block"},$e={key:1,class:"card empty"},Fe={key:2,class:"table-wrap"},ze={class:"table"},De={style:{width:"36px"}},Ae=["checked"],Be={style:{"min-width":"210px"}},Ee=["checked","onChange"],we={class:"code-cell"},Ne=["title"],Ve={class:"row-actions"},Le=["onClick"],Me=["onClick"],Ue=["onClick"],Ie=["onClick"],Re=["onClick"],He={class:"field"},Pe={class:"field"},Oe={class:"field"},je=["value"],qe={class:"modal-actions"},Ke=["disabled"],Je=N({__name:"FilesView",setup(h){const{t}=te(),k=ne(),d=ie(),r=_([]),b=_(0),g=_(!1),m=A({page:1,size:10,keyword:""}),c=_(new Set);async function v(){g.value=!0;try{const n=await ue({...m});r.value=n.data,b.value=n.total,c.value=new Set}catch(n){d.error(n instanceof x?n.msg:t("admin.files.loadFailed"))}finally{g.value=!1}}function M(){m.page=1,v()}function U(n,i){m.page=n,m.size=i,v()}function I(n){const i=new Set(c.value);i.has(n)?i.delete(n):i.add(n),c.value=i}const F=()=>r.value.length>0&&r.value.every(n=>c.value.has(n.id));function R(){c.value=F()?new Set:new Set(r.value.map(n=>n.id))}async function H(n){if(window.confirm(t("admin.files.confirmDelete",{name:n.name||n.code})))try{await me(n.id),d.success(t("admin.files.deleteSuccess")),v()}catch(i){d.error(i instanceof x?i.msg:t("admin.files.deleteFailed"))}}async function P(){if(c.value.size&&window.confirm(t("admin.files.confirmBatchDelete",{count:c.value.size})))try{await re([...c.value]),d.success(t("admin.files.batchDeleteSuccess")),v()}catch(n){d.error(n instanceof x?n.msg:t("admin.files.batchDeleteFailed"))}}const y=_(!1),C=_(!1),o=A({id:0,code:"",expired_at:"",expired_count:null,original:null});function O(n){o.id=n.id,o.code=n.code,o.original=n,o.expired_at=n.expiredAt?j(n.expiredAt):"",o.expired_count=n.expiredCount,y.value=!0}function j(n){const i=new Date(n);if(Number.isNaN(i.getTime()))return"";const s=u=>`${u}`.padStart(2,"0");return`${i.getFullYear()}-${s(i.getMonth()+1)}-${s(i.getDate())}T${s(i.getHours())}:${s(i.getMinutes())}`}async function q(){const n=o.original;if(!n)return;const i={id:o.id};o.code.trim()&&o.code.trim()!==n.code&&(i.code=o.code.trim());const s=o.expired_count;if(s!==null&&s!==n.expiredCount&&(i.expired_count=s),o.expired_at){const u=new Date(o.expired_at).toISOString();u!==n.expiredAt&&(i.expired_at=u)}if(Object.keys(i).length===1){d.info(t("admin.files.nothingChanged")),y.value=!1;return}C.value=!0;try{await pe(i),d.success(t("admin.files.updateSuccess")),y.value=!1,v()}catch(u){d.error(u instanceof x?u.msg:t("admin.files.updateFailed"))}finally{C.value=!1}}async function K(n){await w(de(n.code,k.shareLinkBase))?d.success(t("admin.files.linkCopied")):d.error(t("common.copyFailed"))}async function W(n){await w(n.code)?d.success(t("admin.files.codeCopied")):d.error(t("common.copyFailed"))}async function G(n){try{const i=await fe(n.code);ce(new Blob([i],{type:"text/plain;charset=utf-8"}),n.name||`${n.code}.txt`)}catch(i){d.error(i instanceof x?i.msg:t("admin.files.fetchTextFailed"))}}function Q(n){return n.expiredCount===null||n.expiredCount<0?t("admin.files.remainingUnlimited"):t("admin.files.remainingCount",{n:n.expiredCount})}return V(v),(n,i)=>(p(),f("div",null,[e("div",ye,[e("div",null,[e("h2",_e,a(l(t)("admin.files.title")),1),e("p",xe,a(l(t)("admin.files.totalRecords",{total:b.value})),1)]),e("form",{class:"toolbar-actions",onSubmit:$(M,["prevent"])},[S(e("input",{"onUpdate:modelValue":i[0]||(i[0]=s=>m.keyword=s),class:"input",placeholder:l(t)("admin.files.searchPlaceholder"),style:{"max-width":"220px"}},null,8,ke),[[T,m.keyword]]),e("button",Ce,a(l(t)("common.search")),1),e("button",{class:"btn btn-ghost",type:"button",onClick:v},a(l(t)("common.refresh")),1),e("button",{class:"btn btn-danger-ghost",type:"button",disabled:!c.value.size,title:cLine truncated
@@ -1 +1 @@
import{d as W,u as Y,a as G,o as m,c as h,b as t,n as L,e as K,t as i,f as n,g as B,F as H,r as ne,h as $,E as q,_ as Z,i as ee,j as w,k as le,p as ae,l as se,w as O,m as ie,q as P,s as R,v as I,x as A,y as ue,z as re,A as ce,B as de,C as N,D as j,G as X,H as ve}from"./index-DYsKpclu.js";import{P as pe}from"./PageShell-D87JkPkG.js";import{s as me,a as he}from"./share-CqDDLJWI.js";import"./SiteNav.vue_vue_type_script_setup_true_lang-CwaEJKIZ.js";const fe={class:"field-row"},ye={class:"field-sub"},xe=["max","value"],be={class:"field-sub"},ke=["value"],_e=["value"],Se={key:0,class:"hint",style:{color:"var(--c-warn)"}},ge={key:1,class:"hint"},Ce={key:2,class:"hint"},$e={key:3,class:"hint"},ze=W({__name:"ExpirePicker",props:{value:{},style:{},compact:{type:Boolean}},emits:["update:value","update:style"],setup(a,{emit:e}){const o=a,c=e,{t:r,te:C}=Y(),f=G(),z=$(()=>{const g=f.expireStyle.length?f.expireStyle:["day","hour","minute","forever","count"],d=q.filter(x=>g.includes(x.value)),v=g.filter(x=>!q.some(E=>E.value===x)).map(x=>({value:x,label:x}));return[...d,...v]}),S=$(()=>o.style==="forever"),y=$(()=>o.style==="count"),p=$(()=>f.maxSaveCount>0?f.maxSaveCount:9999),b=$(()=>f.maxSaveSeconds>0?f.maxSaveSeconds:0),V={day:86400,hour:3600,minute:60};function u(g){const d=b.value,v=V[g];return v?d<=0?9999:Math.max(1,Math.floor(d/v)):g==="count"?p.value:9999}const l=$(()=>{if(y.value&&f.maxSaveCount>0&&o.value>f.maxSaveCount)return r("expire.maxCountHint",{n:f.maxSaveCount});if(!S.value&&!y.value&&b.value>0){const g=u(o.style);if(o.value>g){const d=q.find(v=>v.value===o.style)?.label??o.style;return r("expire.maxSecondsHint",{value:`${g} ${d}`})}}return""}),T=$(()=>q.find(g=>g.value===o.style)?.label??o.style);function M(g,d){const v=`expireStyle.${g}`;return C(v)?r(v):d}function F(g){const d=g.target.value;c("update:style",d),d==="count"&&o.value>p.value&&c("update:value",1),d==="minute"&&o.value<1&&c("update:value",10)}return(g,d)=>(m(),h(H,null,[t("div",fe,[S.value?B("",!0):(m(),h("label",{key:0,class:K(["expire-value",{compact:a.compact}]),style:L(a.compact?"flex:0 0 110px":"")},[t("span",ye,i(n(r)("expire.value")),1),t("input",{class:"input",type:"number",min:1,max:u(a.style),value:a.value,onInput:d[0]||(d[0]=v=>c("update:value",Math.max(1,Number(v.target.value)||1)))},null,40,xe)],6)),t("label",{style:L(S.value?"flex:1":"")},[t("span",be,i(n(r)("expire.label")),1),t("select",{class:"select",value:a.style,onChange:F},[(m(!0),h(H,null,ne(z.value,v=>(m(),h("option",{key:v.value,value:v.value},i(S.value&&v.value==="forever"?n(r)("expire.foreverOption"):v.value==="count"?n(r)("expire.countOption"):M(v.value,v.label)),9,_e))),128))],40,ke)],4)]),l.value?(m(),h("p",Se,i(l.value),1)):a.style==="count"?(m(),h("p",ge,i(n(r)("expire.countHint")),1)):S.value?(m(),h("p",$e,i(n(r)("expire.foreverHint")),1)):(m(),h("p",Ce,i(n(r)("expire.timeHint",{value:a.value,unit:T.value})),1))],64))}}),Q=Z(ze,[["__scopeId","data-v-d049fcf9"]]),we={class:"card result-card"},Te={class:"result-head"},Ve={class:"badge badge-success"},Ee={key:0,class:"result-name"},Me={class:"field"},Be=["title"],De={class:"field"},Fe={class:"link-row"},Pe=["value"],Ue={class:"result-meta"},Le={key:0},He={class:"hint",style:{"margin-top":"10px"}},Oe=W({__name:"ResultCard",props:{code:{},name:{},expireValue:{},expireStyle:{}},setup(a){const e=a,{t:o}=Y(),c=ee(),r=G(),C=w(null),f=$(()=>ae(e.code,r.shareLinkBase));async function z(y){const p=y==="link"?f.value:e.code;await le(p)?(C.value=y,c.success(o(y==="link"?"result.linkCopied":"result.codeCopied")),setTimeout(()=>C.value=null,1600)):c.error(o("result.copyFailed"))}const S=$(()=>e.expireStyle==="forever"?o("result.forever"):`${e.expireValue??"-"} ${se(e.expireStyle??"")}`);return(y,p)=>(m(),h("div",we,[t("div",Te,[t("span",Ve,i(n(o)("result.badge")),1),a.name?(m(),h("span",Ee,i(a.name),1)):B("",!0)]),t("div",Me,[t("label",null,i(n(o)("result.code")),1),t("button",{class:"code-display code-copy",type:"button",title:n(o)("result.clickCopyCode"),onClick:p[0]||(p[0]=b=>z("code"))},i(a.code),9,Be)]),t("div",De,[t("label",null,i(n(o)("result.link")),1),t("div",Fe,[t("input",{class:"input input-mono",value:f.value,readonly:"",onFocus:p[1]||(p[1]=b=>b.target.select())},null,40,Pe),t("button",{class:"btn btn-ghost",type:"button",onClick:p[2]||(p[2]=b=>z("link"))},i(C.value==="link"?n(o)("common.copied"):n(o)("result.copyLink")),1)])]),t("div",Ue,[a.expireStyle?(m(),h("span",Le,i(n(o)("result.expires",{value:S.value})),1)):B("",!0)]),t("p",He,i(n(o)("result.hint")),1)]))}}),Re=Z(Oe,[["__scopeId","data-v-8bebf3d9"]]),Ie=["aria-label"],Ae={class:"dz-main"},qe={class:"dz-sub"},Ne={key:1,class:"file-chip"},je={class:"fc-name"},Xe={class:"fc-size"},Ke=["title"],We={key:2,class:"hint",style:{color:"var(--c-danger)"}},Ye=["accept"],Ge=W({__name:"FileDrop",props:{modelValue:{},maxSize:{},disabled:{type:Boolean},acceptTypes:{}},emits:["update:modelValue"],setup(a,{emit:e}){const o=a,c=e,{t:r}=Y(),C=w(null),f=w(!1),z=w(""),S=$(Line truncated
import{d as W,u as Y,a as G,o as m,c as h,b as t,n as L,e as K,t as i,f as n,g as B,F as H,r as ne,h as $,E as q,_ as Z,i as ee,j as w,k as le,p as ae,l as se,w as O,m as ie,q as P,s as R,v as I,x as A,y as ue,z as re,A as ce,B as de,C as N,D as j,G as X,H as ve}from"./index-BKnWAKao.js";import{P as pe}from"./PageShell-CBo29Oot.js";import{s as me,a as he}from"./share-B-zR67vw.js";import"./SiteNav.vue_vue_type_script_setup_true_lang-D3yLF4uh.js";const fe={class:"field-row"},ye={class:"field-sub"},xe=["max","value"],be={class:"field-sub"},ke=["value"],_e=["value"],Se={key:0,class:"hint",style:{color:"var(--c-warn)"}},ge={key:1,class:"hint"},Ce={key:2,class:"hint"},$e={key:3,class:"hint"},ze=W({__name:"ExpirePicker",props:{value:{},style:{},compact:{type:Boolean}},emits:["update:value","update:style"],setup(a,{emit:e}){const o=a,c=e,{t:r,te:C}=Y(),f=G(),z=$(()=>{const g=f.expireStyle.length?f.expireStyle:["day","hour","minute","forever","count"],d=q.filter(x=>g.includes(x.value)),v=g.filter(x=>!q.some(E=>E.value===x)).map(x=>({value:x,label:x}));return[...d,...v]}),S=$(()=>o.style==="forever"),y=$(()=>o.style==="count"),p=$(()=>f.maxSaveCount>0?f.maxSaveCount:9999),b=$(()=>f.maxSaveSeconds>0?f.maxSaveSeconds:0),V={day:86400,hour:3600,minute:60};function u(g){const d=b.value,v=V[g];return v?d<=0?9999:Math.max(1,Math.floor(d/v)):g==="count"?p.value:9999}const l=$(()=>{if(y.value&&f.maxSaveCount>0&&o.value>f.maxSaveCount)return r("expire.maxCountHint",{n:f.maxSaveCount});if(!S.value&&!y.value&&b.value>0){const g=u(o.style);if(o.value>g){const d=q.find(v=>v.value===o.style)?.label??o.style;return r("expire.maxSecondsHint",{value:`${g} ${d}`})}}return""}),T=$(()=>q.find(g=>g.value===o.style)?.label??o.style);function M(g,d){const v=`expireStyle.${g}`;return C(v)?r(v):d}function F(g){const d=g.target.value;c("update:style",d),d==="count"&&o.value>p.value&&c("update:value",1),d==="minute"&&o.value<1&&c("update:value",10)}return(g,d)=>(m(),h(H,null,[t("div",fe,[S.value?B("",!0):(m(),h("label",{key:0,class:K(["expire-value",{compact:a.compact}]),style:L(a.compact?"flex:0 0 110px":"")},[t("span",ye,i(n(r)("expire.value")),1),t("input",{class:"input",type:"number",min:1,max:u(a.style),value:a.value,onInput:d[0]||(d[0]=v=>c("update:value",Math.max(1,Number(v.target.value)||1)))},null,40,xe)],6)),t("label",{style:L(S.value?"flex:1":"")},[t("span",be,i(n(r)("expire.label")),1),t("select",{class:"select",value:a.style,onChange:F},[(m(!0),h(H,null,ne(z.value,v=>(m(),h("option",{key:v.value,value:v.value},i(S.value&&v.value==="forever"?n(r)("expire.foreverOption"):v.value==="count"?n(r)("expire.countOption"):M(v.value,v.label)),9,_e))),128))],40,ke)],4)]),l.value?(m(),h("p",Se,i(l.value),1)):a.style==="count"?(m(),h("p",ge,i(n(r)("expire.countHint")),1)):S.value?(m(),h("p",$e,i(n(r)("expire.foreverHint")),1)):(m(),h("p",Ce,i(n(r)("expire.timeHint",{value:a.value,unit:T.value})),1))],64))}}),Q=Z(ze,[["__scopeId","data-v-d049fcf9"]]),we={class:"card result-card"},Te={class:"result-head"},Ve={class:"badge badge-success"},Ee={key:0,class:"result-name"},Me={class:"field"},Be=["title"],De={class:"field"},Fe={class:"link-row"},Pe=["value"],Ue={class:"result-meta"},Le={key:0},He={class:"hint",style:{"margin-top":"10px"}},Oe=W({__name:"ResultCard",props:{code:{},name:{},expireValue:{},expireStyle:{}},setup(a){const e=a,{t:o}=Y(),c=ee(),r=G(),C=w(null),f=$(()=>ae(e.code,r.shareLinkBase));async function z(y){const p=y==="link"?f.value:e.code;await le(p)?(C.value=y,c.success(o(y==="link"?"result.linkCopied":"result.codeCopied")),setTimeout(()=>C.value=null,1600)):c.error(o("result.copyFailed"))}const S=$(()=>e.expireStyle==="forever"?o("result.forever"):`${e.expireValue??"-"} ${se(e.expireStyle??"")}`);return(y,p)=>(m(),h("div",we,[t("div",Te,[t("span",Ve,i(n(o)("result.badge")),1),a.name?(m(),h("span",Ee,i(a.name),1)):B("",!0)]),t("div",Me,[t("label",null,i(n(o)("result.code")),1),t("button",{class:"code-display code-copy",type:"button",title:n(o)("result.clickCopyCode"),onClick:p[0]||(p[0]=b=>z("code"))},i(a.code),9,Be)]),t("div",De,[t("label",null,i(n(o)("result.link")),1),t("div",Fe,[t("input",{class:"input input-mono",value:f.value,readonly:"",onFocus:p[1]||(p[1]=b=>b.target.select())},null,40,Pe),t("button",{class:"btn btn-ghost",type:"button",onClick:p[2]||(p[2]=b=>z("link"))},i(C.value==="link"?n(o)("common.copied"):n(o)("result.copyLink")),1)])]),t("div",Ue,[a.expireStyle?(m(),h("span",Le,i(n(o)("result.expires",{value:S.value})),1)):B("",!0)]),t("p",He,i(n(o)("result.hint")),1)]))}}),Re=Z(Oe,[["__scopeId","data-v-8bebf3d9"]]),Ie=["aria-label"],Ae={class:"dz-main"},qe={class:"dz-sub"},Ne={key:1,class:"file-chip"},je={class:"fc-name"},Xe={class:"fc-size"},Ke=["title"],We={key:2,class:"hint",style:{color:"var(--c-danger)"}},Ye=["accept"],Ge=W({__name:"FileDrop",props:{modelValue:{},maxSize:{},disabled:{type:Boolean},acceptTypes:{}},emits:["update:modelValue"],setup(a,{emit:e}){const o=a,c=e,{t:r}=Y(),C=w(null),f=w(!1),z=w(""),S=$(Line truncated
@@ -1 +1 @@
import{d as w,u as b,a as y,z as x,A as k,b as e,f as t,t as a,w as V,C as B,D as C,c as m,g as _,q as N,j as r,N as S,B as q,o as d,H as L,_ as P}from"./index-DYsKpclu.js";import{P as A}from"./PageShell-D87JkPkG.js";import{u as D}from"./auth-B7MDTgxJ.js";import"./SiteNav.vue_vue_type_script_setup_true_lang-CwaEJKIZ.js";import"./admin-DEOkRyTC.js";const E={class:"card",style:{"max-width":"380px",margin:"8vh auto 0"}},I={class:"login-head"},M=["src"],R={class:"card-title"},T={class:"card-sub"},U={class:"field"},j={for:"admin-password"},z=["placeholder"],H={key:0,class:"hint",style:{color:"var(--c-danger)","margin-bottom":"12px"}},F=["disabled"],G={key:0,class:"spin","aria-hidden":"true"},J={class:"hint",style:{"margin-top":"16px"}},K=w({__name:"LoginView",setup(O){const{t:s}=b(),c=S(),g=q(),h=D(),u=y(),i=r(""),l=r(!1),n=r("");async function f(){if(!i.value){n.value=s("admin.login.required");return}l.value=!0,n.value="";try{await h.login(i.value);const o=typeof c.query.redirect=="string"?c.query.redirect:"/admin/files";g.replace(o)}catch(o){n.value=o instanceof L?o.code===401?s("admin.login.wrongPassword"):o.msg:s("admin.login.failed"),i.value=""}finally{l.value=!1}}return(o,p)=>(d(),x(A,null,{default:k(()=>[e("section",E,[e("div",I,[e("img",{src:t(u).displayLogoUrl,alt:"Logo",class:"login-logo"},null,8,M),e("h1",R,a(t(s)("admin.login.title")),1),e("p",T,a(t(s)("admin.login.subtitle",{name:t(u).displayName})),1)]),e("form",{onSubmit:V(f,["prevent"])},[e("div",U,[e("label",j,a(t(s)("admin.login.password")),1),B(e("input",{id:"admin-password","onUpdate:modelValue":p[0]||(p[0]=v=>i.value=v),class:"input",type:"password",placeholder:t(s)("admin.login.passwordPlaceholder"),autocomplete:"current-password",autofocus:""},null,8,z),[[C,i.value]])]),n.value?(d(),m("p",H,a(n.value),1)):_("",!0),e("button",{class:"btn btn-block",type:"submit",disabled:l.value},[l.value?(d(),m("span",G)):_("",!0),N(" "+a(t(s)("admin.login.submit")),1)],8,F)],32),e("p",J,a(t(s)("admin.login.hint")),1)])]),_:1}))}}),$=P(K,[["__scopeId","data-v-26e7f2a4"]]);export{$ as default};
import{d as w,u as b,a as y,z as x,A as k,b as e,f as t,t as a,w as V,C as B,D as C,c as m,g as _,q as N,j as r,N as S,B as q,o as d,H as L,_ as P}from"./index-BKnWAKao.js";import{P as A}from"./PageShell-CBo29Oot.js";import{u as D}from"./auth-Cp2GGuZy.js";import"./SiteNav.vue_vue_type_script_setup_true_lang-D3yLF4uh.js";import"./admin-KnbIpHLF.js";const E={class:"card",style:{"max-width":"380px",margin:"8vh auto 0"}},I={class:"login-head"},M=["src"],R={class:"card-title"},T={class:"card-sub"},U={class:"field"},j={for:"admin-password"},z=["placeholder"],H={key:0,class:"hint",style:{color:"var(--c-danger)","margin-bottom":"12px"}},F=["disabled"],G={key:0,class:"spin","aria-hidden":"true"},J={class:"hint",style:{"margin-top":"16px"}},K=w({__name:"LoginView",setup(O){const{t:s}=b(),c=S(),g=q(),h=D(),u=y(),i=r(""),l=r(!1),n=r("");async function f(){if(!i.value){n.value=s("admin.login.required");return}l.value=!0,n.value="";try{await h.login(i.value);const o=typeof c.query.redirect=="string"?c.query.redirect:"/admin/files";g.replace(o)}catch(o){n.value=o instanceof L?o.code===401?s("admin.login.wrongPassword"):o.msg:s("admin.login.failed"),i.value=""}finally{l.value=!1}}return(o,p)=>(d(),x(A,null,{default:k(()=>[e("section",E,[e("div",I,[e("img",{src:t(u).displayLogoUrl,alt:"Logo",class:"login-logo"},null,8,M),e("h1",R,a(t(s)("admin.login.title")),1),e("p",T,a(t(s)("admin.login.subtitle",{name:t(u).displayName})),1)]),e("form",{onSubmit:V(f,["prevent"])},[e("div",U,[e("label",j,a(t(s)("admin.login.password")),1),B(e("input",{id:"admin-password","onUpdate:modelValue":p[0]||(p[0]=v=>i.value=v),class:"input",type:"password",placeholder:t(s)("admin.login.passwordPlaceholder"),autocomplete:"current-password",autofocus:""},null,8,z),[[C,i.value]])]),n.value?(d(),m("p",H,a(n.value),1)):_("",!0),e("button",{class:"btn btn-block",type:"submit",disabled:l.value},[l.value?(d(),m("span",G)):_("",!0),N(" "+a(t(s)("admin.login.submit")),1)],8,F)],32),e("p",J,a(t(s)("admin.login.hint")),1)])]),_:1}))}}),$=P(K,[["__scopeId","data-v-26e7f2a4"]]);export{$ as default};
@@ -1 +1 @@
import{d as c,u as i,z as d,A as a,b as t,t as e,f as s,G as l,q as p,O as u,o as _}from"./index-DYsKpclu.js";import{P as m}from"./PageShell-D87JkPkG.js";import"./SiteNav.vue_vue_type_script_setup_true_lang-CwaEJKIZ.js";const f={class:"card empty",style:{"max-width":"480px",margin:"10vh auto 0"}},h={style:{"font-weight":"600",color:"var(--c-text)"}},x={class:"hint"},F=c({__name:"NotFoundView",setup(y){const{t:o}=i();return(g,n)=>{const r=u("RouterLink");return _(),d(m,null,{default:a(()=>[t("div",f,[n[0]||(n[0]=t("div",{class:"empty-icon"},"🧭",-1)),t("p",h,e(s(o)("notFound.title")),1),t("p",x,e(s(o)("notFound.desc")),1),l(r,{class:"btn",to:"/",style:{"margin-top":"10px"}},{default:a(()=>[p(e(s(o)("notFound.back")),1)]),_:1})])]),_:1})}}});export{F as default};
import{d as c,u as i,z as d,A as a,b as t,t as e,f as s,G as l,q as p,O as u,o as _}from"./index-BKnWAKao.js";import{P as m}from"./PageShell-CBo29Oot.js";import"./SiteNav.vue_vue_type_script_setup_true_lang-D3yLF4uh.js";const f={class:"card empty",style:{"max-width":"480px",margin:"10vh auto 0"}},h={style:{"font-weight":"600",color:"var(--c-text)"}},x={class:"hint"},F=c({__name:"NotFoundView",setup(y){const{t:o}=i();return(g,n)=>{const r=u("RouterLink");return _(),d(m,null,{default:a(()=>[t("div",f,[n[0]||(n[0]=t("div",{class:"empty-icon"},"🧭",-1)),t("p",h,e(s(o)("notFound.title")),1),t("p",x,e(s(o)("notFound.desc")),1),l(r,{class:"btn",to:"/",style:{"margin-top":"10px"}},{default:a(()=>[p(e(s(o)("notFound.back")),1)]),_:1})])]),_:1})}}});export{F as default};
@@ -1,4 +1,4 @@
import{d as jU,u as PU,I as NU,ax as Xw,z as TU,A as IU,j as rA,b as Lc,t as Km,f as Gm,e as MU,c as RU,g as DU,h as nA,o as aA,_ as FU}from"./index-DYsKpclu.js";import{P as LU}from"./PageShell-D87JkPkG.js";import{g as $U}from"./swagger-CqkleIqs.js";import{e as oA}from"./docsSource-BXkkn0HE.js";import"./SiteNav.vue_vue_type_script_setup_true_lang-CwaEJKIZ.js";var Qw={exports:{}};var iA;function BU(){return iA||(iA=1,(()=>{var eE={67526(w,N){N.byteLength=function(_){var T=m(_),I=T[0],j=T[1];return 3*(I+j)/4-j},N.toByteArray=function(_){var T,I,j=m(_),M=j[0],z=j[1],K=new v((function(te,ie,se){return 3*(ie+se)/4-se})(0,M,z)),Y=0,B=z>0?M-4:M;for(I=0;I<B;I+=4)T=h[_.charCodeAt(I)]<<18|h[_.charCodeAt(I+1)]<<12|h[_.charCodeAt(I+2)]<<6|h[_.charCodeAt(I+3)],K[Y++]=T>>16&255,K[Y++]=T>>8&255,K[Y++]=255&T;return z===2&&(T=h[_.charCodeAt(I)]<<2|h[_.charCodeAt(I+1)]>>4,K[Y++]=255&T),z===1&&(T=h[_.charCodeAt(I)]<<10|h[_.charCodeAt(I+1)]<<4|h[_.charCodeAt(I+2)]>>2,K[Y++]=T>>8&255,K[Y++]=255&T),K},N.fromByteArray=function(_){for(var T,I=_.length,j=I%3,M=[],z=16383,K=0,Y=I-j;K<Y;K+=z)M.push(g(_,K,K+z>Y?Y:K+z));return j===1?(T=_[I-1],M.push(s[T>>2]+s[T<<4&63]+"==")):j===2&&(T=(_[I-2]<<8)+_[I-1],M.push(s[T>>10]+s[T>>4&63]+s[T<<2&63]+"=")),M.join("")};for(var s=[],h=[],v=typeof Uint8Array<"u"?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",y=0;y<64;++y)s[y]=f[y],h[f.charCodeAt(y)]=y;function m(S){var _=S.length;if(_%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var T=S.indexOf("=");return T===-1&&(T=_),[T,T===_?0:4-T%4]}function g(S,_,T){for(var I,j,M=[],z=_;z<T;z+=3)I=(S[z]<<16&16711680)+(S[z+1]<<8&65280)+(255&S[z+2]),M.push(s[(j=I)>>18&63]+s[j>>12&63]+s[j>>6&63]+s[63&j]);return M.join("")}h[45]=62,h[95]=63},48287(w,N,s){const h=s(67526),v=s(251),f=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;N.Buffer=g,N.SlowBuffer=function(U){return+U!=U&&(U=0),g.alloc(+U)},N.INSPECT_MAX_BYTES=50;const y=2147483647;function m(pe){if(pe>y)throw new RangeError('The value "'+pe+'" is invalid for option "size"');const U=new Uint8Array(pe);return Object.setPrototypeOf(U,g.prototype),U}function g(pe,U,Z){if(typeof pe=="number"){if(typeof U=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return T(pe)}return S(pe,U,Z)}function S(pe,U,Z){if(typeof pe=="string")return(function(Fe,St){if(typeof St=="string"&&St!==""||(St="utf8"),!g.isEncoding(St))throw new TypeError("Unknown encoding: "+St);const Bt=0|z(Fe,St);let Qe=m(Bt);const $t=Qe.write(Fe,St);return $t!==Bt&&(Qe=Qe.slice(0,$t)),Qe})(pe,U);if(ArrayBuffer.isView(pe))return(function(Fe){if(Gt(Fe,Uint8Array)){const St=new Uint8Array(Fe);return j(St.buffer,St.byteOffset,St.byteLength)}return I(Fe)})(pe);if(pe==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof pe);if(Gt(pe,ArrayBuffer)||pe&&Gt(pe.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(Gt(pe,SharedArrayBuffer)||pe&&Gt(pe.buffer,SharedArrayBuffer)))return j(pe,U,Z);if(typeof pe=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');const ne=pe.valueOf&&pe.valueOf();if(ne!=null&&ne!==pe)return g.from(ne,U,Z);const ye=(function(Fe){if(g.isBuffer(Fe)){const St=0|M(Fe.length),Bt=m(St);return Bt.length===0||Fe.copy(Bt,0,0,St),Bt}if(Fe.length!==void 0)return typeof Fe.length!="number"||Sr(Fe.length)?m(0):I(Fe);if(Fe.type==="Buffer"&&Array.isArray(Fe.data))return I(Fe.data)})(pe);if(ye)return ye;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof pe[Symbol.toPrimitive]=="function")return g.from(pe[Symbol.toPrimitive]("string"),U,Z);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof pe)}function _(pe){if(typeof pe!="number")throw new TypeError('"size" argument must be of type number');if(pe<0)throw new RangeError('The value "'+pe+'" is invalid for option "size"')}function T(pe){return _(pe),m(pe<0?0:0|M(pe))}function I(pe){const U=pe.length<0?0:0|M(pe.length),Z=m(U);for(let ne=0;ne<U;ne+=1)Z[ne]=255&pe[ne];return Z}function j(pe,U,Z){if(U<0||pe.byteLength<U)throw new RangeError('"offset" is outside of buffer bounds');if(pe.byteLength<U+(Z||0))throw new RangeError('"length" is outside of buffer bounds');let ne;return ne=U===void 0&&Z===void 0?new Uint8Array(pe):Z===void 0?new Uint8Array(pe,U):new Uint8Array(pe,U,Z),Object.setPrototypeOf(ne,g.prototype),ne}function M(pe){if(pe>=y)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+y.toString(16)+" bytes");return 0|pe}function z(pe,U){if(g.isBuffer(pe))return pe.length;if(ArrayBuffer.isView(pe)||Gt(pe,ArrayBuffer))return pe.byteLength;if(typeof pe!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof peLine truncated
import{d as jU,u as PU,I as NU,ax as Xw,z as TU,A as IU,j as rA,b as Lc,t as Km,f as Gm,e as MU,c as RU,g as DU,h as nA,o as aA,_ as FU}from"./index-BKnWAKao.js";import{P as LU}from"./PageShell-CBo29Oot.js";import{g as $U}from"./swagger-CqkleIqs.js";import{e as oA}from"./docsSource-Df5ur5C4.js";import"./SiteNav.vue_vue_type_script_setup_true_lang-D3yLF4uh.js";var Qw={exports:{}};var iA;function BU(){return iA||(iA=1,(()=>{var eE={67526(w,N){N.byteLength=function(_){var T=m(_),I=T[0],j=T[1];return 3*(I+j)/4-j},N.toByteArray=function(_){var T,I,j=m(_),M=j[0],z=j[1],K=new v((function(te,ie,se){return 3*(ie+se)/4-se})(0,M,z)),Y=0,B=z>0?M-4:M;for(I=0;I<B;I+=4)T=h[_.charCodeAt(I)]<<18|h[_.charCodeAt(I+1)]<<12|h[_.charCodeAt(I+2)]<<6|h[_.charCodeAt(I+3)],K[Y++]=T>>16&255,K[Y++]=T>>8&255,K[Y++]=255&T;return z===2&&(T=h[_.charCodeAt(I)]<<2|h[_.charCodeAt(I+1)]>>4,K[Y++]=255&T),z===1&&(T=h[_.charCodeAt(I)]<<10|h[_.charCodeAt(I+1)]<<4|h[_.charCodeAt(I+2)]>>2,K[Y++]=T>>8&255,K[Y++]=255&T),K},N.fromByteArray=function(_){for(var T,I=_.length,j=I%3,M=[],z=16383,K=0,Y=I-j;K<Y;K+=z)M.push(g(_,K,K+z>Y?Y:K+z));return j===1?(T=_[I-1],M.push(s[T>>2]+s[T<<4&63]+"==")):j===2&&(T=(_[I-2]<<8)+_[I-1],M.push(s[T>>10]+s[T>>4&63]+s[T<<2&63]+"=")),M.join("")};for(var s=[],h=[],v=typeof Uint8Array<"u"?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",y=0;y<64;++y)s[y]=f[y],h[f.charCodeAt(y)]=y;function m(S){var _=S.length;if(_%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var T=S.indexOf("=");return T===-1&&(T=_),[T,T===_?0:4-T%4]}function g(S,_,T){for(var I,j,M=[],z=_;z<T;z+=3)I=(S[z]<<16&16711680)+(S[z+1]<<8&65280)+(255&S[z+2]),M.push(s[(j=I)>>18&63]+s[j>>12&63]+s[j>>6&63]+s[63&j]);return M.join("")}h[45]=62,h[95]=63},48287(w,N,s){const h=s(67526),v=s(251),f=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;N.Buffer=g,N.SlowBuffer=function(U){return+U!=U&&(U=0),g.alloc(+U)},N.INSPECT_MAX_BYTES=50;const y=2147483647;function m(pe){if(pe>y)throw new RangeError('The value "'+pe+'" is invalid for option "size"');const U=new Uint8Array(pe);return Object.setPrototypeOf(U,g.prototype),U}function g(pe,U,Z){if(typeof pe=="number"){if(typeof U=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return T(pe)}return S(pe,U,Z)}function S(pe,U,Z){if(typeof pe=="string")return(function(Fe,St){if(typeof St=="string"&&St!==""||(St="utf8"),!g.isEncoding(St))throw new TypeError("Unknown encoding: "+St);const Bt=0|z(Fe,St);let Qe=m(Bt);const $t=Qe.write(Fe,St);return $t!==Bt&&(Qe=Qe.slice(0,$t)),Qe})(pe,U);if(ArrayBuffer.isView(pe))return(function(Fe){if(Gt(Fe,Uint8Array)){const St=new Uint8Array(Fe);return j(St.buffer,St.byteOffset,St.byteLength)}return I(Fe)})(pe);if(pe==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof pe);if(Gt(pe,ArrayBuffer)||pe&&Gt(pe.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(Gt(pe,SharedArrayBuffer)||pe&&Gt(pe.buffer,SharedArrayBuffer)))return j(pe,U,Z);if(typeof pe=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');const ne=pe.valueOf&&pe.valueOf();if(ne!=null&&ne!==pe)return g.from(ne,U,Z);const ye=(function(Fe){if(g.isBuffer(Fe)){const St=0|M(Fe.length),Bt=m(St);return Bt.length===0||Fe.copy(Bt,0,0,St),Bt}if(Fe.length!==void 0)return typeof Fe.length!="number"||Sr(Fe.length)?m(0):I(Fe);if(Fe.type==="Buffer"&&Array.isArray(Fe.data))return I(Fe.data)})(pe);if(ye)return ye;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof pe[Symbol.toPrimitive]=="function")return g.from(pe[Symbol.toPrimitive]("string"),U,Z);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof pe)}function _(pe){if(typeof pe!="number")throw new TypeError('"size" argument must be of type number');if(pe<0)throw new RangeError('The value "'+pe+'" is invalid for option "size"')}function T(pe){return _(pe),m(pe<0?0:0|M(pe))}function I(pe){const U=pe.length<0?0:0|M(pe.length),Z=m(U);for(let ne=0;ne<U;ne+=1)Z[ne]=255&pe[ne];return Z}function j(pe,U,Z){if(U<0||pe.byteLength<U)throw new RangeError('"offset" is outside of buffer bounds');if(pe.byteLength<U+(Z||0))throw new RangeError('"length" is outside of buffer bounds');let ne;return ne=U===void 0&&Z===void 0?new Uint8Array(pe):Z===void 0?new Uint8Array(pe,U):new Uint8Array(pe,U,Z),Object.setPrototypeOf(ne,g.prototype),ne}function M(pe){if(pe>=y)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+y.toString(16)+" bytes");return 0|pe}function z(pe,U){if(g.isBuffer(pe))return pe.length;if(ArrayBuffer.isView(pe)||Gt(pe,ArrayBuffer))return pe.byteLength;if(typeof pe!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof peLine truncated
https://github.com/highlightjs/highlight.js/issues/2277`),Nn=sr,Mr=br);const nn={code:Mr,language:Nn};ds("before:highlight",nn);const fn=nn.result?nn.result:An(nn.language,nn.code,tn,Cr);return fn.code=nn.code,ds("after:highlight",fn),fn}function An(sr,br,tn,Cr){function Mr(Yt,gr){const mr=ea.case_insensitive?gr[0].toLowerCase():gr[0];return Object.prototype.hasOwnProperty.call(Yt.keywords,mr)&&Yt.keywords[mr]}function Nn(){Rr.subLanguage!=null?(function(){if(xn==="")return;let gr=null;if(typeof Rr.subLanguage=="string"){if(!ye[Rr.subLanguage])return void Nr.addText(xn);gr=An(Rr.subLanguage,xn,!0,ko[Rr.subLanguage]),ko[Rr.subLanguage]=gr.top}else gr=Wr(xn,Rr.subLanguage.length?Rr.subLanguage:null);Rr.relevance>0&&(fi+=gr.relevance),Nr.addSublanguage(gr.emitter,gr.language)})():(function(){if(!Rr.keywords)return void Nr.addText(xn);let gr=0;Rr.keywordPatternRe.lastIndex=0;let mr=Rr.keywordPatternRe.exec(xn),Vr="";for(;mr;){Vr+=xn.substring(gr,mr.index);const Gr=Mr(Rr,mr);if(Gr){const[sa,Sa]=Gr;if(Nr.addText(Vr),Vr="",fi+=Sa,sa.startsWith("_"))Vr+=mr[0];else{const Ja=ea.classNameAliases[sa]||sa;Nr.addKeyword(mr[0],Ja)}}else Vr+=mr[0];gr=Rr.keywordPatternRe.lastIndex,mr=Rr.keywordPatternRe.exec(xn)}Vr+=xn.substr(gr),Nr.addText(Vr)})(),xn=""}function nn(Yt){return Yt.className&&Nr.openNode(ea.classNameAliases[Yt.className]||Yt.className),Rr=Object.create(Yt,{parent:{value:Rr}}),Rr}function fn(Yt,gr,mr){let Vr=(function(sa,Sa){const Ja=sa&&sa.exec(Sa);return Ja&&Ja.index===0})(Yt.endRe,mr);if(Vr){if(Yt["on:end"]){const Gr=new v(Yt);Yt["on:end"](gr,Gr),Gr.isMatchIgnored&&(Vr=!1)}if(Vr){for(;Yt.endsParent&&Yt.parent;)Yt=Yt.parent;return Yt}}if(Yt.endsWithParent)return fn(Yt.parent,gr,mr)}function Ln(Yt){return Rr.matcher.regexIndex===0?(xn+=Yt[0],1):(ms=!0,0)}function Hr(Yt){const gr=Yt[0],mr=Yt.rule,Vr=new v(mr),Gr=[mr.__beforeBegin,mr["on:begin"]];for(const sa of Gr)if(sa&&(sa(Yt,Vr),Vr.isMatchIgnored))return Ln(gr);return mr&&mr.endSameAsBegin&&(mr.endRe=(function(Sa){return new RegExp(Sa.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")})(gr)),mr.skip?xn+=gr:(mr.excludeBegin&&(xn+=gr),Nn(),mr.returnBegin||mr.excludeBegin||(xn=gr)),nn(mr),mr.returnBegin?0:gr.length}function ia(Yt){const gr=Yt[0],mr=br.substr(Yt.index),Vr=fn(Rr,Yt,mr);if(!Vr)return U;const Gr=Rr;Gr.skip?xn+=gr:(Gr.returnEnd||Gr.excludeEnd||(xn+=gr),Nn(),Gr.excludeEnd&&(xn=gr));do Rr.className&&Nr.closeNode(),Rr.skip||Rr.subLanguage||(fi+=Rr.relevance),Rr=Rr.parent;while(Rr!==Vr.parent);return Vr.starts&&(Vr.endSameAsBegin&&(Vr.starts.endRe=Vr.endRe),nn(Vr.starts)),Gr.returnEnd?0:gr.length}let za={};function fs(Yt,gr){const mr=gr&&gr[0];if(xn+=Yt,mr==null)return Nn(),0;if(za.type==="begin"&&gr.type==="end"&&za.index===gr.index&&mr===""){if(xn+=br.slice(gr.index,gr.index+1),!St){const Vr=new Error("0 width match regex");throw Vr.languageName=sr,Vr.badRule=za.rule,Vr}return 1}if(za=gr,gr.type==="begin")return Hr(gr);if(gr.type==="illegal"&&!tn){const Vr=new Error('Illegal lexeme "'+mr+'" for mode "'+(Rr.className||"<unnamed>")+'"');throw Vr.mode=Rr,Vr}if(gr.type==="end"){const Vr=ia(gr);if(Vr!==U)return Vr}if(gr.type==="illegal"&&mr==="")return 1;if(Jo>1e5&&Jo>3*gr.index)throw new Error("potential infinite loop, way more iterations than matches");return xn+=mr,mr.length}const ea=Fn(sr);if(!ea)throw Sr(Qe.replace("{}",sr)),new Error('Unknown language: "'+sr+'"');const di=we(ea,{plugins:Fe});let Va="",Rr=Cr||di;const ko={},Nr=new Pt.__emitter(Pt);(function(){const gr=[];for(let mr=Rr;mr!==ea;mr=mr.parent)mr.className&&gr.unshift(mr.className);gr.forEach((mr=>Nr.openNode(mr)))})();let xn="",fi=0,ta=0,Jo=0,ms=!1;try{for(Rr.matcher.considerAll();;){Jo++,ms?ms=!1:Rr.matcher.considerAll(),Rr.matcher.lastIndex=ta;const Yt=Rr.matcher.exec(br);if(!Yt)break;const gr=fs(br.substring(ta,Yt.index),Yt);ta=Yt.index+gr}return fs(br.substr(ta)),Nr.closeAllNodes(),Nr.finalize(),Va=Nr.toHTML(),{relevance:Math.floor(fi),value:Va,language:sr,illegal:!1,emitter:Nr,top:Rr}}catch(Yt){if(Yt.message&&Yt.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:Yt.message,context:br.slice(ta-100,ta+100),mode:Yt.mode},sofar:Va,relevance:0,value:Zt(br),emitter:Nr};if(St)return{illegal:!1,relevance:0,value:Zt(br),emitter:Nr,language:sr,top:Rr,errorRaised:Yt};throw Yt}}function Wr(sr,br){br=br||Pt.languages||Object.keys(ye);const tn=(function(Hr){const ia={relevance:0,emitter:new Pt.__emitter(Pt),value:Zt(Hr),illegal:!1,top:$t};return ia.emitter.addText(Hr),ia})(sr),Cr=br.filter(Fn).filter(Vo).map((Ln=>An(Ln,sr,!1)));Cr.unshift(tn);const Mr=Cr.sort(((Ln,Hr)=>{if(Ln.relevance!==Hr.relevance)return Hr.relevance-Ln.relevance;if(Ln.language&&Hr.language){if(Fn(Ln.language).supersetOf===Hr.language)return 1;if(Fn(Hr.language).supersetOf===Ln.language)return-1}return 0})),[Nn,nn]=Mr,fn=Nn;return fn.second_best=nn,fn}const Jn={"before:highlightElement":({el:sr})=>{Pt.useBR&&(sr.innerHTML=sr.innerHTML.replace(/\n/g,"").replace(/<br[ /]*>/g,`
`))},"after:highlightElement":({result:sr})=>{Pt.useBR&&(sr.value=sr.value.replace(/\n/g,"<br>"))}},Ea=/^(<[^>]+>|\t)+/gm,Zn={"after:highlightElement":({result:sr})=>{Pt.tabReplace&&(sr.value=sr.value.replace(Ea,(br=>br.replace(/\t/g,Pt.tabReplace))))}};function un(sr){let br=null;const tn=(function(nn){let fn=nn.className+" ";fn+=nn.parentNode?nn.parentNode.className:"";const Ln=Pt.languageDetectRe.exec(fn);if(Ln){const Hr=Fn(Ln[1]);return Hr||(kt(Qe.replace("{}",Ln[1])),kt("Falling back to no-highlight mode for this block.",nn)),Hr?Ln[1]:"no-highlight"}return fn.split(/\s+/).find((Hr=>rn(Hr)||Fn(Hr)))})(sr);if(rn(tn))return;ds("before:highlightElement",{el:sr,language:tn}),br=sr;const Cr=br.textContent,Mr=tn?kr(Cr,{language:tn,ignoreIllegals:!0}):Wr(Cr);ds("after:highlightElement",{el:sr,result:Mr,text:Cr}),sr.innerHTML=Mr.value,(function(nn,fn,Ln){const Hr=fn?Ee[fn]:Ln;nn.classList.add("hljs"),Hr&&nn.classList.add(Hr)})(sr,tn,Mr.language),sr.result={language:Mr.language,re:Mr.relevance,relavance:Mr.relevance},Mr.second_best&&(sr.second_best={language:Mr.second_best.language,re:Mr.second_best.relevance,relavance:Mr.second_best.relevance})}const ti=()=>{ti.called||(ti.called=!0,yt("10.6.0","initHighlighting() is deprecated. Use highlightAll() instead."),document.querySelectorAll("pre code").forEach(un))};let Oo=!1;function Li(){if(document.readyState==="loading")return void(Oo=!0);document.querySelectorAll("pre code").forEach(un)}function Fn(sr){return sr=(sr||"").toLowerCase(),ye[sr]||ye[Ee[sr]]}function zo(sr,{languageName:br}){typeof sr=="string"&&(sr=[sr]),sr.forEach((tn=>{Ee[tn.toLowerCase()]=br}))}function Vo(sr){const br=Fn(sr);return br&&!br.disableAutodetect}function ds(sr,br){const tn=sr;Fe.forEach((function(Cr){Cr[tn]&&Cr[tn](br)}))}typeof window<"u"&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(function(){Oo&&Li()}),!1),Object.assign(ne,{highlight:kr,highlightAuto:Wr,highlightAll:Li,fixMarkup:function(br){return yt("10.2.0","fixMarkup will be removed entirely in v11.0"),yt("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"),(function(Cr){return Pt.tabReplace||Pt.useBR?Cr.replace(Bt,(Mr=>Mr===`
`?Pt.useBR?"<br>":Mr:Pt.tabReplace?Mr.replace(/\t/g,Pt.tabReplace):Mr)):Cr})(br)},highlightElement:un,highlightBlock:function(br){return yt("10.7.0","highlightBlock will be removed entirely in v12.0"),yt("10.7.0","Please use highlightElement now."),un(br)},configure:function(br){br.useBR&&(yt("10.3.0","'useBR' will be removed entirely in v11.0"),yt("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559")),Pt=pe(Pt,br)},initHighlighting:ti,initHighlightingOnLoad:function(){yt("10.6.0","initHighlightingOnLoad() is deprecated. Use highlightAll() instead."),Oo=!0},registerLanguage:function(br,tn){let Cr=null;try{Cr=tn(ne)}catch(Mr){if(Sr("Language definition for '{}' could not be registered.".replace("{}",br)),!St)throw Mr;Sr(Mr),Cr=$t}Cr.name||(Cr.name=br),ye[br]=Cr,Cr.rawDefinition=tn.bind(null,ne),Cr.aliases&&zo(Cr.aliases,{languageName:br})},unregisterLanguage:function(br){delete ye[br];for(const tn of Object.keys(Ee))Ee[tn]===br&&delete Ee[tn]},listLanguages:function(){return Object.keys(ye)},getLanguage:Fn,registerAliases:zo,requireLanguage:function(br){yt("10.4.0","requireLanguage will be removed entirely in v11."),yt("10.4.0","Please see https://github.com/highlightjs/highlight.js/pull/2844");const tn=Fn(br);if(tn)return tn;throw new Error("The '{}' language is required, but not loaded.".replace("{}",br))},autoDetection:Vo,inherit:pe,addPlugin:function(br){(function(Cr){Cr["before:highlightBlock"]&&!Cr["before:highlightElement"]&&(Cr["before:highlightElement"]=Mr=>{Cr["before:highlightBlock"](Object.assign({block:Mr.el},Mr))}),Cr["after:highlightBlock"]&&!Cr["after:highlightElement"]&&(Cr["after:highlightElement"]=Mr=>{Cr["after:highlightBlock"](Object.assign({block:Mr.el},Mr))})})(br),Fe.push(br)},vuePlugin:mt(ne).VuePlugin}),ne.debugMode=function(){St=!1},ne.safeMode=function(){St=!0},ne.versionString="10.7.3";for(const sr in at)typeof at[sr]=="object"&&s(at[sr]);return Object.assign(ne,at),ne.addPlugin(Jn),ne.addPlugin(ur),ne.addPlugin(Zn),ne})({});w.exports=Z},35344(w){function N(...s){return s.map((h=>(function(f){return f?typeof f=="string"?f:f.source:null})(h))).join("")}w.exports=function(h){const v={},f={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[v]}]};Object.assign(v,{className:"variable",variants:[{begin:N(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},f]});const y={className:"subst",begin:/\$\(/,end:/\)/,contains:[h.BACKSLASH_ESCAPE]},m={begin:/<<-?\s*(?=\w+)/,starts:{contains:[h.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},g={className:"string",begin:/"/,end:/"/,contains:[h.BACKSLASH_ESCAPE,v,y]};y.contains.push(g);const S={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},h.NUMBER_MODE,v]},_=h.SHEBANG({binary:`(${["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"].join("|")})`,relevance:10}),T={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[h.inherit(h.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z._-]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp"},contains:[_,h.SHEBANG(),T,S,h.HASH_COMMENT_MODE,m,g,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},v]}}},73402(w){function N(...s){return s.map((h=>(function(f){return f?typeof f=="string"?f:f.source:null})(h))).join("")}w.exports=function(h){const v="HTTP/(2|1\\.[01])",f={className:"attribute",begin:N("^",/[A-Za-z][A-Za-z0-9-]*/,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},y=[f,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+v+" \\d{3})",end:/$/,contains:[{className:"meta",begin:v},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:y}},{begin:"(?=^[A-Z]+ (.*?) "+v+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:v},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:y}},h.inherit(f,{relevance:0})]}}},95089(w){const N="[A-Za-z$_][0-9A-Za-z$_]*",s=["as","in","of", Line truncated
@@ -1 +1 @@
import{d as h,u as g,a as k,c as n,G as i,b as t,Q as y,e as v,f as e,t as a,g as c,q as r,A as d,F as x,h as B,O as C,o as l,_ as b}from"./index-DYsKpclu.js";import{_ as w}from"./SiteNav.vue_vue_type_script_setup_true_lang-CwaEJKIZ.js";const N={class:"site-footer"},S={class:"footer-left"},F={key:0,class:"footer-text"},P={key:1,class:"footer-beian"},T={key:2},V=["aria-label"],$=h({__name:"PageShell",setup(D){const{t:s}=g(),o=k(),m=new Date().getFullYear(),u=B(()=>!!(o.footerText.trim()||o.footerBeian.trim()));return(p,_)=>{const f=C("RouterLink");return l(),n(x,null,[i(w),t("main",{class:v(["page",{"page-wide":p.$route.meta.wide}])},[y(p.$slots,"default",{},void 0,!0)],2),t("footer",N,[t("div",S,[e(o).footerText.trim()?(l(),n("span",F,a(e(o).footerText),1)):c("",!0),e(o).footerBeian.trim()?(l(),n("span",P,a(e(o).footerBeian),1)):c("",!0),u.value?c("",!0):(l(),n("span",T,a(e(s)("footer.copyright",{year:e(m),name:e(o).displayName})),1))]),_[0]||(_[0]=t("span",{class:"footer-powered"},[r(" Powered by "),t("a",{href:"https://skymirror.top",target:"_blank",rel:"noopener noreferrer"},"SKYMirror"),r(" 26.9 ")],-1)),t("nav",{"aria-label":e(s)("footer.linkNav")},[i(f,{to:"/docs"},{default:d(()=>[r(a(e(s)("footer.docs")),1)]),_:1}),i(f,{to:"/openapi"},{default:d(()=>[r(a(e(s)("footer.openapi")),1)]),_:1}),i(f,{to:"/admin/files"},{default:d(()=>[r(a(e(s)("footer.admin")),1)]),_:1})],8,V)])],64)}}}),R=b($,[["__scopeId","data-v-80685d6f"]]);export{R as P};
import{d as h,u as g,a as k,c as n,G as i,b as t,Q as y,e as v,f as e,t as a,g as c,q as r,A as d,F as x,h as B,O as C,o as l,_ as b}from"./index-BKnWAKao.js";import{_ as w}from"./SiteNav.vue_vue_type_script_setup_true_lang-D3yLF4uh.js";const N={class:"site-footer"},S={class:"footer-left"},F={key:0,class:"footer-text"},P={key:1,class:"footer-beian"},T={key:2},V=["aria-label"],$=h({__name:"PageShell",setup(D){const{t:s}=g(),o=k(),m=new Date().getFullYear(),u=B(()=>!!(o.footerText.trim()||o.footerBeian.trim()));return(p,_)=>{const f=C("RouterLink");return l(),n(x,null,[i(w),t("main",{class:v(["page",{"page-wide":p.$route.meta.wide}])},[y(p.$slots,"default",{},void 0,!0)],2),t("footer",N,[t("div",S,[e(o).footerText.trim()?(l(),n("span",F,a(e(o).footerText),1)):c("",!0),e(o).footerBeian.trim()?(l(),n("span",P,a(e(o).footerBeian),1)):c("",!0),u.value?c("",!0):(l(),n("span",T,a(e(s)("footer.copyright",{year:e(m),name:e(o).displayName})),1))]),_[0]||(_[0]=t("span",{class:"footer-powered"},[r(" Powered by "),t("a",{href:"https://skymirror.top",target:"_blank",rel:"noopener noreferrer"},"SKYMirror"),r(" 26.9 ")],-1)),t("nav",{"aria-label":e(s)("footer.linkNav")},[i(f,{to:"/docs"},{default:d(()=>[r(a(e(s)("footer.docs")),1)]),_:1}),i(f,{to:"/openapi"},{default:d(()=>[r(a(e(s)("footer.openapi")),1)]),_:1}),i(f,{to:"/admin/files"},{default:d(()=>[r(a(e(s)("footer.admin")),1)]),_:1})],8,V)])],64)}}}),R=b($,[["__scopeId","data-v-80685d6f"]]);export{R as P};
@@ -1 +1 @@
import{d as b,u as p,c as r,b as o,t as i,f as c,h,o as f}from"./index-DYsKpclu.js";const v={class:"pager"},x={class:"pager-info"},k=["disabled"],M=["disabled"],y=b({__name:"Pager",props:{page:{},size:{},total:{}},emits:["change"],setup(t,{emit:m}){const a=t,d=m,{t:n}=p(),s=h(()=>Math.max(1,Math.ceil(a.total/a.size)));function g(l){const e=Math.min(Math.max(1,l),s.value);e!==a.page&&d("change",e,a.size)}return(l,e)=>(f(),r("div",v,[o("span",x,i(c(n)("common.pagerInfo",{total:t.total,page:t.page,pages:s.value})),1),o("button",{class:"btn btn-ghost btn-sm",type:"button",disabled:t.page<=1,onClick:e[0]||(e[0]=u=>g(t.page-1))},i(c(n)("common.previousPage")),9,k),o("button",{class:"btn btn-ghost btn-sm",type:"button",disabled:t.page>=s.value,onClick:e[1]||(e[1]=u=>g(t.page+1))},i(c(n)("common.nextPage")),9,M)]))}});export{y as _};
import{d as b,u as p,c as r,b as o,t as i,f as c,h,o as f}from"./index-BKnWAKao.js";const v={class:"pager"},x={class:"pager-info"},k=["disabled"],M=["disabled"],y=b({__name:"Pager",props:{page:{},size:{},total:{}},emits:["change"],setup(t,{emit:m}){const a=t,d=m,{t:n}=p(),s=h(()=>Math.max(1,Math.ceil(a.total/a.size)));function g(l){const e=Math.min(Math.max(1,l),s.value);e!==a.page&&d("change",e,a.size)}return(l,e)=>(f(),r("div",v,[o("span",x,i(c(n)("common.pagerInfo",{total:t.total,page:t.page,pages:s.value})),1),o("button",{class:"btn btn-ghost btn-sm",type:"button",disabled:t.page<=1,onClick:e[0]||(e[0]=u=>g(t.page-1))},i(c(n)("common.previousPage")),9,k),o("button",{class:"btn btn-ghost btn-sm",type:"button",disabled:t.page>=s.value,onClick:e[1]||(e[1]=u=>g(t.page+1))},i(c(n)("common.nextPage")),9,M)]))}});export{y as _};
@@ -1 +1 @@
import{d as N,u as U,i as q,I,J as b,z as L,A as R,H as C,h as T,j as p,b as t,c as u,q as z,t as s,f as n,w as E,C as H,D as $,F as y,s as _,g as w,K as j,L as J,n as K,M as B,k as W,N as G,B as O,o as l}from"./index-DYsKpclu.js";import{P as Q}from"./PageShell-D87JkPkG.js";import{g as X,p as Y,b as Z}from"./share-CqDDLJWI.js";import"./SiteNav.vue_vue_type_script_setup_true_lang-CwaEJKIZ.js";const ee={class:"card",style:{"max-width":"640px",margin:"12px auto 0"}},te={key:0,class:"loading-block"},ae={class:"empty"},oe={style:{"font-weight":"600",color:"var(--c-text)"}},ne={class:"hint"},se=["placeholder"],ie={class:"btn",type:"submit"},le={style:{display:"flex","align-items":"center",gap:"10px","flex-wrap":"wrap","margin-bottom":"4px"}},ue={class:"badge"},re={style:{"font-size":"16px","word-break":"break-all"}},ce={key:0,class:"hint",style:{margin:"0"}},pe={class:"hint",style:{"margin-bottom":"18px"}},de={key:0,class:"loading-block"},me={class:"text-view"},ve={style:{display:"flex",gap:"10px","margin-top":"14px","flex-wrap":"wrap"}},ye={class:"file-summary"},ke={style:{"font-weight":"600","word-break":"break-all"}},fe={class:"hint",style:{margin:"0"}},ge={key:0,style:{margin:"16px 0 6px"}},he={class:"progress"},xe={class:"hint"},_e=["disabled"],Be=N({__name:"PickupView",setup(we){const{t:e}=U(),D=G(),F=O(),k=q(),d=T(()=>String(D.params.code??"").trim().split(/\s+/)[0]),r=p("loading"),m=p(""),o=p(null),v=p(""),f=p(!1),c=p(null);async function g(){if(!d.value){r.value="error",m.value=e("pickup.emptyCode");return}r.value="loading",m.value="",o.value=null,v.value="";try{const a=await X(d.value);if(o.value=a,r.value="ready",a.isText){f.value=!0;try{v.value=await Y(d.value)}finally{f.value=!1}}}catch(a){r.value="error",m.value=a instanceof C?a.code===404?e("pickup.notFound"):a.code===423?e("home.rateLimited"):a.code===428?e("home.notInitialized"):a.msg:e("pickup.failedDefault")}}I(g),b(d,()=>{g()}),b(()=>e("pickup.emptyCode"),()=>{r.value==="error"&&m.value&&g()});async function A(){if(o.value){c.value=0;try{const{blob:a,filename:i}=await Z(d.value,x=>c.value=x);B(a,i||o.value.name||"download"),k.success(e("pickup.downloaded"))}catch(a){k.error(a instanceof C?a.msg:e("pickup.downloadFailed"))}finally{c.value=null}}}async function M(){await W(v.value)?k.success(e("pickup.copied")):k.error(e("common.copyFailed"))}function P(){if(!o.value)return;const a=new Blob([v.value],{type:"text/plain;charset=utf-8"}),i=o.value.name?.includes(".")?o.value.name:`${o.value.name||"text"}.txt`;B(a,i)}const h=p("");function S(){const a=h.value.trim();a&&F.push({name:"pickup",params:{code:a}})}const V=T(()=>{const a=o.value;return a?a.remainingDownloads===null||a.remainingDownloads===void 0||a.remainingDownloads<0?e("pickup.remainingUnlimited"):e("pickup.remainingCount",{n:a.remainingDownloads}):""});return(a,i)=>(l(),L(Q,null,{default:R(()=>[t("section",ee,[r.value==="loading"?(l(),u("div",te,[i[1]||(i[1]=t("span",{class:"spin","aria-hidden":"true"},null,-1)),z(" "+s(n(e)("pickup.querying",{code:d.value})),1)])):r.value==="error"?(l(),u(y,{key:1},[t("div",ae,[i[2]||(i[2]=t("div",{class:"empty-icon"},"📮",-1)),t("p",oe,s(m.value||n(e)("pickup.failed")),1),t("p",ne,s(n(e)("pickup.confirmHint")),1)]),t("form",{class:"quick-pickup",style:{"margin-top":"6px","max-width":"none"},onSubmit:E(S,["prevent"])},[H(t("input",{"onUpdate:modelValue":i[0]||(i[0]=x=>h.value=x),class:"input input-mono",placeholder:n(e)("pickup.retryPlaceholder"),maxlength:"32"},null,8,se),[[$,h.value]]),t("button",ie,s(n(e)("pickup.retryButton")),1)],32)],64)):o.value?(l(),u(y,{key:2},[t("div",le,[t("span",ue,s(o.value.isText?n(e)("common.text"):n(e)("common.file")),1),t("strong",re,s(o.value.name),1),o.value.isText?w("",!0):(l(),u("span",ce,s(n(_)(o.value.size)),1))]),t("p",pe,s(V.value)+" · "+s(n(e)("pickup.expireAt",{time:o.value.expiredAt?n(j)(o.value.expiredAt):n(e)("time.permanent")}))+" · "+s(n(J)(o.value.expiredAt)),1),o.value.isText?(l(),u(y,{key:0},[f.value?(l(),u("div",de,[i[3]||(i[3]=t("span",{class:"spin","aria-hidden":"true"},null,-1)),z(" "+s(n(e)("pickup.loadingText")),1)])):(l(),u(y,{key:1},[t("pre",me,s(v.value),1),t("div",ve,[t("button",{class:"btn",type:"button",onClick:M},s(n(e)("pickup.copyContent")),1),t("button",{class:"btn btn-ghost",type:"button",onClick:P},s(n(e)("pickup.downloadTxt")),1)])],64))],64)):(l(),u(y,{key:1},[t("div",ye,[i[4]||(i[4]=t("span",{style:{"font-size":"30px"},"aria-hidden":"true"},"📄",-1)),t("div",null,[t("div",ke,s(o.value.name),1),t("div",fe,s(n(e)("pickup.sizeUsed",{size:n(_)(o.value.size),n:o.value.usedCount})),1)])]),c.value!==null?(l(),u("div",ge,[t("div",he,[t("i",{style:K({width:`${c.value}%`})},null,4)]),t("p",xe,s(n(e)("pickup.downloading",{percent:c.value})),1)])):w("",!0),t("button",{class:"btn btn-block",type:"button",disabled:c.value!==null,onClick:A}," ⬇ "+s(n(e)("pickup.downloadFile",{size:n(_)(o.value.size)})),9,_e)],64))],64)):w("",!0)])]),_:1}))}});export{Be as default};
import{d as N,u as U,i as q,I,J as b,z as L,A as R,H as C,h as T,j as p,b as t,c as u,q as z,t as s,f as n,w as E,C as H,D as $,F as y,s as _,g as w,K as j,L as J,n as K,M as B,k as W,N as G,B as O,o as l}from"./index-BKnWAKao.js";import{P as Q}from"./PageShell-CBo29Oot.js";import{g as X,p as Y,b as Z}from"./share-B-zR67vw.js";import"./SiteNav.vue_vue_type_script_setup_true_lang-D3yLF4uh.js";const ee={class:"card",style:{"max-width":"640px",margin:"12px auto 0"}},te={key:0,class:"loading-block"},ae={class:"empty"},oe={style:{"font-weight":"600",color:"var(--c-text)"}},ne={class:"hint"},se=["placeholder"],ie={class:"btn",type:"submit"},le={style:{display:"flex","align-items":"center",gap:"10px","flex-wrap":"wrap","margin-bottom":"4px"}},ue={class:"badge"},re={style:{"font-size":"16px","word-break":"break-all"}},ce={key:0,class:"hint",style:{margin:"0"}},pe={class:"hint",style:{"margin-bottom":"18px"}},de={key:0,class:"loading-block"},me={class:"text-view"},ve={style:{display:"flex",gap:"10px","margin-top":"14px","flex-wrap":"wrap"}},ye={class:"file-summary"},ke={style:{"font-weight":"600","word-break":"break-all"}},fe={class:"hint",style:{margin:"0"}},ge={key:0,style:{margin:"16px 0 6px"}},he={class:"progress"},xe={class:"hint"},_e=["disabled"],Be=N({__name:"PickupView",setup(we){const{t:e}=U(),D=G(),F=O(),k=q(),d=T(()=>String(D.params.code??"").trim().split(/\s+/)[0]),r=p("loading"),m=p(""),o=p(null),v=p(""),f=p(!1),c=p(null);async function g(){if(!d.value){r.value="error",m.value=e("pickup.emptyCode");return}r.value="loading",m.value="",o.value=null,v.value="";try{const a=await X(d.value);if(o.value=a,r.value="ready",a.isText){f.value=!0;try{v.value=await Y(d.value)}finally{f.value=!1}}}catch(a){r.value="error",m.value=a instanceof C?a.code===404?e("pickup.notFound"):a.code===423?e("home.rateLimited"):a.code===428?e("home.notInitialized"):a.msg:e("pickup.failedDefault")}}I(g),b(d,()=>{g()}),b(()=>e("pickup.emptyCode"),()=>{r.value==="error"&&m.value&&g()});async function A(){if(o.value){c.value=0;try{const{blob:a,filename:i}=await Z(d.value,x=>c.value=x);B(a,i||o.value.name||"download"),k.success(e("pickup.downloaded"))}catch(a){k.error(a instanceof C?a.msg:e("pickup.downloadFailed"))}finally{c.value=null}}}async function M(){await W(v.value)?k.success(e("pickup.copied")):k.error(e("common.copyFailed"))}function P(){if(!o.value)return;const a=new Blob([v.value],{type:"text/plain;charset=utf-8"}),i=o.value.name?.includes(".")?o.value.name:`${o.value.name||"text"}.txt`;B(a,i)}const h=p("");function S(){const a=h.value.trim();a&&F.push({name:"pickup",params:{code:a}})}const V=T(()=>{const a=o.value;return a?a.remainingDownloads===null||a.remainingDownloads===void 0||a.remainingDownloads<0?e("pickup.remainingUnlimited"):e("pickup.remainingCount",{n:a.remainingDownloads}):""});return(a,i)=>(l(),L(Q,null,{default:R(()=>[t("section",ee,[r.value==="loading"?(l(),u("div",te,[i[1]||(i[1]=t("span",{class:"spin","aria-hidden":"true"},null,-1)),z(" "+s(n(e)("pickup.querying",{code:d.value})),1)])):r.value==="error"?(l(),u(y,{key:1},[t("div",ae,[i[2]||(i[2]=t("div",{class:"empty-icon"},"📮",-1)),t("p",oe,s(m.value||n(e)("pickup.failed")),1),t("p",ne,s(n(e)("pickup.confirmHint")),1)]),t("form",{class:"quick-pickup",style:{"margin-top":"6px","max-width":"none"},onSubmit:E(S,["prevent"])},[H(t("input",{"onUpdate:modelValue":i[0]||(i[0]=x=>h.value=x),class:"input input-mono",placeholder:n(e)("pickup.retryPlaceholder"),maxlength:"32"},null,8,se),[[$,h.value]]),t("button",ie,s(n(e)("pickup.retryButton")),1)],32)],64)):o.value?(l(),u(y,{key:2},[t("div",le,[t("span",ue,s(o.value.isText?n(e)("common.text"):n(e)("common.file")),1),t("strong",re,s(o.value.name),1),o.value.isText?w("",!0):(l(),u("span",ce,s(n(_)(o.value.size)),1))]),t("p",pe,s(V.value)+" · "+s(n(e)("pickup.expireAt",{time:o.value.expiredAt?n(j)(o.value.expiredAt):n(e)("time.permanent")}))+" · "+s(n(J)(o.value.expiredAt)),1),o.value.isText?(l(),u(y,{key:0},[f.value?(l(),u("div",de,[i[3]||(i[3]=t("span",{class:"spin","aria-hidden":"true"},null,-1)),z(" "+s(n(e)("pickup.loadingText")),1)])):(l(),u(y,{key:1},[t("pre",me,s(v.value),1),t("div",ve,[t("button",{class:"btn",type:"button",onClick:M},s(n(e)("pickup.copyContent")),1),t("button",{class:"btn btn-ghost",type:"button",onClick:P},s(n(e)("pickup.downloadTxt")),1)])],64))],64)):(l(),u(y,{key:1},[t("div",ye,[i[4]||(i[4]=t("span",{style:{"font-size":"30px"},"aria-hidden":"true"},"📄",-1)),t("div",null,[t("div",ke,s(o.value.name),1),t("div",fe,s(n(e)("pickup.sizeUsed",{size:n(_)(o.value.size),n:o.value.usedCount})),1)])]),c.value!==null?(l(),u("div",ge,[t("div",he,[t("i",{style:K({width:`${c.value}%`})},null,4)]),t("p",xe,s(n(e)("pickup.downloading",{percent:c.value})),1)])):w("",!0),t("button",{class:"btn btn-block",type:"button",disabled:c.value!==null,onClick:A}," ⬇ "+s(n(e)("pickup.downloadFile",{size:n(_)(o.value.size)})),9,_e)],64))],64)):w("",!0)])]),_:1}))}});export{Be as default};
@@ -1,4 +1,4 @@
import{a0 as ge,h as F,a1 as Ze,a2 as Me,a3 as Xe,a4 as Qe,a5 as Pe,a6 as et,o as w,a7 as ze,z as ce,c as y,F as G,b as e,a8 as We,a9 as tt,e as st,aa as nt,G as Fe,A as it,ab as ot,ac as at,j as V,ad as Ae,ae as K,J as lt,I as Ye,af as rt,P as dt,ag as ct,ah as ut,d as ve,ai as _t,aj as mt,ak as Ue,al as b,n as Re,am as Ge,an as ft,ao as ht,ap as pt,aq as I,ar as Ee,as as qe,at as Q,au as gt,u as vt,i as bt,a as wt,t as l,f as o,q as M,w as He,C as f,D as v,g as L,Z as _e,s as Oe,R as ke,S as p,H as re,B as yt,_ as xt}from"./index-DYsKpclu.js";import{f as kt,g as St,h as De,i as Ct}from"./admin-DEOkRyTC.js";import{u as Bt}from"./auth-B7MDTgxJ.js";function Vt(s={},t={defaultBordered:!0}){const d=ge(Me,null);return{inlineThemeDisabled:d?.inlineThemeDisabled,mergedRtlRef:d?.mergedRtlRef,mergedComponentPropsRef:d?.mergedComponentPropsRef,mergedBreakpointsRef:d?.mergedBreakpointsRef,mergedBorderedRef:F(()=>{const{bordered:u}=s;return u!==void 0?u:d?.mergedBorderedRef.value??t.defaultBordered??!0}),mergedClsPrefixRef:d?d.mergedClsPrefixRef:Ze("n"),namespaceRef:F(()=>d?.mergedNamespaceRef.value)}}function $t(s,t,d){if(!t)return;const u=Xe(),_=ge(Me,null),h=()=>{const x=d.value;t.mount({id:x===void 0?s:x+s,head:!0,anchorMetaName:Pe,props:{bPrefix:x?`.${x}-`:void 0},ssr:u,parent:_?.styleMountTarget}),_?.preflightStyleDisabled||et.mount({id:"n-global",head:!0,anchorMetaName:Pe,ssr:u,parent:_?.styleMountTarget})};u?h():Qe(h)}function z(s,t=1){let d=Fe,u=!1;return typeof s=="function"&&(u=!0,w(),d=ce,s=s()),ze(s)?u?ce(Ie(s)):Ie(s):Array.isArray(s)?u?y(G,null,s.map(_=>z(()=>_)),-2):e(G,null,s.slice()):s==null||typeof s=="boolean"?d(We):d(tt,null,String(s),t)}function Ie(s){return s.el===null&&s.patchFlag!==-1||s.memo?s:nt(s)}const Tt=s=>typeof s=="function"||Object.prototype.toString.call(s)==="[object Object]"&&!ze(s)?s:{default:it(()=>[z(()=>s)])},C=s=>st(s)||null;function j(s){return typeof s=="string"?s.endsWith("px")?Number(s.slice(0,s.length-2)):Number(s):s}function Se(s){if(s!=null)return typeof s=="number"?`${s}px`:s.endsWith("px")?s:`${s}px`}function Ut(s,t,d,u){d||ot("useThemeClass","cssVarsRef is not passed");const _=ge(Me,null),h=_?.mergedThemeHashRef,x=_?.styleMountTarget,B=V(""),a=Xe();let k;const $=`__${s}`,R=()=>{let m=$;const T=t?t.value:void 0,N=h?.value;N&&(m+=`-${N}`),T&&(m+=`-${T}`);const{themeOverrides:E,builtinThemeOverrides:q}=u;E&&(m+=`-${Ae(JSON.stringify(E))}`),q&&(m+=`-${Ae(JSON.stringify(q))}`),B.value=m,k=()=>{const te=d.value;let se="";for(const ne in te)se+=`${ne}: ${te[ne]};`;K(`.${m}`,se).mount({id:m,ssr:a,parent:x}),k=void 0}};return at(()=>{R()}),{themeClass:B,onRender:()=>{k?.()}}}function Rt(s,t){return lt(s,d=>{d!==void 0&&(t.value=d)}),F(()=>s.value===void 0?t.value:s.value)}function Mt(){const s=V(!1);return Ye(()=>{s.value=!0}),rt(s)}function he(s,...t){if(Array.isArray(s))s.forEach(d=>he(d,...t));else return s(...t)}function Ne(s){return s.some(t=>ze(t)?!(t.type===We||t.type===G&&!Ne(t.children)):!0)?s:null}function ee(s,t){return t(s&&Ne(s())||null)}function Ce(s){return!(s&&Ne(s()))}const Le=ct("n-form-item");function zt(s,{defaultSize:t="medium",mergedSize:d,mergedDisabled:u}={}){const _=ge(Le,null);ut(Le,null);const h=F(d?()=>d(_):()=>{const{size:a}=s;if(a)return a;if(_){const{mergedSize:k}=_;if(k.value!==void 0)return k.value}return t}),x=F(u?()=>u(_):()=>{const{disabled:a}=s;return a!==void 0?a:_?_.disabled.value:!1}),B=F(()=>{const{status:a}=s;return a||_?.mergedValidationStatus.value});return dt(()=>{_&&_.restoreValidation()}),{mergedSizeRef:h,mergedDisabledRef:x,mergedStatusRef:B,nTriggerFormBlur(){_&&_.handleContentBlur()},nTriggerFormChange(){_&&_.handleContentChange()},nTriggerFormFocus(){_&&_.handleContentFocus()},nTriggerFormInput(){_&&_.handleContentInput()}}}var Je=ve({name:"BaseIconSwitchTransition",setup(s,{slots:t}){const d=Mt();return()=>(w(),ce(_t,{name:"icon-switch-transition",appear:d.value},Tt(t),1032,["appear"]))}});const{cubicBezierEaseInOut:Ft}=mt;function pe({originalTransform:s="",left:t=0,top:d=0,transition:u=`all .3s ${Ft} !important`}={}){return[K("&.icon-switch-transition-enter-from, &.icon-switch-transition-leave-to",{transform:`${s} scale(0.75)`,left:t,top:d,opacity:0}),K("&.icon-switch-transition-enter-to, &.icon-switch-transition-leave-from",{transform:`scale(1) ${s}`,left:t,top:d,opacity:1}),K("&.icon-switch-transition-enter-active, &.icon-switch-transition-leave-active",{transformOrigin:"center",position:"absolute",left:t,top:d,transition:u})]}var Nt=K([K("@keyframes rotator",`
import{a0 as ge,h as F,a1 as Ze,a2 as Me,a3 as Xe,a4 as Qe,a5 as Pe,a6 as et,o as w,a7 as ze,z as ce,c as y,F as G,b as e,a8 as We,a9 as tt,e as st,aa as nt,G as Fe,A as it,ab as ot,ac as at,j as V,ad as Ae,ae as K,J as lt,I as Ye,af as rt,P as dt,ag as ct,ah as ut,d as ve,ai as _t,aj as mt,ak as Ue,al as b,n as Re,am as Ge,an as ft,ao as ht,ap as pt,aq as I,ar as Ee,as as qe,at as Q,au as gt,u as vt,i as bt,a as wt,t as l,f as o,q as M,w as He,C as f,D as v,g as L,Z as _e,s as Oe,R as ke,S as p,H as re,B as yt,_ as xt}from"./index-BKnWAKao.js";import{f as kt,g as St,h as De,i as Ct}from"./admin-KnbIpHLF.js";import{u as Bt}from"./auth-Cp2GGuZy.js";function Vt(s={},t={defaultBordered:!0}){const d=ge(Me,null);return{inlineThemeDisabled:d?.inlineThemeDisabled,mergedRtlRef:d?.mergedRtlRef,mergedComponentPropsRef:d?.mergedComponentPropsRef,mergedBreakpointsRef:d?.mergedBreakpointsRef,mergedBorderedRef:F(()=>{const{bordered:u}=s;return u!==void 0?u:d?.mergedBorderedRef.value??t.defaultBordered??!0}),mergedClsPrefixRef:d?d.mergedClsPrefixRef:Ze("n"),namespaceRef:F(()=>d?.mergedNamespaceRef.value)}}function $t(s,t,d){if(!t)return;const u=Xe(),_=ge(Me,null),h=()=>{const x=d.value;t.mount({id:x===void 0?s:x+s,head:!0,anchorMetaName:Pe,props:{bPrefix:x?`.${x}-`:void 0},ssr:u,parent:_?.styleMountTarget}),_?.preflightStyleDisabled||et.mount({id:"n-global",head:!0,anchorMetaName:Pe,ssr:u,parent:_?.styleMountTarget})};u?h():Qe(h)}function z(s,t=1){let d=Fe,u=!1;return typeof s=="function"&&(u=!0,w(),d=ce,s=s()),ze(s)?u?ce(Ie(s)):Ie(s):Array.isArray(s)?u?y(G,null,s.map(_=>z(()=>_)),-2):e(G,null,s.slice()):s==null||typeof s=="boolean"?d(We):d(tt,null,String(s),t)}function Ie(s){return s.el===null&&s.patchFlag!==-1||s.memo?s:nt(s)}const Tt=s=>typeof s=="function"||Object.prototype.toString.call(s)==="[object Object]"&&!ze(s)?s:{default:it(()=>[z(()=>s)])},C=s=>st(s)||null;function j(s){return typeof s=="string"?s.endsWith("px")?Number(s.slice(0,s.length-2)):Number(s):s}function Se(s){if(s!=null)return typeof s=="number"?`${s}px`:s.endsWith("px")?s:`${s}px`}function Ut(s,t,d,u){d||ot("useThemeClass","cssVarsRef is not passed");const _=ge(Me,null),h=_?.mergedThemeHashRef,x=_?.styleMountTarget,B=V(""),a=Xe();let k;const $=`__${s}`,R=()=>{let m=$;const T=t?t.value:void 0,N=h?.value;N&&(m+=`-${N}`),T&&(m+=`-${T}`);const{themeOverrides:E,builtinThemeOverrides:q}=u;E&&(m+=`-${Ae(JSON.stringify(E))}`),q&&(m+=`-${Ae(JSON.stringify(q))}`),B.value=m,k=()=>{const te=d.value;let se="";for(const ne in te)se+=`${ne}: ${te[ne]};`;K(`.${m}`,se).mount({id:m,ssr:a,parent:x}),k=void 0}};return at(()=>{R()}),{themeClass:B,onRender:()=>{k?.()}}}function Rt(s,t){return lt(s,d=>{d!==void 0&&(t.value=d)}),F(()=>s.value===void 0?t.value:s.value)}function Mt(){const s=V(!1);return Ye(()=>{s.value=!0}),rt(s)}function he(s,...t){if(Array.isArray(s))s.forEach(d=>he(d,...t));else return s(...t)}function Ne(s){return s.some(t=>ze(t)?!(t.type===We||t.type===G&&!Ne(t.children)):!0)?s:null}function ee(s,t){return t(s&&Ne(s())||null)}function Ce(s){return!(s&&Ne(s()))}const Le=ct("n-form-item");function zt(s,{defaultSize:t="medium",mergedSize:d,mergedDisabled:u}={}){const _=ge(Le,null);ut(Le,null);const h=F(d?()=>d(_):()=>{const{size:a}=s;if(a)return a;if(_){const{mergedSize:k}=_;if(k.value!==void 0)return k.value}return t}),x=F(u?()=>u(_):()=>{const{disabled:a}=s;return a!==void 0?a:_?_.disabled.value:!1}),B=F(()=>{const{status:a}=s;return a||_?.mergedValidationStatus.value});return dt(()=>{_&&_.restoreValidation()}),{mergedSizeRef:h,mergedDisabledRef:x,mergedStatusRef:B,nTriggerFormBlur(){_&&_.handleContentBlur()},nTriggerFormChange(){_&&_.handleContentChange()},nTriggerFormFocus(){_&&_.handleContentFocus()},nTriggerFormInput(){_&&_.handleContentInput()}}}var Je=ve({name:"BaseIconSwitchTransition",setup(s,{slots:t}){const d=Mt();return()=>(w(),ce(_t,{name:"icon-switch-transition",appear:d.value},Tt(t),1032,["appear"]))}});const{cubicBezierEaseInOut:Ft}=mt;function pe({originalTransform:s="",left:t=0,top:d=0,transition:u=`all .3s ${Ft} !important`}={}){return[K("&.icon-switch-transition-enter-from, &.icon-switch-transition-leave-to",{transform:`${s} scale(0.75)`,left:t,top:d,opacity:0}),K("&.icon-switch-transition-enter-to, &.icon-switch-transition-leave-from",{transform:`scale(1) ${s}`,left:t,top:d,opacity:1}),K("&.icon-switch-transition-enter-active, &.icon-switch-transition-leave-active",{transformOrigin:"center",position:"absolute",left:t,top:d,transition:u})]}var Nt=K([K("@keyframes rotator",`
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
@@ -1 +1 @@
import{d as z,u as E,a as x,c as i,G as B,f as t,A as m,b as a,F as _,r as v,az as S,t as r,h as d,aA as p,aB as T,O as A,o,z as M,q as V,e as b,aC as w}from"./index-DYsKpclu.js";const D={class:"site-nav"},F=["src"],I={class:"brand-name"},O=["aria-label"],R={class:"nav-controls"},U=["aria-label"],q=["aria-checked","title","onClick"],G={class:"nav-control-icon","aria-hidden":"true"},H=["title"],K=z({__name:"SiteNav",setup($){const{t:s}=E(),c=x(),{mode:u,setMode:k}=w(),g=d(()=>[{to:"/",label:s("nav.home"),match:n=>n==="/"}]);function y(n){return n.match(location.pathname)}const C={light:"☀️",dark:"🌙",system:"💻"},f=d(()=>({light:s("theme.light"),dark:s("theme.dark"),system:s("theme.system")})),L=d(()=>p()==="zh-CN"?"中文":"English");function N(){const n=p()==="zh-CN"?"en-US":"zh-CN";T(n)}return(n,l)=>{const h=A("RouterLink");return o(),i("header",D,[B(h,{class:"brand",to:"/",title:t(s)("nav.homeTitle",{name:t(c).displayName})},{default:m(()=>[a("img",{src:t(c).displayLogoUrl,alt:"Logo",onError:l[0]||(l[0]=e=>e.target.style.visibility="hidden")},null,40,F),a("span",I,r(t(c).displayName),1)]),_:1},8,["title"]),a("nav",{class:"nav-links","aria-label":t(s)("nav.mainNav")},[(o(!0),i(_,null,v(g.value,e=>(o(),M(h,{key:e.to,to:e.to,class:b({"router-link-active":y(e)})},{default:m(()=>[V(r(e.label),1)]),_:2},1032,["to","class"]))),128))],8,O),a("div",R,[a("div",{class:"theme-seg",role:"radiogroup","aria-label":t(s)("theme.label")},[(o(!0),i(_,null,v(t(S),e=>(o(),i("button",{key:e,type:"button",role:"radio","aria-checked":t(u)===e,class:b({active:t(u)===e}),title:f.value[e],onClick:j=>t(k)(e)},[a("span",G,r(C[e]),1)],10,q))),128))],8,U),a("button",{class:"nav-control",type:"button",title:t(s)("lang.label"),onClick:N},[l[1]||(l[1]=a("span",{class:"nav-control-icon","aria-hidden":"true"},"🌐",-1)),a("span",null,r(L.value),1)],8,H)])])}}});export{K as _};
import{d as z,u as E,a as x,c as i,G as B,f as t,A as m,b as a,F as _,r as v,az as S,t as r,h as d,aA as p,aB as T,O as A,o,z as M,q as V,e as b,aC as w}from"./index-BKnWAKao.js";const D={class:"site-nav"},F=["src"],I={class:"brand-name"},O=["aria-label"],R={class:"nav-controls"},U=["aria-label"],q=["aria-checked","title","onClick"],G={class:"nav-control-icon","aria-hidden":"true"},H=["title"],K=z({__name:"SiteNav",setup($){const{t:s}=E(),c=x(),{mode:u,setMode:k}=w(),g=d(()=>[{to:"/",label:s("nav.home"),match:n=>n==="/"}]);function y(n){return n.match(location.pathname)}const C={light:"☀️",dark:"🌙",system:"💻"},f=d(()=>({light:s("theme.light"),dark:s("theme.dark"),system:s("theme.system")})),L=d(()=>p()==="zh-CN"?"中文":"English");function N(){const n=p()==="zh-CN"?"en-US":"zh-CN";T(n)}return(n,l)=>{const h=A("RouterLink");return o(),i("header",D,[B(h,{class:"brand",to:"/",title:t(s)("nav.homeTitle",{name:t(c).displayName})},{default:m(()=>[a("img",{src:t(c).displayLogoUrl,alt:"Logo",onError:l[0]||(l[0]=e=>e.target.style.visibility="hidden")},null,40,F),a("span",I,r(t(c).displayName),1)]),_:1},8,["title"]),a("nav",{class:"nav-links","aria-label":t(s)("nav.mainNav")},[(o(!0),i(_,null,v(g.value,e=>(o(),M(h,{key:e.to,to:e.to,class:b({"router-link-active":y(e)})},{default:m(()=>[V(r(e.label),1)]),_:2},1032,["to","class"]))),128))],8,O),a("div",R,[a("div",{class:"theme-seg",role:"radiogroup","aria-label":t(s)("theme.label")},[(o(!0),i(_,null,v(t(S),e=>(o(),i("button",{key:e,type:"button",role:"radio","aria-checked":t(u)===e,class:b({active:t(u)===e}),title:f.value[e],onClick:j=>t(k)(e)},[a("span",G,r(C[e]),1)],10,q))),128))],8,U),a("button",{class:"nav-control",type:"button",title:t(s)("lang.label"),onClick:N},[l[1]||(l[1]=a("span",{class:"nav-control-icon","aria-hidden":"true"},"🌐",-1)),a("span",null,r(L.value),1)],8,H)])])}}});export{K as _};
@@ -1 +1 @@
import{v as n,S as e,x as s}from"./index-DYsKpclu.js";function u(t){return n(s.adminLogin,{method:"POST",json:{password:t}})}function m(){return n(s.adminVerify)}async function l(){await n(s.adminLogout,{method:"POST"})}async function g(t){const a=await n(s.adminFileList,{query:{page:t.page,size:t.size,keyword:t.keyword||void 0}}),o=e(a,["data","list","items","files"])??[],d=Number(e(a,["total","count"])??o.length);return{page:Number(e(a,["page"])??t.page),size:Number(e(a,["size"])??t.size),total:d,data:o.map(i=>({id:Number(e(i,["id"])??0),code:String(e(i,["code"])??""),name:String(e(i,["name"])??`${e(i,["prefix"])??""}${e(i,["suffix"])??""}`),suffix:String(e(i,["suffix"])??""),size:Number(e(i,["size"])??0),isText:!!(e(i,["isText","is_text"])??!1),expiredAt:e(i,["expiredAt","expired_at","expires_at"])??null,expiredCount:e(i,["expiredCount","expired_count"])??null,usedCount:Number(e(i,["usedCount","used_count"])??0),createdAt:e(i,["createdAt","created_at"])??null,isExpired:!!(e(i,["isExpired","is_expired"])??!1)}))}}async function p(t){await n(s.adminFileDelete,{method:"DELETE",json:{id:t}})}async function f(t){await n(s.adminFileBatchDelete,{method:"POST",json:{ids:t}})}async function y(t){await n(s.adminFileUpdate,{method:"PATCH",json:t})}async function w(){const t=await n(s.adminConfigGet);if(t&&typeof t=="object"&&!Array.isArray(t)){const a=t;return e(a,["config","data","settings"])??a}return{}}async function S(t){await n(s.adminConfigUpdate,{method:"PATCH",json:t})}async function _(t){const a=await n(s.adminStorageSwitch,{method:"POST",json:{engine:t}});return String(a?.engine??t)}async function x(t,a){await n(s.adminPasswordUpdate,{method:"PATCH",json:{old_password:t,new_password:a}})}async function b(t){const a=await n(s.adminAuditList,{query:{page:t.page,size:t.size,action:t.action||void 0,result:t.result||void 0,ip:t.ip||void 0,start_time:t.startTime||void 0,end_time:t.endTime||void 0}}),o=e(a,["data","list","items","logs"])??[],d=Number(e(a,["total","count"])??o.length);return{page:Number(e(a,["page"])??t.page),size:Number(e(a,["size"])??t.size),total:d,data:o.map((i,r)=>({id:Number(e(i,["id"])??r+1),action:String(e(i,["action"])??""),result:String(e(i,["result"])??""),fileCode:String(e(i,["file_code","fileCode","code"])??""),fileName:String(e(i,["file_name","fileName","name"])??""),sizeBytes:e(i,["size_bytes","sizeBytes","size"])??null,transferredBytes:e(i,["transferred_bytes","transferredBytes","bytes"])??null,ip:String(e(i,["ip","client_ip","clientIp"])??""),userAgent:String(e(i,["user_agent","userAgent"])??""),deviceOs:String(e(i,["device_os","deviceOs","os"])??""),deviceBrowser:String(e(i,["device_browser","deviceBrowser","browser"])??""),deviceType:String(e(i,["device_type","deviceType"])??""),actor:String(e(i,["actor"])??""),errorMsg:String(e(i,["error_msg","errorMsg","error"])??""),durationMs:e(i,["duration_ms","durationMs","duration"])??null,createdAt:e(i,["created_at","createdAt","time"])??null}))}}export{g as a,f as b,p as c,y as d,b as e,w as f,_ as g,S as h,x as i,l as j,m as k,u as l};
import{v as n,S as e,x as s}from"./index-BKnWAKao.js";function u(t){return n(s.adminLogin,{method:"POST",json:{password:t}})}function m(){return n(s.adminVerify)}async function l(){await n(s.adminLogout,{method:"POST"})}async function g(t){const a=await n(s.adminFileList,{query:{page:t.page,size:t.size,keyword:t.keyword||void 0}}),o=e(a,["data","list","items","files"])??[],d=Number(e(a,["total","count"])??o.length);return{page:Number(e(a,["page"])??t.page),size:Number(e(a,["size"])??t.size),total:d,data:o.map(i=>({id:Number(e(i,["id"])??0),code:String(e(i,["code"])??""),name:String(e(i,["name"])??`${e(i,["prefix"])??""}${e(i,["suffix"])??""}`),suffix:String(e(i,["suffix"])??""),size:Number(e(i,["size"])??0),isText:!!(e(i,["isText","is_text"])??!1),expiredAt:e(i,["expiredAt","expired_at","expires_at"])??null,expiredCount:e(i,["expiredCount","expired_count"])??null,usedCount:Number(e(i,["usedCount","used_count"])??0),createdAt:e(i,["createdAt","created_at"])??null,isExpired:!!(e(i,["isExpired","is_expired"])??!1)}))}}async function p(t){await n(s.adminFileDelete,{method:"DELETE",json:{id:t}})}async function f(t){await n(s.adminFileBatchDelete,{method:"POST",json:{ids:t}})}async function y(t){await n(s.adminFileUpdate,{method:"PATCH",json:t})}async function w(){const t=await n(s.adminConfigGet);if(t&&typeof t=="object"&&!Array.isArray(t)){const a=t;return e(a,["config","data","settings"])??a}return{}}async function S(t){await n(s.adminConfigUpdate,{method:"PATCH",json:t})}async function _(t){const a=await n(s.adminStorageSwitch,{method:"POST",json:{engine:t}});return String(a?.engine??t)}async function x(t,a){await n(s.adminPasswordUpdate,{method:"PATCH",json:{old_password:t,new_password:a}})}async function b(t){const a=await n(s.adminAuditList,{query:{page:t.page,size:t.size,action:t.action||void 0,result:t.result||void 0,ip:t.ip||void 0,start_time:t.startTime||void 0,end_time:t.endTime||void 0}}),o=e(a,["data","list","items","logs"])??[],d=Number(e(a,["total","count"])??o.length);return{page:Number(e(a,["page"])??t.page),size:Number(e(a,["size"])??t.size),total:d,data:o.map((i,r)=>({id:Number(e(i,["id"])??r+1),action:String(e(i,["action"])??""),result:String(e(i,["result"])??""),fileCode:String(e(i,["file_code","fileCode","code"])??""),fileName:String(e(i,["file_name","fileName","name"])??""),sizeBytes:e(i,["size_bytes","sizeBytes","size"])??null,transferredBytes:e(i,["transferred_bytes","transferredBytes","bytes"])??null,ip:String(e(i,["ip","client_ip","clientIp"])??""),userAgent:String(e(i,["user_agent","userAgent"])??""),deviceOs:String(e(i,["device_os","deviceOs","os"])??""),deviceBrowser:String(e(i,["device_browser","deviceBrowser","browser"])??""),deviceType:String(e(i,["device_type","deviceType"])??""),actor:String(e(i,["actor"])??""),errorMsg:String(e(i,["error_msg","errorMsg","error"])??""),durationMs:e(i,["duration_ms","durationMs","duration"])??null,createdAt:e(i,["created_at","createdAt","time"])??null}))}}export{g as a,f as b,p as c,y as d,b as e,w as f,_ as g,S as h,x as i,l as j,m as k,u as l};
@@ -1 +1 @@
import{av as o,aw as a,W as r}from"./index-DYsKpclu.js";import{j as n,k as i,l as c}from"./admin-DEOkRyTC.js";const s="fcb_admin_flag",l=o("auth",{state:()=>({token:r(),checked:!1}),getters:{isAuthed:t=>!!t.token},actions:{async login(t){const e=(await c(t))?.token;if(!e)throw new Error("登录响应缺少 token");this.token=e,a(e);try{localStorage.setItem(s,"1")}catch{}this.checked=!0},async verify(){if(!this.token)return!1;try{return await i(),this.checked=!0,!0}catch{return this.reset(),!1}},async logout(){try{this.token&&await n()}catch{}this.reset()},reset(){this.token="",this.checked=!1,a("");try{localStorage.removeItem(s)}catch{}}}});export{l as u};
import{av as o,aw as a,W as r}from"./index-BKnWAKao.js";import{j as n,k as i,l as c}from"./admin-KnbIpHLF.js";const s="fcb_admin_flag",l=o("auth",{state:()=>({token:r(),checked:!1}),getters:{isAuthed:t=>!!t.token},actions:{async login(t){const e=(await c(t))?.token;if(!e)throw new Error("登录响应缺少 token");this.token=e,a(e);try{localStorage.setItem(s,"1")}catch{}this.checked=!0},async verify(){if(!this.token)return!1;try{return await i(),this.checked=!0,!0}catch{return this.reset(),!1}},async logout(){try{this.token&&await n()}catch{}this.reset()},reset(){this.token="",this.checked=!1,a("");try{localStorage.removeItem(s)}catch{}}}});export{l as u};
@@ -1,5 +1,5 @@
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DYsKpclu.js","assets/index-CtyCxWf5.css"])))=>i.map(i=>d[i]);
import{ay as i}from"./index-DYsKpclu.js";const p='# API 概述\n\n文件快传 Go 版(v2.5.6)对外提供一套 REST API,覆盖文本/文件分享、分片上传、\n预签名直传、管理后台与审计日志查询。本文档与 `server/internal/api/` 实际实现逐一对齐,\n交互式规范见站内 `/openapi`(源文件 `docs/openapi.yaml`)。\n\n## Base URL\n\n- 服务默认监听 `:8466`,Base URL 为 `http://<host>:8466`(下文示例统一用 `http://localhost:8466`)。\n- **业务路由挂根路径**(与参考实现一致):`/share/*`、`/chunk/*`、`/presign/*`、`/admin/*`、`/setup`。\n- 仅两个公共接口带 `/api/v1` 前缀:`/api/v1/health`、`/api/v1/config`。\n\n## 统一响应封装\n\n所有 JSON 接口返回统一结构,HTTP 状态码与 `code` 一致;失败时 `data` 缺省:\n\n```json\n{ "code": 200, "msg": "ok", "data": { } }\n```\n\n失败示例(404):\n\n```json\n{ "code": 404, "msg": "文件不存在" }\n```\n\n个别端点直接返回原始内容而非 JSON 封装(文档中已单独标注):\n\n| 端点 | 响应形式 |\n|---|---|\n| `GET /share/select?code=`(文本分享) | `text/plain; charset=utf-8` 正文 |\n| `GET /share/select?code=`(文件分享) | 文件二进制流(200/206,支持 Range) |\n| `GET /share/download?key=&code=`(文件分享) | 文件二进制流(200/206,支持 Range) |\n| `GET /admin/file/download?id=`(文件分享) | 文件二进制流 |\n| `GET /setup` / `POST /setup`(表单) | HTML 向导/成功页 |\n\n## 字段命名约定\n\n- 接口字段以 **snake_case** 为主(`file_code`、`size_bytes`)。\n- 文件列表与审计日志的行字段同时输出 **snake_case 与 camelCase 双份**(如 `expired_at` 与 `expiredAt`),文档以 snake_case 为准,camelCase 仅为前端兼容保留。\n\n## 认证\n\n- 游客接口无需认证;是否允许游客上传由配置 `openUpload` 控制(关闭时上传类接口要求管理员 `Authorization: Bearer <token>`,否则 403)。\n- 管理接口(`/admin/login` 除外)一律要求 `Authorization: Bearer <JWT>`,无效/缺失返回 401。\n- 详情见《认证与限流》。\n\n## 限流\n\n按 IP(可信代理场景解析 `X-Forwarded-For`)维度限流,超限返回 **423**:\n\n| 规则 | 计数时机 | 默认(次/窗口) | 相关配置 |\n|---|---|---|---|\n| `upload` | **上传成功**后计数 | 10 次 / 1 分钟 | `uploadCount` / `uploadMinute` |\n| `error` | 取件失败(404/过期)时计数 | 10 次 / 1 分钟 | `errorCount` / `errorMinute` |\n| `login` | 登录失败时计数 | 5 次 / 15 分钟 | `loginCount` / `loginMinute` |\n| `metadata` | 每次访问即计数 | 同 `error` | `errorCount` / `errorMinute` |\n\n## 初始化守卫\n\n系统未初始化(未设置管理员密码)时,除 `GET|POST /setup` 与 `GET /api/v1/health` 外,\n**所有接口一律返回 428**:\n\n```json\n{ "code": 428, "msg": "系统未初始化,请先完成初始化" }\n```\n\n首次部署请先访问 `GET /setup` 获取 HTML 向导,或直接 `POST /setup` 完成初始化(见《管理后台 API》初始化章节)。\n\n## 审计\n\n所有上传/下载端点经审计中间件自动落库(操作时间/IP/UA/设备解析/动作/结果/字节数/耗时/角色),\n失败与被拒绝的请求同样记录;管理端经 `GET /admin/audit/list` 查询,详见《审计日志》。\n\n## 端点总览\n\n| 模块 | 端点 |\n|---|---|\n| 公共 | `GET /api/v1/health` · `GET /api/v1/config` · `GET /robots.txt`(输出 `robotsText` 配置) |\n| 初始化 | `GET /setup` · `POST /setup` |\n| 文本分享 | `POST /share/text` |\n| 文件分享 | `POST /share/file` |\n| 查询与取件 | `GET/POST /share/metadata` · `GET /share/select` · `POST /share/select` · `GET /share/download` |\n| 分片上传 | `POST /chunk/upload/init` · `POST /chunk/upload/{uploadID}/{chunkIndex}` · `GET /chunk/upload/status/{uploadID}` · `POST /chunk/upload/complete/{uploadID}` · `DELETE /chunk/upload/{uploadID}` |\n| 预签名直传 | `POST /presign/upload/init` · `PUT /presign/upload/proxy/{uploadID}` · `POST /presign/upload/confirm/{uploadID}` · `GET /presign/upload/status/{uploadID}` · `DELETE /presign/upload/{uploadID}` |\n| 管理后台 | `POST /admin/login` · `GET /admin/verify` · `POST /admin/logout` · `GET /admin/dashboard` · 文件管理 `/admin/file/*` · 配置 `/admin/config/*` · 密码 `/admin/settings/password` |\n| 审计日志 | `GET /admin/audit/list`(别名 `/admin/audit/logs`) |\n\n## 时间与编码\n\n- 时间字段一律 RFC 3339(如 `2025-06-01T12:00:00+08:00`);管理员会话过期时间为 Unix 秒。\n- 请求体支持 `application/json` 与 `application/x-www-form-urlencoded`(上传类为 `multipart/form-data`),文档示例以 JSON/curl 为主。\n- CORS:公开接口放开(Bearer 认证,无 Cookie CSRF 面);**管理端 `/admin/*` 已收紧**——携带 Origin 且Line truncated
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-BKnWAKao.js","assets/index-CtyCxWf5.css"])))=>i.map(i=>d[i]);
import{ay as i}from"./index-BKnWAKao.js";const p='# API 概述\n\n文件快传 Go 版(26.9)对外提供一套 REST API,覆盖文本/文件分享、分片上传、\n预签名直传、管理后台与审计日志查询。本文档与 `server/internal/api/` 实际实现逐一对齐,\n交互式规范见站内 `/openapi`(源文件 `docs/openapi.yaml`)。\n\n## Base URL\n\n- 服务默认监听 `:8466`,Base URL 为 `http://<host>:8466`(下文示例统一用 `http://localhost:8466`)。\n- **业务路由挂根路径**(与参考实现一致):`/share/*`、`/chunk/*`、`/presign/*`、`/admin/*`、`/setup`。\n- 仅两个公共接口带 `/api/v1` 前缀:`/api/v1/health`、`/api/v1/config`。\n\n## 统一响应封装\n\n所有 JSON 接口返回统一结构,HTTP 状态码与 `code` 一致;失败时 `data` 缺省:\n\n```json\n{ "code": 200, "msg": "ok", "data": { } }\n```\n\n失败示例(404):\n\n```json\n{ "code": 404, "msg": "文件不存在" }\n```\n\n个别端点直接返回原始内容而非 JSON 封装(文档中已单独标注):\n\n| 端点 | 响应形式 |\n|---|---|\n| `GET /share/select?code=`(文本分享) | `text/plain; charset=utf-8` 正文 |\n| `GET /share/select?code=`(文件分享) | 文件二进制流(200/206,支持 Range) |\n| `GET /share/download?key=&code=`(文件分享) | 文件二进制流(200/206,支持 Range) |\n| `GET /admin/file/download?id=`(文件分享) | 文件二进制流 |\n| `GET /setup` / `POST /setup`(表单) | HTML 向导/成功页 |\n\n## 字段命名约定\n\n- 接口字段以 **snake_case** 为主(`file_code`、`size_bytes`)。\n- 文件列表与审计日志的行字段同时输出 **snake_case 与 camelCase 双份**(如 `expired_at` 与 `expiredAt`),文档以 snake_case 为准,camelCase 仅为前端兼容保留。\n\n## 认证\n\n- 游客接口无需认证;是否允许游客上传由配置 `openUpload` 控制(关闭时上传类接口要求管理员 `Authorization: Bearer <token>`,否则 403)。\n- 管理接口(`/admin/login` 除外)一律要求 `Authorization: Bearer <JWT>`,无效/缺失返回 401。\n- 详情见《认证与限流》。\n\n## 限流\n\n按 IP(可信代理场景解析 `X-Forwarded-For`)维度限流,超限返回 **423**:\n\n| 规则 | 计数时机 | 默认(次/窗口) | 相关配置 |\n|---|---|---|---|\n| `upload` | **上传成功**后计数 | 10 次 / 1 分钟 | `uploadCount` / `uploadMinute` |\n| `error` | 取件失败(404/过期)时计数 | 10 次 / 1 分钟 | `errorCount` / `errorMinute` |\n| `login` | 登录失败时计数 | 5 次 / 15 分钟 | `loginCount` / `loginMinute` |\n| `metadata` | 每次访问即计数 | 同 `error` | `errorCount` / `errorMinute` |\n\n## 初始化守卫\n\n系统未初始化(未设置管理员密码)时,除 `GET|POST /setup` 与 `GET /api/v1/health` 外,\n**所有接口一律返回 428**:\n\n```json\n{ "code": 428, "msg": "系统未初始化,请先完成初始化" }\n```\n\n首次部署请先访问 `GET /setup` 获取 HTML 向导,或直接 `POST /setup` 完成初始化(见《管理后台 API》初始化章节)。\n\n## 审计\n\n所有上传/下载端点经审计中间件自动落库(操作时间/IP/UA/设备解析/动作/结果/字节数/耗时/角色),\n失败与被拒绝的请求同样记录;管理端经 `GET /admin/audit/list` 查询,详见《审计日志》。\n\n## 端点总览\n\n| 模块 | 端点 |\n|---|---|\n| 公共 | `GET /api/v1/health` · `GET /api/v1/config` · `GET /robots.txt`(输出 `robotsText` 配置) |\n| 初始化 | `GET /setup` · `POST /setup` |\n| 文本分享 | `POST /share/text` |\n| 文件分享 | `POST /share/file` |\n| 查询与取件 | `GET/POST /share/metadata` · `GET /share/select` · `POST /share/select` · `GET /share/download` |\n| 分片上传 | `POST /chunk/upload/init` · `POST /chunk/upload/{uploadID}/{chunkIndex}` · `GET /chunk/upload/status/{uploadID}` · `POST /chunk/upload/complete/{uploadID}` · `DELETE /chunk/upload/{uploadID}` |\n| 预签名直传 | `POST /presign/upload/init` · `PUT /presign/upload/proxy/{uploadID}` · `POST /presign/upload/confirm/{uploadID}` · `GET /presign/upload/status/{uploadID}` · `DELETE /presign/upload/{uploadID}` |\n| 管理后台 | `POST /admin/login` · `GET /admin/verify` · `POST /admin/logout` · `GET /admin/dashboard` · 文件管理 `/admin/file/*` · 配置 `/admin/config/*` · 密码 `/admin/settings/password` |\n| 审计日志 | `GET /admin/audit/list`(别名 `/admin/audit/logs`) |\n\n## 时间与编码\n\n- 时间字段一律 RFC 3339(如 `2025-06-01T12:00:00+08:00`);管理员会话过期时间为 Unix 秒。\n- 请求体支持 `application/json` 与 `application/x-www-form-urlencoded`(上传类为 `multipart/form-data`),文档示例以 JSON/curl 为主。\n- CORS:公开接口放开(Bearer 认证,无 Cookie CSRF 面);**管理端 `/admin/*` 已收紧**——携带 Origin 且既Line truncated
查询分享元信息(不消耗次数)与真正取件(消耗次数)的完整接口。
除 \`metadata\` 每次 423 限流计数外,取件失败还会计入 \`error\` 限流。
@@ -438,7 +438,7 @@ curl -s -X POST http://localhost:8466/presign/upload/init \\
"code": 200, "msg": "ok",
"data": {
"upload_id": "6a1e…",
"upload_url": "https://minio:9000/filecodebox/share/data/2025/06/01/6a1e…/backup.zip?X-Amz-…",
"upload_url": "https://minio:9000/fileshare/share/data/2025/06/01/6a1e…/backup.zip?X-Amz-…",
"mode": "direct",
"expires_in": 900,
"file_path": "share/data/2025/06/01/6a1e…"
@@ -594,7 +594,7 @@ curl -s -X DELETE http://localhost:8466/presign/upload/6a1e…
\`\`\`json
{ "code": 404, "msg": "上传会话已过期" }
\`\`\`
`,_='# 管理后台 API\n\n管理端接口:除 `POST /admin/login` 与初始化向导 `/setup` 外,一律要求\n`Authorization: Bearer <token>`(见《认证与限流》),无效令牌 401。\n\n## 初始化向导:GET /setup\n\n未初始化时返回 HTML 配置页(站点名称、管理员密码、上传/限流/保存策略);\n已初始化时 `303` 重定向到 `/`。\n\n```bash\ncurl -i http://localhost:8466/setup\n```\n\n## 初始化提交:POST /setup\n\n表单(浏览器向导)或 JSON 均可;成功后写入库配置 KV 并生成密码哈希与 `jwt_secret`。\n表单提交返回成功 HTML 页;JSON 提交返回 JSON。\n\n**主要字段**:\n\n| 字段 | 必需 | 默认 | 说明 |\n|---|---|---|---|\n| `admin_password` | ✅ | - | 管理员密码(≥8 位) |\n| `confirm_password` | ✅ | - | 确认密码(须一致) |\n| `site_name` | ❌ | 文件快传 | 站点名称 |\n| `upload_size_value` / `upload_size_unit` | ❌ | 10 / MB | 单文件大小限制(单位 KB/MB/GB) |\n| `save_time_value` / `save_time_unit` | ❌ | 0 / day | 最长保存秒数(0=不限) |\n| `expireStyle` | ❌ | day,hour,minute,forever,count | 过期方式(可多值/逗号分隔) |\n| `code_generate_type` | ❌ | secret | 取件码类型 `number`/`secret` |\n| `errorCount` / `errorMinute` | ❌ | 10 / 1 | 取件错误限流 |\n| `loginCount` / `loginMinute` | ❌ | 5 / 15 | 登录失败限流 |\n| `uploadCount` / `uploadMinute` | ❌ | 10 / 1 | 上传限流 |\n| `allowed_file_types` | ❌ | `*` | 逗号分隔白名单 |\n| `openUpload` / `enableChunk` | ❌ | 1 / 0 | 游客上传 / 分片开关(`1`/`true`/`on`/`yes`) |\n\n```bash\ncurl -s -X POST http://localhost:8466/setup \\\n -H \'Content-Type: application/json\' \\\n -d \'{"admin_password":"admin12345","confirm_password":"admin12345","site_name":"我的文件柜","upload_size_value":10,"upload_size_unit":"MB"}\'\n```\n\n```json\n{ "code": 200, "msg": "ok", "data": { "ok": true, "admin": "/#/admin" } }\n```\n\n**错误响应**(400,HTML 表单时内嵌错误提示):\n\n```json\n{ "code": 400, "msg": "管理员密码至少 8 位" }\n```\n\n## 登录:POST /admin/login\n\n```bash\ncurl -s -X POST http://localhost:8466/admin/login \\\n -H \'Content-Type: application/json\' \\\n -d \'{"password":"admin12345"}\'\n```\n\n**成功响应**(200):\n\n```json\n{\n "code": 200, "msg": "ok",\n "data": {\n "id": "admin", "username": "admin",\n "token": "eyJhbGciOiJIUzI1NiIs...",\n "token_type": "Bearer",\n "expires_at": 1750000000,\n "expires_in": 604800\n }\n}\n```\n\n**错误响应**:\n\n```json\n{ "code": 401, "msg": "密码错误" }\n```\n\n```json\n{ "code": 423, "msg": "请求次数过多,请稍后再试" }\n```\n\n## 校验会话:GET /admin/verify\n\n```bash\ncurl -s http://localhost:8466/admin/verify -H "Authorization: Bearer $TOKEN"\n```\n\n```json\n{ "code": 200, "msg": "ok", "data": { "id": "admin", "username": "admin", "token": "eyJ…", "token_type": "Bearer", "expires_at": 1750000000 } }\n```\n\n## 登出:POST /admin/logout\n\n无状态 JWT,服务端仅返回确认(客户端应丢弃令牌):\n\n```json\n{ "code": 200, "msg": "ok", "data": { "ok": true } }\n```\n\n## 仪表盘:GET /admin/dashboard\n\n```bash\ncurl -s http://localhost:8466/admin/dashboard -H "Authorization: Bearer $TOKEN"\n```\n\n```json\n{\n "code": 200, "msg": "ok",\n "data": {\n "totalFiles": 42,\n "storageUsed": "123456789",\n "sysUptime": 1750000000000,\n "yesterdayCount": 5, "yesterdaySize": "1048576",\n "todayCount": 12, "todaySize": "5242880",\n "activeCount": 40, "expiredCount": 2,\n "textCount": 10, "fileCount": 32, "chunkedCount": 3,\n "usedCount": 156,\n "storageBackend": "local",\n "uploadSizeLimit": 10485760,\n "openUpload": 1, "enableChunk": 1,\n "maxSaveSeconds": 0,\n "topSuffixes": [ { "suffix": ".pdf", "count": 12 }, { "suffix": "Text", "count": 10 } ],\n "recentFiles": [ { "id": 42, "code": "K3P9W", "name": "report.pdf", "size": 1048576, "created_at": "2025-06-01T12:00:00+08:00", "expired_at": "2025-06-08T12:00:00+08:00", "is_expired": false, "expired_count": -1, "used_count": 3, "is_text": false, "is_chunked": false, "is_permanent": false, "has_download_limit": false, "remaining_downloads": null, "file_hash": null, "prefix": "report", "suffix": ".pdf", "text": false, "createdAt": "2025-06-01T12:00:00+08:00", "expiredAt": "2025-06-08T12:00:00+08:00", "isExpired": false, "expiredCount": -1, "usedCount": 3, "isText": false, "isChunked": false, "isPermanent": false, "hasDownloadLimit": false, "remainingDownloads": null, "fileHash": null } ],\n "recentActivities": []\n }\n}\n```\n\n> `storageUsed`/`todaySize`/`yesterdaySize` 为字符串字节数;`sysUptime` 为服务启动时刻的 Unix 毫秒。\n\n## 文件列表:GET /admin/file/list\n\n**参数**:\n\n| 参数 | 默认 | 说明 |\n|---|---|---|\n| `page` / `size` | 1 / 10 | 分页(size 1~10 Line truncated
`,_='# 管理后台 API\n\n管理端接口:除 `POST /admin/login` 与初始化向导 `/setup` 外,一律要求\n`Authorization: Bearer <token>`(见《认证与限流》),无效令牌 401。\n\n## 初始化向导:GET /setup\n\n未初始化时返回 HTML 配置页(站点名称、管理员密码、上传/限流/保存策略);\n已初始化时 `303` 重定向到 `/`。\n\n```bash\ncurl -i http://localhost:8466/setup\n```\n\n## 初始化提交:POST /setup\n\n表单(浏览器向导)或 JSON 均可;成功后写入库配置 KV 并生成密码哈希与 `jwt_secret`。\n表单提交返回成功 HTML 页;JSON 提交返回 JSON。\n\n**主要字段**:\n\n| 字段 | 必需 | 默认 | 说明 |\n|---|---|---|---|\n| `admin_password` | ✅ | - | 管理员密码(≥8 位) |\n| `confirm_password` | ✅ | - | 确认密码(须一致) |\n| `site_name` | ❌ | 文件快传 | 站点名称 |\n| `upload_size_value` / `upload_size_unit` | ❌ | 10 / MB | 单文件大小限制(单位 KB/MB/GB) |\n| `save_time_value` / `save_time_unit` | ❌ | 0 / day | 最长保存秒数(0=不限) |\n| `expireStyle` | ❌ | day,hour,minute,forever,count | 过期方式(可多值/逗号分隔) |\n| `code_generate_type` | ❌ | secret | 取件码类型 `number`/`secret` |\n| `errorCount` / `errorMinute` | ❌ | 10 / 1 | 取件错误限流 |\n| `loginCount` / `loginMinute` | ❌ | 5 / 15 | 登录失败限流 |\n| `uploadCount` / `uploadMinute` | ❌ | 10 / 1 | 上传限流 |\n| `allowed_file_types` | ❌ | `*` | 逗号分隔白名单 |\n| `openUpload` / `enableChunk` | ❌ | 1 / 0 | 游客上传 / 分片开关(`1`/`true`/`on`/`yes`) |\n\n```bash\ncurl -s -X POST http://localhost:8466/setup \\\n -H \'Content-Type: application/json\' \\\n -d \'{"admin_password":"admin12345","confirm_password":"admin12345","site_name":"我的文件柜","upload_size_value":10,"upload_size_unit":"MB"}\'\n```\n\n```json\n{ "code": 200, "msg": "ok", "data": { "ok": true, "admin": "/#/admin" } }\n```\n\n**错误响应**(400,HTML 表单时内嵌错误提示):\n\n```json\n{ "code": 400, "msg": "管理员密码至少 8 位" }\n```\n\n## 登录:POST /admin/login\n\n```bash\ncurl -s -X POST http://localhost:8466/admin/login \\\n -H \'Content-Type: application/json\' \\\n -d \'{"password":"admin12345"}\'\n```\n\n**成功响应**(200):\n\n```json\n{\n "code": 200, "msg": "ok",\n "data": {\n "id": "admin", "username": "admin",\n "token": "eyJhbGciOiJIUzI1NiIs...",\n "token_type": "Bearer",\n "expires_at": 1750000000,\n "expires_in": 604800\n }\n}\n```\n\n**错误响应**:\n\n```json\n{ "code": 401, "msg": "密码错误" }\n```\n\n```json\n{ "code": 423, "msg": "请求次数过多,请稍后再试" }\n```\n\n## 校验会话:GET /admin/verify\n\n```bash\ncurl -s http://localhost:8466/admin/verify -H "Authorization: Bearer $TOKEN"\n```\n\n```json\n{ "code": 200, "msg": "ok", "data": { "id": "admin", "username": "admin", "token": "eyJ…", "token_type": "Bearer", "expires_at": 1750000000 } }\n```\n\n## 登出:POST /admin/logout\n\n无状态 JWT,服务端仅返回确认(客户端应丢弃令牌):\n\n```json\n{ "code": 200, "msg": "ok", "data": { "ok": true } }\n```\n\n## 仪表盘:GET /admin/dashboard\n\n```bash\ncurl -s http://localhost:8466/admin/dashboard -H "Authorization: Bearer $TOKEN"\n```\n\n```json\n{\n "code": 200, "msg": "ok",\n "data": {\n "totalFiles": 42,\n "storageUsed": "123456789",\n "sysUptime": 1750000000000,\n "yesterdayCount": 5, "yesterdaySize": "1048576",\n "todayCount": 12, "todaySize": "5242880",\n "activeCount": 40, "expiredCount": 2,\n "textCount": 10, "fileCount": 32, "chunkedCount": 3,\n "usedCount": 156,\n "storageBackend": "local",\n "uploadSizeLimit": 10485760,\n "openUpload": 1, "enableChunk": 1,\n "maxSaveSeconds": 0,\n "topSuffixes": [ { "suffix": ".pdf", "count": 12 }, { "suffix": "Text", "count": 10 } ],\n "recentFiles": [ { "id": 42, "code": "K3P9W", "name": "report.pdf", "size": 1048576, "created_at": "2025-06-01T12:00:00+08:00", "expired_at": "2025-06-08T12:00:00+08:00", "is_expired": false, "expired_count": -1, "used_count": 3, "is_text": false, "is_chunked": false, "is_permanent": false, "has_download_limit": false, "remaining_downloads": null, "file_hash": null, "prefix": "report", "suffix": ".pdf", "text": false, "createdAt": "2025-06-01T12:00:00+08:00", "expiredAt": "2025-06-08T12:00:00+08:00", "isExpired": false, "expiredCount": -1, "usedCount": 3, "isText": false, "isChunked": false, "isPermanent": false, "hasDownloadLimit": false, "remainingDownloads": null, "fileHash": null } ],\n "recentActivities": []\n }\n}\n```\n\n> `storageUsed`/`todaySize`/`yesterdaySize` 为字符串字节数;`sysUptime` 为服务启动时刻的 Unix 毫秒。\n\n## 文件列表:GET /admin/file/list\n\n**参数**:\n\n| 参数 | 默认 | 说明 |\n|---|---|---|\n| `page` / `size` | 1 / 10 | 分页(size 1~10 Line truncated
info:
title: 文件快传 Go 版 API
version: 2.5.6
@@ -2514,4 +2514,4 @@ components:
created_at: { type: string }
security: []
`,S=Object.assign({"../../../docs/api/00-overview.md":p,"../../../docs/api/01-auth.md":d,"../../../docs/api/02-text-share.md":c,"../../../docs/api/03-file-share.md":l,"../../../docs/api/04-pickup.md":m,"../../../docs/api/05-chunk-upload.md":u,"../../../docs/api/06-presign.md":g,"../../../docs/api/07-admin.md":_,"../../../docs/api/08-audit.md":y,"../../../docs/api/09-storage.md":h,"../../../docs/api/10-config.md":f,"../../../docs/api/11-errors.md":x,"../../../docs/api/12-logo.md":b}),v=["README","share","chunk","presign","admin","audit","errors","config","logo","webdav","env"];function j(n){return(n.split("/").pop()??n).replace(/\.md$/,"")}function E(n,e){const o=/^#\s+(.+)$/m.exec(n);return o?o[1].trim():e}const r=Object.entries(S).map(([n,e])=>{const o=j(n),s=v.indexOf(o);return{slug:o,title:E(e,o),embedded:e,order:s>=0?s:100+o.localeCompare("")}}).sort((n,e)=>n.order-e.order||n.slug.localeCompare(e.slug));r.length>0;const k=Object.assign({"../../../docs/openapi.yaml":T}),O=Object.values(k)[0]??null;async function C(n){if(n.embedded!==null)return n.embedded;const{API_BASE:e}=await i(async()=>{const{API_BASE:t}=await import("./index-DYsKpclu.js").then(a=>a.aD);return{API_BASE:t}},__vite__mapDeps([0,1])),o=`${e}/docs/api/${encodeURIComponent(n.slug)}.md`,s=await fetch(o);if(!s.ok)throw new Error(`文档加载失败(HTTP ${s.status})`);return s.text()}async function I(){try{const{API_BASE:n}=await i(async()=>{const{API_BASE:t}=await import("./index-DYsKpclu.js").then(a=>a.aD);return{API_BASE:t}},__vite__mapDeps([0,1])),e=await fetch(`${n}/docs/api/index.json`);if(!e.ok)return[];const o=await e.json(),s=new Set(r.map(t=>t.slug));return o.filter(t=>t.slug&&!s.has(t.slug)).map(t=>({slug:t.slug,title:t.title??t.slug,embedded:null,order:200}))}catch{return[]}}export{I as a,r as d,O as e,C as l};
`,S=Object.assign({"../../../docs/api/00-overview.md":p,"../../../docs/api/01-auth.md":d,"../../../docs/api/02-text-share.md":c,"../../../docs/api/03-file-share.md":l,"../../../docs/api/04-pickup.md":m,"../../../docs/api/05-chunk-upload.md":u,"../../../docs/api/06-presign.md":g,"../../../docs/api/07-admin.md":_,"../../../docs/api/08-audit.md":y,"../../../docs/api/09-storage.md":h,"../../../docs/api/10-config.md":f,"../../../docs/api/11-errors.md":x,"../../../docs/api/12-logo.md":b}),v=["README","share","chunk","presign","admin","audit","errors","config","logo","webdav","env"];function j(n){return(n.split("/").pop()??n).replace(/\.md$/,"")}function E(n,e){const o=/^#\s+(.+)$/m.exec(n);return o?o[1].trim():e}const r=Object.entries(S).map(([n,e])=>{const o=j(n),s=v.indexOf(o);return{slug:o,title:E(e,o),embedded:e,order:s>=0?s:100+o.localeCompare("")}}).sort((n,e)=>n.order-e.order||n.slug.localeCompare(e.slug));r.length>0;const k=Object.assign({"../../../docs/openapi.yaml":T}),O=Object.values(k)[0]??null;async function C(n){if(n.embedded!==null)return n.embedded;const{API_BASE:e}=await i(async()=>{const{API_BASE:t}=await import("./index-BKnWAKao.js").then(a=>a.aD);return{API_BASE:t}},__vite__mapDeps([0,1])),o=`${e}/docs/api/${encodeURIComponent(n.slug)}.md`,s=await fetch(o);if(!s.ok)throw new Error(`文档加载失败(HTTP ${s.status})`);return s.text()}async function I(){try{const{API_BASE:n}=await i(async()=>{const{API_BASE:t}=await import("./index-BKnWAKao.js").then(a=>a.aD);return{API_BASE:t}},__vite__mapDeps([0,1])),e=await fetch(`${n}/docs/api/index.json`);if(!e.ok)return[];const o=await e.json(),s=new Set(r.map(t=>t.slug));return o.filter(t=>t.slug&&!s.has(t.slug)).map(t=>({slug:t.slug,title:t.title??t.slug,embedded:null,order:200}))}catch{return[]}}export{I as a,r as d,O as e,C as l};
@@ -1,4 +1,4 @@
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/HomeView-D38U_AAJ.js","assets/PageShell-D87JkPkG.js","assets/SiteNav.vue_vue_type_script_setup_true_lang-CwaEJKIZ.js","assets/PageShell-PYQzNiuf.css","assets/share-CqDDLJWI.js","assets/HomeView-DcN_X0wH.css","assets/PickupView-ClAAhXsM.js","assets/LoginView-BnVXNxFO.js","assets/auth-B7MDTgxJ.js","assets/admin-DEOkRyTC.js","assets/LoginView-BgHqRIwi.css","assets/AdminLayout-DJ2FR9f-.js","assets/FilesView-ZJ5eqPp5.js","assets/Pager.vue_vue_type_script_setup_true_lang-B3GeH0mY.js","assets/AuditView-BHN4e5xt.js","assets/AuditView-f2PBwbQe.css","assets/SettingsView-CjSvbH8z.js","assets/SettingsView-GpXVMuCV.css","assets/DocsView-Ds78oqBY.js","assets/docsSource-BXkkn0HE.js","assets/markdown-B5D8JARp.js","assets/OpenApiView-4SbIV1Bx.js","assets/swagger-CqkleIqs.js","assets/OpenApiView-BCH8BgeP.css","assets/NotFoundView-CbfqSXyJ.js"])))=>i.map(i=>d[i]);
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/HomeView-BUGc7QyM.js","assets/PageShell-CBo29Oot.js","assets/SiteNav.vue_vue_type_script_setup_true_lang-D3yLF4uh.js","assets/PageShell-PYQzNiuf.css","assets/share-B-zR67vw.js","assets/HomeView-DcN_X0wH.css","assets/PickupView-CUVFjD6g.js","assets/LoginView-mkNZ67cf.js","assets/auth-Cp2GGuZy.js","assets/admin-KnbIpHLF.js","assets/LoginView-BgHqRIwi.css","assets/AdminLayout-CmvNXPHJ.js","assets/FilesView-lLPRhmyI.js","assets/Pager.vue_vue_type_script_setup_true_lang-DZv_x-2P.js","assets/AuditView-BSm5VfBI.js","assets/AuditView-f2PBwbQe.css","assets/SettingsView-DgvAWaBc.js","assets/SettingsView-GpXVMuCV.css","assets/DocsView-DPtCYlAM.js","assets/docsSource-Df5ur5C4.js","assets/markdown-B5D8JARp.js","assets/OpenApiView-qf3nWBmo.js","assets/swagger-CqkleIqs.js","assets/OpenApiView-BCH8BgeP.css","assets/NotFoundView-DdQb5mYe.js"])))=>i.map(i=>d[i]);
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))r(n);new MutationObserver(n=>{for(const i of n)if(i.type==="childList")for(const l of i.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&r(l)}).observe(document,{childList:!0,subtree:!0});function o(n){const i={};return n.integrity&&(i.integrity=n.integrity),n.referrerPolicy&&(i.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?i.credentials="include":n.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(n){if(n.ep)return;n.ep=!0;const i=o(n);fetch(n.href,i)}})();function $l(e){const t=Object.create(null);for(const o of e.split(","))t[o]=1;return o=>o in t}const Se={},dr=[],Gt=()=>{},Fc=()=>!1,Jn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Qn=e=>e.startsWith("onUpdate:"),Be=Object.assign,Bl=(e,t)=>{const o=e.indexOf(t);o>-1&&e.splice(o,1)},zd=Object.prototype.hasOwnProperty,_e=(e,t)=>zd.call(e,t),oe=Array.isArray,To=e=>un(e)==="[object Map]",er=e=>un(e)==="[object Set]",Ta=e=>un(e)==="[object Date]",le=e=>typeof e=="function",Le=e=>typeof e=="string",yt=e=>typeof e=="symbol",be=e=>e!==null&&typeof e=="object",Oc=e=>(be(e)||le(e))&&le(e.then)&&le(e.catch),Nc=Object.prototype.toString,un=e=>Nc.call(e),Ud=e=>un(e).slice(8,-1),Mc=e=>un(e)==="[object Object]",Zn=e=>Le(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Hr=$l(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),ei=e=>{const t=Object.create(null);return(o=>t[o]||(t[o]=e(o)))},Vd=/-\w/g,ct=ei(e=>e.replace(Vd,t=>t.slice(1).toUpperCase())),jd=/\B([A-Z])/g,Ro=ei(e=>e.replace(jd,"-$1").toLowerCase()),ti=ei(e=>e.charAt(0).toUpperCase()+e.slice(1)),Di=ei(e=>e?`on${ti(e)}`:""),Vt=(e,t)=>!Object.is(e,t),In=(e,...t)=>{for(let o=0;o<e.length;o++)e[o](...t)},kc=(e,t,o,r=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:o})},oi=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Gd=e=>{const t=Le(e)?Number(e):NaN;return isNaN(t)?e:t};let Pa;const ri=()=>Pa||(Pa=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ni(e){if(oe(e)){const t={};for(let o=0;o<e.length;o++){const r=e[o],n=Le(r)?Xd(r):ni(r);if(n)for(const i in n)t[i]=n[i]}return t}else if(Le(e)||be(e))return e}const Kd=/;(?![^(]*\))/g,Yd=/:([^]+)/,qd=/\/\*[^]*?\*\//g;function Xd(e){const t={};return e.replace(qd,"").split(Kd).forEach(o=>{if(o){const r=o.split(Yd);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function ii(e){let t="";if(Le(e))t=e;else if(oe(e))for(let o=0;o<e.length;o++){const r=ii(e[o]);r&&(t+=r+" ")}else if(be(e))for(const o in e)e[o]&&(t+=o+" ");return t.trim()}const Jd="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Qd=$l(Jd);function Hc(e){return!!e||e===""}function Zd(e,t){if(e.length!==t.length)return!1;let o=!0;for(let r=0;o&&r<e.length;r++)o=Po(e[r],t[r]);return o}function Ia(e,t){if(e.size!==t.size)return!1;const o=Array.from(t),r=new Uint8Array(o.length);for(const n of e){let i=-1;for(let l=0;l<o.length;l++)if(!r[l]&&Po(n,o[l])){i=l;break}if(i<0)return!1;r[i]=1}return!0}function Po(e,t){if(e===t)return!0;let o=Ta(e),r=Ta(t);if(o||r)return o&&r?e.getTime()===t.getTime():!1;if(o=yt(e),r=yt(t),o||r)return e===t;if(o=oe(e),r=oe(t),o||r)return o&&r?Zd(e,t):!1;if(o=be(e),r=be(t),o||r){if(!o||!r)return!1;if(o=To(e),r=To(t),o||r||(o=er(e),r=er(t),o||r))return o&&r?Ia(e,t):!1;const n=Object.keys(e).length,i=Object.keys(t).length;if(n!==i)return!1;for(const l in e){const a=e.hasOwnProperty(l),s=t.hasOwnProperty(l);if(a&&!s||!a&&s||!Po(e[l],t[l]))return!1}}return String(e)===String(t)}function ep(e,t){return e.findIndex(o=>Po(o,t))}const $c=e=>!!(e&&e.__v_isRef===!0),Dn=e=>Le(e)?e:e==null?"":oe(e)||be(e)&&(e.toString===Nc||!le(e.toString))?$c(e)?Dn(e.value):JSON.stringify(e,Bc,2):String(e),Bc=(e,t)=>$c(t)?Bc(e,t.value):To(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((o,[r,n],i)=>(o[Ri(r,i)+" =>"]=n,o),{})}:er(t)?{[`Set(${t.size})`]:[...t.values()].map(o=>Ri(o))}:yt(t)?Ri(t):be(t)&&!oe(t)&&!Mc(t)?String(t):t,Ri=(e,t="")=>{var o;return yt(e)?`Symbol(${(o=e.description)!=null?o:t})`:e};let He;class Wc{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&He&&(He.active?(this.parent=He,this.index=(He.scopes||(He.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,o;if(this.scopes){const r=this.scopes.slice();for(t=0,o=r.length;t<o;t++)r[t].pause()}for(t=0,o=this.effects.length;t<o;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let t,o;if(this.scopes){const n=this.scopes.slice();foLine truncated
`))),e[Ko]=zn(n);const i=r||n.props&&n.props.type==="number";Go(e,t?"change":"input",l=>{l.target.composing||e[Ko](Ui(e.value,o,i))}),(o||i)&&Go(e,"change",()=>{e.value=Ui(e.value,o,i)}),t||(Go(e,"compositionstart",hh),Go(e,"compositionend",as),Go(e,"change",as))},mounted(e,{value:t,modifiers:{trim:o,number:r}}){const n=t??"",i=e[Sn];delete e[Sn],i!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==i?e[Ko](Ui(e.value,o,r)):e.value=n},beforeUpdate(e,{value:t,oldValue:o,modifiers:{lazy:r,trim:n,number:i}},l){if(e[Ko]=zn(l),e.composing)return;const a=(i||e.type==="number")&&!/^0\d/.test(e.value)?oi(e.value):e.value,s=t??"";if(a===s)return;const c=e.getRootNode();(c instanceof Document||c instanceof ShadowRoot)&&c.activeElement===e&&e.type!=="range"&&(r&&t===o||n&&e.value.trim()===s)||(e.value=s)}},mT={deep:!0,created(e,{value:t,modifiers:{number:o}},r){e._modelValue=t,Go(e,"change",()=>{const n=Array.prototype.filter.call(e.options,s=>s.selected).map(s=>o?oi(Un(s)):Un(s)),i=e.multiple,l=i?er(e._modelValue)?new Set(n):n:n[0],a=e._pendingValue=[i,i?oe(l)?n.slice():n:l];try{e[Ko](l)}finally{ci(()=>{e._pendingValue===a&&(e._pendingValue=void 0)})}}),e[Ko]=zn(r)},mounted(e,{value:t}){ss(e,t)},beforeUpdate(e,{value:t},o){e._modelValue=t,e[Ko]=zn(o)},updated(e,{value:t}){const o=e._pendingValue;e._pendingValue=void 0,(!o||o[0]!==e.multiple||!gh(t,o[1],o[0]))&&ss(e,t)}};function gh(e,t,o){if(!o||oe(e))return Po(e,t);if(er(e)){if(e.size!==t.length)return!1;for(const r of t)if(!e.has(r))return!1;return!0}return!1}function ss(e,t){const o=e.multiple,r=oe(t);if(!(o&&!r&&!er(t))){for(let n=0,i=e.options.length;n<i;n++){const l=e.options[n],a=Un(l);if(o)if(r){const s=typeof a;s==="string"||s==="number"?l.selected=t.some(c=>String(c)===String(a)):l.selected=ep(t,a)>-1}else l.selected=t.has(a);else if(Po(Un(l),t)){e.selectedIndex!==n&&(e.selectedIndex=n);return}}!o&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Un(e){return"_value"in e?e._value:e.value}const Ch=["ctrl","shift","alt","meta"],bh={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)=>Ch.some(o=>e[`${o}Key`]&&!t.includes(o))},hT=(e,t)=>{if(!e)return e;const o=e._withMods||(e._withMods={}),r=t.join(".");return o[r]||(o[r]=((n,...i)=>{for(let l=0;l<t.length;l++){const a=bh[t[l]];if(a&&a(n,t))return}return e(n,...i)}))},xh={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},gT=(e,t)=>{const o=e._withKeys||(e._withKeys={}),r=t.join(".");return o[r]||(o[r]=(n=>{if(!("key"in n))return;const i=Ro(n.key);if(t.some(l=>l===i||xh[l]===i))return e(n)}))},_h=Be({patchProp:dh},Vm);let cs;function vh(){return cs||(cs=ym(_h))}const Sh=((...e)=>{const t=vh().createApp(...e),{mount:o}=t;return t.mount=r=>{const n=Eh(r);if(!n)return;const i=t._component;!le(i)&&!i.render&&!i.template&&(i.template=n.innerHTML),n.nodeType===1&&(n.textContent="");const l=o(n,!1,yh(n));return n instanceof Element&&(n.removeAttribute("v-cloak"),n.setAttribute("data-v-app","")),l},t});function yh(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Eh(e){return Le(e)?document.querySelector(e):e}let Gu;const gi=e=>Gu=e,Ku=Symbol();function hl(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var Vr;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Vr||(Vr={}));function Th(){const e=Wl(!0),t=e.run(()=>mt({}));let o=[],r=[];const n=qr({install(i){gi(n),n._a=i,i.provide(Ku,n),i.config.globalProperties.$pinia=n,r.forEach(l=>o.push(l)),r=[]},use(i){return this._a?o.push(i):r.push(i),this},_p:o,_a:null,_e:e,_s:new Map,state:t});return n}const Yu=()=>{};function us(e,t,o,r=Yu){e.add(t);const n=()=>{e.delete(t)&&r()};return!o&&zc()&&tp(n),n}function lr(e,...t){e.forEach(o=>{o(...t)})}const Ph=e=>e(),fs=Symbol(),Vi=Symbol();function gl(e,t){e instanceof Map&&t instanceof Map?t.forEach((o,r)=>e.set(r,o)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const o in t){if(!t.hasOwnProperty(o))continue;const r=t[o],n=e[o];hl(n)&&hl(r)&&e.hasOwnProperty(o)&&!we(r)&&!lo(r)?e[o]=gl(n,r):e[o]=r}return e}const Ih=Symbol();function Ah(e){return!hl(e)||!Object.prototype.hasOwnProperty.call(e,Ih)}const{assign:_o}=Object;function Lh(e){return!!(we(e)&&e.effect)}function wh(e,t,o,r){const{state:n,actions:i,getters:l}=t,a=o.state.value[e];let s;function c(){a||(o.state.value[e]=n?n():{});const u=Sp(o.state.value[e]);return _o(u,i,Object.keys(l||{}).reduce((f,d)=>(f[d]=qr(fe(()=>{gi(o);const p=o._s.get(e);return l[d].call(p,p)})),f),{}))}return s=qu(e,c,t,o,r,!0),s}function qu(e,t,o={},r,n,i){let l;const a=_o({actions:{}},o),s= Line truncated
`+Object.entries(e).map(o=>t+` ${ff(o[0])}: ${o[1]};`).join(`
@@ -25,4 +25,4 @@ ${n}
${t}
</style>`}function Hx(e,t,o){const{styles:r,ids:n}=o;n.has(e)||r!==null&&(n.add(e),r.push(kx(e,t)))}const $x=typeof document<"u";function Bx(){if($x)return;const e=Ze(Mx,null);if(e!==null)return{adapter:(t,o)=>Hx(t,o,e),context:e}}const js={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#0FF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000",blanchedalmond:"#FFEBCD",blue:"#00F",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#0FF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",darkgreen:"#006400",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#F0F",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",lightgreen:"#90EE90",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#0F0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#F0F",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399",red:"#F00",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFF",whitesmoke:"#F5F5F5",yellow:"#FF0",yellowgreen:"#9ACD32",transparent:"#0000"};function Wx(e,t,o){t/=100,o/=100;let r=(n,i=(n+e/60)%6)=>o-o*t*Math.max(Math.min(i,4-i,1),0);return[r(5)*255,r(3)*255,r(1)*255]}function zx(e,t,o){t/=100,o/=100;let r=t*Math.min(o,1-o),n=(i,l=(i+e/30)%12)=>o-r*Math.max(Math.min(l-3,9-l,1),-1);return[n(0)*255,n(8)*255,n(4)*255]}const Yt="^\\s*",qt="\\s*$",Lo="\\s*((\\.\\d+)|(\\d+(\\.\\d*)?))%\\s*",_t="\\s*((\\.\\d+)|(\\d+(\\.\\d*)?))\\s*",qo="([0-9A-Fa-f])",Xo="([0-9A-Fa-f]{2})",Rf=new RegExp(`${Yt}hsl\\s*\\(${_t},${Lo},${Lo}\\)${qt}`),Ff=new RegExp(`${Yt}hsv\\s*\\(${_t},${Lo},${Lo}\\)${qt}`),Of=new RegExp(`${Yt}hsla\\s*\\(${_t},${Lo},${Lo},${_t}\\)${qt}`),Nf=new RegExp(`${Yt}hsva\\s*\\(${_t},${Lo},${Lo},${_t}\\)${qt}`),Ux=new RegExp(`${Yt}rgb\\s*\\(${_t},${_t},${_t}\\)${qt}`),Vx=new RegExp(`${Yt}rgba\\s*\\(${_t},${_t},${_t},${_t}\\)${qt}`),jx=new RegExp(`${Yt}#${qo}${qo}${qo}${qt}`),Gx=new RegExp(`${Yt}#${Xo}${Xo}${Xo}${qt}`),Kx=new RegExp(`${Yt}#${qo}${qo}${qo}${qo}${qt}`),Yx=new RegExp(`${Yt}#${Xo}${Xo}${Xo}${Xo}${qt}`);function dt(e){return parseInt(e,16)}function qx(e){try{let t;if(t=Of.exec(e))return[Gn(t[1]),Eo(t[5]),Eo(t[9]),Zo(t[13])];if(t=Rf.exec(e))return[Gn(t[1]),Eo(t[5]),Eo(t[9]),1];throw new Error(`[seemly/hsla]: Invalid color value ${e}.`)}catch(t){throw t}}function Xx(e){try{let t;if(t=Nf.exec(e))return[Gn(t[1]),Eo(t[5]),Eo(t[9]),Zo(t[13])];if(t=Ff.exec(e))return[Gn(t[1]),Eo(t[5]),Eo(t[9]),1];throw new Error(`[seemly/hsva]: Invalid color value ${e}.`)}catch(t){throw t}}function fo(e){try{let t;if(t=Gx.exec(e))return[dt(t[1]),dt(t[2]),dt(t[3]),1];if(t=Ux.exec(e))return[Xe(t[1]),Xe(t[5]),Xe(t[9]),1];if(t=Vx.exec(e))return[Xe(t[1]),Xe(t[5]),Xe(t[9]),Zo(t[13])];if(t=jx.exec(e))return[dt(t[1]+t[1]),dt(t[2]+t[2]),dt(t[3]+t[3]),1];if(t=Yx.exec(e))return[dt(t[1]),dt(t[2]),dt(t[3]),Zo(dt(t[4])/255)];if(t=Kx.exec(e))return[dt(t[1]+Line truncated
`,OS="\u2028",NS="\u2029";function MS(e){const t=e;let o=0,r=1,n=1,i=0;const l=D=>t[D]===FS&&t[D+1]===it,a=D=>t[D]===it,s=D=>t[D]===NS,c=D=>t[D]===OS,u=D=>l(D)||a(D)||s(D)||c(D),f=()=>o,d=()=>r,p=()=>n,g=()=>i,C=D=>l(D)||s(D)||c(D)?it:t[D],S=()=>C(o),E=()=>C(o+i);function T(){return i=0,u(o)&&(r++,n=0),l(o)&&o++,o++,n++,t[o]}function v(){return l(o+i)&&i++,i++,t[o+i]}function y(){o=0,r=1,n=1,i=0}function L(D=0){i=D}function w(){const D=o+i;for(;D!==o;)T();i=0}return{index:f,line:d,column:p,peekOffset:g,charAt:C,currentChar:S,currentPeek:E,next:T,peek:v,reset:y,resetPeek:L,skipToPeek:w}}const bo=void 0,kS=".",Js="'",HS="tokenizer";function $S(e,t={}){const o=t.location!==!1,r=MS(e),n=()=>r.index(),i=()=>PS(r.line(),r.column(),r.index()),l=i(),a=n(),s={currentType:14,offset:a,startLoc:l,endLoc:l,lastType:14,lastOffset:a,lastStartLoc:l,lastEndLoc:l,braceNest:0,inLinked:!1,text:""},c=()=>s,{onError:u}=t;function f(m,h,A,...O){const j=c();if(h.column+=A,h.offset+=A,u){const B=o?Yn(j.startLoc,h):null,I=Pr(m,B,{domain:HS,args:O});u(I)}}function d(m,h,A){m.endLoc=i(),m.currentType=h;const O={type:h};return o&&(O.loc=Yn(m.startLoc,m.endLoc)),A!=null&&(O.value=A),O}const p=m=>d(m,14);function g(m,h){return m.currentChar()===h?(m.next(),h):(f(ie.EXPECTED_TOKEN,i(),0,h),"")}function C(m){let h="";for(;m.currentPeek()===Zt||m.currentPeek()===it;)h+=m.currentPeek(),m.peek();return h}function S(m){const h=C(m);return m.skipToPeek(),h}function E(m){if(m===bo)return!1;const h=m.charCodeAt(0);return h>=97&&h<=122||h>=65&&h<=90||h===95}function T(m){if(m===bo)return!1;const h=m.charCodeAt(0);return h>=48&&h<=57}function v(m,h){const{currentType:A}=h;if(A!==2)return!1;C(m);const O=E(m.currentPeek());return m.resetPeek(),O}function y(m,h){const{currentType:A}=h;if(A!==2)return!1;C(m);const O=m.currentPeek()==="-"?m.peek():m.currentPeek(),j=T(O);return m.resetPeek(),j}function L(m,h){const{currentType:A}=h;if(A!==2)return!1;C(m);const O=m.currentPeek()===Js;return m.resetPeek(),O}function w(m,h){const{currentType:A}=h;if(A!==8)return!1;C(m);const O=m.currentPeek()===".";return m.resetPeek(),O}function D(m,h){const{currentType:A}=h;if(A!==9)return!1;C(m);const O=E(m.currentPeek());return m.resetPeek(),O}function F(m,h){const{currentType:A}=h;if(!(A===8||A===12))return!1;C(m);const O=m.currentPeek()===":";return m.resetPeek(),O}function P(m,h){const{currentType:A}=h;if(A!==10)return!1;const O=()=>{const B=m.currentPeek();return B==="{"?E(m.peek()):B==="@"||B==="%"||B==="|"||B===":"||B==="."||B===Zt||!B?!1:B===it?(m.peek(),O()):k(m,!1)},j=O();return m.resetPeek(),j}function U(m){C(m);const h=m.currentPeek()==="|";return m.resetPeek(),h}function X(m){const h=C(m),A=m.currentPeek()==="%"&&m.peek()==="{";return m.resetPeek(),{isModulo:A,hasSpace:h.length>0}}function k(m,h=!0){const A=(j=!1,B="",I=!1)=>{const M=m.currentPeek();return M==="{"?B==="%"?!1:j:M==="@"||!M?B==="%"?!0:j:M==="%"?(m.peek(),A(j,"%",!0)):M==="|"?B==="%"||I?!0:!(B===Zt||B===it):M===Zt?(m.peek(),A(!0,Zt,I)):M===it?(m.peek(),A(!0,it,I)):!0},O=A();return h&&m.resetPeek(),O}function Q(m,h){const A=m.currentChar();return A===bo?bo:h(A)?(m.next(),A):null}function me(m){const h=m.charCodeAt(0);return h>=97&&h<=122||h>=65&&h<=90||h>=48&&h<=57||h===95||h===36}function ye(m){return Q(m,me)}function se(m){const h=m.charCodeAt(0);return h>=97&&h<=122||h>=65&&h<=90||h>=48&&h<=57||h===95||h===36||h===45}function ne(m){return Q(m,se)}function de(m){const h=m.charCodeAt(0);return h>=48&&h<=57}function tt(m){return Q(m,de)}function ft(m){const h=m.charCodeAt(0);return h>=48&&h<=57||h>=65&&h<=70||h>=97&&h<=102}function Re(m){return Q(m,ft)}function Fe(m){let h="",A="";for(;h=tt(m);)A+=h;return A}function Tt(m){S(m);const h=m.currentChar();return h!=="%"&&f(ie.EXPECTED_TOKEN,i(),0,h),m.next(),"%"}function ht(m){let h="";for(;;){const A=m.currentChar();if(A==="{"||A==="}"||A==="@"||A==="|"||!A)break;if(A==="%")if(k(m))h+=A,m.next();else break;else if(A===Zt||A===it)if(k(m))h+=A,m.next();else{if(U(m))break;h+=A,m.next()}else h+=A,m.next()}return h}function gt(m){S(m);let h="",A="";for(;h=ne(m);)A+=h;return m.currentChar()===bo&&f(ie.UNTERMINATED_CLOSING_BRACE,i(),0),A}function We(m){S(m);let h="";return m.currentChar()==="-"?(m.next(),h+=`-${Fe(m)}`):h+=Fe(m),m.currentChar()===bo&&f(ie.UNTERMINATED_CLOSING_BRACE,i(),0),h}function H(m){return m!==Js&&m!==it}function Y(m){S(m),g(m,"'");let h="",A="";for(;h=Q(m,H);)h==="\\"?A+=G(m):A+=h;const O=m.currentChar();return O===it||O===bo?(f(ie.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,i(),0),O===it&&(m.next(),g(m,"'")),A):(g(m,"'"),A)}function G(m){const h=m.currentChar();switch(h){case"\\":case"'":return m.next(),`\\${h}`;case"u":return ee(m,h,4);case"U":return ee(m,h,6);default:return f(ie.UNKNOWN_ESCAPE_SEQUENCE,i(),0,h),""}}function ee(m,h,A){g(m,h);let O="";for(let j=0;j<A;j++){const B=Re(m);if(!B){f(ie.INVALID_UNICODE_ESCAPE_SEQUENCE,i(),0,`\\${h}${O}${m.currentChar()}`);break}O+=B}return`\\${h}${O}`}function ue(m){return m!=="{"&&m!=="}" Line truncated
`,i=t.needIndent?t.needIndent:o!=="arrow",l=e.helpers||[],a=qS(e,{filename:r,breakLineCode:n,needIndent:i});a.push(o==="normal"?"function __msg__ (ctx) {":"(ctx) => {"),a.indent(i),l.length>0&&(a.push(`const { ${sd(l.map(u=>`${u}: _${u}`),", ")} } = ctx`),a.newline()),a.push("return "),xr(a,e),a.deindent(i),a.push("}"),delete e.helpers;const{code:s,map:c}=a.context();return{ast:e,code:s,map:c?c.toJSON():void 0}};function ty(e,t={}){const o=ad({},t),r=!!o.jit,n=!!o.minify,i=o.optimize==null?!0:o.optimize,a=US(o).parse(e);return r?(i&&GS(a),n&&ur(a),{ast:a,code:""}):(jS(a,o),ey(a,o))}function oy(){typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(io().__INTLIFY_PROD_DEVTOOLS__=!1),typeof __INTLIFY_JIT_COMPILATION__!="boolean"&&(io().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(io().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}function Kt(e){return Ce(e)&&Ca(e)===0&&(Ot(e,"b")||Ot(e,"body"))}const cd=["b","body"];function ry(e){return Oo(e,cd)}const ud=["c","cases"];function ny(e){return Oo(e,ud,[])}const fd=["s","static"];function iy(e){return Oo(e,fd)}const dd=["i","items"];function ly(e){return Oo(e,dd,[])}const pd=["t","type"];function Ca(e){return Oo(e,pd)}const md=["v","value"];function Pn(e,t){const o=Oo(e,md);if(o!=null)return o;throw an(t)}const hd=["m","modifier"];function ay(e){return Oo(e,hd)}const gd=["k","key"];function sy(e){const t=Oo(e,gd);if(t)return t;throw an(6)}function Oo(e,t,o){for(let r=0;r<t.length;r++){const n=t[r];if(Ot(e,n)&&e[n]!=null)return e[n]}return o}const Cd=[...cd,...ud,...fd,...dd,...gd,...hd,...md,...pd];function an(e){return new Error(`unhandled node type: ${e}`)}const No=[];No[0]={w:[0],i:[3,0],"[":[4],o:[7]};No[1]={w:[1],".":[2],"[":[4],o:[7]};No[2]={w:[2],i:[3,0],0:[3,0]};No[3]={i:[3,0],0:[3,0],w:[1,1],".":[2,1],"[":[4,1],o:[7,1]};No[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],o:8,l:[4,0]};No[5]={"'":[4,0],o:8,l:[5,0]};No[6]={'"':[4,0],o:8,l:[6,0]};const cy=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function uy(e){return cy.test(e)}function fy(e){const t=e.charCodeAt(0),o=e.charCodeAt(e.length-1);return t===o&&(t===34||t===39)?e.slice(1,-1):e}function dy(e){if(e==null)return"o";switch(e.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return e;case 95:case 36:case 45:return"i";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"w"}return"i"}function py(e){const t=e.trim();return e.charAt(0)==="0"&&isNaN(parseInt(e))?!1:uy(t)?fy(t):"*"+t}function my(e){const t=[];let o=-1,r=0,n=0,i,l,a,s,c,u,f;const d=[];d[0]=()=>{l===void 0?l=a:l+=a},d[1]=()=>{l!==void 0&&(t.push(l),l=void 0)},d[2]=()=>{d[0](),n++},d[3]=()=>{if(n>0)n--,r=4,d[0]();else{if(n=0,l===void 0||(l=py(l),l===!1))return!1;d[1]()}};function p(){const g=e[o+1];if(r===5&&g==="'"||r===6&&g==='"')return o++,a="\\"+g,d[0](),!0}for(;r!==null;)if(o++,i=e[o],!(i==="\\"&&p())){if(s=dy(i),f=No[r],c=f[s]||f.l||8,c===8||(r=c[0],c[1]!==void 0&&(u=d[c[1]],u&&(a=i,u()===!1))))return;if(r===7)return t}}const ec=new Map;function hy(e,t){return Ce(e)?e[t]:null}function gy(e,t){if(!Ce(e))return null;let o=ec.get(t);if(o||(o=my(t),o&&ec.set(t,o)),!o)return null;const r=o.length;let n=e,i=0;for(;i<r;){const l=o[i];if(Cd.includes(l)&&Kt(n))return null;const a=n[l];if(a===void 0||Pe(n))return null;n=a,i++}return n}const Cy=e=>e,by=e=>"",xy="text",_y=e=>e.length===0?"":ES(e),vy=yS;function tc(e,t){return e=Math.abs(e),t===2?e?e>1?1:0:1:e?Math.min(e,2):0}function Sy(e){const t=Me(e.pluralIndex)?e.pluralIndex:-1;return e.named&&(Me(e.named.count)||Me(e.named.n))?Me(e.named.count)?e.named.count:Me(e.named.n)?e.named.n:t:t}function yy(e,t){t.count||(t.count=e),t.n||(t.n=e)}function Ey(e={}){const t=e.locale,o=Sy(e),r=Ce(e.pluralRules)&&K(t)&&Pe(e.pluralRules[t])?e.pluralRules[t]:tc,n=Ce(e.pluralRules)&&K(t)&&Pe(e.pluralRules[t])?tc:void 0,i=E=>E[r(o,E.length,n)],l=e.list||[],a=E=>l[E],s=e.named||ve();Me(e.pluralIndex)&&yy(o,s);const c=E=>s[E];function u(E){const T=Pe(e.messages)?e.messages(E):Ce(e.messages)?e.messages[E]:!1;return T||(e.parent?e.parent.message(E):by)}const f=E=>e.modifiers?e.modifiers[E]:Cy,d=ae(e.processor)&&Pe(e.processor.normalize)?e.processor.normalize:_y,p=ae(e.processor)&&Pe(e.processor.interpolate)?e.processor.interpolate:vy,g=ae(e.processor)&&K(e.processor.type)?e.processor.type:xy,S={list:a,named:c,plural:i,linked:(E,...T)=>{const[v,y]=T;let L="text",w="";T.length===1?Ce(v)?(w=v.modifier||w,L=v.type||L):K(v)&&(w=v||w):T.length===2&&(K(v)&&(w=v||w),K(y)&&(L=y||L));const D=u(E)(S),F=L==="vnode"&&Ae(D)&&w?D[0]:D;return w?f(w)(F,L):F},message:u,type:g,interpolate:p,normalize:d,values:Ge(ve(),l,s)};return S}let sn=null;function Ty(e){sn=e}function Py(e,t,o){sn&&sn.emit("i18n:init",{timestamp:Date.now(),i18n:e,version:t,meta:o})}const Iy=Ay("function:translate");function Ay(e){return t=>sn&&sn.emit(e,t)}const Ly=ha.__EXTEND_POINT__,Wo=Pi(Ly),wy={FALLBACK_TO_TRANSLATE:Wo(),CANNOT_FORMAT_NUMBER:Wo(),FALLBACK_TO_NUMBER_FORMAT:Wo(),CANNOT_FORMAT_DATE:Wo(),FALLBACK Line truncated
`,i=t.needIndent?t.needIndent:o!=="arrow",l=e.helpers||[],a=qS(e,{filename:r,breakLineCode:n,needIndent:i});a.push(o==="normal"?"function __msg__ (ctx) {":"(ctx) => {"),a.indent(i),l.length>0&&(a.push(`const { ${sd(l.map(u=>`${u}: _${u}`),", ")} } = ctx`),a.newline()),a.push("return "),xr(a,e),a.deindent(i),a.push("}"),delete e.helpers;const{code:s,map:c}=a.context();return{ast:e,code:s,map:c?c.toJSON():void 0}};function ty(e,t={}){const o=ad({},t),r=!!o.jit,n=!!o.minify,i=o.optimize==null?!0:o.optimize,a=US(o).parse(e);return r?(i&&GS(a),n&&ur(a),{ast:a,code:""}):(jS(a,o),ey(a,o))}function oy(){typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(io().__INTLIFY_PROD_DEVTOOLS__=!1),typeof __INTLIFY_JIT_COMPILATION__!="boolean"&&(io().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(io().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}function Kt(e){return Ce(e)&&Ca(e)===0&&(Ot(e,"b")||Ot(e,"body"))}const cd=["b","body"];function ry(e){return Oo(e,cd)}const ud=["c","cases"];function ny(e){return Oo(e,ud,[])}const fd=["s","static"];function iy(e){return Oo(e,fd)}const dd=["i","items"];function ly(e){return Oo(e,dd,[])}const pd=["t","type"];function Ca(e){return Oo(e,pd)}const md=["v","value"];function Pn(e,t){const o=Oo(e,md);if(o!=null)return o;throw an(t)}const hd=["m","modifier"];function ay(e){return Oo(e,hd)}const gd=["k","key"];function sy(e){const t=Oo(e,gd);if(t)return t;throw an(6)}function Oo(e,t,o){for(let r=0;r<t.length;r++){const n=t[r];if(Ot(e,n)&&e[n]!=null)return e[n]}return o}const Cd=[...cd,...ud,...fd,...dd,...gd,...hd,...md,...pd];function an(e){return new Error(`unhandled node type: ${e}`)}const No=[];No[0]={w:[0],i:[3,0],"[":[4],o:[7]};No[1]={w:[1],".":[2],"[":[4],o:[7]};No[2]={w:[2],i:[3,0],0:[3,0]};No[3]={i:[3,0],0:[3,0],w:[1,1],".":[2,1],"[":[4,1],o:[7,1]};No[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],o:8,l:[4,0]};No[5]={"'":[4,0],o:8,l:[5,0]};No[6]={'"':[4,0],o:8,l:[6,0]};const cy=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function uy(e){return cy.test(e)}function fy(e){const t=e.charCodeAt(0),o=e.charCodeAt(e.length-1);return t===o&&(t===34||t===39)?e.slice(1,-1):e}function dy(e){if(e==null)return"o";switch(e.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return e;case 95:case 36:case 45:return"i";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"w"}return"i"}function py(e){const t=e.trim();return e.charAt(0)==="0"&&isNaN(parseInt(e))?!1:uy(t)?fy(t):"*"+t}function my(e){const t=[];let o=-1,r=0,n=0,i,l,a,s,c,u,f;const d=[];d[0]=()=>{l===void 0?l=a:l+=a},d[1]=()=>{l!==void 0&&(t.push(l),l=void 0)},d[2]=()=>{d[0](),n++},d[3]=()=>{if(n>0)n--,r=4,d[0]();else{if(n=0,l===void 0||(l=py(l),l===!1))return!1;d[1]()}};function p(){const g=e[o+1];if(r===5&&g==="'"||r===6&&g==='"')return o++,a="\\"+g,d[0](),!0}for(;r!==null;)if(o++,i=e[o],!(i==="\\"&&p())){if(s=dy(i),f=No[r],c=f[s]||f.l||8,c===8||(r=c[0],c[1]!==void 0&&(u=d[c[1]],u&&(a=i,u()===!1))))return;if(r===7)return t}}const ec=new Map;function hy(e,t){return Ce(e)?e[t]:null}function gy(e,t){if(!Ce(e))return null;let o=ec.get(t);if(o||(o=my(t),o&&ec.set(t,o)),!o)return null;const r=o.length;let n=e,i=0;for(;i<r;){const l=o[i];if(Cd.includes(l)&&Kt(n))return null;const a=n[l];if(a===void 0||Pe(n))return null;n=a,i++}return n}const Cy=e=>e,by=e=>"",xy="text",_y=e=>e.length===0?"":ES(e),vy=yS;function tc(e,t){return e=Math.abs(e),t===2?e?e>1?1:0:1:e?Math.min(e,2):0}function Sy(e){const t=Me(e.pluralIndex)?e.pluralIndex:-1;return e.named&&(Me(e.named.count)||Me(e.named.n))?Me(e.named.count)?e.named.count:Me(e.named.n)?e.named.n:t:t}function yy(e,t){t.count||(t.count=e),t.n||(t.n=e)}function Ey(e={}){const t=e.locale,o=Sy(e),r=Ce(e.pluralRules)&&K(t)&&Pe(e.pluralRules[t])?e.pluralRules[t]:tc,n=Ce(e.pluralRules)&&K(t)&&Pe(e.pluralRules[t])?tc:void 0,i=E=>E[r(o,E.length,n)],l=e.list||[],a=E=>l[E],s=e.named||ve();Me(e.pluralIndex)&&yy(o,s);const c=E=>s[E];function u(E){const T=Pe(e.messages)?e.messages(E):Ce(e.messages)?e.messages[E]:!1;return T||(e.parent?e.parent.message(E):by)}const f=E=>e.modifiers?e.modifiers[E]:Cy,d=ae(e.processor)&&Pe(e.processor.normalize)?e.processor.normalize:_y,p=ae(e.processor)&&Pe(e.processor.interpolate)?e.processor.interpolate:vy,g=ae(e.processor)&&K(e.processor.type)?e.processor.type:xy,S={list:a,named:c,plural:i,linked:(E,...T)=>{const[v,y]=T;let L="text",w="";T.length===1?Ce(v)?(w=v.modifier||w,L=v.type||L):K(v)&&(w=v||w):T.length===2&&(K(v)&&(w=v||w),K(y)&&(L=y||L));const D=u(E)(S),F=L==="vnode"&&Ae(D)&&w?D[0]:D;return w?f(w)(F,L):F},message:u,type:g,interpolate:p,normalize:d,values:Ge(ve(),l,s)};return S}let sn=null;function Ty(e){sn=e}function Py(e,t,o){sn&&sn.emit("i18n:init",{timestamp:Date.now(),i18n:e,version:t,meta:o})}const Iy=Ay("function:translate");function Ay(e){return t=>sn&&sn.emit(e,t)}const Ly=ha.__EXTEND_POINT__,Wo=Pi(Ly),wy={FALLBACK_TO_TRANSLATE:Wo(),CANNOT_FORMAT_NUMBER:Wo(),FALLBACK_TO_NUMBER_FORMAT:Wo(),CANNOT_FORMAT_DATE:Wo(),FALLBACK Line truncated
@@ -1 +1 @@
import{v as x,S as s,U as m,V as g,x as u,W as w,H as i,X as f,Y as h}from"./index-DYsKpclu.js";function T(n,t,r,a=""){return x(u.shareText,{method:"POST",form:{text:n,expire_value:String(t),expire_style:r,code:a}})}function y(n,t,r,a,o=""){const e=new FormData;return e.append("file",n),e.append("expire_value",String(t)),e.append("expire_style",r),o&&e.append("code",o),h(u.shareFile,e,a)}async function S(n){const t=await x(u.shareMetadata,{query:{code:n}}),r=!!(s(t,["is_text","isText"])??s(t,["type"])==="text");return{code:String(s(t,["code"])??n),name:String(s(t,["name"])??"未命名"),size:Number(s(t,["size"])??0),type:r?"text":"file",isText:r,createdAt:s(t,["created_at","createdAt"])??null,expiredAt:s(t,["expired_at","expires_at","expiredAt","expiresAt"])??null,expiredCount:s(t,["expired_count","expiredCount","remaining_downloads","remainingDownloads"])??null,usedCount:Number(s(t,["used_count","usedCount"])??0),remainingDownloads:s(t,["remaining_downloads","remainingDownloads","expired_count","expiredCount"])??null}}async function b(n){const{blob:t}=await m(u.shareSelect,{query:{code:n}});return t.text()}function A(n,t){return new Promise((r,a)=>{const o=new URL(g(u.shareSelect),location.origin);o.searchParams.set("code",n);const e=new XMLHttpRequest;e.open("GET",o.toString()),e.timeout=6e5,e.responseType="blob";const l=w();l&&e.setRequestHeader("Authorization",`Bearer ${l}`),e.onprogress=p=>{p.lengthComputable&&t&&t(Math.round(p.loaded/p.total*100))},e.onload=()=>{if((e.getResponseHeader("content-type")??"").includes("application/json")){const d=new FileReader;d.onload=()=>{try{const c=JSON.parse(String(d.result));a(new i(c.code??e.status,c.msg||"取件失败",e.status))}catch{a(new i(e.status,"取件失败",e.status))}},d.readAsText(e.response);return}e.status>=200&&e.status<300?r({blob:e.response,filename:f(e.getResponseHeader("content-disposition"))}):a(new i(e.status,`取件失败(HTTP ${e.status})`,e.status))},e.onerror=()=>a(new i(0,"网络异常,取件失败")),e.ontimeout=()=>a(new i(0,"下载超时,请重试")),e.send()})}export{y as a,A as b,S as g,b as p,T as s};
import{v as x,S as s,U as m,V as g,x as u,W as w,H as i,X as f,Y as h}from"./index-BKnWAKao.js";function T(n,t,r,a=""){return x(u.shareText,{method:"POST",form:{text:n,expire_value:String(t),expire_style:r,code:a}})}function y(n,t,r,a,o=""){const e=new FormData;return e.append("file",n),e.append("expire_value",String(t)),e.append("expire_style",r),o&&e.append("code",o),h(u.shareFile,e,a)}async function S(n){const t=await x(u.shareMetadata,{query:{code:n}}),r=!!(s(t,["is_text","isText"])??s(t,["type"])==="text");return{code:String(s(t,["code"])??n),name:String(s(t,["name"])??"未命名"),size:Number(s(t,["size"])??0),type:r?"text":"file",isText:r,createdAt:s(t,["created_at","createdAt"])??null,expiredAt:s(t,["expired_at","expires_at","expiredAt","expiresAt"])??null,expiredCount:s(t,["expired_count","expiredCount","remaining_downloads","remainingDownloads"])??null,usedCount:Number(s(t,["used_count","usedCount"])??0),remainingDownloads:s(t,["remaining_downloads","remainingDownloads","expired_count","expiredCount"])??null}}async function b(n){const{blob:t}=await m(u.shareSelect,{query:{code:n}});return t.text()}function A(n,t){return new Promise((r,a)=>{const o=new URL(g(u.shareSelect),location.origin);o.searchParams.set("code",n);const e=new XMLHttpRequest;e.open("GET",o.toString()),e.timeout=6e5,e.responseType="blob";const l=w();l&&e.setRequestHeader("Authorization",`Bearer ${l}`),e.onprogress=p=>{p.lengthComputable&&t&&t(Math.round(p.loaded/p.total*100))},e.onload=()=>{if((e.getResponseHeader("content-type")??"").includes("application/json")){const d=new FileReader;d.onload=()=>{try{const c=JSON.parse(String(d.result));a(new i(c.code??e.status,c.msg||"取件失败",e.status))}catch{a(new i(e.status,"取件失败",e.status))}},d.readAsText(e.response);return}e.status>=200&&e.status<300?r({blob:e.response,filename:f(e.getResponseHeader("content-disposition"))}):a(new i(e.status,`取件失败(HTTP ${e.status})`,e.status))},e.onerror=()=>a(new i(0,"网络异常,取件失败")),e.ontimeout=()=>a(new i(0,"下载超时,请重试")),e.send()})}export{y as a,A as b,S as g,b as p,T as s};
+1 -1
View File
@@ -27,7 +27,7 @@
background: #0b0f1a;
}
</style>
<script type="module" crossorigin src="/assets/index-DYsKpclu.js"></script>
<script type="module" crossorigin src="/assets/index-BKnWAKao.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-CtyCxWf5.css">
</head>
<body>