search and/or read your saved and liked bluesky posts
wails go svelte sqlite desktop bluesky
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: user auth with AuthService and login UI

+1867 -2102
+6 -6
TODO.md
··· 20 20 21 21 ## Milestone 3 — Authentication 22 22 23 - - [ ] Implement `AuthService` struct with Wails service binding 24 - - [ ] `Login(handle)` — loopback OAuth via `oauth.NewLocalhostConfig`, persist tokens to shared DB 25 - - [ ] `Whoami(force)` — load auth from DB, optionally resolve handle from DID 26 - - [ ] `IsAuthenticated()` — check for valid auth row 27 - - [ ] Automatic token refresh on `OnStartup` lifecycle hook 28 - - [ ] Frontend: login view with handle input, "Login" button, and status display 23 + - [x] Implement `AuthService` struct with Wails service binding 24 + - [x] `Login(handle)` — loopback OAuth via `oauth.NewLocalhostConfig`, persist tokens to shared DB 25 + - [x] `Whoami(force)` — load auth from DB, optionally resolve handle from DID 26 + - [x] `IsAuthenticated()` — check for valid auth row 27 + - [x] Automatic token refresh on `OnStartup` lifecycle hook 28 + - [x] Frontend: login view with handle input, "Login" button, and status display 29 29 30 30 ## Milestone 4 — Indexing & Progress 31 31
+16 -3
app.go
··· 5 5 "fmt" 6 6 "os" 7 7 "path/filepath" 8 + 9 + "github.com/wailsapp/wails/v2/pkg/runtime" 8 10 ) 9 11 10 12 // App struct 11 13 type App struct { 12 - ctx context.Context 14 + ctx context.Context 15 + authService *AuthService 13 16 } 14 17 15 18 // NewApp creates a new App application struct 16 19 func NewApp() *App { 17 - return &App{} 20 + return &App{ 21 + authService: NewAuthService(), 22 + } 18 23 } 19 24 20 25 // startup is called when the app starts. ··· 26 31 dbPath := getDBPath() 27 32 if err := Open(dbPath); err != nil { 28 33 fmt.Printf("failed to open database: %v\n", err) 34 + return 35 + } 36 + 37 + if a.authService.IsAuthenticated() { 38 + if err := a.authService.RefreshSession(); err != nil { 39 + fmt.Printf("token refresh failed on startup: %v\n", err) 40 + } 29 41 } 30 42 } 31 43 32 44 // shutdown is called when the app shuts down 33 45 func (a *App) shutdown(ctx context.Context) { 46 + runtime.LogInfo(ctx, "Shutting down") 34 47 if err := Close(); err != nil { 35 - fmt.Printf("failed to close database: %v\n", err) 48 + runtime.LogErrorf(ctx, "failed to close database: %v", err) 36 49 } 37 50 } 38 51
+254
auth_service.go
··· 1 + package main 2 + 3 + import ( 4 + "context" 5 + "fmt" 6 + "net" 7 + "net/http" 8 + "os/exec" 9 + rt "runtime" 10 + "strings" 11 + "time" 12 + 13 + "github.com/bluesky-social/indigo/atproto/auth/oauth" 14 + "github.com/bluesky-social/indigo/atproto/identity" 15 + "github.com/bluesky-social/indigo/atproto/syntax" 16 + ) 17 + 18 + // AuthService provides authentication functionality via Wails bindings 19 + type AuthService struct { 20 + app *oauth.ClientApp 21 + server *http.Server 22 + listener net.Listener 23 + codeChan chan string 24 + errChan chan error 25 + port int 26 + } 27 + 28 + // NewAuthService creates a new AuthService instance 29 + func NewAuthService() *AuthService { 30 + return &AuthService{ 31 + codeChan: make(chan string, 1), 32 + errChan: make(chan error, 1), 33 + } 34 + } 35 + 36 + // Login initiates OAuth login flow for the given handle 37 + func (s *AuthService) Login(handle string) error { 38 + ctx := context.Background() 39 + 40 + listener, err := net.Listen("tcp", "127.0.0.1:0") 41 + if err != nil { 42 + return fmt.Errorf("failed to start listener: %w", err) 43 + } 44 + s.listener = listener 45 + s.port = listener.Addr().(*net.TCPAddr).Port 46 + 47 + redirectURI := fmt.Sprintf("http://127.0.0.1:%d/callback", s.port) 48 + scopes := []string{"atproto", "transition:generic"} 49 + 50 + config := oauth.NewLocalhostConfig(redirectURI, scopes) 51 + store := oauth.NewMemStore() 52 + s.app = oauth.NewClientApp(&config, store) 53 + 54 + redirectURL, err := s.app.StartAuthFlow(ctx, handle) 55 + if err != nil { 56 + return fmt.Errorf("failed to start auth flow: %w", err) 57 + } 58 + 59 + s.startCallbackServer() 60 + 61 + if err := openBrowser(redirectURL); err != nil { 62 + return fmt.Errorf("failed to open browser: %w", err) 63 + } 64 + 65 + select { 66 + case code := <-s.codeChan: 67 + return s.exchangeCode(ctx, code) 68 + case err := <-s.errChan: 69 + return fmt.Errorf("authorization error: %w", err) 70 + case <-ctx.Done(): 71 + return ctx.Err() 72 + } 73 + } 74 + 75 + func (s *AuthService) startCallbackServer() { 76 + mux := http.NewServeMux() 77 + mux.HandleFunc("/callback", func(w http.ResponseWriter, r *http.Request) { 78 + query := r.URL.Query() 79 + code := query.Get("code") 80 + if code == "" { 81 + errMsg := query.Get("error") 82 + if errMsg == "" { 83 + errMsg = "missing authorization code" 84 + } 85 + errDesc := query.Get("error_description") 86 + s.errChan <- fmt.Errorf("authorization failed: %s - %s", errMsg, errDesc) 87 + w.WriteHeader(http.StatusBadRequest) 88 + fmt.Fprintf(w, "Authorization failed: %s\n", errMsg) 89 + return 90 + } 91 + 92 + state := query.Get("state") 93 + iss := query.Get("iss") 94 + s.codeChan <- fmt.Sprintf("%s|%s|%s", code, state, iss) 95 + w.WriteHeader(http.StatusOK) 96 + fmt.Fprintln(w, "Authorization successful! You can close this window.") 97 + }) 98 + 99 + s.server = &http.Server{ 100 + Handler: mux, 101 + } 102 + 103 + go func() { 104 + if err := s.server.Serve(s.listener); err != nil && err != http.ErrServerClosed { 105 + s.errChan <- err 106 + } 107 + }() 108 + } 109 + 110 + func (s *AuthService) exchangeCode(ctx context.Context, data string) error { 111 + parts := strings.SplitN(data, "|", 3) 112 + if len(parts) < 2 { 113 + return fmt.Errorf("invalid callback data") 114 + } 115 + 116 + params := make(map[string][]string) 117 + params["code"] = []string{parts[0]} 118 + params["state"] = []string{parts[1]} 119 + if len(parts) > 2 && parts[2] != "" { 120 + params["iss"] = []string{parts[2]} 121 + } 122 + 123 + sessData, err := s.app.ProcessCallback(ctx, params) 124 + if err != nil { 125 + return fmt.Errorf("failed to process callback: %w", err) 126 + } 127 + 128 + auth := &Auth{ 129 + DID: sessData.AccountDID.String(), 130 + Handle: sessData.AccountDID.String(), 131 + AccessJWT: sessData.AccessToken, 132 + RefreshJWT: sessData.RefreshToken, 133 + PDSURL: sessData.HostURL, 134 + SessionID: sessData.SessionID, 135 + AuthServerURL: sessData.AuthServerURL, 136 + AuthServerTokenEndpoint: sessData.AuthServerTokenEndpoint, 137 + AuthServerRevocationEndpoint: sessData.AuthServerRevocationEndpoint, 138 + DPoPAuthNonce: sessData.DPoPAuthServerNonce, 139 + DPoPHostNonce: sessData.DPoPHostNonce, 140 + DPoPPrivateKey: sessData.DPoPPrivateKeyMultibase, 141 + UpdatedAt: time.Now(), 142 + } 143 + 144 + if err := UpsertAuth(auth); err != nil { 145 + return fmt.Errorf("failed to persist auth: %w", err) 146 + } 147 + 148 + return nil 149 + } 150 + 151 + // Whoami returns the current authenticated user, optionally resolving handle from DID 152 + // 153 + // TODO: store [context.Context] in [AuthService] to be able to use wails' runtime.LogWarningf 154 + func (s *AuthService) Whoami(force bool) (*Auth, error) { 155 + auth, err := GetAuth() 156 + if err != nil { 157 + return nil, fmt.Errorf("failed to load auth: %w", err) 158 + } 159 + if auth == nil { 160 + return nil, fmt.Errorf("not logged in") 161 + } 162 + 163 + if force || strings.HasPrefix(auth.Handle, "did:") { 164 + did, err := syntax.ParseDID(auth.DID) 165 + if err != nil { 166 + return nil, fmt.Errorf("invalid DID in database: %w", err) 167 + } 168 + 169 + dir := &identity.BaseDirectory{} 170 + ident, err := dir.LookupDID(context.Background(), did) 171 + if err != nil { 172 + return auth, nil 173 + } 174 + 175 + auth.Handle = ident.Handle.String() 176 + 177 + } 178 + 179 + return auth, nil 180 + } 181 + 182 + // IsAuthenticated checks if there is a valid auth record 183 + func (s *AuthService) IsAuthenticated() bool { 184 + auth, err := GetAuth() 185 + if err != nil { 186 + return false 187 + } 188 + return auth != nil 189 + } 190 + 191 + // RefreshSession attempts to refresh the access token if needed 192 + func (s *AuthService) RefreshSession() error { 193 + auth, err := GetAuth() 194 + if err != nil { 195 + return fmt.Errorf("failed to load auth: %w", err) 196 + } 197 + if auth == nil { 198 + return fmt.Errorf("no session found") 199 + } 200 + 201 + if auth.SessionID == "" { 202 + return nil // Cannot refresh without session ID 203 + } 204 + 205 + redirectURI := "http://127.0.0.1/callback" 206 + scopes := []string{"atproto", "transition:generic"} 207 + config := oauth.NewLocalhostConfig(redirectURI, scopes) 208 + store := oauth.NewMemStore() 209 + app := oauth.NewClientApp(&config, store) 210 + 211 + did, err := syntax.ParseDID(auth.DID) 212 + if err != nil { 213 + return fmt.Errorf("invalid DID in database: %w", err) 214 + } 215 + 216 + session, err := app.ResumeSession(context.Background(), did, auth.SessionID) 217 + if err != nil { 218 + return fmt.Errorf("failed to resume session: %w", err) 219 + } 220 + 221 + newAccessToken, err := session.RefreshTokens(context.Background()) 222 + if err != nil { 223 + return fmt.Errorf("failed to refresh tokens: %w", err) 224 + } 225 + 226 + if newAccessToken != "" { 227 + auth.AccessJWT = newAccessToken 228 + auth.UpdatedAt = time.Now() 229 + if err := UpsertAuth(auth); err != nil { 230 + return fmt.Errorf("failed to update refreshed tokens: %w", err) 231 + } 232 + } 233 + 234 + return nil 235 + } 236 + 237 + func openBrowser(url string) error { 238 + var cmd string 239 + var args []string 240 + 241 + switch rt.GOOS { 242 + case "darwin": 243 + cmd = "open" 244 + args = []string{url} 245 + case "windows": 246 + cmd = "cmd" 247 + args = []string{"/c", "start", url} 248 + default: 249 + cmd = "xdg-open" 250 + args = []string{url} 251 + } 252 + 253 + return exec.Command(cmd, args...).Start() 254 + }
+6
frontend/.prettierrc
··· 1 + { 2 + "bracketSameLine": true, 3 + "objectWrap": "collapse", 4 + "printWidth": 120, 5 + "tabWidth": 2 6 + }
-2075
frontend/package-lock.json
··· 1 - { 2 - "name": "frontend", 3 - "version": "0.0.0", 4 - "lockfileVersion": 3, 5 - "requires": true, 6 - "packages": { 7 - "": { 8 - "name": "frontend", 9 - "version": "0.0.0", 10 - "dependencies": { 11 - "@fontsource-variable/geist": "^5.2.8", 12 - "@fontsource-variable/jetbrains-mono": "^5.2.8", 13 - "@fontsource-variable/lora": "^5.2.8", 14 - "@tailwindcss/vite": "^4.2.1", 15 - "tailwindcss": "^4.2.1" 16 - }, 17 - "devDependencies": { 18 - "@sveltejs/vite-plugin-svelte": "^6.2.4", 19 - "svelte": "^5.53.12", 20 - "svelte-check": "^4.4.5", 21 - "tslib": "^2.8.1", 22 - "typescript": "^5.9.3", 23 - "vite": "^7.2.6" 24 - } 25 - }, 26 - "node_modules/@esbuild/aix-ppc64": { 27 - "version": "0.27.4", 28 - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", 29 - "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", 30 - "cpu": [ 31 - "ppc64" 32 - ], 33 - "license": "MIT", 34 - "optional": true, 35 - "os": [ 36 - "aix" 37 - ], 38 - "engines": { 39 - "node": ">=18" 40 - } 41 - }, 42 - "node_modules/@esbuild/android-arm": { 43 - "version": "0.27.4", 44 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", 45 - "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", 46 - "cpu": [ 47 - "arm" 48 - ], 49 - "license": "MIT", 50 - "optional": true, 51 - "os": [ 52 - "android" 53 - ], 54 - "engines": { 55 - "node": ">=18" 56 - } 57 - }, 58 - "node_modules/@esbuild/android-arm64": { 59 - "version": "0.27.4", 60 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", 61 - "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", 62 - "cpu": [ 63 - "arm64" 64 - ], 65 - "license": "MIT", 66 - "optional": true, 67 - "os": [ 68 - "android" 69 - ], 70 - "engines": { 71 - "node": ">=18" 72 - } 73 - }, 74 - "node_modules/@esbuild/android-x64": { 75 - "version": "0.27.4", 76 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", 77 - "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", 78 - "cpu": [ 79 - "x64" 80 - ], 81 - "license": "MIT", 82 - "optional": true, 83 - "os": [ 84 - "android" 85 - ], 86 - "engines": { 87 - "node": ">=18" 88 - } 89 - }, 90 - "node_modules/@esbuild/darwin-arm64": { 91 - "version": "0.27.4", 92 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", 93 - "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", 94 - "cpu": [ 95 - "arm64" 96 - ], 97 - "license": "MIT", 98 - "optional": true, 99 - "os": [ 100 - "darwin" 101 - ], 102 - "engines": { 103 - "node": ">=18" 104 - } 105 - }, 106 - "node_modules/@esbuild/darwin-x64": { 107 - "version": "0.27.4", 108 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", 109 - "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", 110 - "cpu": [ 111 - "x64" 112 - ], 113 - "license": "MIT", 114 - "optional": true, 115 - "os": [ 116 - "darwin" 117 - ], 118 - "engines": { 119 - "node": ">=18" 120 - } 121 - }, 122 - "node_modules/@esbuild/freebsd-arm64": { 123 - "version": "0.27.4", 124 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", 125 - "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", 126 - "cpu": [ 127 - "arm64" 128 - ], 129 - "license": "MIT", 130 - "optional": true, 131 - "os": [ 132 - "freebsd" 133 - ], 134 - "engines": { 135 - "node": ">=18" 136 - } 137 - }, 138 - "node_modules/@esbuild/freebsd-x64": { 139 - "version": "0.27.4", 140 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", 141 - "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", 142 - "cpu": [ 143 - "x64" 144 - ], 145 - "license": "MIT", 146 - "optional": true, 147 - "os": [ 148 - "freebsd" 149 - ], 150 - "engines": { 151 - "node": ">=18" 152 - } 153 - }, 154 - "node_modules/@esbuild/linux-arm": { 155 - "version": "0.27.4", 156 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", 157 - "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", 158 - "cpu": [ 159 - "arm" 160 - ], 161 - "license": "MIT", 162 - "optional": true, 163 - "os": [ 164 - "linux" 165 - ], 166 - "engines": { 167 - "node": ">=18" 168 - } 169 - }, 170 - "node_modules/@esbuild/linux-arm64": { 171 - "version": "0.27.4", 172 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", 173 - "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", 174 - "cpu": [ 175 - "arm64" 176 - ], 177 - "license": "MIT", 178 - "optional": true, 179 - "os": [ 180 - "linux" 181 - ], 182 - "engines": { 183 - "node": ">=18" 184 - } 185 - }, 186 - "node_modules/@esbuild/linux-ia32": { 187 - "version": "0.27.4", 188 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", 189 - "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", 190 - "cpu": [ 191 - "ia32" 192 - ], 193 - "license": "MIT", 194 - "optional": true, 195 - "os": [ 196 - "linux" 197 - ], 198 - "engines": { 199 - "node": ">=18" 200 - } 201 - }, 202 - "node_modules/@esbuild/linux-loong64": { 203 - "version": "0.27.4", 204 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", 205 - "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", 206 - "cpu": [ 207 - "loong64" 208 - ], 209 - "license": "MIT", 210 - "optional": true, 211 - "os": [ 212 - "linux" 213 - ], 214 - "engines": { 215 - "node": ">=18" 216 - } 217 - }, 218 - "node_modules/@esbuild/linux-mips64el": { 219 - "version": "0.27.4", 220 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", 221 - "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", 222 - "cpu": [ 223 - "mips64el" 224 - ], 225 - "license": "MIT", 226 - "optional": true, 227 - "os": [ 228 - "linux" 229 - ], 230 - "engines": { 231 - "node": ">=18" 232 - } 233 - }, 234 - "node_modules/@esbuild/linux-ppc64": { 235 - "version": "0.27.4", 236 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", 237 - "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", 238 - "cpu": [ 239 - "ppc64" 240 - ], 241 - "license": "MIT", 242 - "optional": true, 243 - "os": [ 244 - "linux" 245 - ], 246 - "engines": { 247 - "node": ">=18" 248 - } 249 - }, 250 - "node_modules/@esbuild/linux-riscv64": { 251 - "version": "0.27.4", 252 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", 253 - "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", 254 - "cpu": [ 255 - "riscv64" 256 - ], 257 - "license": "MIT", 258 - "optional": true, 259 - "os": [ 260 - "linux" 261 - ], 262 - "engines": { 263 - "node": ">=18" 264 - } 265 - }, 266 - "node_modules/@esbuild/linux-s390x": { 267 - "version": "0.27.4", 268 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", 269 - "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", 270 - "cpu": [ 271 - "s390x" 272 - ], 273 - "license": "MIT", 274 - "optional": true, 275 - "os": [ 276 - "linux" 277 - ], 278 - "engines": { 279 - "node": ">=18" 280 - } 281 - }, 282 - "node_modules/@esbuild/linux-x64": { 283 - "version": "0.27.4", 284 - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", 285 - "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", 286 - "cpu": [ 287 - "x64" 288 - ], 289 - "license": "MIT", 290 - "optional": true, 291 - "os": [ 292 - "linux" 293 - ], 294 - "engines": { 295 - "node": ">=18" 296 - } 297 - }, 298 - "node_modules/@esbuild/netbsd-x64": { 299 - "version": "0.27.4", 300 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", 301 - "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", 302 - "cpu": [ 303 - "x64" 304 - ], 305 - "license": "MIT", 306 - "optional": true, 307 - "os": [ 308 - "netbsd" 309 - ], 310 - "engines": { 311 - "node": ">=18" 312 - } 313 - }, 314 - "node_modules/@esbuild/openbsd-arm64": { 315 - "version": "0.27.4", 316 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", 317 - "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", 318 - "cpu": [ 319 - "arm64" 320 - ], 321 - "license": "MIT", 322 - "optional": true, 323 - "os": [ 324 - "openbsd" 325 - ], 326 - "engines": { 327 - "node": ">=18" 328 - } 329 - }, 330 - "node_modules/@esbuild/openbsd-x64": { 331 - "version": "0.27.4", 332 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", 333 - "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", 334 - "cpu": [ 335 - "x64" 336 - ], 337 - "license": "MIT", 338 - "optional": true, 339 - "os": [ 340 - "openbsd" 341 - ], 342 - "engines": { 343 - "node": ">=18" 344 - } 345 - }, 346 - "node_modules/@esbuild/openharmony-arm64": { 347 - "version": "0.27.4", 348 - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", 349 - "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", 350 - "cpu": [ 351 - "arm64" 352 - ], 353 - "license": "MIT", 354 - "optional": true, 355 - "os": [ 356 - "openharmony" 357 - ], 358 - "engines": { 359 - "node": ">=18" 360 - } 361 - }, 362 - "node_modules/@esbuild/sunos-x64": { 363 - "version": "0.27.4", 364 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", 365 - "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", 366 - "cpu": [ 367 - "x64" 368 - ], 369 - "license": "MIT", 370 - "optional": true, 371 - "os": [ 372 - "sunos" 373 - ], 374 - "engines": { 375 - "node": ">=18" 376 - } 377 - }, 378 - "node_modules/@esbuild/win32-arm64": { 379 - "version": "0.27.4", 380 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", 381 - "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", 382 - "cpu": [ 383 - "arm64" 384 - ], 385 - "license": "MIT", 386 - "optional": true, 387 - "os": [ 388 - "win32" 389 - ], 390 - "engines": { 391 - "node": ">=18" 392 - } 393 - }, 394 - "node_modules/@esbuild/win32-ia32": { 395 - "version": "0.27.4", 396 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", 397 - "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", 398 - "cpu": [ 399 - "ia32" 400 - ], 401 - "license": "MIT", 402 - "optional": true, 403 - "os": [ 404 - "win32" 405 - ], 406 - "engines": { 407 - "node": ">=18" 408 - } 409 - }, 410 - "node_modules/@esbuild/win32-x64": { 411 - "version": "0.27.4", 412 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", 413 - "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", 414 - "cpu": [ 415 - "x64" 416 - ], 417 - "license": "MIT", 418 - "optional": true, 419 - "os": [ 420 - "win32" 421 - ], 422 - "engines": { 423 - "node": ">=18" 424 - } 425 - }, 426 - "node_modules/@fontsource-variable/geist": { 427 - "version": "5.2.8", 428 - "resolved": "https://registry.npmjs.org/@fontsource-variable/geist/-/geist-5.2.8.tgz", 429 - "integrity": "sha512-cJ6m9e+8MQ5dCYJsLylfZrgBh6KkG4bOLckB35Tr9J/EqdkEM6QllH5PxqP1dhTvFup+HtMRPuz9xOjxXJggxw==", 430 - "license": "OFL-1.1", 431 - "funding": { 432 - "url": "https://github.com/sponsors/ayuhito" 433 - } 434 - }, 435 - "node_modules/@fontsource-variable/jetbrains-mono": { 436 - "version": "5.2.8", 437 - "resolved": "https://registry.npmjs.org/@fontsource-variable/jetbrains-mono/-/jetbrains-mono-5.2.8.tgz", 438 - "integrity": "sha512-WBA9elru6Jdp5df2mES55wuOO0WIrn3kpXnI4+W2ek5u3ZgLS9XS4gmIlcQhiZOWEKl95meYdvK7xI+ETLCq/Q==", 439 - "license": "OFL-1.1", 440 - "funding": { 441 - "url": "https://github.com/sponsors/ayuhito" 442 - } 443 - }, 444 - "node_modules/@fontsource-variable/lora": { 445 - "version": "5.2.8", 446 - "resolved": "https://registry.npmjs.org/@fontsource-variable/lora/-/lora-5.2.8.tgz", 447 - "integrity": "sha512-cxjTJ9BbOWIzusewR4UMBLVePvTSWV6dtNaNsCkF/oKoyA68fJGWfaYCILOOP1BObE4dmjfZ3xo6m9hdHhtYhg==", 448 - "license": "OFL-1.1", 449 - "funding": { 450 - "url": "https://github.com/sponsors/ayuhito" 451 - } 452 - }, 453 - "node_modules/@jridgewell/gen-mapping": { 454 - "version": "0.3.13", 455 - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", 456 - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", 457 - "license": "MIT", 458 - "dependencies": { 459 - "@jridgewell/sourcemap-codec": "^1.5.0", 460 - "@jridgewell/trace-mapping": "^0.3.24" 461 - } 462 - }, 463 - "node_modules/@jridgewell/remapping": { 464 - "version": "2.3.5", 465 - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", 466 - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", 467 - "license": "MIT", 468 - "dependencies": { 469 - "@jridgewell/gen-mapping": "^0.3.5", 470 - "@jridgewell/trace-mapping": "^0.3.24" 471 - } 472 - }, 473 - "node_modules/@jridgewell/resolve-uri": { 474 - "version": "3.1.2", 475 - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 476 - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 477 - "license": "MIT", 478 - "engines": { 479 - "node": ">=6.0.0" 480 - } 481 - }, 482 - "node_modules/@jridgewell/sourcemap-codec": { 483 - "version": "1.5.5", 484 - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 485 - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 486 - "license": "MIT" 487 - }, 488 - "node_modules/@jridgewell/trace-mapping": { 489 - "version": "0.3.31", 490 - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", 491 - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", 492 - "license": "MIT", 493 - "dependencies": { 494 - "@jridgewell/resolve-uri": "^3.1.0", 495 - "@jridgewell/sourcemap-codec": "^1.4.14" 496 - } 497 - }, 498 - "node_modules/@rollup/rollup-android-arm-eabi": { 499 - "version": "4.59.0", 500 - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", 501 - "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", 502 - "cpu": [ 503 - "arm" 504 - ], 505 - "license": "MIT", 506 - "optional": true, 507 - "os": [ 508 - "android" 509 - ] 510 - }, 511 - "node_modules/@rollup/rollup-android-arm64": { 512 - "version": "4.59.0", 513 - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", 514 - "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", 515 - "cpu": [ 516 - "arm64" 517 - ], 518 - "license": "MIT", 519 - "optional": true, 520 - "os": [ 521 - "android" 522 - ] 523 - }, 524 - "node_modules/@rollup/rollup-darwin-arm64": { 525 - "version": "4.59.0", 526 - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", 527 - "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", 528 - "cpu": [ 529 - "arm64" 530 - ], 531 - "license": "MIT", 532 - "optional": true, 533 - "os": [ 534 - "darwin" 535 - ] 536 - }, 537 - "node_modules/@rollup/rollup-darwin-x64": { 538 - "version": "4.59.0", 539 - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", 540 - "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", 541 - "cpu": [ 542 - "x64" 543 - ], 544 - "license": "MIT", 545 - "optional": true, 546 - "os": [ 547 - "darwin" 548 - ] 549 - }, 550 - "node_modules/@rollup/rollup-freebsd-arm64": { 551 - "version": "4.59.0", 552 - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", 553 - "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", 554 - "cpu": [ 555 - "arm64" 556 - ], 557 - "license": "MIT", 558 - "optional": true, 559 - "os": [ 560 - "freebsd" 561 - ] 562 - }, 563 - "node_modules/@rollup/rollup-freebsd-x64": { 564 - "version": "4.59.0", 565 - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", 566 - "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", 567 - "cpu": [ 568 - "x64" 569 - ], 570 - "license": "MIT", 571 - "optional": true, 572 - "os": [ 573 - "freebsd" 574 - ] 575 - }, 576 - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 577 - "version": "4.59.0", 578 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", 579 - "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", 580 - "cpu": [ 581 - "arm" 582 - ], 583 - "libc": [ 584 - "glibc" 585 - ], 586 - "license": "MIT", 587 - "optional": true, 588 - "os": [ 589 - "linux" 590 - ] 591 - }, 592 - "node_modules/@rollup/rollup-linux-arm-musleabihf": { 593 - "version": "4.59.0", 594 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", 595 - "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", 596 - "cpu": [ 597 - "arm" 598 - ], 599 - "libc": [ 600 - "musl" 601 - ], 602 - "license": "MIT", 603 - "optional": true, 604 - "os": [ 605 - "linux" 606 - ] 607 - }, 608 - "node_modules/@rollup/rollup-linux-arm64-gnu": { 609 - "version": "4.59.0", 610 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", 611 - "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", 612 - "cpu": [ 613 - "arm64" 614 - ], 615 - "libc": [ 616 - "glibc" 617 - ], 618 - "license": "MIT", 619 - "optional": true, 620 - "os": [ 621 - "linux" 622 - ] 623 - }, 624 - "node_modules/@rollup/rollup-linux-arm64-musl": { 625 - "version": "4.59.0", 626 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", 627 - "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", 628 - "cpu": [ 629 - "arm64" 630 - ], 631 - "libc": [ 632 - "musl" 633 - ], 634 - "license": "MIT", 635 - "optional": true, 636 - "os": [ 637 - "linux" 638 - ] 639 - }, 640 - "node_modules/@rollup/rollup-linux-loong64-gnu": { 641 - "version": "4.59.0", 642 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", 643 - "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", 644 - "cpu": [ 645 - "loong64" 646 - ], 647 - "libc": [ 648 - "glibc" 649 - ], 650 - "license": "MIT", 651 - "optional": true, 652 - "os": [ 653 - "linux" 654 - ] 655 - }, 656 - "node_modules/@rollup/rollup-linux-loong64-musl": { 657 - "version": "4.59.0", 658 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", 659 - "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", 660 - "cpu": [ 661 - "loong64" 662 - ], 663 - "libc": [ 664 - "musl" 665 - ], 666 - "license": "MIT", 667 - "optional": true, 668 - "os": [ 669 - "linux" 670 - ] 671 - }, 672 - "node_modules/@rollup/rollup-linux-ppc64-gnu": { 673 - "version": "4.59.0", 674 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", 675 - "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", 676 - "cpu": [ 677 - "ppc64" 678 - ], 679 - "libc": [ 680 - "glibc" 681 - ], 682 - "license": "MIT", 683 - "optional": true, 684 - "os": [ 685 - "linux" 686 - ] 687 - }, 688 - "node_modules/@rollup/rollup-linux-ppc64-musl": { 689 - "version": "4.59.0", 690 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", 691 - "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", 692 - "cpu": [ 693 - "ppc64" 694 - ], 695 - "libc": [ 696 - "musl" 697 - ], 698 - "license": "MIT", 699 - "optional": true, 700 - "os": [ 701 - "linux" 702 - ] 703 - }, 704 - "node_modules/@rollup/rollup-linux-riscv64-gnu": { 705 - "version": "4.59.0", 706 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", 707 - "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", 708 - "cpu": [ 709 - "riscv64" 710 - ], 711 - "libc": [ 712 - "glibc" 713 - ], 714 - "license": "MIT", 715 - "optional": true, 716 - "os": [ 717 - "linux" 718 - ] 719 - }, 720 - "node_modules/@rollup/rollup-linux-riscv64-musl": { 721 - "version": "4.59.0", 722 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", 723 - "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", 724 - "cpu": [ 725 - "riscv64" 726 - ], 727 - "libc": [ 728 - "musl" 729 - ], 730 - "license": "MIT", 731 - "optional": true, 732 - "os": [ 733 - "linux" 734 - ] 735 - }, 736 - "node_modules/@rollup/rollup-linux-s390x-gnu": { 737 - "version": "4.59.0", 738 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", 739 - "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", 740 - "cpu": [ 741 - "s390x" 742 - ], 743 - "libc": [ 744 - "glibc" 745 - ], 746 - "license": "MIT", 747 - "optional": true, 748 - "os": [ 749 - "linux" 750 - ] 751 - }, 752 - "node_modules/@rollup/rollup-linux-x64-gnu": { 753 - "version": "4.59.0", 754 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", 755 - "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", 756 - "cpu": [ 757 - "x64" 758 - ], 759 - "libc": [ 760 - "glibc" 761 - ], 762 - "license": "MIT", 763 - "optional": true, 764 - "os": [ 765 - "linux" 766 - ] 767 - }, 768 - "node_modules/@rollup/rollup-linux-x64-musl": { 769 - "version": "4.59.0", 770 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", 771 - "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", 772 - "cpu": [ 773 - "x64" 774 - ], 775 - "libc": [ 776 - "musl" 777 - ], 778 - "license": "MIT", 779 - "optional": true, 780 - "os": [ 781 - "linux" 782 - ] 783 - }, 784 - "node_modules/@rollup/rollup-openbsd-x64": { 785 - "version": "4.59.0", 786 - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", 787 - "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", 788 - "cpu": [ 789 - "x64" 790 - ], 791 - "license": "MIT", 792 - "optional": true, 793 - "os": [ 794 - "openbsd" 795 - ] 796 - }, 797 - "node_modules/@rollup/rollup-openharmony-arm64": { 798 - "version": "4.59.0", 799 - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", 800 - "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", 801 - "cpu": [ 802 - "arm64" 803 - ], 804 - "license": "MIT", 805 - "optional": true, 806 - "os": [ 807 - "openharmony" 808 - ] 809 - }, 810 - "node_modules/@rollup/rollup-win32-arm64-msvc": { 811 - "version": "4.59.0", 812 - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", 813 - "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", 814 - "cpu": [ 815 - "arm64" 816 - ], 817 - "license": "MIT", 818 - "optional": true, 819 - "os": [ 820 - "win32" 821 - ] 822 - }, 823 - "node_modules/@rollup/rollup-win32-ia32-msvc": { 824 - "version": "4.59.0", 825 - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", 826 - "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", 827 - "cpu": [ 828 - "ia32" 829 - ], 830 - "license": "MIT", 831 - "optional": true, 832 - "os": [ 833 - "win32" 834 - ] 835 - }, 836 - "node_modules/@rollup/rollup-win32-x64-gnu": { 837 - "version": "4.59.0", 838 - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", 839 - "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", 840 - "cpu": [ 841 - "x64" 842 - ], 843 - "license": "MIT", 844 - "optional": true, 845 - "os": [ 846 - "win32" 847 - ] 848 - }, 849 - "node_modules/@rollup/rollup-win32-x64-msvc": { 850 - "version": "4.59.0", 851 - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", 852 - "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", 853 - "cpu": [ 854 - "x64" 855 - ], 856 - "license": "MIT", 857 - "optional": true, 858 - "os": [ 859 - "win32" 860 - ] 861 - }, 862 - "node_modules/@sveltejs/acorn-typescript": { 863 - "version": "1.0.9", 864 - "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.9.tgz", 865 - "integrity": "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==", 866 - "dev": true, 867 - "license": "MIT", 868 - "peerDependencies": { 869 - "acorn": "^8.9.0" 870 - } 871 - }, 872 - "node_modules/@sveltejs/vite-plugin-svelte": { 873 - "version": "6.2.4", 874 - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.4.tgz", 875 - "integrity": "sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==", 876 - "dev": true, 877 - "license": "MIT", 878 - "dependencies": { 879 - "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", 880 - "deepmerge": "^4.3.1", 881 - "magic-string": "^0.30.21", 882 - "obug": "^2.1.0", 883 - "vitefu": "^1.1.1" 884 - }, 885 - "engines": { 886 - "node": "^20.19 || ^22.12 || >=24" 887 - }, 888 - "peerDependencies": { 889 - "svelte": "^5.0.0", 890 - "vite": "^6.3.0 || ^7.0.0" 891 - } 892 - }, 893 - "node_modules/@sveltejs/vite-plugin-svelte-inspector": { 894 - "version": "5.0.2", 895 - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.2.tgz", 896 - "integrity": "sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==", 897 - "dev": true, 898 - "license": "MIT", 899 - "dependencies": { 900 - "obug": "^2.1.0" 901 - }, 902 - "engines": { 903 - "node": "^20.19 || ^22.12 || >=24" 904 - }, 905 - "peerDependencies": { 906 - "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0", 907 - "svelte": "^5.0.0", 908 - "vite": "^6.3.0 || ^7.0.0" 909 - } 910 - }, 911 - "node_modules/@tailwindcss/node": { 912 - "version": "4.2.1", 913 - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.1.tgz", 914 - "integrity": "sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==", 915 - "license": "MIT", 916 - "dependencies": { 917 - "@jridgewell/remapping": "^2.3.5", 918 - "enhanced-resolve": "^5.19.0", 919 - "jiti": "^2.6.1", 920 - "lightningcss": "1.31.1", 921 - "magic-string": "^0.30.21", 922 - "source-map-js": "^1.2.1", 923 - "tailwindcss": "4.2.1" 924 - } 925 - }, 926 - "node_modules/@tailwindcss/oxide": { 927 - "version": "4.2.1", 928 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.1.tgz", 929 - "integrity": "sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==", 930 - "license": "MIT", 931 - "engines": { 932 - "node": ">= 20" 933 - }, 934 - "optionalDependencies": { 935 - "@tailwindcss/oxide-android-arm64": "4.2.1", 936 - "@tailwindcss/oxide-darwin-arm64": "4.2.1", 937 - "@tailwindcss/oxide-darwin-x64": "4.2.1", 938 - "@tailwindcss/oxide-freebsd-x64": "4.2.1", 939 - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.1", 940 - "@tailwindcss/oxide-linux-arm64-gnu": "4.2.1", 941 - "@tailwindcss/oxide-linux-arm64-musl": "4.2.1", 942 - "@tailwindcss/oxide-linux-x64-gnu": "4.2.1", 943 - "@tailwindcss/oxide-linux-x64-musl": "4.2.1", 944 - "@tailwindcss/oxide-wasm32-wasi": "4.2.1", 945 - "@tailwindcss/oxide-win32-arm64-msvc": "4.2.1", 946 - "@tailwindcss/oxide-win32-x64-msvc": "4.2.1" 947 - } 948 - }, 949 - "node_modules/@tailwindcss/oxide-android-arm64": { 950 - "version": "4.2.1", 951 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.1.tgz", 952 - "integrity": "sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==", 953 - "cpu": [ 954 - "arm64" 955 - ], 956 - "license": "MIT", 957 - "optional": true, 958 - "os": [ 959 - "android" 960 - ], 961 - "engines": { 962 - "node": ">= 20" 963 - } 964 - }, 965 - "node_modules/@tailwindcss/oxide-darwin-arm64": { 966 - "version": "4.2.1", 967 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.1.tgz", 968 - "integrity": "sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==", 969 - "cpu": [ 970 - "arm64" 971 - ], 972 - "license": "MIT", 973 - "optional": true, 974 - "os": [ 975 - "darwin" 976 - ], 977 - "engines": { 978 - "node": ">= 20" 979 - } 980 - }, 981 - "node_modules/@tailwindcss/oxide-darwin-x64": { 982 - "version": "4.2.1", 983 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.1.tgz", 984 - "integrity": "sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==", 985 - "cpu": [ 986 - "x64" 987 - ], 988 - "license": "MIT", 989 - "optional": true, 990 - "os": [ 991 - "darwin" 992 - ], 993 - "engines": { 994 - "node": ">= 20" 995 - } 996 - }, 997 - "node_modules/@tailwindcss/oxide-freebsd-x64": { 998 - "version": "4.2.1", 999 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.1.tgz", 1000 - "integrity": "sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==", 1001 - "cpu": [ 1002 - "x64" 1003 - ], 1004 - "license": "MIT", 1005 - "optional": true, 1006 - "os": [ 1007 - "freebsd" 1008 - ], 1009 - "engines": { 1010 - "node": ">= 20" 1011 - } 1012 - }, 1013 - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { 1014 - "version": "4.2.1", 1015 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.1.tgz", 1016 - "integrity": "sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==", 1017 - "cpu": [ 1018 - "arm" 1019 - ], 1020 - "license": "MIT", 1021 - "optional": true, 1022 - "os": [ 1023 - "linux" 1024 - ], 1025 - "engines": { 1026 - "node": ">= 20" 1027 - } 1028 - }, 1029 - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { 1030 - "version": "4.2.1", 1031 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.1.tgz", 1032 - "integrity": "sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==", 1033 - "cpu": [ 1034 - "arm64" 1035 - ], 1036 - "libc": [ 1037 - "glibc" 1038 - ], 1039 - "license": "MIT", 1040 - "optional": true, 1041 - "os": [ 1042 - "linux" 1043 - ], 1044 - "engines": { 1045 - "node": ">= 20" 1046 - } 1047 - }, 1048 - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { 1049 - "version": "4.2.1", 1050 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.1.tgz", 1051 - "integrity": "sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==", 1052 - "cpu": [ 1053 - "arm64" 1054 - ], 1055 - "libc": [ 1056 - "musl" 1057 - ], 1058 - "license": "MIT", 1059 - "optional": true, 1060 - "os": [ 1061 - "linux" 1062 - ], 1063 - "engines": { 1064 - "node": ">= 20" 1065 - } 1066 - }, 1067 - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { 1068 - "version": "4.2.1", 1069 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.1.tgz", 1070 - "integrity": "sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==", 1071 - "cpu": [ 1072 - "x64" 1073 - ], 1074 - "libc": [ 1075 - "glibc" 1076 - ], 1077 - "license": "MIT", 1078 - "optional": true, 1079 - "os": [ 1080 - "linux" 1081 - ], 1082 - "engines": { 1083 - "node": ">= 20" 1084 - } 1085 - }, 1086 - "node_modules/@tailwindcss/oxide-linux-x64-musl": { 1087 - "version": "4.2.1", 1088 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.1.tgz", 1089 - "integrity": "sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==", 1090 - "cpu": [ 1091 - "x64" 1092 - ], 1093 - "libc": [ 1094 - "musl" 1095 - ], 1096 - "license": "MIT", 1097 - "optional": true, 1098 - "os": [ 1099 - "linux" 1100 - ], 1101 - "engines": { 1102 - "node": ">= 20" 1103 - } 1104 - }, 1105 - "node_modules/@tailwindcss/oxide-wasm32-wasi": { 1106 - "version": "4.2.1", 1107 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.1.tgz", 1108 - "integrity": "sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==", 1109 - "bundleDependencies": [ 1110 - "@napi-rs/wasm-runtime", 1111 - "@emnapi/core", 1112 - "@emnapi/runtime", 1113 - "@tybys/wasm-util", 1114 - "@emnapi/wasi-threads", 1115 - "tslib" 1116 - ], 1117 - "cpu": [ 1118 - "wasm32" 1119 - ], 1120 - "license": "MIT", 1121 - "optional": true, 1122 - "dependencies": { 1123 - "@emnapi/core": "^1.8.1", 1124 - "@emnapi/runtime": "^1.8.1", 1125 - "@emnapi/wasi-threads": "^1.1.0", 1126 - "@napi-rs/wasm-runtime": "^1.1.1", 1127 - "@tybys/wasm-util": "^0.10.1", 1128 - "tslib": "^2.8.1" 1129 - }, 1130 - "engines": { 1131 - "node": ">=14.0.0" 1132 - } 1133 - }, 1134 - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { 1135 - "version": "4.2.1", 1136 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.1.tgz", 1137 - "integrity": "sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==", 1138 - "cpu": [ 1139 - "arm64" 1140 - ], 1141 - "license": "MIT", 1142 - "optional": true, 1143 - "os": [ 1144 - "win32" 1145 - ], 1146 - "engines": { 1147 - "node": ">= 20" 1148 - } 1149 - }, 1150 - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { 1151 - "version": "4.2.1", 1152 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.1.tgz", 1153 - "integrity": "sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==", 1154 - "cpu": [ 1155 - "x64" 1156 - ], 1157 - "license": "MIT", 1158 - "optional": true, 1159 - "os": [ 1160 - "win32" 1161 - ], 1162 - "engines": { 1163 - "node": ">= 20" 1164 - } 1165 - }, 1166 - "node_modules/@tailwindcss/vite": { 1167 - "version": "4.2.1", 1168 - "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.1.tgz", 1169 - "integrity": "sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==", 1170 - "license": "MIT", 1171 - "dependencies": { 1172 - "@tailwindcss/node": "4.2.1", 1173 - "@tailwindcss/oxide": "4.2.1", 1174 - "tailwindcss": "4.2.1" 1175 - }, 1176 - "peerDependencies": { 1177 - "vite": "^5.2.0 || ^6 || ^7" 1178 - } 1179 - }, 1180 - "node_modules/@types/estree": { 1181 - "version": "1.0.8", 1182 - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 1183 - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 1184 - "license": "MIT" 1185 - }, 1186 - "node_modules/@types/trusted-types": { 1187 - "version": "2.0.7", 1188 - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", 1189 - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", 1190 - "dev": true, 1191 - "license": "MIT" 1192 - }, 1193 - "node_modules/@typescript-eslint/types": { 1194 - "version": "8.57.0", 1195 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.0.tgz", 1196 - "integrity": "sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==", 1197 - "dev": true, 1198 - "license": "MIT", 1199 - "engines": { 1200 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1201 - }, 1202 - "funding": { 1203 - "type": "opencollective", 1204 - "url": "https://opencollective.com/typescript-eslint" 1205 - } 1206 - }, 1207 - "node_modules/acorn": { 1208 - "version": "8.16.0", 1209 - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", 1210 - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", 1211 - "dev": true, 1212 - "license": "MIT", 1213 - "bin": { 1214 - "acorn": "bin/acorn" 1215 - }, 1216 - "engines": { 1217 - "node": ">=0.4.0" 1218 - } 1219 - }, 1220 - "node_modules/aria-query": { 1221 - "version": "5.3.1", 1222 - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz", 1223 - "integrity": "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==", 1224 - "dev": true, 1225 - "license": "Apache-2.0", 1226 - "engines": { 1227 - "node": ">= 0.4" 1228 - } 1229 - }, 1230 - "node_modules/axobject-query": { 1231 - "version": "4.1.0", 1232 - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", 1233 - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", 1234 - "dev": true, 1235 - "license": "Apache-2.0", 1236 - "engines": { 1237 - "node": ">= 0.4" 1238 - } 1239 - }, 1240 - "node_modules/chokidar": { 1241 - "version": "4.0.3", 1242 - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", 1243 - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", 1244 - "dev": true, 1245 - "license": "MIT", 1246 - "dependencies": { 1247 - "readdirp": "^4.0.1" 1248 - }, 1249 - "engines": { 1250 - "node": ">= 14.16.0" 1251 - }, 1252 - "funding": { 1253 - "url": "https://paulmillr.com/funding/" 1254 - } 1255 - }, 1256 - "node_modules/clsx": { 1257 - "version": "2.1.1", 1258 - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", 1259 - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", 1260 - "dev": true, 1261 - "license": "MIT", 1262 - "engines": { 1263 - "node": ">=6" 1264 - } 1265 - }, 1266 - "node_modules/deepmerge": { 1267 - "version": "4.3.1", 1268 - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 1269 - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 1270 - "dev": true, 1271 - "license": "MIT", 1272 - "engines": { 1273 - "node": ">=0.10.0" 1274 - } 1275 - }, 1276 - "node_modules/detect-libc": { 1277 - "version": "2.1.2", 1278 - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", 1279 - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", 1280 - "license": "Apache-2.0", 1281 - "engines": { 1282 - "node": ">=8" 1283 - } 1284 - }, 1285 - "node_modules/devalue": { 1286 - "version": "5.6.4", 1287 - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.4.tgz", 1288 - "integrity": "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==", 1289 - "dev": true, 1290 - "license": "MIT" 1291 - }, 1292 - "node_modules/enhanced-resolve": { 1293 - "version": "5.20.0", 1294 - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz", 1295 - "integrity": "sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==", 1296 - "license": "MIT", 1297 - "dependencies": { 1298 - "graceful-fs": "^4.2.4", 1299 - "tapable": "^2.3.0" 1300 - }, 1301 - "engines": { 1302 - "node": ">=10.13.0" 1303 - } 1304 - }, 1305 - "node_modules/esbuild": { 1306 - "version": "0.27.4", 1307 - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", 1308 - "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", 1309 - "hasInstallScript": true, 1310 - "license": "MIT", 1311 - "bin": { 1312 - "esbuild": "bin/esbuild" 1313 - }, 1314 - "engines": { 1315 - "node": ">=18" 1316 - }, 1317 - "optionalDependencies": { 1318 - "@esbuild/aix-ppc64": "0.27.4", 1319 - "@esbuild/android-arm": "0.27.4", 1320 - "@esbuild/android-arm64": "0.27.4", 1321 - "@esbuild/android-x64": "0.27.4", 1322 - "@esbuild/darwin-arm64": "0.27.4", 1323 - "@esbuild/darwin-x64": "0.27.4", 1324 - "@esbuild/freebsd-arm64": "0.27.4", 1325 - "@esbuild/freebsd-x64": "0.27.4", 1326 - "@esbuild/linux-arm": "0.27.4", 1327 - "@esbuild/linux-arm64": "0.27.4", 1328 - "@esbuild/linux-ia32": "0.27.4", 1329 - "@esbuild/linux-loong64": "0.27.4", 1330 - "@esbuild/linux-mips64el": "0.27.4", 1331 - "@esbuild/linux-ppc64": "0.27.4", 1332 - "@esbuild/linux-riscv64": "0.27.4", 1333 - "@esbuild/linux-s390x": "0.27.4", 1334 - "@esbuild/linux-x64": "0.27.4", 1335 - "@esbuild/netbsd-arm64": "0.27.4", 1336 - "@esbuild/netbsd-x64": "0.27.4", 1337 - "@esbuild/openbsd-arm64": "0.27.4", 1338 - "@esbuild/openbsd-x64": "0.27.4", 1339 - "@esbuild/openharmony-arm64": "0.27.4", 1340 - "@esbuild/sunos-x64": "0.27.4", 1341 - "@esbuild/win32-arm64": "0.27.4", 1342 - "@esbuild/win32-ia32": "0.27.4", 1343 - "@esbuild/win32-x64": "0.27.4" 1344 - } 1345 - }, 1346 - "node_modules/esbuild/node_modules/@esbuild/netbsd-arm64": { 1347 - "optional": true 1348 - }, 1349 - "node_modules/esm-env": { 1350 - "version": "1.2.2", 1351 - "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", 1352 - "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", 1353 - "dev": true, 1354 - "license": "MIT" 1355 - }, 1356 - "node_modules/esrap": { 1357 - "version": "2.2.4", 1358 - "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.4.tgz", 1359 - "integrity": "sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg==", 1360 - "dev": true, 1361 - "license": "MIT", 1362 - "dependencies": { 1363 - "@jridgewell/sourcemap-codec": "^1.4.15", 1364 - "@typescript-eslint/types": "^8.2.0" 1365 - } 1366 - }, 1367 - "node_modules/fdir": { 1368 - "version": "6.5.0", 1369 - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 1370 - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 1371 - "license": "MIT", 1372 - "engines": { 1373 - "node": ">=12.0.0" 1374 - }, 1375 - "peerDependencies": { 1376 - "picomatch": "^3 || ^4" 1377 - }, 1378 - "peerDependenciesMeta": { 1379 - "picomatch": { 1380 - "optional": true 1381 - } 1382 - } 1383 - }, 1384 - "node_modules/fsevents": { 1385 - "version": "2.3.3", 1386 - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1387 - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1388 - "hasInstallScript": true, 1389 - "license": "MIT", 1390 - "optional": true, 1391 - "os": [ 1392 - "darwin" 1393 - ], 1394 - "engines": { 1395 - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1396 - } 1397 - }, 1398 - "node_modules/graceful-fs": { 1399 - "version": "4.2.11", 1400 - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1401 - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1402 - "license": "ISC" 1403 - }, 1404 - "node_modules/is-reference": { 1405 - "version": "3.0.3", 1406 - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", 1407 - "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", 1408 - "dev": true, 1409 - "license": "MIT", 1410 - "dependencies": { 1411 - "@types/estree": "^1.0.6" 1412 - } 1413 - }, 1414 - "node_modules/jiti": { 1415 - "version": "2.6.1", 1416 - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", 1417 - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", 1418 - "license": "MIT", 1419 - "bin": { 1420 - "jiti": "lib/jiti-cli.mjs" 1421 - } 1422 - }, 1423 - "node_modules/lightningcss": { 1424 - "version": "1.31.1", 1425 - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.31.1.tgz", 1426 - "integrity": "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==", 1427 - "license": "MPL-2.0", 1428 - "dependencies": { 1429 - "detect-libc": "^2.0.3" 1430 - }, 1431 - "engines": { 1432 - "node": ">= 12.0.0" 1433 - }, 1434 - "funding": { 1435 - "type": "opencollective", 1436 - "url": "https://opencollective.com/parcel" 1437 - }, 1438 - "optionalDependencies": { 1439 - "lightningcss-android-arm64": "1.31.1", 1440 - "lightningcss-darwin-arm64": "1.31.1", 1441 - "lightningcss-darwin-x64": "1.31.1", 1442 - "lightningcss-freebsd-x64": "1.31.1", 1443 - "lightningcss-linux-arm-gnueabihf": "1.31.1", 1444 - "lightningcss-linux-arm64-gnu": "1.31.1", 1445 - "lightningcss-linux-arm64-musl": "1.31.1", 1446 - "lightningcss-linux-x64-gnu": "1.31.1", 1447 - "lightningcss-linux-x64-musl": "1.31.1", 1448 - "lightningcss-win32-arm64-msvc": "1.31.1", 1449 - "lightningcss-win32-x64-msvc": "1.31.1" 1450 - } 1451 - }, 1452 - "node_modules/lightningcss-android-arm64": { 1453 - "version": "1.31.1", 1454 - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.31.1.tgz", 1455 - "integrity": "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==", 1456 - "cpu": [ 1457 - "arm64" 1458 - ], 1459 - "license": "MPL-2.0", 1460 - "optional": true, 1461 - "os": [ 1462 - "android" 1463 - ], 1464 - "engines": { 1465 - "node": ">= 12.0.0" 1466 - }, 1467 - "funding": { 1468 - "type": "opencollective", 1469 - "url": "https://opencollective.com/parcel" 1470 - } 1471 - }, 1472 - "node_modules/lightningcss-darwin-arm64": { 1473 - "version": "1.31.1", 1474 - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.31.1.tgz", 1475 - "integrity": "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==", 1476 - "cpu": [ 1477 - "arm64" 1478 - ], 1479 - "license": "MPL-2.0", 1480 - "optional": true, 1481 - "os": [ 1482 - "darwin" 1483 - ], 1484 - "engines": { 1485 - "node": ">= 12.0.0" 1486 - }, 1487 - "funding": { 1488 - "type": "opencollective", 1489 - "url": "https://opencollective.com/parcel" 1490 - } 1491 - }, 1492 - "node_modules/lightningcss-darwin-x64": { 1493 - "version": "1.31.1", 1494 - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.31.1.tgz", 1495 - "integrity": "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==", 1496 - "cpu": [ 1497 - "x64" 1498 - ], 1499 - "license": "MPL-2.0", 1500 - "optional": true, 1501 - "os": [ 1502 - "darwin" 1503 - ], 1504 - "engines": { 1505 - "node": ">= 12.0.0" 1506 - }, 1507 - "funding": { 1508 - "type": "opencollective", 1509 - "url": "https://opencollective.com/parcel" 1510 - } 1511 - }, 1512 - "node_modules/lightningcss-freebsd-x64": { 1513 - "version": "1.31.1", 1514 - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.31.1.tgz", 1515 - "integrity": "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==", 1516 - "cpu": [ 1517 - "x64" 1518 - ], 1519 - "license": "MPL-2.0", 1520 - "optional": true, 1521 - "os": [ 1522 - "freebsd" 1523 - ], 1524 - "engines": { 1525 - "node": ">= 12.0.0" 1526 - }, 1527 - "funding": { 1528 - "type": "opencollective", 1529 - "url": "https://opencollective.com/parcel" 1530 - } 1531 - }, 1532 - "node_modules/lightningcss-linux-arm-gnueabihf": { 1533 - "version": "1.31.1", 1534 - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.31.1.tgz", 1535 - "integrity": "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==", 1536 - "cpu": [ 1537 - "arm" 1538 - ], 1539 - "license": "MPL-2.0", 1540 - "optional": true, 1541 - "os": [ 1542 - "linux" 1543 - ], 1544 - "engines": { 1545 - "node": ">= 12.0.0" 1546 - }, 1547 - "funding": { 1548 - "type": "opencollective", 1549 - "url": "https://opencollective.com/parcel" 1550 - } 1551 - }, 1552 - "node_modules/lightningcss-linux-arm64-gnu": { 1553 - "version": "1.31.1", 1554 - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.31.1.tgz", 1555 - "integrity": "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==", 1556 - "cpu": [ 1557 - "arm64" 1558 - ], 1559 - "libc": [ 1560 - "glibc" 1561 - ], 1562 - "license": "MPL-2.0", 1563 - "optional": true, 1564 - "os": [ 1565 - "linux" 1566 - ], 1567 - "engines": { 1568 - "node": ">= 12.0.0" 1569 - }, 1570 - "funding": { 1571 - "type": "opencollective", 1572 - "url": "https://opencollective.com/parcel" 1573 - } 1574 - }, 1575 - "node_modules/lightningcss-linux-arm64-musl": { 1576 - "version": "1.31.1", 1577 - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.31.1.tgz", 1578 - "integrity": "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==", 1579 - "cpu": [ 1580 - "arm64" 1581 - ], 1582 - "libc": [ 1583 - "musl" 1584 - ], 1585 - "license": "MPL-2.0", 1586 - "optional": true, 1587 - "os": [ 1588 - "linux" 1589 - ], 1590 - "engines": { 1591 - "node": ">= 12.0.0" 1592 - }, 1593 - "funding": { 1594 - "type": "opencollective", 1595 - "url": "https://opencollective.com/parcel" 1596 - } 1597 - }, 1598 - "node_modules/lightningcss-linux-x64-gnu": { 1599 - "version": "1.31.1", 1600 - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.31.1.tgz", 1601 - "integrity": "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==", 1602 - "cpu": [ 1603 - "x64" 1604 - ], 1605 - "libc": [ 1606 - "glibc" 1607 - ], 1608 - "license": "MPL-2.0", 1609 - "optional": true, 1610 - "os": [ 1611 - "linux" 1612 - ], 1613 - "engines": { 1614 - "node": ">= 12.0.0" 1615 - }, 1616 - "funding": { 1617 - "type": "opencollective", 1618 - "url": "https://opencollective.com/parcel" 1619 - } 1620 - }, 1621 - "node_modules/lightningcss-linux-x64-musl": { 1622 - "version": "1.31.1", 1623 - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.31.1.tgz", 1624 - "integrity": "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==", 1625 - "cpu": [ 1626 - "x64" 1627 - ], 1628 - "libc": [ 1629 - "musl" 1630 - ], 1631 - "license": "MPL-2.0", 1632 - "optional": true, 1633 - "os": [ 1634 - "linux" 1635 - ], 1636 - "engines": { 1637 - "node": ">= 12.0.0" 1638 - }, 1639 - "funding": { 1640 - "type": "opencollective", 1641 - "url": "https://opencollective.com/parcel" 1642 - } 1643 - }, 1644 - "node_modules/lightningcss-win32-arm64-msvc": { 1645 - "version": "1.31.1", 1646 - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.31.1.tgz", 1647 - "integrity": "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==", 1648 - "cpu": [ 1649 - "arm64" 1650 - ], 1651 - "license": "MPL-2.0", 1652 - "optional": true, 1653 - "os": [ 1654 - "win32" 1655 - ], 1656 - "engines": { 1657 - "node": ">= 12.0.0" 1658 - }, 1659 - "funding": { 1660 - "type": "opencollective", 1661 - "url": "https://opencollective.com/parcel" 1662 - } 1663 - }, 1664 - "node_modules/lightningcss-win32-x64-msvc": { 1665 - "version": "1.31.1", 1666 - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.31.1.tgz", 1667 - "integrity": "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==", 1668 - "cpu": [ 1669 - "x64" 1670 - ], 1671 - "license": "MPL-2.0", 1672 - "optional": true, 1673 - "os": [ 1674 - "win32" 1675 - ], 1676 - "engines": { 1677 - "node": ">= 12.0.0" 1678 - }, 1679 - "funding": { 1680 - "type": "opencollective", 1681 - "url": "https://opencollective.com/parcel" 1682 - } 1683 - }, 1684 - "node_modules/locate-character": { 1685 - "version": "3.0.0", 1686 - "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", 1687 - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", 1688 - "dev": true, 1689 - "license": "MIT" 1690 - }, 1691 - "node_modules/magic-string": { 1692 - "version": "0.30.21", 1693 - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", 1694 - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", 1695 - "license": "MIT", 1696 - "dependencies": { 1697 - "@jridgewell/sourcemap-codec": "^1.5.5" 1698 - } 1699 - }, 1700 - "node_modules/mri": { 1701 - "version": "1.2.0", 1702 - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 1703 - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", 1704 - "dev": true, 1705 - "license": "MIT", 1706 - "engines": { 1707 - "node": ">=4" 1708 - } 1709 - }, 1710 - "node_modules/nanoid": { 1711 - "version": "3.3.11", 1712 - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 1713 - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 1714 - "funding": [ 1715 - { 1716 - "type": "github", 1717 - "url": "https://github.com/sponsors/ai" 1718 - } 1719 - ], 1720 - "license": "MIT", 1721 - "bin": { 1722 - "nanoid": "bin/nanoid.cjs" 1723 - }, 1724 - "engines": { 1725 - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1726 - } 1727 - }, 1728 - "node_modules/obug": { 1729 - "version": "2.1.1", 1730 - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", 1731 - "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", 1732 - "dev": true, 1733 - "funding": [ 1734 - "https://github.com/sponsors/sxzz", 1735 - "https://opencollective.com/debug" 1736 - ], 1737 - "license": "MIT" 1738 - }, 1739 - "node_modules/picocolors": { 1740 - "version": "1.1.1", 1741 - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1742 - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1743 - "license": "ISC" 1744 - }, 1745 - "node_modules/picomatch": { 1746 - "version": "4.0.3", 1747 - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", 1748 - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 1749 - "license": "MIT", 1750 - "engines": { 1751 - "node": ">=12" 1752 - }, 1753 - "funding": { 1754 - "url": "https://github.com/sponsors/jonschlinkert" 1755 - } 1756 - }, 1757 - "node_modules/postcss": { 1758 - "version": "8.5.8", 1759 - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", 1760 - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", 1761 - "funding": [ 1762 - { 1763 - "type": "opencollective", 1764 - "url": "https://opencollective.com/postcss/" 1765 - }, 1766 - { 1767 - "type": "tidelift", 1768 - "url": "https://tidelift.com/funding/github/npm/postcss" 1769 - }, 1770 - { 1771 - "type": "github", 1772 - "url": "https://github.com/sponsors/ai" 1773 - } 1774 - ], 1775 - "license": "MIT", 1776 - "dependencies": { 1777 - "nanoid": "^3.3.11", 1778 - "picocolors": "^1.1.1", 1779 - "source-map-js": "^1.2.1" 1780 - }, 1781 - "engines": { 1782 - "node": "^10 || ^12 || >=14" 1783 - } 1784 - }, 1785 - "node_modules/readdirp": { 1786 - "version": "4.1.2", 1787 - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", 1788 - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", 1789 - "dev": true, 1790 - "license": "MIT", 1791 - "engines": { 1792 - "node": ">= 14.18.0" 1793 - }, 1794 - "funding": { 1795 - "type": "individual", 1796 - "url": "https://paulmillr.com/funding/" 1797 - } 1798 - }, 1799 - "node_modules/rollup": { 1800 - "version": "4.59.0", 1801 - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", 1802 - "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", 1803 - "license": "MIT", 1804 - "dependencies": { 1805 - "@types/estree": "1.0.8" 1806 - }, 1807 - "bin": { 1808 - "rollup": "dist/bin/rollup" 1809 - }, 1810 - "engines": { 1811 - "node": ">=18.0.0", 1812 - "npm": ">=8.0.0" 1813 - }, 1814 - "optionalDependencies": { 1815 - "@rollup/rollup-android-arm-eabi": "4.59.0", 1816 - "@rollup/rollup-android-arm64": "4.59.0", 1817 - "@rollup/rollup-darwin-arm64": "4.59.0", 1818 - "@rollup/rollup-darwin-x64": "4.59.0", 1819 - "@rollup/rollup-freebsd-arm64": "4.59.0", 1820 - "@rollup/rollup-freebsd-x64": "4.59.0", 1821 - "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", 1822 - "@rollup/rollup-linux-arm-musleabihf": "4.59.0", 1823 - "@rollup/rollup-linux-arm64-gnu": "4.59.0", 1824 - "@rollup/rollup-linux-arm64-musl": "4.59.0", 1825 - "@rollup/rollup-linux-loong64-gnu": "4.59.0", 1826 - "@rollup/rollup-linux-loong64-musl": "4.59.0", 1827 - "@rollup/rollup-linux-ppc64-gnu": "4.59.0", 1828 - "@rollup/rollup-linux-ppc64-musl": "4.59.0", 1829 - "@rollup/rollup-linux-riscv64-gnu": "4.59.0", 1830 - "@rollup/rollup-linux-riscv64-musl": "4.59.0", 1831 - "@rollup/rollup-linux-s390x-gnu": "4.59.0", 1832 - "@rollup/rollup-linux-x64-gnu": "4.59.0", 1833 - "@rollup/rollup-linux-x64-musl": "4.59.0", 1834 - "@rollup/rollup-openbsd-x64": "4.59.0", 1835 - "@rollup/rollup-openharmony-arm64": "4.59.0", 1836 - "@rollup/rollup-win32-arm64-msvc": "4.59.0", 1837 - "@rollup/rollup-win32-ia32-msvc": "4.59.0", 1838 - "@rollup/rollup-win32-x64-gnu": "4.59.0", 1839 - "@rollup/rollup-win32-x64-msvc": "4.59.0", 1840 - "fsevents": "~2.3.2" 1841 - } 1842 - }, 1843 - "node_modules/sade": { 1844 - "version": "1.8.1", 1845 - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", 1846 - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 1847 - "dev": true, 1848 - "license": "MIT", 1849 - "dependencies": { 1850 - "mri": "^1.1.0" 1851 - }, 1852 - "engines": { 1853 - "node": ">=6" 1854 - } 1855 - }, 1856 - "node_modules/source-map-js": { 1857 - "version": "1.2.1", 1858 - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 1859 - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 1860 - "license": "BSD-3-Clause", 1861 - "engines": { 1862 - "node": ">=0.10.0" 1863 - } 1864 - }, 1865 - "node_modules/svelte": { 1866 - "version": "5.53.12", 1867 - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.53.12.tgz", 1868 - "integrity": "sha512-4x/uk4rQe/d7RhfvS8wemTfNjQ0bJbKvamIzRBfTe2eHHjzBZ7PZicUQrC2ryj83xxEacfA1zHKd1ephD1tAxA==", 1869 - "dev": true, 1870 - "license": "MIT", 1871 - "dependencies": { 1872 - "@jridgewell/remapping": "^2.3.4", 1873 - "@jridgewell/sourcemap-codec": "^1.5.0", 1874 - "@sveltejs/acorn-typescript": "^1.0.5", 1875 - "@types/estree": "^1.0.5", 1876 - "@types/trusted-types": "^2.0.7", 1877 - "acorn": "^8.12.1", 1878 - "aria-query": "5.3.1", 1879 - "axobject-query": "^4.1.0", 1880 - "clsx": "^2.1.1", 1881 - "devalue": "^5.6.4", 1882 - "esm-env": "^1.2.1", 1883 - "esrap": "^2.2.2", 1884 - "is-reference": "^3.0.3", 1885 - "locate-character": "^3.0.0", 1886 - "magic-string": "^0.30.11", 1887 - "zimmerframe": "^1.1.2" 1888 - }, 1889 - "engines": { 1890 - "node": ">=18" 1891 - } 1892 - }, 1893 - "node_modules/svelte-check": { 1894 - "version": "4.4.5", 1895 - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.4.5.tgz", 1896 - "integrity": "sha512-1bSwIRCvvmSHrlK52fOlZmVtUZgil43jNL/2H18pRpa+eQjzGt6e3zayxhp1S7GajPFKNM/2PMCG+DZFHlG9fw==", 1897 - "dev": true, 1898 - "license": "MIT", 1899 - "dependencies": { 1900 - "@jridgewell/trace-mapping": "^0.3.25", 1901 - "chokidar": "^4.0.1", 1902 - "fdir": "^6.2.0", 1903 - "picocolors": "^1.0.0", 1904 - "sade": "^1.7.4" 1905 - }, 1906 - "bin": { 1907 - "svelte-check": "bin/svelte-check" 1908 - }, 1909 - "engines": { 1910 - "node": ">= 18.0.0" 1911 - }, 1912 - "peerDependencies": { 1913 - "svelte": "^4.0.0 || ^5.0.0-next.0", 1914 - "typescript": ">=5.0.0" 1915 - } 1916 - }, 1917 - "node_modules/tailwindcss": { 1918 - "version": "4.2.1", 1919 - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz", 1920 - "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==", 1921 - "license": "MIT" 1922 - }, 1923 - "node_modules/tapable": { 1924 - "version": "2.3.0", 1925 - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", 1926 - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", 1927 - "license": "MIT", 1928 - "engines": { 1929 - "node": ">=6" 1930 - }, 1931 - "funding": { 1932 - "type": "opencollective", 1933 - "url": "https://opencollective.com/webpack" 1934 - } 1935 - }, 1936 - "node_modules/tinyglobby": { 1937 - "version": "0.2.15", 1938 - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", 1939 - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", 1940 - "license": "MIT", 1941 - "dependencies": { 1942 - "fdir": "^6.5.0", 1943 - "picomatch": "^4.0.3" 1944 - }, 1945 - "engines": { 1946 - "node": ">=12.0.0" 1947 - }, 1948 - "funding": { 1949 - "url": "https://github.com/sponsors/SuperchupuDev" 1950 - } 1951 - }, 1952 - "node_modules/tslib": { 1953 - "version": "2.8.1", 1954 - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 1955 - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 1956 - "devOptional": true, 1957 - "license": "0BSD" 1958 - }, 1959 - "node_modules/typescript": { 1960 - "version": "5.9.3", 1961 - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", 1962 - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 1963 - "dev": true, 1964 - "license": "Apache-2.0", 1965 - "bin": { 1966 - "tsc": "bin/tsc", 1967 - "tsserver": "bin/tsserver" 1968 - }, 1969 - "engines": { 1970 - "node": ">=14.17" 1971 - } 1972 - }, 1973 - "node_modules/vite": { 1974 - "version": "7.3.1", 1975 - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", 1976 - "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", 1977 - "license": "MIT", 1978 - "dependencies": { 1979 - "esbuild": "^0.27.0", 1980 - "fdir": "^6.5.0", 1981 - "picomatch": "^4.0.3", 1982 - "postcss": "^8.5.6", 1983 - "rollup": "^4.43.0", 1984 - "tinyglobby": "^0.2.15" 1985 - }, 1986 - "bin": { 1987 - "vite": "bin/vite.js" 1988 - }, 1989 - "engines": { 1990 - "node": "^20.19.0 || >=22.12.0" 1991 - }, 1992 - "funding": { 1993 - "url": "https://github.com/vitejs/vite?sponsor=1" 1994 - }, 1995 - "optionalDependencies": { 1996 - "fsevents": "~2.3.3" 1997 - }, 1998 - "peerDependencies": { 1999 - "@types/node": "^20.19.0 || >=22.12.0", 2000 - "jiti": ">=1.21.0", 2001 - "less": "^4.0.0", 2002 - "lightningcss": "^1.21.0", 2003 - "sass": "^1.70.0", 2004 - "sass-embedded": "^1.70.0", 2005 - "stylus": ">=0.54.8", 2006 - "sugarss": "^5.0.0", 2007 - "terser": "^5.16.0", 2008 - "tsx": "^4.8.1", 2009 - "yaml": "^2.4.2" 2010 - }, 2011 - "peerDependenciesMeta": { 2012 - "@types/node": { 2013 - "optional": true 2014 - }, 2015 - "jiti": { 2016 - "optional": true 2017 - }, 2018 - "less": { 2019 - "optional": true 2020 - }, 2021 - "lightningcss": { 2022 - "optional": true 2023 - }, 2024 - "sass": { 2025 - "optional": true 2026 - }, 2027 - "sass-embedded": { 2028 - "optional": true 2029 - }, 2030 - "stylus": { 2031 - "optional": true 2032 - }, 2033 - "sugarss": { 2034 - "optional": true 2035 - }, 2036 - "terser": { 2037 - "optional": true 2038 - }, 2039 - "tsx": { 2040 - "optional": true 2041 - }, 2042 - "yaml": { 2043 - "optional": true 2044 - } 2045 - } 2046 - }, 2047 - "node_modules/vitefu": { 2048 - "version": "1.1.2", 2049 - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.2.tgz", 2050 - "integrity": "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==", 2051 - "dev": true, 2052 - "license": "MIT", 2053 - "workspaces": [ 2054 - "tests/deps/*", 2055 - "tests/projects/*", 2056 - "tests/projects/workspace/packages/*" 2057 - ], 2058 - "peerDependencies": { 2059 - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0" 2060 - }, 2061 - "peerDependenciesMeta": { 2062 - "vite": { 2063 - "optional": true 2064 - } 2065 - } 2066 - }, 2067 - "node_modules/zimmerframe": { 2068 - "version": "1.1.4", 2069 - "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", 2070 - "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", 2071 - "dev": true, 2072 - "license": "MIT" 2073 - } 2074 - } 2075 - }
+1 -1
frontend/package.json.md5
··· 1 - 16c8e72b3f2fca4a3fca5becbd75bcd7 1 + 594a3cbf221ff3dc93082fe39bc9c084
+1263
frontend/pnpm-lock.yaml
··· 1 + lockfileVersion: '9.0' 2 + 3 + settings: 4 + autoInstallPeers: true 5 + excludeLinksFromLockfile: false 6 + 7 + importers: 8 + 9 + .: 10 + dependencies: 11 + '@fontsource-variable/geist': 12 + specifier: ^5.2.8 13 + version: 5.2.8 14 + '@fontsource-variable/jetbrains-mono': 15 + specifier: ^5.2.8 16 + version: 5.2.8 17 + '@fontsource-variable/lora': 18 + specifier: ^5.2.8 19 + version: 5.2.8 20 + '@tailwindcss/vite': 21 + specifier: ^4.2.1 22 + version: 4.2.1(vite@7.3.1(jiti@2.6.1)(lightningcss@1.31.1)) 23 + tailwindcss: 24 + specifier: ^4.2.1 25 + version: 4.2.1 26 + devDependencies: 27 + '@sveltejs/vite-plugin-svelte': 28 + specifier: ^6.2.4 29 + version: 6.2.4(svelte@5.53.12)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.31.1)) 30 + svelte: 31 + specifier: ^5.53.12 32 + version: 5.53.12 33 + svelte-check: 34 + specifier: ^4.4.5 35 + version: 4.4.5(picomatch@4.0.3)(svelte@5.53.12)(typescript@5.9.3) 36 + tslib: 37 + specifier: ^2.8.1 38 + version: 2.8.1 39 + typescript: 40 + specifier: ^5.9.3 41 + version: 5.9.3 42 + vite: 43 + specifier: ^7.2.6 44 + version: 7.3.1(jiti@2.6.1)(lightningcss@1.31.1) 45 + 46 + packages: 47 + 48 + '@esbuild/aix-ppc64@0.27.4': 49 + resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} 50 + engines: {node: '>=18'} 51 + cpu: [ppc64] 52 + os: [aix] 53 + 54 + '@esbuild/android-arm64@0.27.4': 55 + resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} 56 + engines: {node: '>=18'} 57 + cpu: [arm64] 58 + os: [android] 59 + 60 + '@esbuild/android-arm@0.27.4': 61 + resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} 62 + engines: {node: '>=18'} 63 + cpu: [arm] 64 + os: [android] 65 + 66 + '@esbuild/android-x64@0.27.4': 67 + resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} 68 + engines: {node: '>=18'} 69 + cpu: [x64] 70 + os: [android] 71 + 72 + '@esbuild/darwin-arm64@0.27.4': 73 + resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} 74 + engines: {node: '>=18'} 75 + cpu: [arm64] 76 + os: [darwin] 77 + 78 + '@esbuild/darwin-x64@0.27.4': 79 + resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} 80 + engines: {node: '>=18'} 81 + cpu: [x64] 82 + os: [darwin] 83 + 84 + '@esbuild/freebsd-arm64@0.27.4': 85 + resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} 86 + engines: {node: '>=18'} 87 + cpu: [arm64] 88 + os: [freebsd] 89 + 90 + '@esbuild/freebsd-x64@0.27.4': 91 + resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} 92 + engines: {node: '>=18'} 93 + cpu: [x64] 94 + os: [freebsd] 95 + 96 + '@esbuild/linux-arm64@0.27.4': 97 + resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} 98 + engines: {node: '>=18'} 99 + cpu: [arm64] 100 + os: [linux] 101 + 102 + '@esbuild/linux-arm@0.27.4': 103 + resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} 104 + engines: {node: '>=18'} 105 + cpu: [arm] 106 + os: [linux] 107 + 108 + '@esbuild/linux-ia32@0.27.4': 109 + resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} 110 + engines: {node: '>=18'} 111 + cpu: [ia32] 112 + os: [linux] 113 + 114 + '@esbuild/linux-loong64@0.27.4': 115 + resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} 116 + engines: {node: '>=18'} 117 + cpu: [loong64] 118 + os: [linux] 119 + 120 + '@esbuild/linux-mips64el@0.27.4': 121 + resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} 122 + engines: {node: '>=18'} 123 + cpu: [mips64el] 124 + os: [linux] 125 + 126 + '@esbuild/linux-ppc64@0.27.4': 127 + resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} 128 + engines: {node: '>=18'} 129 + cpu: [ppc64] 130 + os: [linux] 131 + 132 + '@esbuild/linux-riscv64@0.27.4': 133 + resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} 134 + engines: {node: '>=18'} 135 + cpu: [riscv64] 136 + os: [linux] 137 + 138 + '@esbuild/linux-s390x@0.27.4': 139 + resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} 140 + engines: {node: '>=18'} 141 + cpu: [s390x] 142 + os: [linux] 143 + 144 + '@esbuild/linux-x64@0.27.4': 145 + resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} 146 + engines: {node: '>=18'} 147 + cpu: [x64] 148 + os: [linux] 149 + 150 + '@esbuild/netbsd-arm64@0.27.4': 151 + resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} 152 + engines: {node: '>=18'} 153 + cpu: [arm64] 154 + os: [netbsd] 155 + 156 + '@esbuild/netbsd-x64@0.27.4': 157 + resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} 158 + engines: {node: '>=18'} 159 + cpu: [x64] 160 + os: [netbsd] 161 + 162 + '@esbuild/openbsd-arm64@0.27.4': 163 + resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} 164 + engines: {node: '>=18'} 165 + cpu: [arm64] 166 + os: [openbsd] 167 + 168 + '@esbuild/openbsd-x64@0.27.4': 169 + resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} 170 + engines: {node: '>=18'} 171 + cpu: [x64] 172 + os: [openbsd] 173 + 174 + '@esbuild/openharmony-arm64@0.27.4': 175 + resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} 176 + engines: {node: '>=18'} 177 + cpu: [arm64] 178 + os: [openharmony] 179 + 180 + '@esbuild/sunos-x64@0.27.4': 181 + resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} 182 + engines: {node: '>=18'} 183 + cpu: [x64] 184 + os: [sunos] 185 + 186 + '@esbuild/win32-arm64@0.27.4': 187 + resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} 188 + engines: {node: '>=18'} 189 + cpu: [arm64] 190 + os: [win32] 191 + 192 + '@esbuild/win32-ia32@0.27.4': 193 + resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} 194 + engines: {node: '>=18'} 195 + cpu: [ia32] 196 + os: [win32] 197 + 198 + '@esbuild/win32-x64@0.27.4': 199 + resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} 200 + engines: {node: '>=18'} 201 + cpu: [x64] 202 + os: [win32] 203 + 204 + '@fontsource-variable/geist@5.2.8': 205 + resolution: {integrity: sha512-cJ6m9e+8MQ5dCYJsLylfZrgBh6KkG4bOLckB35Tr9J/EqdkEM6QllH5PxqP1dhTvFup+HtMRPuz9xOjxXJggxw==} 206 + 207 + '@fontsource-variable/jetbrains-mono@5.2.8': 208 + resolution: {integrity: sha512-WBA9elru6Jdp5df2mES55wuOO0WIrn3kpXnI4+W2ek5u3ZgLS9XS4gmIlcQhiZOWEKl95meYdvK7xI+ETLCq/Q==} 209 + 210 + '@fontsource-variable/lora@5.2.8': 211 + resolution: {integrity: sha512-cxjTJ9BbOWIzusewR4UMBLVePvTSWV6dtNaNsCkF/oKoyA68fJGWfaYCILOOP1BObE4dmjfZ3xo6m9hdHhtYhg==} 212 + 213 + '@jridgewell/gen-mapping@0.3.13': 214 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 215 + 216 + '@jridgewell/remapping@2.3.5': 217 + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} 218 + 219 + '@jridgewell/resolve-uri@3.1.2': 220 + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 221 + engines: {node: '>=6.0.0'} 222 + 223 + '@jridgewell/sourcemap-codec@1.5.5': 224 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 225 + 226 + '@jridgewell/trace-mapping@0.3.31': 227 + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 228 + 229 + '@rollup/rollup-android-arm-eabi@4.59.0': 230 + resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} 231 + cpu: [arm] 232 + os: [android] 233 + 234 + '@rollup/rollup-android-arm64@4.59.0': 235 + resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} 236 + cpu: [arm64] 237 + os: [android] 238 + 239 + '@rollup/rollup-darwin-arm64@4.59.0': 240 + resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} 241 + cpu: [arm64] 242 + os: [darwin] 243 + 244 + '@rollup/rollup-darwin-x64@4.59.0': 245 + resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} 246 + cpu: [x64] 247 + os: [darwin] 248 + 249 + '@rollup/rollup-freebsd-arm64@4.59.0': 250 + resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} 251 + cpu: [arm64] 252 + os: [freebsd] 253 + 254 + '@rollup/rollup-freebsd-x64@4.59.0': 255 + resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} 256 + cpu: [x64] 257 + os: [freebsd] 258 + 259 + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': 260 + resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} 261 + cpu: [arm] 262 + os: [linux] 263 + 264 + '@rollup/rollup-linux-arm-musleabihf@4.59.0': 265 + resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} 266 + cpu: [arm] 267 + os: [linux] 268 + 269 + '@rollup/rollup-linux-arm64-gnu@4.59.0': 270 + resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} 271 + cpu: [arm64] 272 + os: [linux] 273 + 274 + '@rollup/rollup-linux-arm64-musl@4.59.0': 275 + resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} 276 + cpu: [arm64] 277 + os: [linux] 278 + 279 + '@rollup/rollup-linux-loong64-gnu@4.59.0': 280 + resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} 281 + cpu: [loong64] 282 + os: [linux] 283 + 284 + '@rollup/rollup-linux-loong64-musl@4.59.0': 285 + resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} 286 + cpu: [loong64] 287 + os: [linux] 288 + 289 + '@rollup/rollup-linux-ppc64-gnu@4.59.0': 290 + resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} 291 + cpu: [ppc64] 292 + os: [linux] 293 + 294 + '@rollup/rollup-linux-ppc64-musl@4.59.0': 295 + resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} 296 + cpu: [ppc64] 297 + os: [linux] 298 + 299 + '@rollup/rollup-linux-riscv64-gnu@4.59.0': 300 + resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} 301 + cpu: [riscv64] 302 + os: [linux] 303 + 304 + '@rollup/rollup-linux-riscv64-musl@4.59.0': 305 + resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} 306 + cpu: [riscv64] 307 + os: [linux] 308 + 309 + '@rollup/rollup-linux-s390x-gnu@4.59.0': 310 + resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} 311 + cpu: [s390x] 312 + os: [linux] 313 + 314 + '@rollup/rollup-linux-x64-gnu@4.59.0': 315 + resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} 316 + cpu: [x64] 317 + os: [linux] 318 + 319 + '@rollup/rollup-linux-x64-musl@4.59.0': 320 + resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} 321 + cpu: [x64] 322 + os: [linux] 323 + 324 + '@rollup/rollup-openbsd-x64@4.59.0': 325 + resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} 326 + cpu: [x64] 327 + os: [openbsd] 328 + 329 + '@rollup/rollup-openharmony-arm64@4.59.0': 330 + resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} 331 + cpu: [arm64] 332 + os: [openharmony] 333 + 334 + '@rollup/rollup-win32-arm64-msvc@4.59.0': 335 + resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} 336 + cpu: [arm64] 337 + os: [win32] 338 + 339 + '@rollup/rollup-win32-ia32-msvc@4.59.0': 340 + resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} 341 + cpu: [ia32] 342 + os: [win32] 343 + 344 + '@rollup/rollup-win32-x64-gnu@4.59.0': 345 + resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} 346 + cpu: [x64] 347 + os: [win32] 348 + 349 + '@rollup/rollup-win32-x64-msvc@4.59.0': 350 + resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} 351 + cpu: [x64] 352 + os: [win32] 353 + 354 + '@sveltejs/acorn-typescript@1.0.9': 355 + resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==} 356 + peerDependencies: 357 + acorn: ^8.9.0 358 + 359 + '@sveltejs/vite-plugin-svelte-inspector@5.0.2': 360 + resolution: {integrity: sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==} 361 + engines: {node: ^20.19 || ^22.12 || >=24} 362 + peerDependencies: 363 + '@sveltejs/vite-plugin-svelte': ^6.0.0-next.0 364 + svelte: ^5.0.0 365 + vite: ^6.3.0 || ^7.0.0 366 + 367 + '@sveltejs/vite-plugin-svelte@6.2.4': 368 + resolution: {integrity: sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==} 369 + engines: {node: ^20.19 || ^22.12 || >=24} 370 + peerDependencies: 371 + svelte: ^5.0.0 372 + vite: ^6.3.0 || ^7.0.0 373 + 374 + '@tailwindcss/node@4.2.1': 375 + resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==} 376 + 377 + '@tailwindcss/oxide-android-arm64@4.2.1': 378 + resolution: {integrity: sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==} 379 + engines: {node: '>= 20'} 380 + cpu: [arm64] 381 + os: [android] 382 + 383 + '@tailwindcss/oxide-darwin-arm64@4.2.1': 384 + resolution: {integrity: sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==} 385 + engines: {node: '>= 20'} 386 + cpu: [arm64] 387 + os: [darwin] 388 + 389 + '@tailwindcss/oxide-darwin-x64@4.2.1': 390 + resolution: {integrity: sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==} 391 + engines: {node: '>= 20'} 392 + cpu: [x64] 393 + os: [darwin] 394 + 395 + '@tailwindcss/oxide-freebsd-x64@4.2.1': 396 + resolution: {integrity: sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==} 397 + engines: {node: '>= 20'} 398 + cpu: [x64] 399 + os: [freebsd] 400 + 401 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1': 402 + resolution: {integrity: sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==} 403 + engines: {node: '>= 20'} 404 + cpu: [arm] 405 + os: [linux] 406 + 407 + '@tailwindcss/oxide-linux-arm64-gnu@4.2.1': 408 + resolution: {integrity: sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==} 409 + engines: {node: '>= 20'} 410 + cpu: [arm64] 411 + os: [linux] 412 + 413 + '@tailwindcss/oxide-linux-arm64-musl@4.2.1': 414 + resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==} 415 + engines: {node: '>= 20'} 416 + cpu: [arm64] 417 + os: [linux] 418 + 419 + '@tailwindcss/oxide-linux-x64-gnu@4.2.1': 420 + resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==} 421 + engines: {node: '>= 20'} 422 + cpu: [x64] 423 + os: [linux] 424 + 425 + '@tailwindcss/oxide-linux-x64-musl@4.2.1': 426 + resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==} 427 + engines: {node: '>= 20'} 428 + cpu: [x64] 429 + os: [linux] 430 + 431 + '@tailwindcss/oxide-wasm32-wasi@4.2.1': 432 + resolution: {integrity: sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==} 433 + engines: {node: '>=14.0.0'} 434 + cpu: [wasm32] 435 + bundledDependencies: 436 + - '@napi-rs/wasm-runtime' 437 + - '@emnapi/core' 438 + - '@emnapi/runtime' 439 + - '@tybys/wasm-util' 440 + - '@emnapi/wasi-threads' 441 + - tslib 442 + 443 + '@tailwindcss/oxide-win32-arm64-msvc@4.2.1': 444 + resolution: {integrity: sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==} 445 + engines: {node: '>= 20'} 446 + cpu: [arm64] 447 + os: [win32] 448 + 449 + '@tailwindcss/oxide-win32-x64-msvc@4.2.1': 450 + resolution: {integrity: sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==} 451 + engines: {node: '>= 20'} 452 + cpu: [x64] 453 + os: [win32] 454 + 455 + '@tailwindcss/oxide@4.2.1': 456 + resolution: {integrity: sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==} 457 + engines: {node: '>= 20'} 458 + 459 + '@tailwindcss/vite@4.2.1': 460 + resolution: {integrity: sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==} 461 + peerDependencies: 462 + vite: ^5.2.0 || ^6 || ^7 463 + 464 + '@types/estree@1.0.8': 465 + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 466 + 467 + '@types/trusted-types@2.0.7': 468 + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} 469 + 470 + '@typescript-eslint/types@8.57.0': 471 + resolution: {integrity: sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==} 472 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 473 + 474 + acorn@8.16.0: 475 + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} 476 + engines: {node: '>=0.4.0'} 477 + hasBin: true 478 + 479 + aria-query@5.3.1: 480 + resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} 481 + engines: {node: '>= 0.4'} 482 + 483 + axobject-query@4.1.0: 484 + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 485 + engines: {node: '>= 0.4'} 486 + 487 + chokidar@4.0.3: 488 + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 489 + engines: {node: '>= 14.16.0'} 490 + 491 + clsx@2.1.1: 492 + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 493 + engines: {node: '>=6'} 494 + 495 + deepmerge@4.3.1: 496 + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 497 + engines: {node: '>=0.10.0'} 498 + 499 + detect-libc@2.1.2: 500 + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} 501 + engines: {node: '>=8'} 502 + 503 + devalue@5.6.4: 504 + resolution: {integrity: sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==} 505 + 506 + enhanced-resolve@5.20.0: 507 + resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==} 508 + engines: {node: '>=10.13.0'} 509 + 510 + esbuild@0.27.4: 511 + resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} 512 + engines: {node: '>=18'} 513 + hasBin: true 514 + 515 + esm-env@1.2.2: 516 + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} 517 + 518 + esrap@2.2.4: 519 + resolution: {integrity: sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg==} 520 + 521 + fdir@6.5.0: 522 + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 523 + engines: {node: '>=12.0.0'} 524 + peerDependencies: 525 + picomatch: ^3 || ^4 526 + peerDependenciesMeta: 527 + picomatch: 528 + optional: true 529 + 530 + fsevents@2.3.3: 531 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 532 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 533 + os: [darwin] 534 + 535 + graceful-fs@4.2.11: 536 + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 537 + 538 + is-reference@3.0.3: 539 + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} 540 + 541 + jiti@2.6.1: 542 + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} 543 + hasBin: true 544 + 545 + lightningcss-android-arm64@1.31.1: 546 + resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} 547 + engines: {node: '>= 12.0.0'} 548 + cpu: [arm64] 549 + os: [android] 550 + 551 + lightningcss-darwin-arm64@1.31.1: 552 + resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} 553 + engines: {node: '>= 12.0.0'} 554 + cpu: [arm64] 555 + os: [darwin] 556 + 557 + lightningcss-darwin-x64@1.31.1: 558 + resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} 559 + engines: {node: '>= 12.0.0'} 560 + cpu: [x64] 561 + os: [darwin] 562 + 563 + lightningcss-freebsd-x64@1.31.1: 564 + resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} 565 + engines: {node: '>= 12.0.0'} 566 + cpu: [x64] 567 + os: [freebsd] 568 + 569 + lightningcss-linux-arm-gnueabihf@1.31.1: 570 + resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} 571 + engines: {node: '>= 12.0.0'} 572 + cpu: [arm] 573 + os: [linux] 574 + 575 + lightningcss-linux-arm64-gnu@1.31.1: 576 + resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} 577 + engines: {node: '>= 12.0.0'} 578 + cpu: [arm64] 579 + os: [linux] 580 + 581 + lightningcss-linux-arm64-musl@1.31.1: 582 + resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} 583 + engines: {node: '>= 12.0.0'} 584 + cpu: [arm64] 585 + os: [linux] 586 + 587 + lightningcss-linux-x64-gnu@1.31.1: 588 + resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} 589 + engines: {node: '>= 12.0.0'} 590 + cpu: [x64] 591 + os: [linux] 592 + 593 + lightningcss-linux-x64-musl@1.31.1: 594 + resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} 595 + engines: {node: '>= 12.0.0'} 596 + cpu: [x64] 597 + os: [linux] 598 + 599 + lightningcss-win32-arm64-msvc@1.31.1: 600 + resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} 601 + engines: {node: '>= 12.0.0'} 602 + cpu: [arm64] 603 + os: [win32] 604 + 605 + lightningcss-win32-x64-msvc@1.31.1: 606 + resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} 607 + engines: {node: '>= 12.0.0'} 608 + cpu: [x64] 609 + os: [win32] 610 + 611 + lightningcss@1.31.1: 612 + resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} 613 + engines: {node: '>= 12.0.0'} 614 + 615 + locate-character@3.0.0: 616 + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} 617 + 618 + magic-string@0.30.21: 619 + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 620 + 621 + mri@1.2.0: 622 + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 623 + engines: {node: '>=4'} 624 + 625 + nanoid@3.3.11: 626 + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 627 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 628 + hasBin: true 629 + 630 + obug@2.1.1: 631 + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} 632 + 633 + picocolors@1.1.1: 634 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 635 + 636 + picomatch@4.0.3: 637 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 638 + engines: {node: '>=12'} 639 + 640 + postcss@8.5.8: 641 + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} 642 + engines: {node: ^10 || ^12 || >=14} 643 + 644 + readdirp@4.1.2: 645 + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 646 + engines: {node: '>= 14.18.0'} 647 + 648 + rollup@4.59.0: 649 + resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} 650 + engines: {node: '>=18.0.0', npm: '>=8.0.0'} 651 + hasBin: true 652 + 653 + sade@1.8.1: 654 + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 655 + engines: {node: '>=6'} 656 + 657 + source-map-js@1.2.1: 658 + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 659 + engines: {node: '>=0.10.0'} 660 + 661 + svelte-check@4.4.5: 662 + resolution: {integrity: sha512-1bSwIRCvvmSHrlK52fOlZmVtUZgil43jNL/2H18pRpa+eQjzGt6e3zayxhp1S7GajPFKNM/2PMCG+DZFHlG9fw==} 663 + engines: {node: '>= 18.0.0'} 664 + hasBin: true 665 + peerDependencies: 666 + svelte: ^4.0.0 || ^5.0.0-next.0 667 + typescript: '>=5.0.0' 668 + 669 + svelte@5.53.12: 670 + resolution: {integrity: sha512-4x/uk4rQe/d7RhfvS8wemTfNjQ0bJbKvamIzRBfTe2eHHjzBZ7PZicUQrC2ryj83xxEacfA1zHKd1ephD1tAxA==} 671 + engines: {node: '>=18'} 672 + 673 + tailwindcss@4.2.1: 674 + resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==} 675 + 676 + tapable@2.3.0: 677 + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} 678 + engines: {node: '>=6'} 679 + 680 + tinyglobby@0.2.15: 681 + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 682 + engines: {node: '>=12.0.0'} 683 + 684 + tslib@2.8.1: 685 + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 686 + 687 + typescript@5.9.3: 688 + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 689 + engines: {node: '>=14.17'} 690 + hasBin: true 691 + 692 + vite@7.3.1: 693 + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} 694 + engines: {node: ^20.19.0 || >=22.12.0} 695 + hasBin: true 696 + peerDependencies: 697 + '@types/node': ^20.19.0 || >=22.12.0 698 + jiti: '>=1.21.0' 699 + less: ^4.0.0 700 + lightningcss: ^1.21.0 701 + sass: ^1.70.0 702 + sass-embedded: ^1.70.0 703 + stylus: '>=0.54.8' 704 + sugarss: ^5.0.0 705 + terser: ^5.16.0 706 + tsx: ^4.8.1 707 + yaml: ^2.4.2 708 + peerDependenciesMeta: 709 + '@types/node': 710 + optional: true 711 + jiti: 712 + optional: true 713 + less: 714 + optional: true 715 + lightningcss: 716 + optional: true 717 + sass: 718 + optional: true 719 + sass-embedded: 720 + optional: true 721 + stylus: 722 + optional: true 723 + sugarss: 724 + optional: true 725 + terser: 726 + optional: true 727 + tsx: 728 + optional: true 729 + yaml: 730 + optional: true 731 + 732 + vitefu@1.1.2: 733 + resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==} 734 + peerDependencies: 735 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0 736 + peerDependenciesMeta: 737 + vite: 738 + optional: true 739 + 740 + zimmerframe@1.1.4: 741 + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} 742 + 743 + snapshots: 744 + 745 + '@esbuild/aix-ppc64@0.27.4': 746 + optional: true 747 + 748 + '@esbuild/android-arm64@0.27.4': 749 + optional: true 750 + 751 + '@esbuild/android-arm@0.27.4': 752 + optional: true 753 + 754 + '@esbuild/android-x64@0.27.4': 755 + optional: true 756 + 757 + '@esbuild/darwin-arm64@0.27.4': 758 + optional: true 759 + 760 + '@esbuild/darwin-x64@0.27.4': 761 + optional: true 762 + 763 + '@esbuild/freebsd-arm64@0.27.4': 764 + optional: true 765 + 766 + '@esbuild/freebsd-x64@0.27.4': 767 + optional: true 768 + 769 + '@esbuild/linux-arm64@0.27.4': 770 + optional: true 771 + 772 + '@esbuild/linux-arm@0.27.4': 773 + optional: true 774 + 775 + '@esbuild/linux-ia32@0.27.4': 776 + optional: true 777 + 778 + '@esbuild/linux-loong64@0.27.4': 779 + optional: true 780 + 781 + '@esbuild/linux-mips64el@0.27.4': 782 + optional: true 783 + 784 + '@esbuild/linux-ppc64@0.27.4': 785 + optional: true 786 + 787 + '@esbuild/linux-riscv64@0.27.4': 788 + optional: true 789 + 790 + '@esbuild/linux-s390x@0.27.4': 791 + optional: true 792 + 793 + '@esbuild/linux-x64@0.27.4': 794 + optional: true 795 + 796 + '@esbuild/netbsd-arm64@0.27.4': 797 + optional: true 798 + 799 + '@esbuild/netbsd-x64@0.27.4': 800 + optional: true 801 + 802 + '@esbuild/openbsd-arm64@0.27.4': 803 + optional: true 804 + 805 + '@esbuild/openbsd-x64@0.27.4': 806 + optional: true 807 + 808 + '@esbuild/openharmony-arm64@0.27.4': 809 + optional: true 810 + 811 + '@esbuild/sunos-x64@0.27.4': 812 + optional: true 813 + 814 + '@esbuild/win32-arm64@0.27.4': 815 + optional: true 816 + 817 + '@esbuild/win32-ia32@0.27.4': 818 + optional: true 819 + 820 + '@esbuild/win32-x64@0.27.4': 821 + optional: true 822 + 823 + '@fontsource-variable/geist@5.2.8': {} 824 + 825 + '@fontsource-variable/jetbrains-mono@5.2.8': {} 826 + 827 + '@fontsource-variable/lora@5.2.8': {} 828 + 829 + '@jridgewell/gen-mapping@0.3.13': 830 + dependencies: 831 + '@jridgewell/sourcemap-codec': 1.5.5 832 + '@jridgewell/trace-mapping': 0.3.31 833 + 834 + '@jridgewell/remapping@2.3.5': 835 + dependencies: 836 + '@jridgewell/gen-mapping': 0.3.13 837 + '@jridgewell/trace-mapping': 0.3.31 838 + 839 + '@jridgewell/resolve-uri@3.1.2': {} 840 + 841 + '@jridgewell/sourcemap-codec@1.5.5': {} 842 + 843 + '@jridgewell/trace-mapping@0.3.31': 844 + dependencies: 845 + '@jridgewell/resolve-uri': 3.1.2 846 + '@jridgewell/sourcemap-codec': 1.5.5 847 + 848 + '@rollup/rollup-android-arm-eabi@4.59.0': 849 + optional: true 850 + 851 + '@rollup/rollup-android-arm64@4.59.0': 852 + optional: true 853 + 854 + '@rollup/rollup-darwin-arm64@4.59.0': 855 + optional: true 856 + 857 + '@rollup/rollup-darwin-x64@4.59.0': 858 + optional: true 859 + 860 + '@rollup/rollup-freebsd-arm64@4.59.0': 861 + optional: true 862 + 863 + '@rollup/rollup-freebsd-x64@4.59.0': 864 + optional: true 865 + 866 + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': 867 + optional: true 868 + 869 + '@rollup/rollup-linux-arm-musleabihf@4.59.0': 870 + optional: true 871 + 872 + '@rollup/rollup-linux-arm64-gnu@4.59.0': 873 + optional: true 874 + 875 + '@rollup/rollup-linux-arm64-musl@4.59.0': 876 + optional: true 877 + 878 + '@rollup/rollup-linux-loong64-gnu@4.59.0': 879 + optional: true 880 + 881 + '@rollup/rollup-linux-loong64-musl@4.59.0': 882 + optional: true 883 + 884 + '@rollup/rollup-linux-ppc64-gnu@4.59.0': 885 + optional: true 886 + 887 + '@rollup/rollup-linux-ppc64-musl@4.59.0': 888 + optional: true 889 + 890 + '@rollup/rollup-linux-riscv64-gnu@4.59.0': 891 + optional: true 892 + 893 + '@rollup/rollup-linux-riscv64-musl@4.59.0': 894 + optional: true 895 + 896 + '@rollup/rollup-linux-s390x-gnu@4.59.0': 897 + optional: true 898 + 899 + '@rollup/rollup-linux-x64-gnu@4.59.0': 900 + optional: true 901 + 902 + '@rollup/rollup-linux-x64-musl@4.59.0': 903 + optional: true 904 + 905 + '@rollup/rollup-openbsd-x64@4.59.0': 906 + optional: true 907 + 908 + '@rollup/rollup-openharmony-arm64@4.59.0': 909 + optional: true 910 + 911 + '@rollup/rollup-win32-arm64-msvc@4.59.0': 912 + optional: true 913 + 914 + '@rollup/rollup-win32-ia32-msvc@4.59.0': 915 + optional: true 916 + 917 + '@rollup/rollup-win32-x64-gnu@4.59.0': 918 + optional: true 919 + 920 + '@rollup/rollup-win32-x64-msvc@4.59.0': 921 + optional: true 922 + 923 + '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)': 924 + dependencies: 925 + acorn: 8.16.0 926 + 927 + '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.31.1))': 928 + dependencies: 929 + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.53.12)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.31.1)) 930 + obug: 2.1.1 931 + svelte: 5.53.12 932 + vite: 7.3.1(jiti@2.6.1)(lightningcss@1.31.1) 933 + 934 + '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.31.1))': 935 + dependencies: 936 + '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.31.1)) 937 + deepmerge: 4.3.1 938 + magic-string: 0.30.21 939 + obug: 2.1.1 940 + svelte: 5.53.12 941 + vite: 7.3.1(jiti@2.6.1)(lightningcss@1.31.1) 942 + vitefu: 1.1.2(vite@7.3.1(jiti@2.6.1)(lightningcss@1.31.1)) 943 + 944 + '@tailwindcss/node@4.2.1': 945 + dependencies: 946 + '@jridgewell/remapping': 2.3.5 947 + enhanced-resolve: 5.20.0 948 + jiti: 2.6.1 949 + lightningcss: 1.31.1 950 + magic-string: 0.30.21 951 + source-map-js: 1.2.1 952 + tailwindcss: 4.2.1 953 + 954 + '@tailwindcss/oxide-android-arm64@4.2.1': 955 + optional: true 956 + 957 + '@tailwindcss/oxide-darwin-arm64@4.2.1': 958 + optional: true 959 + 960 + '@tailwindcss/oxide-darwin-x64@4.2.1': 961 + optional: true 962 + 963 + '@tailwindcss/oxide-freebsd-x64@4.2.1': 964 + optional: true 965 + 966 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1': 967 + optional: true 968 + 969 + '@tailwindcss/oxide-linux-arm64-gnu@4.2.1': 970 + optional: true 971 + 972 + '@tailwindcss/oxide-linux-arm64-musl@4.2.1': 973 + optional: true 974 + 975 + '@tailwindcss/oxide-linux-x64-gnu@4.2.1': 976 + optional: true 977 + 978 + '@tailwindcss/oxide-linux-x64-musl@4.2.1': 979 + optional: true 980 + 981 + '@tailwindcss/oxide-wasm32-wasi@4.2.1': 982 + optional: true 983 + 984 + '@tailwindcss/oxide-win32-arm64-msvc@4.2.1': 985 + optional: true 986 + 987 + '@tailwindcss/oxide-win32-x64-msvc@4.2.1': 988 + optional: true 989 + 990 + '@tailwindcss/oxide@4.2.1': 991 + optionalDependencies: 992 + '@tailwindcss/oxide-android-arm64': 4.2.1 993 + '@tailwindcss/oxide-darwin-arm64': 4.2.1 994 + '@tailwindcss/oxide-darwin-x64': 4.2.1 995 + '@tailwindcss/oxide-freebsd-x64': 4.2.1 996 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.1 997 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.1 998 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.1 999 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.1 1000 + '@tailwindcss/oxide-linux-x64-musl': 4.2.1 1001 + '@tailwindcss/oxide-wasm32-wasi': 4.2.1 1002 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1 1003 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.1 1004 + 1005 + '@tailwindcss/vite@4.2.1(vite@7.3.1(jiti@2.6.1)(lightningcss@1.31.1))': 1006 + dependencies: 1007 + '@tailwindcss/node': 4.2.1 1008 + '@tailwindcss/oxide': 4.2.1 1009 + tailwindcss: 4.2.1 1010 + vite: 7.3.1(jiti@2.6.1)(lightningcss@1.31.1) 1011 + 1012 + '@types/estree@1.0.8': {} 1013 + 1014 + '@types/trusted-types@2.0.7': {} 1015 + 1016 + '@typescript-eslint/types@8.57.0': {} 1017 + 1018 + acorn@8.16.0: {} 1019 + 1020 + aria-query@5.3.1: {} 1021 + 1022 + axobject-query@4.1.0: {} 1023 + 1024 + chokidar@4.0.3: 1025 + dependencies: 1026 + readdirp: 4.1.2 1027 + 1028 + clsx@2.1.1: {} 1029 + 1030 + deepmerge@4.3.1: {} 1031 + 1032 + detect-libc@2.1.2: {} 1033 + 1034 + devalue@5.6.4: {} 1035 + 1036 + enhanced-resolve@5.20.0: 1037 + dependencies: 1038 + graceful-fs: 4.2.11 1039 + tapable: 2.3.0 1040 + 1041 + esbuild@0.27.4: 1042 + optionalDependencies: 1043 + '@esbuild/aix-ppc64': 0.27.4 1044 + '@esbuild/android-arm': 0.27.4 1045 + '@esbuild/android-arm64': 0.27.4 1046 + '@esbuild/android-x64': 0.27.4 1047 + '@esbuild/darwin-arm64': 0.27.4 1048 + '@esbuild/darwin-x64': 0.27.4 1049 + '@esbuild/freebsd-arm64': 0.27.4 1050 + '@esbuild/freebsd-x64': 0.27.4 1051 + '@esbuild/linux-arm': 0.27.4 1052 + '@esbuild/linux-arm64': 0.27.4 1053 + '@esbuild/linux-ia32': 0.27.4 1054 + '@esbuild/linux-loong64': 0.27.4 1055 + '@esbuild/linux-mips64el': 0.27.4 1056 + '@esbuild/linux-ppc64': 0.27.4 1057 + '@esbuild/linux-riscv64': 0.27.4 1058 + '@esbuild/linux-s390x': 0.27.4 1059 + '@esbuild/linux-x64': 0.27.4 1060 + '@esbuild/netbsd-arm64': 0.27.4 1061 + '@esbuild/netbsd-x64': 0.27.4 1062 + '@esbuild/openbsd-arm64': 0.27.4 1063 + '@esbuild/openbsd-x64': 0.27.4 1064 + '@esbuild/openharmony-arm64': 0.27.4 1065 + '@esbuild/sunos-x64': 0.27.4 1066 + '@esbuild/win32-arm64': 0.27.4 1067 + '@esbuild/win32-ia32': 0.27.4 1068 + '@esbuild/win32-x64': 0.27.4 1069 + 1070 + esm-env@1.2.2: {} 1071 + 1072 + esrap@2.2.4: 1073 + dependencies: 1074 + '@jridgewell/sourcemap-codec': 1.5.5 1075 + '@typescript-eslint/types': 8.57.0 1076 + 1077 + fdir@6.5.0(picomatch@4.0.3): 1078 + optionalDependencies: 1079 + picomatch: 4.0.3 1080 + 1081 + fsevents@2.3.3: 1082 + optional: true 1083 + 1084 + graceful-fs@4.2.11: {} 1085 + 1086 + is-reference@3.0.3: 1087 + dependencies: 1088 + '@types/estree': 1.0.8 1089 + 1090 + jiti@2.6.1: {} 1091 + 1092 + lightningcss-android-arm64@1.31.1: 1093 + optional: true 1094 + 1095 + lightningcss-darwin-arm64@1.31.1: 1096 + optional: true 1097 + 1098 + lightningcss-darwin-x64@1.31.1: 1099 + optional: true 1100 + 1101 + lightningcss-freebsd-x64@1.31.1: 1102 + optional: true 1103 + 1104 + lightningcss-linux-arm-gnueabihf@1.31.1: 1105 + optional: true 1106 + 1107 + lightningcss-linux-arm64-gnu@1.31.1: 1108 + optional: true 1109 + 1110 + lightningcss-linux-arm64-musl@1.31.1: 1111 + optional: true 1112 + 1113 + lightningcss-linux-x64-gnu@1.31.1: 1114 + optional: true 1115 + 1116 + lightningcss-linux-x64-musl@1.31.1: 1117 + optional: true 1118 + 1119 + lightningcss-win32-arm64-msvc@1.31.1: 1120 + optional: true 1121 + 1122 + lightningcss-win32-x64-msvc@1.31.1: 1123 + optional: true 1124 + 1125 + lightningcss@1.31.1: 1126 + dependencies: 1127 + detect-libc: 2.1.2 1128 + optionalDependencies: 1129 + lightningcss-android-arm64: 1.31.1 1130 + lightningcss-darwin-arm64: 1.31.1 1131 + lightningcss-darwin-x64: 1.31.1 1132 + lightningcss-freebsd-x64: 1.31.1 1133 + lightningcss-linux-arm-gnueabihf: 1.31.1 1134 + lightningcss-linux-arm64-gnu: 1.31.1 1135 + lightningcss-linux-arm64-musl: 1.31.1 1136 + lightningcss-linux-x64-gnu: 1.31.1 1137 + lightningcss-linux-x64-musl: 1.31.1 1138 + lightningcss-win32-arm64-msvc: 1.31.1 1139 + lightningcss-win32-x64-msvc: 1.31.1 1140 + 1141 + locate-character@3.0.0: {} 1142 + 1143 + magic-string@0.30.21: 1144 + dependencies: 1145 + '@jridgewell/sourcemap-codec': 1.5.5 1146 + 1147 + mri@1.2.0: {} 1148 + 1149 + nanoid@3.3.11: {} 1150 + 1151 + obug@2.1.1: {} 1152 + 1153 + picocolors@1.1.1: {} 1154 + 1155 + picomatch@4.0.3: {} 1156 + 1157 + postcss@8.5.8: 1158 + dependencies: 1159 + nanoid: 3.3.11 1160 + picocolors: 1.1.1 1161 + source-map-js: 1.2.1 1162 + 1163 + readdirp@4.1.2: {} 1164 + 1165 + rollup@4.59.0: 1166 + dependencies: 1167 + '@types/estree': 1.0.8 1168 + optionalDependencies: 1169 + '@rollup/rollup-android-arm-eabi': 4.59.0 1170 + '@rollup/rollup-android-arm64': 4.59.0 1171 + '@rollup/rollup-darwin-arm64': 4.59.0 1172 + '@rollup/rollup-darwin-x64': 4.59.0 1173 + '@rollup/rollup-freebsd-arm64': 4.59.0 1174 + '@rollup/rollup-freebsd-x64': 4.59.0 1175 + '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 1176 + '@rollup/rollup-linux-arm-musleabihf': 4.59.0 1177 + '@rollup/rollup-linux-arm64-gnu': 4.59.0 1178 + '@rollup/rollup-linux-arm64-musl': 4.59.0 1179 + '@rollup/rollup-linux-loong64-gnu': 4.59.0 1180 + '@rollup/rollup-linux-loong64-musl': 4.59.0 1181 + '@rollup/rollup-linux-ppc64-gnu': 4.59.0 1182 + '@rollup/rollup-linux-ppc64-musl': 4.59.0 1183 + '@rollup/rollup-linux-riscv64-gnu': 4.59.0 1184 + '@rollup/rollup-linux-riscv64-musl': 4.59.0 1185 + '@rollup/rollup-linux-s390x-gnu': 4.59.0 1186 + '@rollup/rollup-linux-x64-gnu': 4.59.0 1187 + '@rollup/rollup-linux-x64-musl': 4.59.0 1188 + '@rollup/rollup-openbsd-x64': 4.59.0 1189 + '@rollup/rollup-openharmony-arm64': 4.59.0 1190 + '@rollup/rollup-win32-arm64-msvc': 4.59.0 1191 + '@rollup/rollup-win32-ia32-msvc': 4.59.0 1192 + '@rollup/rollup-win32-x64-gnu': 4.59.0 1193 + '@rollup/rollup-win32-x64-msvc': 4.59.0 1194 + fsevents: 2.3.3 1195 + 1196 + sade@1.8.1: 1197 + dependencies: 1198 + mri: 1.2.0 1199 + 1200 + source-map-js@1.2.1: {} 1201 + 1202 + svelte-check@4.4.5(picomatch@4.0.3)(svelte@5.53.12)(typescript@5.9.3): 1203 + dependencies: 1204 + '@jridgewell/trace-mapping': 0.3.31 1205 + chokidar: 4.0.3 1206 + fdir: 6.5.0(picomatch@4.0.3) 1207 + picocolors: 1.1.1 1208 + sade: 1.8.1 1209 + svelte: 5.53.12 1210 + typescript: 5.9.3 1211 + transitivePeerDependencies: 1212 + - picomatch 1213 + 1214 + svelte@5.53.12: 1215 + dependencies: 1216 + '@jridgewell/remapping': 2.3.5 1217 + '@jridgewell/sourcemap-codec': 1.5.5 1218 + '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) 1219 + '@types/estree': 1.0.8 1220 + '@types/trusted-types': 2.0.7 1221 + acorn: 8.16.0 1222 + aria-query: 5.3.1 1223 + axobject-query: 4.1.0 1224 + clsx: 2.1.1 1225 + devalue: 5.6.4 1226 + esm-env: 1.2.2 1227 + esrap: 2.2.4 1228 + is-reference: 3.0.3 1229 + locate-character: 3.0.0 1230 + magic-string: 0.30.21 1231 + zimmerframe: 1.1.4 1232 + 1233 + tailwindcss@4.2.1: {} 1234 + 1235 + tapable@2.3.0: {} 1236 + 1237 + tinyglobby@0.2.15: 1238 + dependencies: 1239 + fdir: 6.5.0(picomatch@4.0.3) 1240 + picomatch: 4.0.3 1241 + 1242 + tslib@2.8.1: {} 1243 + 1244 + typescript@5.9.3: {} 1245 + 1246 + vite@7.3.1(jiti@2.6.1)(lightningcss@1.31.1): 1247 + dependencies: 1248 + esbuild: 0.27.4 1249 + fdir: 6.5.0(picomatch@4.0.3) 1250 + picomatch: 4.0.3 1251 + postcss: 8.5.8 1252 + rollup: 4.59.0 1253 + tinyglobby: 0.2.15 1254 + optionalDependencies: 1255 + fsevents: 2.3.3 1256 + jiti: 2.6.1 1257 + lightningcss: 1.31.1 1258 + 1259 + vitefu@1.1.2(vite@7.3.1(jiti@2.6.1)(lightningcss@1.31.1)): 1260 + optionalDependencies: 1261 + vite: 7.3.1(jiti@2.6.1)(lightningcss@1.31.1) 1262 + 1263 + zimmerframe@1.1.4: {}
+111 -5
frontend/src/App.svelte
··· 2 2 import "@fontsource-variable/jetbrains-mono"; 3 3 import "@fontsource-variable/geist"; 4 4 import "@fontsource-variable/lora"; 5 + import { onMount } from "svelte"; 6 + import { Login, Whoami, IsAuthenticated } from "../wailsjs/go/main/AuthService"; 7 + 8 + type AuthInfo = { handle: string; did: string }; 9 + 10 + let handle = $state(""); 11 + let isLoading = $state(false); 12 + let status = $state(""); 13 + let isLoggedIn = $state(false); 14 + let authInfo = $state<AuthInfo | null>(null); 15 + 16 + onMount(async () => { 17 + await checkAuthStatus(); 18 + }); 19 + 20 + async function checkAuthStatus() { 21 + try { 22 + isLoggedIn = await IsAuthenticated(); 23 + if (isLoggedIn) { 24 + const auth = await Whoami(false); 25 + if (auth) { 26 + authInfo = { handle: auth.handle, did: auth.did }; 27 + status = `Logged in as @${auth.handle}`; 28 + } 29 + } else { 30 + status = "Please log in to continue"; 31 + } 32 + } catch (err) { 33 + status = "Failed to check authentication status"; 34 + } 35 + } 36 + 37 + async function handleLogin() { 38 + if (!handle.trim()) { 39 + status = "Please enter your Bluesky handle"; 40 + return; 41 + } 42 + 43 + isLoading = true; 44 + status = "Opening browser for authentication..."; 45 + 46 + try { 47 + await Login(handle.trim()); 48 + status = "Login successful!"; 49 + await checkAuthStatus(); 50 + } catch (err) { 51 + status = `Login failed: ${err}`; 52 + } finally { 53 + isLoading = false; 54 + } 55 + } 56 + 57 + function handleKeydown(event: KeyboardEvent) { 58 + if (event.key === "Enter" && !isLoading) { 59 + handleLogin(); 60 + } 61 + } 5 62 </script> 6 63 7 - <main class="min-h-screen bg-black text-[#e5e5e5] flex items-center justify-center"> 8 - <div class="text-center"> 9 - <h1 class="font-serif text-4xl mb-4">Hello World</h1> 10 - <p class="font-mono text-[#737373]">bsky-browser-desktop</p> 11 - <p class="font-sans text-sm text-[#737373] mt-2">Built with Wails v3 + Tailwind v4</p> 64 + <main class="min-h-screen bg-black text-[#e5e5e5] flex items-center justify-center p-4"> 65 + <div class="w-full max-w-md"> 66 + {#if !isLoggedIn} 67 + <div class="text-center mb-8"> 68 + <h1 class="font-serif text-4xl mb-2">bsky-browser</h1> 69 + <p class="font-mono text-muted text-sm">Search your Bluesky bookmarks and likes</p> 70 + </div> 71 + 72 + <div class="bg-surface border border-outline rounded-lg p-6"> 73 + <div class="space-y-4"> 74 + <div> 75 + <label for="handle" class="block font-sans text-sm text-muted mb-2"> Bluesky Handle </label> 76 + <input 77 + id="handle" 78 + type="text" 79 + placeholder="username.bsky.social" 80 + bind:value={handle} 81 + onkeydown={handleKeydown} 82 + disabled={isLoading} 83 + class="w-full bg-black border border-outline rounded px-4 py-2 font-mono text-sm text-[#e5e5e5] placeholder-[#333] focus:outline-none focus:border-[#333] disabled:opacity-50" /> 84 + </div> 85 + 86 + <button 87 + onclick={handleLogin} 88 + disabled={isLoading || !handle.trim()} 89 + class="w-full bg-surface border border-outline hover:bg-outline text-[#e5e5e5] font-sans py-2 px-4 rounded transition-colors disabled:opacity-50 disabled:cursor-not-allowed"> 90 + {#if isLoading} 91 + <span class="animate-pulse">Authenticating...</span> 92 + {:else} 93 + Login with Bluesky 94 + {/if} 95 + </button> 96 + </div> 97 + 98 + {#if status} 99 + <div class="mt-4 p-3 bg-black border border-outline rounded"> 100 + <p class="font-mono text-xs text-muted">{status}</p> 101 + </div> 102 + {/if} 103 + </div> 104 + {:else} 105 + <div class="text-center"> 106 + <h1 class="font-serif text-3xl mb-4">Welcome!</h1> 107 + <div class="bg-surface border border-outline rounded-lg p-6"> 108 + <p class="font-sans text-[#e5e5e5] mb-2"> 109 + Logged in as <span class="font-mono text-muted">@{authInfo?.handle}</span> 110 + </p> 111 + <p class="font-mono text-xs text-[#333] truncate" title={authInfo?.did}> 112 + {authInfo?.did} 113 + </p> 114 + </div> 115 + <p class="font-sans text-sm text-muted mt-8">Search functionality coming soon...</p> 116 + </div> 117 + {/if} 12 118 </div> 13 119 </main>
+2 -1
frontend/src/index.css
··· 5 5 --font-sans: "Geist Variable", sans-serif; 6 6 --font-serif: "Lora Variable", serif; 7 7 --color-surface: #0a0a0a; 8 - --color-border: #1a1a1a; 8 + --color-outline: #1a1a1a; 9 + --color-muted: #737373; 9 10 } 10 11 11 12 html {
+2 -1
frontend/tsconfig.json
··· 16 16 "src/**/*.d.ts", 17 17 "src/**/*.ts", 18 18 "src/**/*.js", 19 - "src/**/*.svelte" 19 + "src/**/*.svelte", 20 + "wailsjs/**/*.ts" 20 21 ], 21 22 "references": [ 22 23 {
+11
frontend/wailsjs/go/main/AuthService.d.ts
··· 1 + // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL 2 + // This file is automatically generated. DO NOT EDIT 3 + import {main} from '../models'; 4 + 5 + export function IsAuthenticated():Promise<boolean>; 6 + 7 + export function Login(arg1:string):Promise<void>; 8 + 9 + export function RefreshSession():Promise<void>; 10 + 11 + export function Whoami(arg1:boolean):Promise<main.Auth>;
+19
frontend/wailsjs/go/main/AuthService.js
··· 1 + // @ts-check 2 + // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL 3 + // This file is automatically generated. DO NOT EDIT 4 + 5 + export function IsAuthenticated() { 6 + return window['go']['main']['AuthService']['IsAuthenticated'](); 7 + } 8 + 9 + export function Login(arg1) { 10 + return window['go']['main']['AuthService']['Login'](arg1); 11 + } 12 + 13 + export function RefreshSession() { 14 + return window['go']['main']['AuthService']['RefreshSession'](); 15 + } 16 + 17 + export function Whoami(arg1) { 18 + return window['go']['main']['AuthService']['Whoami'](arg1); 19 + }
+60
frontend/wailsjs/go/models.ts
··· 1 + export namespace main { 2 + 3 + export class Auth { 4 + did: string; 5 + handle: string; 6 + access_jwt: string; 7 + refresh_jwt: string; 8 + pds_url: string; 9 + session_id: string; 10 + auth_server_url: string; 11 + auth_server_token_endpoint: string; 12 + auth_server_revocation_endpoint: string; 13 + dpop_auth_nonce: string; 14 + dpop_host_nonce: string; 15 + dpop_private_key: string; 16 + // Go type: time 17 + updated_at: any; 18 + 19 + static createFrom(source: any = {}) { 20 + return new Auth(source); 21 + } 22 + 23 + constructor(source: any = {}) { 24 + if ('string' === typeof source) source = JSON.parse(source); 25 + this.did = source["did"]; 26 + this.handle = source["handle"]; 27 + this.access_jwt = source["access_jwt"]; 28 + this.refresh_jwt = source["refresh_jwt"]; 29 + this.pds_url = source["pds_url"]; 30 + this.session_id = source["session_id"]; 31 + this.auth_server_url = source["auth_server_url"]; 32 + this.auth_server_token_endpoint = source["auth_server_token_endpoint"]; 33 + this.auth_server_revocation_endpoint = source["auth_server_revocation_endpoint"]; 34 + this.dpop_auth_nonce = source["dpop_auth_nonce"]; 35 + this.dpop_host_nonce = source["dpop_host_nonce"]; 36 + this.dpop_private_key = source["dpop_private_key"]; 37 + this.updated_at = this.convertValues(source["updated_at"], null); 38 + } 39 + 40 + convertValues(a: any, classs: any, asMap: boolean = false): any { 41 + if (!a) { 42 + return a; 43 + } 44 + if (a.slice && a.map) { 45 + return (a as any[]).map(elem => this.convertValues(elem, classs)); 46 + } else if ("object" === typeof a) { 47 + if (asMap) { 48 + for (const key of Object.keys(a)) { 49 + a[key] = new classs(a[key]); 50 + } 51 + return a; 52 + } 53 + return new classs(a); 54 + } 55 + return a; 56 + } 57 + } 58 + 59 + } 60 +
+22 -5
go.mod
··· 1 1 module bsky-browser-gui 2 2 3 - go 1.24.0 3 + go 1.25 4 4 5 - toolchain go1.24.11 6 - 7 - require github.com/wailsapp/wails/v2 v2.11.0 5 + require ( 6 + github.com/bluesky-social/indigo v0.0.0-20260312173440-9cf6b7ee3c3a 7 + github.com/wailsapp/wails/v2 v2.11.0 8 + modernc.org/sqlite v1.46.1 9 + ) 8 10 9 11 require ( 12 + github.com/beorn7/perks v1.0.1 // indirect 10 13 github.com/bep/debounce v1.2.1 // indirect 14 + github.com/cespare/xxhash/v2 v2.2.0 // indirect 11 15 github.com/dustin/go-humanize v1.0.1 // indirect 16 + github.com/earthboundkid/versioninfo/v2 v2.24.1 // indirect 12 17 github.com/go-ole/go-ole v1.3.0 // indirect 13 18 github.com/godbus/dbus/v5 v5.1.0 // indirect 19 + github.com/golang-jwt/jwt/v5 v5.2.2 // indirect 20 + github.com/google/go-querystring v1.1.0 // indirect 14 21 github.com/google/uuid v1.6.0 // indirect 15 22 github.com/gorilla/websocket v1.5.3 // indirect 23 + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect 16 24 github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect 17 25 github.com/labstack/echo/v4 v4.13.3 // indirect 18 26 github.com/labstack/gommon v0.4.2 // indirect ··· 22 30 github.com/leaanthony/u v1.1.1 // indirect 23 31 github.com/mattn/go-colorable v0.1.13 // indirect 24 32 github.com/mattn/go-isatty v0.0.20 // indirect 33 + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect 34 + github.com/mr-tron/base58 v1.2.0 // indirect 25 35 github.com/ncruces/go-strftime v1.0.0 // indirect 26 36 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect 27 37 github.com/pkg/errors v0.9.1 // indirect 38 + github.com/prometheus/client_golang v1.17.0 // indirect 39 + github.com/prometheus/client_model v0.5.0 // indirect 40 + github.com/prometheus/common v0.45.0 // indirect 41 + github.com/prometheus/procfs v0.12.0 // indirect 28 42 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect 29 43 github.com/rivo/uniseg v0.4.7 // indirect 30 44 github.com/samber/lo v1.49.1 // indirect ··· 33 47 github.com/valyala/fasttemplate v1.2.2 // indirect 34 48 github.com/wailsapp/go-webview2 v1.0.22 // indirect 35 49 github.com/wailsapp/mimetype v1.4.1 // indirect 50 + gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b // indirect 51 + gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 // indirect 36 52 golang.org/x/crypto v0.33.0 // indirect 37 53 golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 // indirect 38 54 golang.org/x/net v0.35.0 // indirect 39 55 golang.org/x/sys v0.37.0 // indirect 40 56 golang.org/x/text v0.22.0 // indirect 57 + golang.org/x/time v0.8.0 // indirect 58 + google.golang.org/protobuf v1.33.0 // indirect 41 59 modernc.org/libc v1.67.6 // indirect 42 60 modernc.org/mathutil v1.7.1 // indirect 43 61 modernc.org/memory v1.11.0 // indirect 44 - modernc.org/sqlite v1.46.1 // indirect 45 62 ) 46 63 47 64 // replace github.com/wailsapp/wails/v2 v2.11.0 => /Users/owais/go/pkg/mod
+90 -2
go.sum
··· 1 + github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= 2 + github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= 1 3 github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= 2 4 github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= 5 + github.com/bluesky-social/indigo v0.0.0-20260312173440-9cf6b7ee3c3a h1:BPzpJ0tPHqFeDJyEZWyyFrkZK64EDT3IJFGDRAx9a8Q= 6 + github.com/bluesky-social/indigo v0.0.0-20260312173440-9cf6b7ee3c3a/go.mod h1:VG/LeqLGNI3Ew7lsYixajnZGFfWPv144qbUddh+Oyag= 7 + github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= 8 + github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 3 9 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 4 10 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 5 11 github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= 6 12 github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= 13 + github.com/earthboundkid/versioninfo/v2 v2.24.1 h1:SJTMHaoUx3GzjjnUO1QzP3ZXK6Ee/nbWyCm58eY3oUg= 14 + github.com/earthboundkid/versioninfo/v2 v2.24.1/go.mod h1:VcWEooDEuyUJnMfbdTh0uFN4cfEIg+kHMuWB2CDCLjw= 7 15 github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= 8 16 github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= 9 17 github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= 10 18 github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= 19 + github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= 20 + github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= 21 + github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 22 + github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 23 + github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 24 + github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= 25 + github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= 26 + github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= 27 + github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= 11 28 github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 12 29 github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 13 30 github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= 14 31 github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= 32 + github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= 33 + github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 34 + github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= 35 + github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= 15 36 github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck= 16 37 github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= 38 + github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= 39 + github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= 17 40 github.com/labstack/echo/v4 v4.13.3 h1:pwhpCPrTl5qry5HRdM5FwdXnhXSLSY+WE+YQSeCaafY= 18 41 github.com/labstack/echo/v4 v4.13.3/go.mod h1:o90YNEeQWjDozo584l7AwhJMHN0bOC4tAfg+Xox9q5g= 19 42 github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0= ··· 36 59 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= 37 60 github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= 38 61 github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= 62 + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= 63 + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= 64 + github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= 65 + github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= 66 + github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= 67 + github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= 68 + github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= 69 + github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= 70 + github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= 71 + github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= 72 + github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= 73 + github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= 74 + github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= 75 + github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= 76 + github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= 77 + github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= 39 78 github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= 40 79 github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= 41 80 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= ··· 44 83 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 45 84 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 46 85 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 86 + github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= 87 + github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= 88 + github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= 89 + github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= 90 + github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= 91 + github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= 92 + github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= 93 + github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= 47 94 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= 48 95 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= 49 96 github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= ··· 51 98 github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= 52 99 github.com/samber/lo v1.49.1 h1:4BIFyVfuQSEpluc7Fua+j1NolZHiEHEpaSEKdsH0tew= 53 100 github.com/samber/lo v1.49.1/go.mod h1:dO6KHFzUKXgP8LDhU0oI8d2hekjXnGOu0DB8Jecxd6o= 101 + github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= 102 + github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= 54 103 github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= 55 104 github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 56 105 github.com/tkrajina/go-reflector v0.5.8 h1:yPADHrwmUbMq4RGEyaOUpz2H90sRsETNVpjzo3DLVQQ= ··· 65 114 github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= 66 115 github.com/wailsapp/wails/v2 v2.11.0 h1:seLacV8pqupq32IjS4Y7V8ucab0WZwtK6VvUVxSBtqQ= 67 116 github.com/wailsapp/wails/v2 v2.11.0/go.mod h1:jrf0ZaM6+GBc1wRmXsM8cIvzlg0karYin3erahI4+0k= 117 + github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e h1:28X54ciEwwUxyHn9yrZfl5ojgF4CBNLWX7LR0rvBkf4= 118 + github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e/go.mod h1:pM99HXyEbSQHcosHc0iW7YFmwnscr+t9Te4ibko05so= 119 + gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b h1:CzigHMRySiX3drau9C6Q5CAbNIApmLdat5jPMqChvDA= 120 + gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b/go.mod h1:/y/V339mxv2sZmYYR64O07VuCpdNZqCTwO8ZcouTMI8= 121 + gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 h1:qwDnMxjkyLmAFgcfgTnfJrmYKWhHnci3GjDqcZp1M3Q= 122 + gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02/go.mod h1:JTnUj0mpYiAsuZLmKjTx/ex3AtMowcCgnE7YNyCEP0I= 68 123 golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= 69 124 golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= 70 125 golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 h1:mgKeJMpvi0yx/sU5GsxQ7p6s2wtOnGAHZWCHUM4KGzY= 71 126 golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70= 127 + golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= 128 + golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= 72 129 golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 73 130 golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= 74 131 golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= 132 + golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= 133 + golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= 75 134 golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 76 135 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 77 136 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 78 137 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 79 138 golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 80 139 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 81 - golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= 82 - golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 83 140 golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= 84 141 golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= 85 142 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 86 143 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 87 144 golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= 88 145 golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= 146 + golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= 147 + golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= 89 148 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 149 + golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= 150 + golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= 151 + golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 152 + golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= 153 + golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= 154 + google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= 155 + google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= 90 156 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 91 157 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 158 + lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI= 159 + lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= 160 + modernc.org/cc/v4 v4.27.1 h1:9W30zRlYrefrDV2JE2O8VDtJ1yPGownxciz5rrbQZis= 161 + modernc.org/cc/v4 v4.27.1/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= 162 + modernc.org/ccgo/v4 v4.30.1 h1:4r4U1J6Fhj98NKfSjnPUN7Ze2c6MnAdL0hWw6+LrJpc= 163 + modernc.org/ccgo/v4 v4.30.1/go.mod h1:bIOeI1JL54Utlxn+LwrFyjCx2n2RDiYEaJVSrgdrRfM= 164 + modernc.org/fileutil v1.3.40 h1:ZGMswMNc9JOCrcrakF1HrvmergNLAmxOPjizirpfqBA= 165 + modernc.org/fileutil v1.3.40/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= 166 + modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= 167 + modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= 168 + modernc.org/gc/v3 v3.1.1 h1:k8T3gkXWY9sEiytKhcgyiZ2L0DTyCQ/nvX+LoCljoRE= 169 + modernc.org/gc/v3 v3.1.1/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY= 170 + modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= 171 + modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= 92 172 modernc.org/libc v1.67.6 h1:eVOQvpModVLKOdT+LvBPjdQqfrZq+pC39BygcT+E7OI= 93 173 modernc.org/libc v1.67.6/go.mod h1:JAhxUVlolfYDErnwiqaLvUqc8nfb2r6S6slAgZOnaiE= 94 174 modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= 95 175 modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= 96 176 modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= 97 177 modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= 178 + modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= 179 + modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= 180 + modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= 181 + modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= 98 182 modernc.org/sqlite v1.46.1 h1:eFJ2ShBLIEnUWlLy12raN0Z1plqmFX9Qe3rjQTKt6sU= 99 183 modernc.org/sqlite v1.46.1/go.mod h1:CzbrU2lSB1DKUusvwGz7rqEKIq+NUd8GWuBBZDs9/nA= 184 + modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= 185 + modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= 186 + modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= 187 + modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
+4 -3
main.go
··· 6 6 "github.com/wailsapp/wails/v2" 7 7 "github.com/wailsapp/wails/v2/pkg/options" 8 8 "github.com/wailsapp/wails/v2/pkg/options/assetserver" 9 + "github.com/wailsapp/wails/v2/pkg/runtime" 9 10 ) 10 11 11 12 //go:embed all:frontend/dist ··· 18 19 Width: 1024, 19 20 Height: 768, 20 21 AssetServer: &assetserver.Options{Assets: assets}, 21 - BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, 22 + BackgroundColour: &options.RGBA{R: 0, G: 0, B: 0, A: 1}, 22 23 OnStartup: app.startup, 23 24 OnShutdown: app.shutdown, 24 - Bind: []any{app}, 25 + Bind: []any{app, app.authService}, 25 26 }) 26 27 27 28 if err != nil { 28 - println("Error:", err.Error()) 29 + runtime.LogErrorf(app.ctx, "Application error: %v", err) 29 30 } 30 31 }