A website inspired by Last.fm that will keep track of your listening statistics
lastfm music statistics
0
fork

Configure Feed

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

Update code, so instead of using inertia and a frontend framework, it will use golangs html templates and htmx (for now).

oscar345 4f053f86 c1ea0343

+2707 -1597
+2
.gitignore
··· 6 6 **/private/database 7 7 **/bin 8 8 **/node_modules 9 + **/.zed 10 + **/private/assets
+1 -1
.tool-versions
··· 1 - golang 1.25.4 1 + golang 1.24.3
+24
cmd/template/main.go
··· 1 + package main 2 + 3 + import ( 4 + "fmt" 5 + "html/template" 6 + "os" 7 + 8 + "github.com/oscar345/keeptrack/resources" 9 + ) 10 + 11 + func main() { 12 + templates, err := template.ParseFS(resources.TemplatesFS, "views/*.html", "views/**/*.html") 13 + 14 + if err != nil { 15 + panic(err) 16 + } 17 + 18 + for _, t := range templates.Templates() { 19 + fmt.Println(t.Name()) 20 + } 21 + 22 + w := os.Stdout 23 + fmt.Println(templates.ExecuteTemplate(w, "index.html", nil)) 24 + }
+1 -1
go.mod
··· 1 1 module github.com/oscar345/keeptrack 2 2 3 - go 1.25.4 3 + go 1.24.5 4 4 5 5 require ( 6 6 github.com/duckdb/duckdb-go/v2 v2.5.4
+10 -9
internal/server/server.go
··· 10 10 "github.com/oscar345/keeptrack/internal/config" 11 11 "github.com/oscar345/keeptrack/internal/image" 12 12 "github.com/oscar345/keeptrack/internal/repo/db" 13 + "github.com/oscar345/keeptrack/internal/services" 13 14 "github.com/oscar345/keeptrack/internal/web/router" 14 - "github.com/oscar345/keeptrack/pkg/storage" 15 + storagesvc "github.com/oscar345/keeptrack/pkg/storage" 15 16 "github.com/oscar345/keeptrack/pkg/utilities" 16 17 ) 17 18 ··· 41 42 }) 42 43 defer statisticsDB.Close() 43 44 45 + artistRepo := db.NewArtistRepoDB(musicbrainzDB) 46 + artistScrobbleRepo := db.NewArtistScrobbleRepoDB(statisticsDB) 47 + artistImageFetcher := image.NewArtistImageFetcherFanArtTV(s.config.Services.FanartTV.APIKey) 48 + storage := storagesvc.NewDiskStorage("/public", s.config.Storage.Disk.Path) 49 + 50 + artistService := services.NewArtistService(artistRepo, artistScrobbleRepo, artistImageFetcher, storage) 51 + 44 52 router := router. 45 - New( 46 - db.NewArtistRepoDB(musicbrainzDB), 47 - db.NewArtistScrobbleRepoDB(statisticsDB), 48 - image.NewArtistImageFetcherFanArtTV(s.config.Services.FanartTV.APIKey), 49 - db.NewRecordingRepoDB(musicbrainzDB), 50 - storage.NewDiskStorage("/public", s.config.Storage.Disk.Path), 51 - s.config, 52 - ). 53 + New(artistService, s.config). 53 54 Router() 54 55 55 56 server := http.Server{
+53
internal/web/pages/pages.go
··· 1 + package pages 2 + 3 + import ( 4 + "html/template" 5 + "io/fs" 6 + "path/filepath" 7 + 8 + "github.com/oscar345/keeptrack/resources" 9 + ) 10 + 11 + var ( 12 + Index = parse("index.html") 13 + About = parse("about.html") 14 + LibraryIndex = parse("library/index.html") 15 + ) 16 + 17 + type ParseOptions struct { 18 + layout string 19 + } 20 + 21 + type ParseOption func(*ParseOptions) 22 + 23 + func WithLayout(layout string) ParseOption { 24 + return func(opts *ParseOptions) { 25 + opts.layout = layout 26 + } 27 + } 28 + 29 + func parse(name string, opts ...ParseOption) *template.Template { 30 + options := ParseOptions{ 31 + layout: "layouts/base.html", 32 + } 33 + 34 + for _, opt := range opts { 35 + opt(&options) 36 + } 37 + 38 + fs, _ := fs.Sub(resources.TemplatesFS, "views") 39 + return template.Must(template.New(filepath.Base(options.layout)).Funcs(funcs).ParseFS(fs, options.layout, name, "partials/*.html")) 40 + } 41 + 42 + var funcs = template.FuncMap{ 43 + "dict": func(values ...any) map[string]any { 44 + m := make(map[string]any) 45 + for i := 0; i < len(values); i += 2 { 46 + m[values[i].(string)] = values[i+1] 47 + } 48 + return m 49 + }, 50 + "slice": func(items ...any) []any { 51 + return items 52 + }, 53 + }
+32 -12
internal/web/router/router.go
··· 1 1 package router 2 2 3 3 import ( 4 + "fmt" 5 + "net/http" 6 + 4 7 "github.com/ggicci/httpin" 5 8 "github.com/go-chi/chi/v5" 6 9 chimiddleware "github.com/go-chi/chi/v5/middleware" 7 10 "github.com/gorilla/csrf" 8 11 "github.com/oscar345/keeptrack/internal/config" 9 - "github.com/oscar345/keeptrack/internal/image" 10 - "github.com/oscar345/keeptrack/internal/repo" 11 12 "github.com/oscar345/keeptrack/internal/services" 12 13 "github.com/oscar345/keeptrack/internal/web/handlers" 14 + "github.com/oscar345/keeptrack/internal/web/pages" 13 15 "github.com/oscar345/keeptrack/internal/web/requests" 14 - storagesvc "github.com/oscar345/keeptrack/pkg/storage" 16 + "github.com/oscar345/keeptrack/private" 15 17 ) 16 18 17 19 type Server struct { ··· 21 23 } 22 24 23 25 func New( 24 - artistRepo repo.ArtistRepo, 25 - artistScrobbleRepo repo.ArtistScrobbleRepo, 26 - artistImageFetcher image.ArtistImageFetcher, 27 - recordingRepo repo.RecordingRepo, 28 - storage storagesvc.Storage, 26 + artistService services.ArtistService, 29 27 config *config.Config, 30 28 ) *Server { 31 29 return &Server{ 32 - artistService: services.NewArtistService( 33 - artistRepo, artistScrobbleRepo, artistImageFetcher, storage, 34 - ), 35 - config: config, 30 + artistService: artistService, 31 + config: config, 36 32 } 37 33 } 38 34 35 + func assetsFileSystemHandler(cfg *config.Config) http.Handler { 36 + if cfg.Environment == config.Development { 37 + return http.StripPrefix("/assets", http.FileServer(http.Dir("private/assets"))) 38 + } 39 + return http.FileServer(http.FS(private.AssetsFS)) 40 + } 41 + 39 42 func (s *Server) Router() *chi.Mux { 40 43 r := chi.NewRouter() 41 44 ··· 46 49 csrf.Protect([]byte(s.config.Server.SecretKey)), 47 50 ) 48 51 52 + r.Handle("/assets*", assetsFileSystemHandler(s.config)) 53 + r.Handle("/public*", http.StripPrefix("/public", http.FileServer(http.Dir("public")))) 54 + 49 55 r.Group(s.index()) 50 56 51 57 return r ··· 55 61 handler := handlers.NewIndexHandler(s.artistService) 56 62 57 63 return func(r chi.Router) { 64 + r.Get("/", func(w http.ResponseWriter, r *http.Request) { 65 + fmt.Println("err from here", pages.Index.Execute(w, map[string]any{ 66 + "title": "Index from go", 67 + })) 68 + }) 69 + 70 + r.Get("/about", func(w http.ResponseWriter, r *http.Request) { 71 + pages.About.Execute(w, nil) 72 + }) 73 + 74 + r.Get("/library", func(w http.ResponseWriter, r *http.Request) { 75 + pages.LibraryIndex.Execute(w, map[string]any{}) 76 + }) 77 + 58 78 r.With(httpin.NewInput(requests.Count{})).Get("/{id}", handler.Index) 59 79 } 60 80 }
-30
pkg/inertia/inertia.go
··· 1 - package inertia 2 - 3 - import ( 4 - "html/template" 5 - ) 6 - 7 - type Inertia struct { 8 - Version string 9 - Template *template.Template 10 - } 11 - 12 - func New(tmpl *template.Template, options ...NewInertiaOption) *Inertia { 13 - i := &Inertia{ 14 - Template: tmpl, 15 - } 16 - 17 - for _, option := range options { 18 - option(i) 19 - } 20 - 21 - return i 22 - } 23 - 24 - type NewInertiaOption func(*Inertia) 25 - 26 - func WithVersion(version string) NewInertiaOption { 27 - return func(i *Inertia) { 28 - i.Version = version 29 - } 30 - }
-9
pkg/inertia/page.go
··· 1 - package inertia 2 - 3 - type Page struct { 4 - Component string `json:"component"` 5 - Props map[string]any `json:"props"` 6 - URL string `json:"url"` 7 - Version string `json:"version"` 8 - DeferredProps map[string][]string `json:"deferredProps"` 9 - }
-104
pkg/inertia/prop.go
··· 1 - package inertia 2 - 3 - import ( 4 - "context" 5 - "net/http" 6 - "slices" 7 - ) 8 - 9 - type Props map[string]Prop 10 - 11 - type Prop struct { 12 - Value func() (any, error) 13 - Lazy bool 14 - Optional bool 15 - Always bool 16 - Deferred bool 17 - DeferredKey string 18 - Default bool 19 - isError bool 20 - } 21 - 22 - func (p *Prop) ShouldDefer(r *http.Request) bool { 23 - return true 24 - } 25 - 26 - func (p *Prop) IsReturned(r *http.Request, key string, only []string, except []string) bool { 27 - isFirstLoad := !isPartialRequest(r) 28 - 29 - if isFirstLoad && p.Deferred { 30 - return false 31 - } 32 - 33 - if slices.Contains(except, key) { 34 - return false 35 - } 36 - 37 - if slices.Contains(only, key) { 38 - return true 39 - } 40 - 41 - if p.Always || p.Default { 42 - return true 43 - } 44 - 45 - if isFirstLoad && p.Lazy { 46 - return true 47 - } 48 - 49 - return false 50 - } 51 - 52 - const PropsCtxKey = "INERTIA_KEY" 53 - 54 - type PropOption func(*Prop) 55 - 56 - // The value is always evaluated during a request, but can be left out of the response when 57 - // the request is a partial request. In other Inertia adapters this would be the same as just 58 - // passing the value. 59 - func Default(value any, opts ...PropOption) Prop { 60 - return Prop{Value: func() (any, error) { return value, nil }, Default: true} 61 - } 62 - 63 - // The value is evaluated and returned for the first request to a page. For all partial request 64 - // to that same page, the value is not evaluated and returned unless the property is specified 65 - // in the `X-Inertia-Partial-Data` header. In other Inertia adapters this would be the same as 66 - // passing a closure. 67 - func Lazy(valuefn func() (any, error), opts ...PropOption) Prop { 68 - return Prop{Value: valuefn, Lazy: true} 69 - } 70 - 71 - // The value is only evaluated during a request when the request is a partial request. The value 72 - // is never returned during the first request from a page. 73 - func Optional(valuefn func() (any, error), opts ...PropOption) Prop { 74 - return Prop{Value: valuefn, Optional: true} 75 - } 76 - 77 - // The value is always returned during a partial request, and the first request from a page. 78 - func Always(value any) Prop { 79 - return Prop{Value: func() (any, error) { return value, nil }, Always: true} 80 - } 81 - 82 - func WithDeferredKey(key string) PropOption { 83 - return func(p *Prop) { 84 - p.DeferredKey = key 85 - } 86 - } 87 - 88 - // Besides setting the props in the handler when rendering the page, you can also set props in the 89 - // middleware. This is useful when you want to set props that are available to all pages. One can 90 - // use the SetProp function to set props. The value will be stored in the request context and will 91 - // be retrieved when rendering the page. 92 - func SetProp(r *http.Request, key string, value Prop) { 93 - props, ok := r.Context().Value(PropsCtxKey).(Props) 94 - 95 - if !ok { 96 - props = make(Props) 97 - } 98 - 99 - props[key] = value 100 - 101 - ctx := context.WithValue(r.Context(), PropsCtxKey, props) 102 - 103 - *r = *r.WithContext(ctx) 104 - }
-33
pkg/inertia/request.go
··· 1 - package inertia 2 - 3 - import ( 4 - "net/http" 5 - "strings" 6 - ) 7 - 8 - type InertiaHeaderKey string 9 - 10 - const ( 11 - InertiaPartialDataHeader InertiaHeaderKey = "X-Inertia-Partial-Data" 12 - InertiaPartialComponentHeader InertiaHeaderKey = "X-Inertia-Partial-Component" 13 - InertiaPartialExceptHeader InertiaHeaderKey = "X-Inertia-Partial-Except" 14 - InertiaVersionHeader InertiaHeaderKey = "X-Inertia-Version" 15 - InertiaLocationHeader InertiaHeaderKey = "X-Inertia-Location" 16 - InertiaHeader InertiaHeaderKey = "X-Inertia" 17 - ) 18 - 19 - func isInertiaRequest(r *http.Request) bool { 20 - return r.Header.Get(string(InertiaHeader)) == "true" 21 - } 22 - 23 - func getPartialOnlyProps(r *http.Request) []string { 24 - return strings.Split(r.Header.Get(string(InertiaPartialDataHeader)), ",") 25 - } 26 - 27 - func getPartialExceptProps(r *http.Request) []string { 28 - return strings.Split(r.Header.Get(string(InertiaPartialExceptHeader)), ",") 29 - } 30 - 31 - func isPartialRequest(r *http.Request) bool { 32 - return r.Header.Get(string(InertiaPartialComponentHeader)) != "" 33 - }
-95
pkg/inertia/response.go
··· 1 - package inertia 2 - 3 - import ( 4 - "encoding/json" 5 - "maps" 6 - "net/http" 7 - ) 8 - 9 - func (in *Inertia) Render(w http.ResponseWriter, r *http.Request, view string, props Props) { 10 - var ( 11 - properties = make(map[string]any) 12 - deferred = make(map[string][]string) 13 - errors = make(map[string][]string) 14 - ) 15 - 16 - only := getPartialOnlyProps(r) 17 - except := getPartialExceptProps(r) 18 - 19 - if contextProps, ok := r.Context().Value(PropsCtxKey).(Props); contextProps != nil && ok { 20 - maps.Copy(contextProps, props) 21 - props = contextProps 22 - } 23 - 24 - for key, prop := range props { 25 - if !prop.IsReturned(r, key, only, except) { 26 - if prop.ShouldDefer(r) { 27 - deferredKey := "default" 28 - if prop.DeferredKey != "" { 29 - deferredKey = prop.DeferredKey 30 - } 31 - deferred[deferredKey] = append(deferred[deferredKey], key) 32 - } 33 - continue 34 - } 35 - 36 - value, err := prop.Value() 37 - if err != nil { 38 - errors[key] = append(errors[key], err.Error()) 39 - continue 40 - } 41 - properties[key] = value 42 - } 43 - 44 - properties["errors"] = errors 45 - 46 - page := Page{ 47 - Component: view, 48 - Props: properties, 49 - URL: r.URL.Path, 50 - Version: in.Version, 51 - DeferredProps: deferred, 52 - } 53 - 54 - if isInertiaRequest(r) { 55 - renderJSON(w, page) 56 - } 57 - 58 - renderHTML(in, w, page) 59 - } 60 - 61 - func renderHTML(in *Inertia, w http.ResponseWriter, page Page) error { 62 - data, err := json.Marshal(page) 63 - 64 - if err != nil { 65 - return err 66 - } 67 - 68 - headers := map[string]string{ 69 - "Vary": "Accept", 70 - } 71 - 72 - for key, value := range headers { 73 - w.Header().Set(key, value) 74 - } 75 - 76 - w.WriteHeader(http.StatusOK) 77 - 78 - return in.Template.Execute(w, map[string]any{"Data": string(data)}) 79 - } 80 - 81 - func renderJSON(w http.ResponseWriter, page Page) error { 82 - headers := map[string]string{ 83 - string(InertiaHeader): "true", 84 - "Vary": "Accept", 85 - "Content-Type": "application/json", 86 - } 87 - 88 - for key, value := range headers { 89 - w.Header().Set(key, value) 90 - } 91 - 92 - w.WriteHeader(http.StatusOK) 93 - 94 - return json.NewEncoder(w).Encode(page) 95 - }
+8 -8
pkg/pagination/pagination.go
··· 19 19 Size int 20 20 } 21 21 22 - func (f Filter) page() int { 23 - if f.Page <= 0 { 24 - return 1 25 - } 26 - 27 - return f.Page 28 - } 29 - 30 22 func (f Filter) Offset() int { 31 23 return (f.page() - 1) * f.size() 32 24 } ··· 46 38 47 39 return f.Size 48 40 } 41 + 42 + func (f Filter) page() int { 43 + if f.Page <= 0 { 44 + return 1 45 + } 46 + 47 + return f.Page 48 + }
+6
private/embed.go
··· 1 + package private 2 + 3 + import "embed" 4 + 5 + //go:embed assets/* 6 + var AssetsFS embed.FS
+100
resources/css/components/button.css
··· 1 + .button { 2 + font-size: var(--text-sm); 3 + font-weight: var(--font-weight-medium); 4 + display: inline-flex; 5 + align-items: center; 6 + justify-content: center; 7 + text-align: center; 8 + } 9 + 10 + .button.variant-default { 11 + gap: var(--spacing-1); 12 + line-height: var(--text-sm--line-height); 13 + height: var(--spacing-9); 14 + 15 + padding-inline: var(--padding-inline); 16 + border-radius: var(--border-radius); 17 + 18 + background-color: var(--bg-color); 19 + color: var(--text-color); 20 + 21 + &:hover:not(:where(:disabled, .state-disabled)) { 22 + background-color: color-mix(in srgb, var(--bg-color), var(--mixin-bg)); 23 + } 24 + 25 + &:active { 26 + color: color-mix(in srgb, var(--text-color), var(--mixin-text)); 27 + } 28 + 29 + &:disabled, 30 + &.state-disabled { 31 + pointer-events: none; 32 + color: color-mix( 33 + in srgb, 34 + var(--text-color), 35 + var(--mixin-text-disabled) 36 + ); 37 + background-color: color-mix( 38 + in srgb, 39 + var(--bg-color), 40 + var(--mixin-bg-disabled) 41 + ); 42 + 43 + &:hover { 44 + cursor: not-allowed; 45 + } 46 + } 47 + 48 + &.with-icon > .icon { 49 + width: var(--spacing-5); 50 + height: var(--spacing-5); 51 + } 52 + } 53 + 54 + .button.variant-text { 55 + gap: var(--spacing-0_5); 56 + line-height: var(--leading-tight); 57 + height: var(--spacing-4); 58 + } 59 + 60 + .button.variant-text > .icon { 61 + margin-bottom: -2px; 62 + } 63 + 64 + .button.shape-square { 65 + --border-radius: var(--radius-md); 66 + --padding-inline: var(--spacing-3); 67 + } 68 + 69 + .button.shape-rounded { 70 + --border-radius: 9999px; 71 + --padding-inline: var(--spacing-3_5); 72 + } 73 + 74 + .button.shape-circle { 75 + --border-radius: 9999px; 76 + --padding-inline: var(--spacing-1); 77 + aspect-ratio: 1 / 1; 78 + width: var(--spacing-9); 79 + } 80 + 81 + .button.scheme-default { 82 + --bg-color: var(--color-secondary); 83 + --text-color: var(--color-secondary-contrast); 84 + 85 + --mixin-text: var(--mixin-color-light-200); 86 + --mixin-bg: var(--mixin-color-light-100); 87 + 88 + --mixin-text-disabled: var(--mixin-color-light-200); 89 + --mixin-bg-disabled: var(--mixin-color-light-100); 90 + } 91 + 92 + .button.scheme-primary { 93 + --bg-color: var(--color-primary); 94 + --text-color: var(--color-primary-contrast); 95 + 96 + --mixin-text: var(--mixin-color-dark-100); 97 + --mixin-bg: var(--mixin-color-light-100); 98 + 99 + --mixin-text-disabled: var(--mixin-color-dark-200); 100 + }
+12
resources/css/components/layout.css
··· 1 + .container { 2 + width: 100%; 3 + padding-inline: var(--spacing-4); 4 + 5 + @media (--md) { 6 + padding-inline: var(--spacing-8); 7 + } 8 + 9 + @media (--lg) { 10 + padding-inline: var(--spacing-16); 11 + } 12 + }
+137
resources/css/main.css
··· 1 + @layer theme, base, components, layers; 2 + 3 + @import "tailwindcss/theme.css" layer(theme); 4 + @import "tailwindcss/preflight.css" layer(base); 5 + @import "tailwindcss/utilities.css" layer(utilities); 6 + 7 + @import "./components/layout.css" layer(components); 8 + @import "./components/button.css" layer(components); 9 + 10 + body { 11 + background-color: var(--color-base-100); 12 + min-height: 100dvh; 13 + } 14 + 15 + @theme inline { 16 + --color-base-100: var(--theme-color-base-100); 17 + --color-base-200: var(--theme-color-base-200); 18 + --color-base-300: var(--theme-color-base-300); 19 + --color-content-100: var(--theme-color-content-100); 20 + --color-content-200: var(--theme-color-content-200); 21 + --color-content-300: var(--theme-color-content-300); 22 + --color-muted-100: var(--theme-color-muted-100); 23 + --color-muted-200: var(--theme-color-muted-200); 24 + --color-muted-300: var(--theme-color-muted-300); 25 + --color-primary: var(--theme-color-primary); 26 + --color-primary-contrast: var(--theme-color-primary-contrast); 27 + --color-secondary: var(--theme-color-secondary); 28 + --color-secondary-contrast: var(--theme-color-secondary-contrast); 29 + --color-success: var(--theme-color-success); 30 + --color-success-contrast: var(--theme-color-success-contrast); 31 + --color-warning: var(--theme-color-warning); 32 + --color-warning-contrast: var(--theme-color-warning-contrast); 33 + --color-danger: var(--theme-color-danger); 34 + --color-danger-contrast: var(--theme-color-danger-contrast); 35 + } 36 + 37 + @theme { 38 + /* Spacing */ 39 + --spacing-px: 1px; 40 + --spacing-0: 0px; 41 + --spacing-0_5: 0.125rem; 42 + --spacing-1: 0.25rem; 43 + --spacing-1_5: 0.375rem; 44 + --spacing-2: 0.5rem; 45 + --spacing-2_5: 0.625rem; 46 + --spacing-3: 0.75rem; 47 + --spacing-3_5: 0.875rem; 48 + --spacing-4: 1rem; 49 + --spacing-4_5: 1.125rem; 50 + --spacing-5: 1.25rem; 51 + --spacing-6: 1.5rem; 52 + --spacing-7: 1.75rem; 53 + --spacing-8: 2rem; 54 + --spacing-9: 2.25rem; 55 + --spacing-10: 2.5rem; 56 + --spacing-11: 2.75rem; 57 + --spacing-12: 3rem; 58 + --spacing-14: 3.5rem; 59 + --spacing-16: 4rem; 60 + --spacing-18: 4.5rem; 61 + --spacing-20: 5rem; 62 + --spacing-22: 5.5rem; 63 + --spacing-24: 6rem; 64 + --spacing-28: 7rem; 65 + --spacing-32: 8rem; 66 + --spacing-36: 9rem; 67 + --spacing-40: 10rem; 68 + --spacing-44: 11rem; 69 + --spacing-48: 12rem; 70 + --spacing-52: 13rem; 71 + --spacing-56: 14rem; 72 + --spacing-60: 15rem; 73 + --spacing-64: 16rem; 74 + --spacing-72: 18rem; 75 + --spacing-80: 20rem; 76 + --spacing-96: 24rem; 77 + 78 + /* Widths */ 79 + --width-3xs: 16rem; 80 + --width-2xs: 18rem; 81 + --width-xs: 20rem; 82 + --width-sm: 24rem; 83 + --width-md: 28rem; 84 + --width-lg: 32rem; 85 + --width-xl: 36rem; 86 + --width-2xl: 42rem; 87 + --width-3xl: 48rem; 88 + --width-4xl: 56rem; 89 + --width-5xl: 64rem; 90 + --width-6xl: 72rem; 91 + --width-7xl: 80rem; 92 + --width-prose: 65ch; 93 + } 94 + 95 + @layer base { 96 + :root { 97 + --mixin-color-light-100: #fff 20%; 98 + --mixin-color-light-200: #fff 50%; 99 + --mixin-color-light-300: #fff 80%; 100 + 101 + --mixin-color-dark-100: #000 20%; 102 + --mixin-color-dark-200: #000 50%; 103 + --mixin-color-dark-300: #000 80%; 104 + 105 + --theme-color-base-100: var(--color-gray-50); 106 + --theme-color-base-200: var(--color-gray-100); 107 + --theme-color-base-300: #fff; 108 + 109 + --theme-color-content-100: var(--color-gray-950); 110 + --theme-color-content-200: var(--color-gray-800); 111 + --theme-color-content-300: var(--color-gray-600); 112 + 113 + --theme-color-muted-100: var(--color-gray-200); 114 + --theme-color-muted-200: var(--color-gray-300); 115 + --theme-color-muted-300: var(--color-gray-400); 116 + 117 + --theme-color-primary: var(--color-blue-600); 118 + --theme-color-primary-contrast: var(--color-blue-50); 119 + --theme-color-secondary: var(--color-blue-200); 120 + --theme-color-secondary-contrast: var(--color-blue-950); 121 + --theme-color-success: #00cc66; 122 + --theme-color-success-contrast: #fff; 123 + --theme-color-warning: #ff9900; 124 + --theme-color-warning-contrast: #fff; 125 + --theme-color-danger: #ff3333; 126 + --theme-color-danger-contrast: #fff; 127 + 128 + --theme-default-border: 1px solid var(--color-muted-200); 129 + } 130 + } 131 + 132 + @custom-media --md (width >= 48rem); 133 + @custom-media --lg (width >= 64rem); 134 + 135 + @utility container { 136 + max-width: unset; 137 + }
+10
resources/css/postcss.config.js
··· 1 + import autoprefixer from "autoprefixer"; 2 + import postcssCustomMedia from "postcss-custom-media"; 3 + import tailwindcss from "@tailwindcss/postcss"; 4 + 5 + /** @type {import('postcss-load-config').Config} */ 6 + const config = { 7 + plugins: [tailwindcss, autoprefixer, postcssCustomMedia], 8 + }; 9 + 10 + export default config;
+6
resources/embed.go
··· 1 + package resources 2 + 3 + import "embed" 4 + 5 + //go:embed views/* 6 + var TemplatesFS embed.FS
+1
resources/js/main.js
··· 1 + import "htmx.org";
+2198
resources/package-lock.json
··· 1 + { 2 + "name": "resources", 3 + "lockfileVersion": 3, 4 + "requires": true, 5 + "packages": { 6 + "": { 7 + "dependencies": { 8 + "htmx.org": "^4.0.0-alpha6", 9 + "tailwindcss": "^4.1.18" 10 + }, 11 + "devDependencies": { 12 + "@tailwindcss/postcss": "^4.1.18", 13 + "autoprefixer": "^10.4.23", 14 + "esbuild": "0.27.2", 15 + "postcss": "^8.5.6", 16 + "postcss-cli": "^11.0.1", 17 + "postcss-custom-media": "^11.0.6" 18 + } 19 + }, 20 + "node_modules/@alloc/quick-lru": { 21 + "version": "5.2.0", 22 + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", 23 + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 24 + "dev": true, 25 + "license": "MIT", 26 + "engines": { 27 + "node": ">=10" 28 + }, 29 + "funding": { 30 + "url": "https://github.com/sponsors/sindresorhus" 31 + } 32 + }, 33 + "node_modules/@csstools/cascade-layer-name-parser": { 34 + "version": "2.0.5", 35 + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", 36 + "integrity": "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==", 37 + "dev": true, 38 + "funding": [ 39 + { 40 + "type": "github", 41 + "url": "https://github.com/sponsors/csstools" 42 + }, 43 + { 44 + "type": "opencollective", 45 + "url": "https://opencollective.com/csstools" 46 + } 47 + ], 48 + "license": "MIT", 49 + "engines": { 50 + "node": ">=18" 51 + }, 52 + "peerDependencies": { 53 + "@csstools/css-parser-algorithms": "^3.0.5", 54 + "@csstools/css-tokenizer": "^3.0.4" 55 + } 56 + }, 57 + "node_modules/@csstools/css-parser-algorithms": { 58 + "version": "3.0.5", 59 + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", 60 + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", 61 + "dev": true, 62 + "funding": [ 63 + { 64 + "type": "github", 65 + "url": "https://github.com/sponsors/csstools" 66 + }, 67 + { 68 + "type": "opencollective", 69 + "url": "https://opencollective.com/csstools" 70 + } 71 + ], 72 + "license": "MIT", 73 + "engines": { 74 + "node": ">=18" 75 + }, 76 + "peerDependencies": { 77 + "@csstools/css-tokenizer": "^3.0.4" 78 + } 79 + }, 80 + "node_modules/@csstools/css-tokenizer": { 81 + "version": "3.0.4", 82 + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", 83 + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", 84 + "dev": true, 85 + "funding": [ 86 + { 87 + "type": "github", 88 + "url": "https://github.com/sponsors/csstools" 89 + }, 90 + { 91 + "type": "opencollective", 92 + "url": "https://opencollective.com/csstools" 93 + } 94 + ], 95 + "license": "MIT", 96 + "engines": { 97 + "node": ">=18" 98 + } 99 + }, 100 + "node_modules/@csstools/media-query-list-parser": { 101 + "version": "4.0.3", 102 + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", 103 + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", 104 + "dev": true, 105 + "funding": [ 106 + { 107 + "type": "github", 108 + "url": "https://github.com/sponsors/csstools" 109 + }, 110 + { 111 + "type": "opencollective", 112 + "url": "https://opencollective.com/csstools" 113 + } 114 + ], 115 + "license": "MIT", 116 + "engines": { 117 + "node": ">=18" 118 + }, 119 + "peerDependencies": { 120 + "@csstools/css-parser-algorithms": "^3.0.5", 121 + "@csstools/css-tokenizer": "^3.0.4" 122 + } 123 + }, 124 + "node_modules/@esbuild/aix-ppc64": { 125 + "version": "0.27.2", 126 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", 127 + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", 128 + "cpu": [ 129 + "ppc64" 130 + ], 131 + "dev": true, 132 + "license": "MIT", 133 + "optional": true, 134 + "os": [ 135 + "aix" 136 + ], 137 + "engines": { 138 + "node": ">=18" 139 + } 140 + }, 141 + "node_modules/@esbuild/android-arm": { 142 + "version": "0.27.2", 143 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", 144 + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", 145 + "cpu": [ 146 + "arm" 147 + ], 148 + "dev": true, 149 + "license": "MIT", 150 + "optional": true, 151 + "os": [ 152 + "android" 153 + ], 154 + "engines": { 155 + "node": ">=18" 156 + } 157 + }, 158 + "node_modules/@esbuild/android-arm64": { 159 + "version": "0.27.2", 160 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", 161 + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", 162 + "cpu": [ 163 + "arm64" 164 + ], 165 + "dev": true, 166 + "license": "MIT", 167 + "optional": true, 168 + "os": [ 169 + "android" 170 + ], 171 + "engines": { 172 + "node": ">=18" 173 + } 174 + }, 175 + "node_modules/@esbuild/android-x64": { 176 + "version": "0.27.2", 177 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", 178 + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", 179 + "cpu": [ 180 + "x64" 181 + ], 182 + "dev": true, 183 + "license": "MIT", 184 + "optional": true, 185 + "os": [ 186 + "android" 187 + ], 188 + "engines": { 189 + "node": ">=18" 190 + } 191 + }, 192 + "node_modules/@esbuild/darwin-arm64": { 193 + "version": "0.27.2", 194 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", 195 + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", 196 + "cpu": [ 197 + "arm64" 198 + ], 199 + "dev": true, 200 + "license": "MIT", 201 + "optional": true, 202 + "os": [ 203 + "darwin" 204 + ], 205 + "engines": { 206 + "node": ">=18" 207 + } 208 + }, 209 + "node_modules/@esbuild/darwin-x64": { 210 + "version": "0.27.2", 211 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", 212 + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", 213 + "cpu": [ 214 + "x64" 215 + ], 216 + "dev": true, 217 + "license": "MIT", 218 + "optional": true, 219 + "os": [ 220 + "darwin" 221 + ], 222 + "engines": { 223 + "node": ">=18" 224 + } 225 + }, 226 + "node_modules/@esbuild/freebsd-arm64": { 227 + "version": "0.27.2", 228 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", 229 + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", 230 + "cpu": [ 231 + "arm64" 232 + ], 233 + "dev": true, 234 + "license": "MIT", 235 + "optional": true, 236 + "os": [ 237 + "freebsd" 238 + ], 239 + "engines": { 240 + "node": ">=18" 241 + } 242 + }, 243 + "node_modules/@esbuild/freebsd-x64": { 244 + "version": "0.27.2", 245 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", 246 + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", 247 + "cpu": [ 248 + "x64" 249 + ], 250 + "dev": true, 251 + "license": "MIT", 252 + "optional": true, 253 + "os": [ 254 + "freebsd" 255 + ], 256 + "engines": { 257 + "node": ">=18" 258 + } 259 + }, 260 + "node_modules/@esbuild/linux-arm": { 261 + "version": "0.27.2", 262 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", 263 + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", 264 + "cpu": [ 265 + "arm" 266 + ], 267 + "dev": true, 268 + "license": "MIT", 269 + "optional": true, 270 + "os": [ 271 + "linux" 272 + ], 273 + "engines": { 274 + "node": ">=18" 275 + } 276 + }, 277 + "node_modules/@esbuild/linux-arm64": { 278 + "version": "0.27.2", 279 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", 280 + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", 281 + "cpu": [ 282 + "arm64" 283 + ], 284 + "dev": true, 285 + "license": "MIT", 286 + "optional": true, 287 + "os": [ 288 + "linux" 289 + ], 290 + "engines": { 291 + "node": ">=18" 292 + } 293 + }, 294 + "node_modules/@esbuild/linux-ia32": { 295 + "version": "0.27.2", 296 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", 297 + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", 298 + "cpu": [ 299 + "ia32" 300 + ], 301 + "dev": true, 302 + "license": "MIT", 303 + "optional": true, 304 + "os": [ 305 + "linux" 306 + ], 307 + "engines": { 308 + "node": ">=18" 309 + } 310 + }, 311 + "node_modules/@esbuild/linux-loong64": { 312 + "version": "0.27.2", 313 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", 314 + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", 315 + "cpu": [ 316 + "loong64" 317 + ], 318 + "dev": true, 319 + "license": "MIT", 320 + "optional": true, 321 + "os": [ 322 + "linux" 323 + ], 324 + "engines": { 325 + "node": ">=18" 326 + } 327 + }, 328 + "node_modules/@esbuild/linux-mips64el": { 329 + "version": "0.27.2", 330 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", 331 + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", 332 + "cpu": [ 333 + "mips64el" 334 + ], 335 + "dev": true, 336 + "license": "MIT", 337 + "optional": true, 338 + "os": [ 339 + "linux" 340 + ], 341 + "engines": { 342 + "node": ">=18" 343 + } 344 + }, 345 + "node_modules/@esbuild/linux-ppc64": { 346 + "version": "0.27.2", 347 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", 348 + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", 349 + "cpu": [ 350 + "ppc64" 351 + ], 352 + "dev": true, 353 + "license": "MIT", 354 + "optional": true, 355 + "os": [ 356 + "linux" 357 + ], 358 + "engines": { 359 + "node": ">=18" 360 + } 361 + }, 362 + "node_modules/@esbuild/linux-riscv64": { 363 + "version": "0.27.2", 364 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", 365 + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", 366 + "cpu": [ 367 + "riscv64" 368 + ], 369 + "dev": true, 370 + "license": "MIT", 371 + "optional": true, 372 + "os": [ 373 + "linux" 374 + ], 375 + "engines": { 376 + "node": ">=18" 377 + } 378 + }, 379 + "node_modules/@esbuild/linux-s390x": { 380 + "version": "0.27.2", 381 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", 382 + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", 383 + "cpu": [ 384 + "s390x" 385 + ], 386 + "dev": true, 387 + "license": "MIT", 388 + "optional": true, 389 + "os": [ 390 + "linux" 391 + ], 392 + "engines": { 393 + "node": ">=18" 394 + } 395 + }, 396 + "node_modules/@esbuild/linux-x64": { 397 + "version": "0.27.2", 398 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", 399 + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", 400 + "cpu": [ 401 + "x64" 402 + ], 403 + "dev": true, 404 + "license": "MIT", 405 + "optional": true, 406 + "os": [ 407 + "linux" 408 + ], 409 + "engines": { 410 + "node": ">=18" 411 + } 412 + }, 413 + "node_modules/@esbuild/netbsd-arm64": { 414 + "version": "0.27.2", 415 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", 416 + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", 417 + "cpu": [ 418 + "arm64" 419 + ], 420 + "dev": true, 421 + "license": "MIT", 422 + "optional": true, 423 + "os": [ 424 + "netbsd" 425 + ], 426 + "engines": { 427 + "node": ">=18" 428 + } 429 + }, 430 + "node_modules/@esbuild/netbsd-x64": { 431 + "version": "0.27.2", 432 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", 433 + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", 434 + "cpu": [ 435 + "x64" 436 + ], 437 + "dev": true, 438 + "license": "MIT", 439 + "optional": true, 440 + "os": [ 441 + "netbsd" 442 + ], 443 + "engines": { 444 + "node": ">=18" 445 + } 446 + }, 447 + "node_modules/@esbuild/openbsd-arm64": { 448 + "version": "0.27.2", 449 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", 450 + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", 451 + "cpu": [ 452 + "arm64" 453 + ], 454 + "dev": true, 455 + "license": "MIT", 456 + "optional": true, 457 + "os": [ 458 + "openbsd" 459 + ], 460 + "engines": { 461 + "node": ">=18" 462 + } 463 + }, 464 + "node_modules/@esbuild/openbsd-x64": { 465 + "version": "0.27.2", 466 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", 467 + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", 468 + "cpu": [ 469 + "x64" 470 + ], 471 + "dev": true, 472 + "license": "MIT", 473 + "optional": true, 474 + "os": [ 475 + "openbsd" 476 + ], 477 + "engines": { 478 + "node": ">=18" 479 + } 480 + }, 481 + "node_modules/@esbuild/openharmony-arm64": { 482 + "version": "0.27.2", 483 + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", 484 + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", 485 + "cpu": [ 486 + "arm64" 487 + ], 488 + "dev": true, 489 + "license": "MIT", 490 + "optional": true, 491 + "os": [ 492 + "openharmony" 493 + ], 494 + "engines": { 495 + "node": ">=18" 496 + } 497 + }, 498 + "node_modules/@esbuild/sunos-x64": { 499 + "version": "0.27.2", 500 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", 501 + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", 502 + "cpu": [ 503 + "x64" 504 + ], 505 + "dev": true, 506 + "license": "MIT", 507 + "optional": true, 508 + "os": [ 509 + "sunos" 510 + ], 511 + "engines": { 512 + "node": ">=18" 513 + } 514 + }, 515 + "node_modules/@esbuild/win32-arm64": { 516 + "version": "0.27.2", 517 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", 518 + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", 519 + "cpu": [ 520 + "arm64" 521 + ], 522 + "dev": true, 523 + "license": "MIT", 524 + "optional": true, 525 + "os": [ 526 + "win32" 527 + ], 528 + "engines": { 529 + "node": ">=18" 530 + } 531 + }, 532 + "node_modules/@esbuild/win32-ia32": { 533 + "version": "0.27.2", 534 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", 535 + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", 536 + "cpu": [ 537 + "ia32" 538 + ], 539 + "dev": true, 540 + "license": "MIT", 541 + "optional": true, 542 + "os": [ 543 + "win32" 544 + ], 545 + "engines": { 546 + "node": ">=18" 547 + } 548 + }, 549 + "node_modules/@esbuild/win32-x64": { 550 + "version": "0.27.2", 551 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", 552 + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", 553 + "cpu": [ 554 + "x64" 555 + ], 556 + "dev": true, 557 + "license": "MIT", 558 + "optional": true, 559 + "os": [ 560 + "win32" 561 + ], 562 + "engines": { 563 + "node": ">=18" 564 + } 565 + }, 566 + "node_modules/@jridgewell/gen-mapping": { 567 + "version": "0.3.13", 568 + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", 569 + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", 570 + "dev": true, 571 + "license": "MIT", 572 + "dependencies": { 573 + "@jridgewell/sourcemap-codec": "^1.5.0", 574 + "@jridgewell/trace-mapping": "^0.3.24" 575 + } 576 + }, 577 + "node_modules/@jridgewell/remapping": { 578 + "version": "2.3.5", 579 + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", 580 + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", 581 + "dev": true, 582 + "license": "MIT", 583 + "dependencies": { 584 + "@jridgewell/gen-mapping": "^0.3.5", 585 + "@jridgewell/trace-mapping": "^0.3.24" 586 + } 587 + }, 588 + "node_modules/@jridgewell/resolve-uri": { 589 + "version": "3.1.2", 590 + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 591 + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 592 + "dev": true, 593 + "license": "MIT", 594 + "engines": { 595 + "node": ">=6.0.0" 596 + } 597 + }, 598 + "node_modules/@jridgewell/sourcemap-codec": { 599 + "version": "1.5.5", 600 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 601 + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 602 + "dev": true, 603 + "license": "MIT" 604 + }, 605 + "node_modules/@jridgewell/trace-mapping": { 606 + "version": "0.3.31", 607 + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", 608 + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", 609 + "dev": true, 610 + "license": "MIT", 611 + "dependencies": { 612 + "@jridgewell/resolve-uri": "^3.1.0", 613 + "@jridgewell/sourcemap-codec": "^1.4.14" 614 + } 615 + }, 616 + "node_modules/@tailwindcss/node": { 617 + "version": "4.1.18", 618 + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz", 619 + "integrity": "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==", 620 + "dev": true, 621 + "license": "MIT", 622 + "dependencies": { 623 + "@jridgewell/remapping": "^2.3.4", 624 + "enhanced-resolve": "^5.18.3", 625 + "jiti": "^2.6.1", 626 + "lightningcss": "1.30.2", 627 + "magic-string": "^0.30.21", 628 + "source-map-js": "^1.2.1", 629 + "tailwindcss": "4.1.18" 630 + } 631 + }, 632 + "node_modules/@tailwindcss/oxide": { 633 + "version": "4.1.18", 634 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz", 635 + "integrity": "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==", 636 + "dev": true, 637 + "license": "MIT", 638 + "engines": { 639 + "node": ">= 10" 640 + }, 641 + "optionalDependencies": { 642 + "@tailwindcss/oxide-android-arm64": "4.1.18", 643 + "@tailwindcss/oxide-darwin-arm64": "4.1.18", 644 + "@tailwindcss/oxide-darwin-x64": "4.1.18", 645 + "@tailwindcss/oxide-freebsd-x64": "4.1.18", 646 + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", 647 + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", 648 + "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", 649 + "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", 650 + "@tailwindcss/oxide-linux-x64-musl": "4.1.18", 651 + "@tailwindcss/oxide-wasm32-wasi": "4.1.18", 652 + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", 653 + "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" 654 + } 655 + }, 656 + "node_modules/@tailwindcss/oxide-android-arm64": { 657 + "version": "4.1.18", 658 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz", 659 + "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==", 660 + "cpu": [ 661 + "arm64" 662 + ], 663 + "dev": true, 664 + "license": "MIT", 665 + "optional": true, 666 + "os": [ 667 + "android" 668 + ], 669 + "engines": { 670 + "node": ">= 10" 671 + } 672 + }, 673 + "node_modules/@tailwindcss/oxide-darwin-arm64": { 674 + "version": "4.1.18", 675 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz", 676 + "integrity": "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==", 677 + "cpu": [ 678 + "arm64" 679 + ], 680 + "dev": true, 681 + "license": "MIT", 682 + "optional": true, 683 + "os": [ 684 + "darwin" 685 + ], 686 + "engines": { 687 + "node": ">= 10" 688 + } 689 + }, 690 + "node_modules/@tailwindcss/oxide-darwin-x64": { 691 + "version": "4.1.18", 692 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz", 693 + "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==", 694 + "cpu": [ 695 + "x64" 696 + ], 697 + "dev": true, 698 + "license": "MIT", 699 + "optional": true, 700 + "os": [ 701 + "darwin" 702 + ], 703 + "engines": { 704 + "node": ">= 10" 705 + } 706 + }, 707 + "node_modules/@tailwindcss/oxide-freebsd-x64": { 708 + "version": "4.1.18", 709 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz", 710 + "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==", 711 + "cpu": [ 712 + "x64" 713 + ], 714 + "dev": true, 715 + "license": "MIT", 716 + "optional": true, 717 + "os": [ 718 + "freebsd" 719 + ], 720 + "engines": { 721 + "node": ">= 10" 722 + } 723 + }, 724 + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { 725 + "version": "4.1.18", 726 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz", 727 + "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==", 728 + "cpu": [ 729 + "arm" 730 + ], 731 + "dev": true, 732 + "license": "MIT", 733 + "optional": true, 734 + "os": [ 735 + "linux" 736 + ], 737 + "engines": { 738 + "node": ">= 10" 739 + } 740 + }, 741 + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { 742 + "version": "4.1.18", 743 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz", 744 + "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==", 745 + "cpu": [ 746 + "arm64" 747 + ], 748 + "dev": true, 749 + "license": "MIT", 750 + "optional": true, 751 + "os": [ 752 + "linux" 753 + ], 754 + "engines": { 755 + "node": ">= 10" 756 + } 757 + }, 758 + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { 759 + "version": "4.1.18", 760 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz", 761 + "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==", 762 + "cpu": [ 763 + "arm64" 764 + ], 765 + "dev": true, 766 + "license": "MIT", 767 + "optional": true, 768 + "os": [ 769 + "linux" 770 + ], 771 + "engines": { 772 + "node": ">= 10" 773 + } 774 + }, 775 + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { 776 + "version": "4.1.18", 777 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz", 778 + "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==", 779 + "cpu": [ 780 + "x64" 781 + ], 782 + "dev": true, 783 + "license": "MIT", 784 + "optional": true, 785 + "os": [ 786 + "linux" 787 + ], 788 + "engines": { 789 + "node": ">= 10" 790 + } 791 + }, 792 + "node_modules/@tailwindcss/oxide-linux-x64-musl": { 793 + "version": "4.1.18", 794 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz", 795 + "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==", 796 + "cpu": [ 797 + "x64" 798 + ], 799 + "dev": true, 800 + "license": "MIT", 801 + "optional": true, 802 + "os": [ 803 + "linux" 804 + ], 805 + "engines": { 806 + "node": ">= 10" 807 + } 808 + }, 809 + "node_modules/@tailwindcss/oxide-wasm32-wasi": { 810 + "version": "4.1.18", 811 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz", 812 + "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==", 813 + "bundleDependencies": [ 814 + "@napi-rs/wasm-runtime", 815 + "@emnapi/core", 816 + "@emnapi/runtime", 817 + "@tybys/wasm-util", 818 + "@emnapi/wasi-threads", 819 + "tslib" 820 + ], 821 + "cpu": [ 822 + "wasm32" 823 + ], 824 + "dev": true, 825 + "license": "MIT", 826 + "optional": true, 827 + "dependencies": { 828 + "@emnapi/core": "^1.7.1", 829 + "@emnapi/runtime": "^1.7.1", 830 + "@emnapi/wasi-threads": "^1.1.0", 831 + "@napi-rs/wasm-runtime": "^1.1.0", 832 + "@tybys/wasm-util": "^0.10.1", 833 + "tslib": "^2.4.0" 834 + }, 835 + "engines": { 836 + "node": ">=14.0.0" 837 + } 838 + }, 839 + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { 840 + "version": "4.1.18", 841 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz", 842 + "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==", 843 + "cpu": [ 844 + "arm64" 845 + ], 846 + "dev": true, 847 + "license": "MIT", 848 + "optional": true, 849 + "os": [ 850 + "win32" 851 + ], 852 + "engines": { 853 + "node": ">= 10" 854 + } 855 + }, 856 + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { 857 + "version": "4.1.18", 858 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz", 859 + "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==", 860 + "cpu": [ 861 + "x64" 862 + ], 863 + "dev": true, 864 + "license": "MIT", 865 + "optional": true, 866 + "os": [ 867 + "win32" 868 + ], 869 + "engines": { 870 + "node": ">= 10" 871 + } 872 + }, 873 + "node_modules/@tailwindcss/postcss": { 874 + "version": "4.1.18", 875 + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.18.tgz", 876 + "integrity": "sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==", 877 + "dev": true, 878 + "license": "MIT", 879 + "dependencies": { 880 + "@alloc/quick-lru": "^5.2.0", 881 + "@tailwindcss/node": "4.1.18", 882 + "@tailwindcss/oxide": "4.1.18", 883 + "postcss": "^8.4.41", 884 + "tailwindcss": "4.1.18" 885 + } 886 + }, 887 + "node_modules/ansi-regex": { 888 + "version": "5.0.1", 889 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 890 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 891 + "dev": true, 892 + "license": "MIT", 893 + "engines": { 894 + "node": ">=8" 895 + } 896 + }, 897 + "node_modules/ansi-styles": { 898 + "version": "4.3.0", 899 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 900 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 901 + "dev": true, 902 + "license": "MIT", 903 + "dependencies": { 904 + "color-convert": "^2.0.1" 905 + }, 906 + "engines": { 907 + "node": ">=8" 908 + }, 909 + "funding": { 910 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 911 + } 912 + }, 913 + "node_modules/anymatch": { 914 + "version": "3.1.3", 915 + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 916 + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 917 + "dev": true, 918 + "license": "ISC", 919 + "dependencies": { 920 + "normalize-path": "^3.0.0", 921 + "picomatch": "^2.0.4" 922 + }, 923 + "engines": { 924 + "node": ">= 8" 925 + } 926 + }, 927 + "node_modules/autoprefixer": { 928 + "version": "10.4.23", 929 + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", 930 + "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", 931 + "dev": true, 932 + "funding": [ 933 + { 934 + "type": "opencollective", 935 + "url": "https://opencollective.com/postcss/" 936 + }, 937 + { 938 + "type": "tidelift", 939 + "url": "https://tidelift.com/funding/github/npm/autoprefixer" 940 + }, 941 + { 942 + "type": "github", 943 + "url": "https://github.com/sponsors/ai" 944 + } 945 + ], 946 + "license": "MIT", 947 + "dependencies": { 948 + "browserslist": "^4.28.1", 949 + "caniuse-lite": "^1.0.30001760", 950 + "fraction.js": "^5.3.4", 951 + "picocolors": "^1.1.1", 952 + "postcss-value-parser": "^4.2.0" 953 + }, 954 + "bin": { 955 + "autoprefixer": "bin/autoprefixer" 956 + }, 957 + "engines": { 958 + "node": "^10 || ^12 || >=14" 959 + }, 960 + "peerDependencies": { 961 + "postcss": "^8.1.0" 962 + } 963 + }, 964 + "node_modules/baseline-browser-mapping": { 965 + "version": "2.9.14", 966 + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz", 967 + "integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==", 968 + "dev": true, 969 + "license": "Apache-2.0", 970 + "bin": { 971 + "baseline-browser-mapping": "dist/cli.js" 972 + } 973 + }, 974 + "node_modules/binary-extensions": { 975 + "version": "2.3.0", 976 + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", 977 + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 978 + "dev": true, 979 + "license": "MIT", 980 + "engines": { 981 + "node": ">=8" 982 + }, 983 + "funding": { 984 + "url": "https://github.com/sponsors/sindresorhus" 985 + } 986 + }, 987 + "node_modules/braces": { 988 + "version": "3.0.3", 989 + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 990 + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 991 + "dev": true, 992 + "license": "MIT", 993 + "dependencies": { 994 + "fill-range": "^7.1.1" 995 + }, 996 + "engines": { 997 + "node": ">=8" 998 + } 999 + }, 1000 + "node_modules/browserslist": { 1001 + "version": "4.28.1", 1002 + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", 1003 + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", 1004 + "dev": true, 1005 + "funding": [ 1006 + { 1007 + "type": "opencollective", 1008 + "url": "https://opencollective.com/browserslist" 1009 + }, 1010 + { 1011 + "type": "tidelift", 1012 + "url": "https://tidelift.com/funding/github/npm/browserslist" 1013 + }, 1014 + { 1015 + "type": "github", 1016 + "url": "https://github.com/sponsors/ai" 1017 + } 1018 + ], 1019 + "license": "MIT", 1020 + "dependencies": { 1021 + "baseline-browser-mapping": "^2.9.0", 1022 + "caniuse-lite": "^1.0.30001759", 1023 + "electron-to-chromium": "^1.5.263", 1024 + "node-releases": "^2.0.27", 1025 + "update-browserslist-db": "^1.2.0" 1026 + }, 1027 + "bin": { 1028 + "browserslist": "cli.js" 1029 + }, 1030 + "engines": { 1031 + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1032 + } 1033 + }, 1034 + "node_modules/caniuse-lite": { 1035 + "version": "1.0.30001764", 1036 + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz", 1037 + "integrity": "sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==", 1038 + "dev": true, 1039 + "funding": [ 1040 + { 1041 + "type": "opencollective", 1042 + "url": "https://opencollective.com/browserslist" 1043 + }, 1044 + { 1045 + "type": "tidelift", 1046 + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1047 + }, 1048 + { 1049 + "type": "github", 1050 + "url": "https://github.com/sponsors/ai" 1051 + } 1052 + ], 1053 + "license": "CC-BY-4.0" 1054 + }, 1055 + "node_modules/chokidar": { 1056 + "version": "3.6.0", 1057 + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", 1058 + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 1059 + "dev": true, 1060 + "license": "MIT", 1061 + "dependencies": { 1062 + "anymatch": "~3.1.2", 1063 + "braces": "~3.0.2", 1064 + "glob-parent": "~5.1.2", 1065 + "is-binary-path": "~2.1.0", 1066 + "is-glob": "~4.0.1", 1067 + "normalize-path": "~3.0.0", 1068 + "readdirp": "~3.6.0" 1069 + }, 1070 + "engines": { 1071 + "node": ">= 8.10.0" 1072 + }, 1073 + "funding": { 1074 + "url": "https://paulmillr.com/funding/" 1075 + }, 1076 + "optionalDependencies": { 1077 + "fsevents": "~2.3.2" 1078 + } 1079 + }, 1080 + "node_modules/cliui": { 1081 + "version": "8.0.1", 1082 + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 1083 + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 1084 + "dev": true, 1085 + "license": "ISC", 1086 + "dependencies": { 1087 + "string-width": "^4.2.0", 1088 + "strip-ansi": "^6.0.1", 1089 + "wrap-ansi": "^7.0.0" 1090 + }, 1091 + "engines": { 1092 + "node": ">=12" 1093 + } 1094 + }, 1095 + "node_modules/color-convert": { 1096 + "version": "2.0.1", 1097 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1098 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1099 + "dev": true, 1100 + "license": "MIT", 1101 + "dependencies": { 1102 + "color-name": "~1.1.4" 1103 + }, 1104 + "engines": { 1105 + "node": ">=7.0.0" 1106 + } 1107 + }, 1108 + "node_modules/color-name": { 1109 + "version": "1.1.4", 1110 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1111 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1112 + "dev": true, 1113 + "license": "MIT" 1114 + }, 1115 + "node_modules/dependency-graph": { 1116 + "version": "1.0.0", 1117 + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", 1118 + "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", 1119 + "dev": true, 1120 + "license": "MIT", 1121 + "engines": { 1122 + "node": ">=4" 1123 + } 1124 + }, 1125 + "node_modules/detect-libc": { 1126 + "version": "2.1.2", 1127 + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", 1128 + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", 1129 + "dev": true, 1130 + "license": "Apache-2.0", 1131 + "engines": { 1132 + "node": ">=8" 1133 + } 1134 + }, 1135 + "node_modules/electron-to-chromium": { 1136 + "version": "1.5.267", 1137 + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", 1138 + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", 1139 + "dev": true, 1140 + "license": "ISC" 1141 + }, 1142 + "node_modules/emoji-regex": { 1143 + "version": "8.0.0", 1144 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1145 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1146 + "dev": true, 1147 + "license": "MIT" 1148 + }, 1149 + "node_modules/enhanced-resolve": { 1150 + "version": "5.18.4", 1151 + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", 1152 + "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", 1153 + "dev": true, 1154 + "license": "MIT", 1155 + "dependencies": { 1156 + "graceful-fs": "^4.2.4", 1157 + "tapable": "^2.2.0" 1158 + }, 1159 + "engines": { 1160 + "node": ">=10.13.0" 1161 + } 1162 + }, 1163 + "node_modules/esbuild": { 1164 + "version": "0.27.2", 1165 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", 1166 + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", 1167 + "dev": true, 1168 + "hasInstallScript": true, 1169 + "license": "MIT", 1170 + "bin": { 1171 + "esbuild": "bin/esbuild" 1172 + }, 1173 + "engines": { 1174 + "node": ">=18" 1175 + }, 1176 + "optionalDependencies": { 1177 + "@esbuild/aix-ppc64": "0.27.2", 1178 + "@esbuild/android-arm": "0.27.2", 1179 + "@esbuild/android-arm64": "0.27.2", 1180 + "@esbuild/android-x64": "0.27.2", 1181 + "@esbuild/darwin-arm64": "0.27.2", 1182 + "@esbuild/darwin-x64": "0.27.2", 1183 + "@esbuild/freebsd-arm64": "0.27.2", 1184 + "@esbuild/freebsd-x64": "0.27.2", 1185 + "@esbuild/linux-arm": "0.27.2", 1186 + "@esbuild/linux-arm64": "0.27.2", 1187 + "@esbuild/linux-ia32": "0.27.2", 1188 + "@esbuild/linux-loong64": "0.27.2", 1189 + "@esbuild/linux-mips64el": "0.27.2", 1190 + "@esbuild/linux-ppc64": "0.27.2", 1191 + "@esbuild/linux-riscv64": "0.27.2", 1192 + "@esbuild/linux-s390x": "0.27.2", 1193 + "@esbuild/linux-x64": "0.27.2", 1194 + "@esbuild/netbsd-arm64": "0.27.2", 1195 + "@esbuild/netbsd-x64": "0.27.2", 1196 + "@esbuild/openbsd-arm64": "0.27.2", 1197 + "@esbuild/openbsd-x64": "0.27.2", 1198 + "@esbuild/openharmony-arm64": "0.27.2", 1199 + "@esbuild/sunos-x64": "0.27.2", 1200 + "@esbuild/win32-arm64": "0.27.2", 1201 + "@esbuild/win32-ia32": "0.27.2", 1202 + "@esbuild/win32-x64": "0.27.2" 1203 + } 1204 + }, 1205 + "node_modules/escalade": { 1206 + "version": "3.2.0", 1207 + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 1208 + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 1209 + "dev": true, 1210 + "license": "MIT", 1211 + "engines": { 1212 + "node": ">=6" 1213 + } 1214 + }, 1215 + "node_modules/fill-range": { 1216 + "version": "7.1.1", 1217 + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1218 + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1219 + "dev": true, 1220 + "license": "MIT", 1221 + "dependencies": { 1222 + "to-regex-range": "^5.0.1" 1223 + }, 1224 + "engines": { 1225 + "node": ">=8" 1226 + } 1227 + }, 1228 + "node_modules/fraction.js": { 1229 + "version": "5.3.4", 1230 + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", 1231 + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", 1232 + "dev": true, 1233 + "license": "MIT", 1234 + "engines": { 1235 + "node": "*" 1236 + }, 1237 + "funding": { 1238 + "type": "github", 1239 + "url": "https://github.com/sponsors/rawify" 1240 + } 1241 + }, 1242 + "node_modules/fs-extra": { 1243 + "version": "11.3.3", 1244 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", 1245 + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", 1246 + "dev": true, 1247 + "license": "MIT", 1248 + "dependencies": { 1249 + "graceful-fs": "^4.2.0", 1250 + "jsonfile": "^6.0.1", 1251 + "universalify": "^2.0.0" 1252 + }, 1253 + "engines": { 1254 + "node": ">=14.14" 1255 + } 1256 + }, 1257 + "node_modules/fsevents": { 1258 + "version": "2.3.3", 1259 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1260 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1261 + "dev": true, 1262 + "hasInstallScript": true, 1263 + "license": "MIT", 1264 + "optional": true, 1265 + "os": [ 1266 + "darwin" 1267 + ], 1268 + "engines": { 1269 + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1270 + } 1271 + }, 1272 + "node_modules/get-caller-file": { 1273 + "version": "2.0.5", 1274 + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1275 + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1276 + "dev": true, 1277 + "license": "ISC", 1278 + "engines": { 1279 + "node": "6.* || 8.* || >= 10.*" 1280 + } 1281 + }, 1282 + "node_modules/glob-parent": { 1283 + "version": "5.1.2", 1284 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1285 + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1286 + "dev": true, 1287 + "license": "ISC", 1288 + "dependencies": { 1289 + "is-glob": "^4.0.1" 1290 + }, 1291 + "engines": { 1292 + "node": ">= 6" 1293 + } 1294 + }, 1295 + "node_modules/graceful-fs": { 1296 + "version": "4.2.11", 1297 + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1298 + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1299 + "dev": true, 1300 + "license": "ISC" 1301 + }, 1302 + "node_modules/htmx.org": { 1303 + "version": "4.0.0-alpha6", 1304 + "resolved": "https://registry.npmjs.org/htmx.org/-/htmx.org-4.0.0-alpha6.tgz", 1305 + "integrity": "sha512-EEJkuX+divCVx4VfXTspB9dNs3EfXeHXbZNW9Y4kjjubzTqKAivoVQAE9LcQihCkrMD6ZSJU8BNdEbg5oHZOWA==", 1306 + "license": "BSD-0-Clause", 1307 + "workspaces": [ 1308 + "ext/*" 1309 + ] 1310 + }, 1311 + "node_modules/is-binary-path": { 1312 + "version": "2.1.0", 1313 + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1314 + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1315 + "dev": true, 1316 + "license": "MIT", 1317 + "dependencies": { 1318 + "binary-extensions": "^2.0.0" 1319 + }, 1320 + "engines": { 1321 + "node": ">=8" 1322 + } 1323 + }, 1324 + "node_modules/is-extglob": { 1325 + "version": "2.1.1", 1326 + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1327 + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1328 + "dev": true, 1329 + "license": "MIT", 1330 + "engines": { 1331 + "node": ">=0.10.0" 1332 + } 1333 + }, 1334 + "node_modules/is-fullwidth-code-point": { 1335 + "version": "3.0.0", 1336 + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1337 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1338 + "dev": true, 1339 + "license": "MIT", 1340 + "engines": { 1341 + "node": ">=8" 1342 + } 1343 + }, 1344 + "node_modules/is-glob": { 1345 + "version": "4.0.3", 1346 + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1347 + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1348 + "dev": true, 1349 + "license": "MIT", 1350 + "dependencies": { 1351 + "is-extglob": "^2.1.1" 1352 + }, 1353 + "engines": { 1354 + "node": ">=0.10.0" 1355 + } 1356 + }, 1357 + "node_modules/is-number": { 1358 + "version": "7.0.0", 1359 + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1360 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1361 + "dev": true, 1362 + "license": "MIT", 1363 + "engines": { 1364 + "node": ">=0.12.0" 1365 + } 1366 + }, 1367 + "node_modules/jiti": { 1368 + "version": "2.6.1", 1369 + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", 1370 + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", 1371 + "dev": true, 1372 + "license": "MIT", 1373 + "bin": { 1374 + "jiti": "lib/jiti-cli.mjs" 1375 + } 1376 + }, 1377 + "node_modules/jsonfile": { 1378 + "version": "6.2.0", 1379 + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", 1380 + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", 1381 + "dev": true, 1382 + "license": "MIT", 1383 + "dependencies": { 1384 + "universalify": "^2.0.0" 1385 + }, 1386 + "optionalDependencies": { 1387 + "graceful-fs": "^4.1.6" 1388 + } 1389 + }, 1390 + "node_modules/lightningcss": { 1391 + "version": "1.30.2", 1392 + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", 1393 + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", 1394 + "dev": true, 1395 + "license": "MPL-2.0", 1396 + "dependencies": { 1397 + "detect-libc": "^2.0.3" 1398 + }, 1399 + "engines": { 1400 + "node": ">= 12.0.0" 1401 + }, 1402 + "funding": { 1403 + "type": "opencollective", 1404 + "url": "https://opencollective.com/parcel" 1405 + }, 1406 + "optionalDependencies": { 1407 + "lightningcss-android-arm64": "1.30.2", 1408 + "lightningcss-darwin-arm64": "1.30.2", 1409 + "lightningcss-darwin-x64": "1.30.2", 1410 + "lightningcss-freebsd-x64": "1.30.2", 1411 + "lightningcss-linux-arm-gnueabihf": "1.30.2", 1412 + "lightningcss-linux-arm64-gnu": "1.30.2", 1413 + "lightningcss-linux-arm64-musl": "1.30.2", 1414 + "lightningcss-linux-x64-gnu": "1.30.2", 1415 + "lightningcss-linux-x64-musl": "1.30.2", 1416 + "lightningcss-win32-arm64-msvc": "1.30.2", 1417 + "lightningcss-win32-x64-msvc": "1.30.2" 1418 + } 1419 + }, 1420 + "node_modules/lightningcss-android-arm64": { 1421 + "version": "1.30.2", 1422 + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", 1423 + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", 1424 + "cpu": [ 1425 + "arm64" 1426 + ], 1427 + "dev": true, 1428 + "license": "MPL-2.0", 1429 + "optional": true, 1430 + "os": [ 1431 + "android" 1432 + ], 1433 + "engines": { 1434 + "node": ">= 12.0.0" 1435 + }, 1436 + "funding": { 1437 + "type": "opencollective", 1438 + "url": "https://opencollective.com/parcel" 1439 + } 1440 + }, 1441 + "node_modules/lightningcss-darwin-arm64": { 1442 + "version": "1.30.2", 1443 + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", 1444 + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", 1445 + "cpu": [ 1446 + "arm64" 1447 + ], 1448 + "dev": true, 1449 + "license": "MPL-2.0", 1450 + "optional": true, 1451 + "os": [ 1452 + "darwin" 1453 + ], 1454 + "engines": { 1455 + "node": ">= 12.0.0" 1456 + }, 1457 + "funding": { 1458 + "type": "opencollective", 1459 + "url": "https://opencollective.com/parcel" 1460 + } 1461 + }, 1462 + "node_modules/lightningcss-darwin-x64": { 1463 + "version": "1.30.2", 1464 + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", 1465 + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", 1466 + "cpu": [ 1467 + "x64" 1468 + ], 1469 + "dev": true, 1470 + "license": "MPL-2.0", 1471 + "optional": true, 1472 + "os": [ 1473 + "darwin" 1474 + ], 1475 + "engines": { 1476 + "node": ">= 12.0.0" 1477 + }, 1478 + "funding": { 1479 + "type": "opencollective", 1480 + "url": "https://opencollective.com/parcel" 1481 + } 1482 + }, 1483 + "node_modules/lightningcss-freebsd-x64": { 1484 + "version": "1.30.2", 1485 + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", 1486 + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", 1487 + "cpu": [ 1488 + "x64" 1489 + ], 1490 + "dev": true, 1491 + "license": "MPL-2.0", 1492 + "optional": true, 1493 + "os": [ 1494 + "freebsd" 1495 + ], 1496 + "engines": { 1497 + "node": ">= 12.0.0" 1498 + }, 1499 + "funding": { 1500 + "type": "opencollective", 1501 + "url": "https://opencollective.com/parcel" 1502 + } 1503 + }, 1504 + "node_modules/lightningcss-linux-arm-gnueabihf": { 1505 + "version": "1.30.2", 1506 + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", 1507 + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", 1508 + "cpu": [ 1509 + "arm" 1510 + ], 1511 + "dev": true, 1512 + "license": "MPL-2.0", 1513 + "optional": true, 1514 + "os": [ 1515 + "linux" 1516 + ], 1517 + "engines": { 1518 + "node": ">= 12.0.0" 1519 + }, 1520 + "funding": { 1521 + "type": "opencollective", 1522 + "url": "https://opencollective.com/parcel" 1523 + } 1524 + }, 1525 + "node_modules/lightningcss-linux-arm64-gnu": { 1526 + "version": "1.30.2", 1527 + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", 1528 + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", 1529 + "cpu": [ 1530 + "arm64" 1531 + ], 1532 + "dev": true, 1533 + "license": "MPL-2.0", 1534 + "optional": true, 1535 + "os": [ 1536 + "linux" 1537 + ], 1538 + "engines": { 1539 + "node": ">= 12.0.0" 1540 + }, 1541 + "funding": { 1542 + "type": "opencollective", 1543 + "url": "https://opencollective.com/parcel" 1544 + } 1545 + }, 1546 + "node_modules/lightningcss-linux-arm64-musl": { 1547 + "version": "1.30.2", 1548 + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", 1549 + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", 1550 + "cpu": [ 1551 + "arm64" 1552 + ], 1553 + "dev": true, 1554 + "license": "MPL-2.0", 1555 + "optional": true, 1556 + "os": [ 1557 + "linux" 1558 + ], 1559 + "engines": { 1560 + "node": ">= 12.0.0" 1561 + }, 1562 + "funding": { 1563 + "type": "opencollective", 1564 + "url": "https://opencollective.com/parcel" 1565 + } 1566 + }, 1567 + "node_modules/lightningcss-linux-x64-gnu": { 1568 + "version": "1.30.2", 1569 + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", 1570 + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", 1571 + "cpu": [ 1572 + "x64" 1573 + ], 1574 + "dev": true, 1575 + "license": "MPL-2.0", 1576 + "optional": true, 1577 + "os": [ 1578 + "linux" 1579 + ], 1580 + "engines": { 1581 + "node": ">= 12.0.0" 1582 + }, 1583 + "funding": { 1584 + "type": "opencollective", 1585 + "url": "https://opencollective.com/parcel" 1586 + } 1587 + }, 1588 + "node_modules/lightningcss-linux-x64-musl": { 1589 + "version": "1.30.2", 1590 + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", 1591 + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", 1592 + "cpu": [ 1593 + "x64" 1594 + ], 1595 + "dev": true, 1596 + "license": "MPL-2.0", 1597 + "optional": true, 1598 + "os": [ 1599 + "linux" 1600 + ], 1601 + "engines": { 1602 + "node": ">= 12.0.0" 1603 + }, 1604 + "funding": { 1605 + "type": "opencollective", 1606 + "url": "https://opencollective.com/parcel" 1607 + } 1608 + }, 1609 + "node_modules/lightningcss-win32-arm64-msvc": { 1610 + "version": "1.30.2", 1611 + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", 1612 + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", 1613 + "cpu": [ 1614 + "arm64" 1615 + ], 1616 + "dev": true, 1617 + "license": "MPL-2.0", 1618 + "optional": true, 1619 + "os": [ 1620 + "win32" 1621 + ], 1622 + "engines": { 1623 + "node": ">= 12.0.0" 1624 + }, 1625 + "funding": { 1626 + "type": "opencollective", 1627 + "url": "https://opencollective.com/parcel" 1628 + } 1629 + }, 1630 + "node_modules/lightningcss-win32-x64-msvc": { 1631 + "version": "1.30.2", 1632 + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", 1633 + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", 1634 + "cpu": [ 1635 + "x64" 1636 + ], 1637 + "dev": true, 1638 + "license": "MPL-2.0", 1639 + "optional": true, 1640 + "os": [ 1641 + "win32" 1642 + ], 1643 + "engines": { 1644 + "node": ">= 12.0.0" 1645 + }, 1646 + "funding": { 1647 + "type": "opencollective", 1648 + "url": "https://opencollective.com/parcel" 1649 + } 1650 + }, 1651 + "node_modules/lilconfig": { 1652 + "version": "3.1.3", 1653 + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", 1654 + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", 1655 + "dev": true, 1656 + "license": "MIT", 1657 + "engines": { 1658 + "node": ">=14" 1659 + }, 1660 + "funding": { 1661 + "url": "https://github.com/sponsors/antonk52" 1662 + } 1663 + }, 1664 + "node_modules/magic-string": { 1665 + "version": "0.30.21", 1666 + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", 1667 + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", 1668 + "dev": true, 1669 + "license": "MIT", 1670 + "dependencies": { 1671 + "@jridgewell/sourcemap-codec": "^1.5.5" 1672 + } 1673 + }, 1674 + "node_modules/nanoid": { 1675 + "version": "3.3.11", 1676 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 1677 + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 1678 + "dev": true, 1679 + "funding": [ 1680 + { 1681 + "type": "github", 1682 + "url": "https://github.com/sponsors/ai" 1683 + } 1684 + ], 1685 + "license": "MIT", 1686 + "bin": { 1687 + "nanoid": "bin/nanoid.cjs" 1688 + }, 1689 + "engines": { 1690 + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1691 + } 1692 + }, 1693 + "node_modules/node-releases": { 1694 + "version": "2.0.27", 1695 + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", 1696 + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", 1697 + "dev": true, 1698 + "license": "MIT" 1699 + }, 1700 + "node_modules/normalize-path": { 1701 + "version": "3.0.0", 1702 + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1703 + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1704 + "dev": true, 1705 + "license": "MIT", 1706 + "engines": { 1707 + "node": ">=0.10.0" 1708 + } 1709 + }, 1710 + "node_modules/picocolors": { 1711 + "version": "1.1.1", 1712 + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1713 + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1714 + "dev": true, 1715 + "license": "ISC" 1716 + }, 1717 + "node_modules/picomatch": { 1718 + "version": "2.3.1", 1719 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1720 + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1721 + "dev": true, 1722 + "license": "MIT", 1723 + "engines": { 1724 + "node": ">=8.6" 1725 + }, 1726 + "funding": { 1727 + "url": "https://github.com/sponsors/jonschlinkert" 1728 + } 1729 + }, 1730 + "node_modules/pify": { 1731 + "version": "2.3.0", 1732 + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1733 + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 1734 + "dev": true, 1735 + "license": "MIT", 1736 + "engines": { 1737 + "node": ">=0.10.0" 1738 + } 1739 + }, 1740 + "node_modules/postcss": { 1741 + "version": "8.5.6", 1742 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", 1743 + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", 1744 + "dev": true, 1745 + "funding": [ 1746 + { 1747 + "type": "opencollective", 1748 + "url": "https://opencollective.com/postcss/" 1749 + }, 1750 + { 1751 + "type": "tidelift", 1752 + "url": "https://tidelift.com/funding/github/npm/postcss" 1753 + }, 1754 + { 1755 + "type": "github", 1756 + "url": "https://github.com/sponsors/ai" 1757 + } 1758 + ], 1759 + "license": "MIT", 1760 + "dependencies": { 1761 + "nanoid": "^3.3.11", 1762 + "picocolors": "^1.1.1", 1763 + "source-map-js": "^1.2.1" 1764 + }, 1765 + "engines": { 1766 + "node": "^10 || ^12 || >=14" 1767 + } 1768 + }, 1769 + "node_modules/postcss-cli": { 1770 + "version": "11.0.1", 1771 + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.1.tgz", 1772 + "integrity": "sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==", 1773 + "dev": true, 1774 + "license": "MIT", 1775 + "dependencies": { 1776 + "chokidar": "^3.3.0", 1777 + "dependency-graph": "^1.0.0", 1778 + "fs-extra": "^11.0.0", 1779 + "picocolors": "^1.0.0", 1780 + "postcss-load-config": "^5.0.0", 1781 + "postcss-reporter": "^7.0.0", 1782 + "pretty-hrtime": "^1.0.3", 1783 + "read-cache": "^1.0.0", 1784 + "slash": "^5.0.0", 1785 + "tinyglobby": "^0.2.12", 1786 + "yargs": "^17.0.0" 1787 + }, 1788 + "bin": { 1789 + "postcss": "index.js" 1790 + }, 1791 + "engines": { 1792 + "node": ">=18" 1793 + }, 1794 + "peerDependencies": { 1795 + "postcss": "^8.0.0" 1796 + } 1797 + }, 1798 + "node_modules/postcss-custom-media": { 1799 + "version": "11.0.6", 1800 + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz", 1801 + "integrity": "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==", 1802 + "dev": true, 1803 + "funding": [ 1804 + { 1805 + "type": "github", 1806 + "url": "https://github.com/sponsors/csstools" 1807 + }, 1808 + { 1809 + "type": "opencollective", 1810 + "url": "https://opencollective.com/csstools" 1811 + } 1812 + ], 1813 + "license": "MIT", 1814 + "dependencies": { 1815 + "@csstools/cascade-layer-name-parser": "^2.0.5", 1816 + "@csstools/css-parser-algorithms": "^3.0.5", 1817 + "@csstools/css-tokenizer": "^3.0.4", 1818 + "@csstools/media-query-list-parser": "^4.0.3" 1819 + }, 1820 + "engines": { 1821 + "node": ">=18" 1822 + }, 1823 + "peerDependencies": { 1824 + "postcss": "^8.4" 1825 + } 1826 + }, 1827 + "node_modules/postcss-load-config": { 1828 + "version": "5.1.0", 1829 + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz", 1830 + "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==", 1831 + "dev": true, 1832 + "funding": [ 1833 + { 1834 + "type": "opencollective", 1835 + "url": "https://opencollective.com/postcss/" 1836 + }, 1837 + { 1838 + "type": "github", 1839 + "url": "https://github.com/sponsors/ai" 1840 + } 1841 + ], 1842 + "license": "MIT", 1843 + "dependencies": { 1844 + "lilconfig": "^3.1.1", 1845 + "yaml": "^2.4.2" 1846 + }, 1847 + "engines": { 1848 + "node": ">= 18" 1849 + }, 1850 + "peerDependencies": { 1851 + "jiti": ">=1.21.0", 1852 + "postcss": ">=8.0.9", 1853 + "tsx": "^4.8.1" 1854 + }, 1855 + "peerDependenciesMeta": { 1856 + "jiti": { 1857 + "optional": true 1858 + }, 1859 + "postcss": { 1860 + "optional": true 1861 + }, 1862 + "tsx": { 1863 + "optional": true 1864 + } 1865 + } 1866 + }, 1867 + "node_modules/postcss-reporter": { 1868 + "version": "7.1.0", 1869 + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.1.0.tgz", 1870 + "integrity": "sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA==", 1871 + "dev": true, 1872 + "funding": [ 1873 + { 1874 + "type": "opencollective", 1875 + "url": "https://opencollective.com/postcss/" 1876 + }, 1877 + { 1878 + "type": "github", 1879 + "url": "https://github.com/sponsors/ai" 1880 + } 1881 + ], 1882 + "license": "MIT", 1883 + "dependencies": { 1884 + "picocolors": "^1.0.0", 1885 + "thenby": "^1.3.4" 1886 + }, 1887 + "engines": { 1888 + "node": ">=10" 1889 + }, 1890 + "peerDependencies": { 1891 + "postcss": "^8.1.0" 1892 + } 1893 + }, 1894 + "node_modules/postcss-value-parser": { 1895 + "version": "4.2.0", 1896 + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 1897 + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 1898 + "dev": true, 1899 + "license": "MIT" 1900 + }, 1901 + "node_modules/pretty-hrtime": { 1902 + "version": "1.0.3", 1903 + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", 1904 + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", 1905 + "dev": true, 1906 + "license": "MIT", 1907 + "engines": { 1908 + "node": ">= 0.8" 1909 + } 1910 + }, 1911 + "node_modules/read-cache": { 1912 + "version": "1.0.0", 1913 + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 1914 + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 1915 + "dev": true, 1916 + "license": "MIT", 1917 + "dependencies": { 1918 + "pify": "^2.3.0" 1919 + } 1920 + }, 1921 + "node_modules/readdirp": { 1922 + "version": "3.6.0", 1923 + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1924 + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1925 + "dev": true, 1926 + "license": "MIT", 1927 + "dependencies": { 1928 + "picomatch": "^2.2.1" 1929 + }, 1930 + "engines": { 1931 + "node": ">=8.10.0" 1932 + } 1933 + }, 1934 + "node_modules/require-directory": { 1935 + "version": "2.1.1", 1936 + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1937 + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1938 + "dev": true, 1939 + "license": "MIT", 1940 + "engines": { 1941 + "node": ">=0.10.0" 1942 + } 1943 + }, 1944 + "node_modules/slash": { 1945 + "version": "5.1.0", 1946 + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", 1947 + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", 1948 + "dev": true, 1949 + "license": "MIT", 1950 + "engines": { 1951 + "node": ">=14.16" 1952 + }, 1953 + "funding": { 1954 + "url": "https://github.com/sponsors/sindresorhus" 1955 + } 1956 + }, 1957 + "node_modules/source-map-js": { 1958 + "version": "1.2.1", 1959 + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 1960 + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 1961 + "dev": true, 1962 + "license": "BSD-3-Clause", 1963 + "engines": { 1964 + "node": ">=0.10.0" 1965 + } 1966 + }, 1967 + "node_modules/string-width": { 1968 + "version": "4.2.3", 1969 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1970 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1971 + "dev": true, 1972 + "license": "MIT", 1973 + "dependencies": { 1974 + "emoji-regex": "^8.0.0", 1975 + "is-fullwidth-code-point": "^3.0.0", 1976 + "strip-ansi": "^6.0.1" 1977 + }, 1978 + "engines": { 1979 + "node": ">=8" 1980 + } 1981 + }, 1982 + "node_modules/strip-ansi": { 1983 + "version": "6.0.1", 1984 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1985 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1986 + "dev": true, 1987 + "license": "MIT", 1988 + "dependencies": { 1989 + "ansi-regex": "^5.0.1" 1990 + }, 1991 + "engines": { 1992 + "node": ">=8" 1993 + } 1994 + }, 1995 + "node_modules/tailwindcss": { 1996 + "version": "4.1.18", 1997 + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", 1998 + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", 1999 + "license": "MIT" 2000 + }, 2001 + "node_modules/tapable": { 2002 + "version": "2.3.0", 2003 + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", 2004 + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", 2005 + "dev": true, 2006 + "license": "MIT", 2007 + "engines": { 2008 + "node": ">=6" 2009 + }, 2010 + "funding": { 2011 + "type": "opencollective", 2012 + "url": "https://opencollective.com/webpack" 2013 + } 2014 + }, 2015 + "node_modules/thenby": { 2016 + "version": "1.3.4", 2017 + "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", 2018 + "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", 2019 + "dev": true, 2020 + "license": "Apache-2.0" 2021 + }, 2022 + "node_modules/tinyglobby": { 2023 + "version": "0.2.15", 2024 + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", 2025 + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", 2026 + "dev": true, 2027 + "license": "MIT", 2028 + "dependencies": { 2029 + "fdir": "^6.5.0", 2030 + "picomatch": "^4.0.3" 2031 + }, 2032 + "engines": { 2033 + "node": ">=12.0.0" 2034 + }, 2035 + "funding": { 2036 + "url": "https://github.com/sponsors/SuperchupuDev" 2037 + } 2038 + }, 2039 + "node_modules/tinyglobby/node_modules/fdir": { 2040 + "version": "6.5.0", 2041 + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 2042 + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 2043 + "dev": true, 2044 + "license": "MIT", 2045 + "engines": { 2046 + "node": ">=12.0.0" 2047 + }, 2048 + "peerDependencies": { 2049 + "picomatch": "^3 || ^4" 2050 + }, 2051 + "peerDependenciesMeta": { 2052 + "picomatch": { 2053 + "optional": true 2054 + } 2055 + } 2056 + }, 2057 + "node_modules/tinyglobby/node_modules/picomatch": { 2058 + "version": "4.0.3", 2059 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", 2060 + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 2061 + "dev": true, 2062 + "license": "MIT", 2063 + "engines": { 2064 + "node": ">=12" 2065 + }, 2066 + "funding": { 2067 + "url": "https://github.com/sponsors/jonschlinkert" 2068 + } 2069 + }, 2070 + "node_modules/to-regex-range": { 2071 + "version": "5.0.1", 2072 + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2073 + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2074 + "dev": true, 2075 + "license": "MIT", 2076 + "dependencies": { 2077 + "is-number": "^7.0.0" 2078 + }, 2079 + "engines": { 2080 + "node": ">=8.0" 2081 + } 2082 + }, 2083 + "node_modules/universalify": { 2084 + "version": "2.0.1", 2085 + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", 2086 + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", 2087 + "dev": true, 2088 + "license": "MIT", 2089 + "engines": { 2090 + "node": ">= 10.0.0" 2091 + } 2092 + }, 2093 + "node_modules/update-browserslist-db": { 2094 + "version": "1.2.3", 2095 + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", 2096 + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", 2097 + "dev": true, 2098 + "funding": [ 2099 + { 2100 + "type": "opencollective", 2101 + "url": "https://opencollective.com/browserslist" 2102 + }, 2103 + { 2104 + "type": "tidelift", 2105 + "url": "https://tidelift.com/funding/github/npm/browserslist" 2106 + }, 2107 + { 2108 + "type": "github", 2109 + "url": "https://github.com/sponsors/ai" 2110 + } 2111 + ], 2112 + "license": "MIT", 2113 + "dependencies": { 2114 + "escalade": "^3.2.0", 2115 + "picocolors": "^1.1.1" 2116 + }, 2117 + "bin": { 2118 + "update-browserslist-db": "cli.js" 2119 + }, 2120 + "peerDependencies": { 2121 + "browserslist": ">= 4.21.0" 2122 + } 2123 + }, 2124 + "node_modules/wrap-ansi": { 2125 + "version": "7.0.0", 2126 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2127 + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2128 + "dev": true, 2129 + "license": "MIT", 2130 + "dependencies": { 2131 + "ansi-styles": "^4.0.0", 2132 + "string-width": "^4.1.0", 2133 + "strip-ansi": "^6.0.0" 2134 + }, 2135 + "engines": { 2136 + "node": ">=10" 2137 + }, 2138 + "funding": { 2139 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2140 + } 2141 + }, 2142 + "node_modules/y18n": { 2143 + "version": "5.0.8", 2144 + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2145 + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2146 + "dev": true, 2147 + "license": "ISC", 2148 + "engines": { 2149 + "node": ">=10" 2150 + } 2151 + }, 2152 + "node_modules/yaml": { 2153 + "version": "2.8.2", 2154 + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", 2155 + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", 2156 + "dev": true, 2157 + "license": "ISC", 2158 + "bin": { 2159 + "yaml": "bin.mjs" 2160 + }, 2161 + "engines": { 2162 + "node": ">= 14.6" 2163 + }, 2164 + "funding": { 2165 + "url": "https://github.com/sponsors/eemeli" 2166 + } 2167 + }, 2168 + "node_modules/yargs": { 2169 + "version": "17.7.2", 2170 + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 2171 + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 2172 + "dev": true, 2173 + "license": "MIT", 2174 + "dependencies": { 2175 + "cliui": "^8.0.1", 2176 + "escalade": "^3.1.1", 2177 + "get-caller-file": "^2.0.5", 2178 + "require-directory": "^2.1.1", 2179 + "string-width": "^4.2.3", 2180 + "y18n": "^5.0.5", 2181 + "yargs-parser": "^21.1.1" 2182 + }, 2183 + "engines": { 2184 + "node": ">=12" 2185 + } 2186 + }, 2187 + "node_modules/yargs-parser": { 2188 + "version": "21.1.1", 2189 + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 2190 + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 2191 + "dev": true, 2192 + "license": "ISC", 2193 + "engines": { 2194 + "node": ">=12" 2195 + } 2196 + } 2197 + } 2198 + }
+15
resources/package.json
··· 1 + { 2 + "devDependencies": { 3 + "@tailwindcss/postcss": "^4.1.18", 4 + "autoprefixer": "^10.4.23", 5 + "esbuild": "0.27.2", 6 + "postcss": "^8.5.6", 7 + "postcss-cli": "^11.0.1", 8 + "postcss-custom-media": "^11.0.6" 9 + }, 10 + "dependencies": { 11 + "htmx.org": "^4.0.0-alpha6", 12 + "tailwindcss": "^4.1.18" 13 + }, 14 + "type": "module" 15 + }
+7
resources/views/about.html
··· 1 + {{ define "title" }}About{{ end }} 2 + 3 + {{ define "content"}} 4 + <h1>About</h1> 5 + 6 + <a href="/" hx-boost="true">Link</a> 7 + {{ end }}
+15
resources/views/index.html
··· 1 + {{ define "title" }} Hi {{ end }} 2 + 3 + {{ define "content" }} 4 + <h1>Hello World</h1> 5 + <p>This is a test</p> 6 + 7 + <a class="button variant-default shape-square scheme-default" href="/about" hx-boost="true">Link</a> 8 + 9 + 10 + <button type="button">Button</button> 11 + 12 + <p> 13 + Lorem ipsum, dolor sit amet consectetur adipisicing elit. Tenetur temporibus laborum iste aut veniam vitae ipsum quas dolore quasi enim tempora odit soluta qui assumenda, quae possimus, magni ad, sequi alias exercitationem suscipit aperiam. Eveniet omnis molestias, at eligendi illum similique excepturi facilis quidem mollitia doloribus rerum eius hic ea nulla natus, exercitationem laudantium fugiat corrupti quas rem minus! Vero accusantium quam maiores quae odit ratione fugit beatae nisi tempore distinctio labore soluta voluptatum iure ipsum aperiam blanditiis laborum quaerat, assumenda debitis expedita modi. Veniam voluptatum error labore nulla autem assumenda consequuntur asperiores illum exercitationem, quam quod obcaecati ratione facere quas? Quo cum corporis vel ipsa tempore maxime minus sapiente blanditiis dolore laborum modi architecto, consequatur voluptate sequi! Sunt consectetur, ipsam esse quae quia totam quod labore iste et vitae veniam nihil, reiciendis perferendis enim, facilis debitis officiis ipsa corrupti qui nesciunt sed placeat ad sequi. Vitae temporibus necessitatibus omnis amet, consequuntur iusto nulla asperiores delectus commodi, doloremque expedita ipsa nostrum doloribus tempore a modi distinctio aliquid eius placeat ipsam. Temporibus libero iusto possimus soluta inventore sit veniam voluptate hic, eum voluptas saepe quos aliquid dolores qui tenetur id provident assumenda. Iusto amet maxime vero fuga. Temporibus saepe praesentium sapiente facere adipisci. Quis excepturi minima obcaecati optio ad illum molestiae quas, explicabo exercitationem dolorem voluptatibus omnis. Hic, assumenda a, sit ratione tempora dolorum natus voluptate consequatur ipsa expedita cum in fugiat laudantium aut facilis est corrupti ipsum! Deleniti, nulla. Odit corporis atque aliquid ea, obcaecati sunt veniam, eius exercitationem iusto necessitatibus ratione? Molestias repudiandae debitis quae maiores vitae sapiente dolor sequi fugiat facere cupiditate, ut sit tenetur, hic eius, harum atque a eaque rem similique praesentium? Obcaecati ullam repudiandae porro quos quas nemo provident eum excepturi laboriosam fuga minima dolorem molestiae, ex deserunt ea quod tempora impedit reprehenderit eius. Eaque consequatur obcaecati blanditiis eius, hic aspernatur est voluptatem deserunt, eum qui optio aliquam laboriosam fugit nemo itaque minima? Ex saepe dignissimos ullam deserunt veritatis, officiis facere enim exercitationem. Harum eius necessitatibus ducimus aut eveniet facere quibusdam repellendus. Earum itaque sed aperiam placeat repellendus ex nam laboriosam saepe magni distinctio quia eveniet rem laborum dolorem quis explicabo, iste beatae excepturi nulla. Voluptatem quasi voluptatibus eligendi magni ducimus reiciendis blanditiis architecto. Iusto, dolorem placeat voluptatem reprehenderit quia, perferendis officia similique possimus obcaecati quod nisi ipsa. Iste rerum nulla atque dolor possimus facere minima adipisci ratione aut quae at nobis fuga, vitae eligendi quia dicta architecto sint vel omnis, totam ea numquam fugit laboriosam ducimus. Quisquam iure beatae autem, ipsum error in nulla necessitatibus alias totam voluptates vero quod, rerum dolore molestiae sint odio velit, recusandae similique aliquid impedit! Quo tenetur asperiores fuga corporis explicabo consequuntur obcaecati ipsum maxime dignissimos quasi voluptate temporibus repudiandae tempora dolore odit impedit, ad ex aliquam. Minima, iure incidunt necessitatibus aliquam officiis, veniam, assumenda porro itaque sed enim possimus quas aliquid! Temporibus molestias at mollitia blanditiis ea. Consectetur mollitia minus atque in officia adipisci! Dignissimos, exercitationem. Dolore vel vero quo eos eligendi at minus illum voluptas sint ducimus! 14 + </p> 15 + {{ end }}
+17
resources/views/layouts/base.html
··· 1 + <!doctype html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8" /> 5 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 + <title>{{ block "title" . }}{{ end }}</title> 7 + <link rel="stylesheet" href="/assets/app.css" /> 8 + <script src="/assets/app.js" defer></script> 9 + </head> 10 + <body class="@container"> 11 + {{ template "partials/header" . }} 12 + <div class="container"> 13 + {{ block "content" . }}{{ end }} 14 + </div> 15 + {{ template "partials/footer" . }} 16 + </body> 17 + </html>
+8
resources/views/library/index.html
··· 1 + 2 + 3 + {{ define "title" }}Library{{ end }} 4 + 5 + {{ define "content"}} 6 + <h1>Library</h1> 7 + pfdjslkfjsdlk 8 + {{ end }}
+7
resources/views/partials/footer.html
··· 1 + {{ define "partials/footer" }} 2 + <footer> 3 + <div class="container"> 4 + Keep Track 2026 5 + </div> 6 + </footer> 7 + {{ end }}
+23
resources/views/partials/header.html
··· 1 + {{ define "partials/header" }} 2 + 3 + {{ $items := (slice 4 + (dict "label" "Home" "href" "/") 5 + (dict "label" "About" "href" "/about") 6 + (dict "label" "Library" "href" "/library") 7 + ) }} 8 + 9 + <header> 10 + <nav class="container"> 11 + {{ template "partials/logo" . }} 12 + 13 + <ul class="list"> 14 + {{ range $index, $item := $items }} 15 + <li class="list-item"> 16 + <a hx-boost="true" href="{{ $item.href }}">{{ $item.label }}</a> 17 + </li> 18 + {{ end }} 19 + </ul> 20 + </nav> 21 + </header> 22 + 23 + {{ end }}
+3
resources/views/partials/logo.html
··· 1 + {{ define "partials/logo" }} 2 + <p>KeepTrack</p> 3 + {{ end }}
+11 -5
taskfile.yml
··· 80 80 - task: seed.stats 81 81 - duckdb private/database/statistics.dev.duckdb < scripts/seeds/statistics.sql 82 82 83 + watch:css: 84 + dir: resources 85 + cmd: npx postcss css/main.css --config css --output ../private/assets/app.css --watch 86 + 87 + watch:js: 88 + dir: resources 89 + cmd: npx esbuild js/main.js --bundle --outfile=../private/assets/app.js --watch 90 + 83 91 build:*: 84 92 cmd: go build -o bin/{{ index .MATCH 0 }} cmd/{{ index .MATCH 0 }}/main.go 85 93 ··· 104 112 serve: 105 113 watch: true 106 114 sources: 115 + - "resources/**/*.html" 107 116 - "**/*.go" 108 117 deps: 118 + - task: watch:css 119 + - task: watch:js 109 120 - task: run:server 110 - - task: serve-frontend 111 121 cmd: echo "serving" 112 - 113 - serve-frontend: 114 - dir: web 115 - cmd: npm run dev
-36
web/esbuild.config.ts
··· 1 - import * as esbuild from "esbuild"; 2 - import svelte from "esbuild-svelte"; 3 - import { sveltePreprocess } from "svelte-preprocess"; 4 - 5 - const args = process.argv.slice(2); 6 - let watch = args.includes("--watch"); 7 - let deploy = args.includes("--deploy"); 8 - 9 - const options: esbuild.BuildOptions = { 10 - bundle: true, 11 - minify: deploy, 12 - sourcemap: !deploy, 13 - splitting: deploy, 14 - treeShaking: deploy, 15 - format: "esm", 16 - tsconfig: "tsconfig.json", 17 - target: "firefox118", 18 - outdir: "../public/assets", 19 - alias: { 20 - $components: "./components", 21 - }, 22 - chunkNames: "chunks/[name]-[hash]", 23 - entryPoints: ["src/main.ts"], 24 - conditions: ["svelte", "browser"], 25 - plugins: [ 26 - svelte({ 27 - preprocess: sveltePreprocess(), 28 - }), 29 - ], 30 - }; 31 - 32 - if (watch) { 33 - esbuild.context(options).then((ctx) => ctx.watch()); 34 - } else { 35 - esbuild.build(options); 36 - }
-1208
web/package-lock.json
··· 1 - { 2 - "name": "web", 3 - "lockfileVersion": 3, 4 - "requires": true, 5 - "packages": { 6 - "": { 7 - "dependencies": { 8 - "@inertiajs/svelte": "^2.3.8", 9 - "esbuild-svelte": "^0.9.4", 10 - "svelte-preprocess": "^6.0.3" 11 - }, 12 - "devDependencies": { 13 - "@types/node": "^25.0.3", 14 - "esbuild": "0.27.2" 15 - } 16 - }, 17 - "node_modules/@esbuild/aix-ppc64": { 18 - "version": "0.27.2", 19 - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", 20 - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", 21 - "cpu": [ 22 - "ppc64" 23 - ], 24 - "license": "MIT", 25 - "optional": true, 26 - "os": [ 27 - "aix" 28 - ], 29 - "engines": { 30 - "node": ">=18" 31 - } 32 - }, 33 - "node_modules/@esbuild/android-arm": { 34 - "version": "0.27.2", 35 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", 36 - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", 37 - "cpu": [ 38 - "arm" 39 - ], 40 - "license": "MIT", 41 - "optional": true, 42 - "os": [ 43 - "android" 44 - ], 45 - "engines": { 46 - "node": ">=18" 47 - } 48 - }, 49 - "node_modules/@esbuild/android-arm64": { 50 - "version": "0.27.2", 51 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", 52 - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", 53 - "cpu": [ 54 - "arm64" 55 - ], 56 - "license": "MIT", 57 - "optional": true, 58 - "os": [ 59 - "android" 60 - ], 61 - "engines": { 62 - "node": ">=18" 63 - } 64 - }, 65 - "node_modules/@esbuild/android-x64": { 66 - "version": "0.27.2", 67 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", 68 - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", 69 - "cpu": [ 70 - "x64" 71 - ], 72 - "license": "MIT", 73 - "optional": true, 74 - "os": [ 75 - "android" 76 - ], 77 - "engines": { 78 - "node": ">=18" 79 - } 80 - }, 81 - "node_modules/@esbuild/darwin-arm64": { 82 - "version": "0.27.2", 83 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", 84 - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", 85 - "cpu": [ 86 - "arm64" 87 - ], 88 - "license": "MIT", 89 - "optional": true, 90 - "os": [ 91 - "darwin" 92 - ], 93 - "engines": { 94 - "node": ">=18" 95 - } 96 - }, 97 - "node_modules/@esbuild/darwin-x64": { 98 - "version": "0.27.2", 99 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", 100 - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", 101 - "cpu": [ 102 - "x64" 103 - ], 104 - "license": "MIT", 105 - "optional": true, 106 - "os": [ 107 - "darwin" 108 - ], 109 - "engines": { 110 - "node": ">=18" 111 - } 112 - }, 113 - "node_modules/@esbuild/freebsd-arm64": { 114 - "version": "0.27.2", 115 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", 116 - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", 117 - "cpu": [ 118 - "arm64" 119 - ], 120 - "license": "MIT", 121 - "optional": true, 122 - "os": [ 123 - "freebsd" 124 - ], 125 - "engines": { 126 - "node": ">=18" 127 - } 128 - }, 129 - "node_modules/@esbuild/freebsd-x64": { 130 - "version": "0.27.2", 131 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", 132 - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", 133 - "cpu": [ 134 - "x64" 135 - ], 136 - "license": "MIT", 137 - "optional": true, 138 - "os": [ 139 - "freebsd" 140 - ], 141 - "engines": { 142 - "node": ">=18" 143 - } 144 - }, 145 - "node_modules/@esbuild/linux-arm": { 146 - "version": "0.27.2", 147 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", 148 - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", 149 - "cpu": [ 150 - "arm" 151 - ], 152 - "license": "MIT", 153 - "optional": true, 154 - "os": [ 155 - "linux" 156 - ], 157 - "engines": { 158 - "node": ">=18" 159 - } 160 - }, 161 - "node_modules/@esbuild/linux-arm64": { 162 - "version": "0.27.2", 163 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", 164 - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", 165 - "cpu": [ 166 - "arm64" 167 - ], 168 - "license": "MIT", 169 - "optional": true, 170 - "os": [ 171 - "linux" 172 - ], 173 - "engines": { 174 - "node": ">=18" 175 - } 176 - }, 177 - "node_modules/@esbuild/linux-ia32": { 178 - "version": "0.27.2", 179 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", 180 - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", 181 - "cpu": [ 182 - "ia32" 183 - ], 184 - "license": "MIT", 185 - "optional": true, 186 - "os": [ 187 - "linux" 188 - ], 189 - "engines": { 190 - "node": ">=18" 191 - } 192 - }, 193 - "node_modules/@esbuild/linux-loong64": { 194 - "version": "0.27.2", 195 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", 196 - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", 197 - "cpu": [ 198 - "loong64" 199 - ], 200 - "license": "MIT", 201 - "optional": true, 202 - "os": [ 203 - "linux" 204 - ], 205 - "engines": { 206 - "node": ">=18" 207 - } 208 - }, 209 - "node_modules/@esbuild/linux-mips64el": { 210 - "version": "0.27.2", 211 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", 212 - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", 213 - "cpu": [ 214 - "mips64el" 215 - ], 216 - "license": "MIT", 217 - "optional": true, 218 - "os": [ 219 - "linux" 220 - ], 221 - "engines": { 222 - "node": ">=18" 223 - } 224 - }, 225 - "node_modules/@esbuild/linux-ppc64": { 226 - "version": "0.27.2", 227 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", 228 - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", 229 - "cpu": [ 230 - "ppc64" 231 - ], 232 - "license": "MIT", 233 - "optional": true, 234 - "os": [ 235 - "linux" 236 - ], 237 - "engines": { 238 - "node": ">=18" 239 - } 240 - }, 241 - "node_modules/@esbuild/linux-riscv64": { 242 - "version": "0.27.2", 243 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", 244 - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", 245 - "cpu": [ 246 - "riscv64" 247 - ], 248 - "license": "MIT", 249 - "optional": true, 250 - "os": [ 251 - "linux" 252 - ], 253 - "engines": { 254 - "node": ">=18" 255 - } 256 - }, 257 - "node_modules/@esbuild/linux-s390x": { 258 - "version": "0.27.2", 259 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", 260 - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", 261 - "cpu": [ 262 - "s390x" 263 - ], 264 - "license": "MIT", 265 - "optional": true, 266 - "os": [ 267 - "linux" 268 - ], 269 - "engines": { 270 - "node": ">=18" 271 - } 272 - }, 273 - "node_modules/@esbuild/linux-x64": { 274 - "version": "0.27.2", 275 - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", 276 - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", 277 - "cpu": [ 278 - "x64" 279 - ], 280 - "license": "MIT", 281 - "optional": true, 282 - "os": [ 283 - "linux" 284 - ], 285 - "engines": { 286 - "node": ">=18" 287 - } 288 - }, 289 - "node_modules/@esbuild/netbsd-arm64": { 290 - "version": "0.27.2", 291 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", 292 - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", 293 - "cpu": [ 294 - "arm64" 295 - ], 296 - "license": "MIT", 297 - "optional": true, 298 - "os": [ 299 - "netbsd" 300 - ], 301 - "engines": { 302 - "node": ">=18" 303 - } 304 - }, 305 - "node_modules/@esbuild/netbsd-x64": { 306 - "version": "0.27.2", 307 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", 308 - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", 309 - "cpu": [ 310 - "x64" 311 - ], 312 - "license": "MIT", 313 - "optional": true, 314 - "os": [ 315 - "netbsd" 316 - ], 317 - "engines": { 318 - "node": ">=18" 319 - } 320 - }, 321 - "node_modules/@esbuild/openbsd-arm64": { 322 - "version": "0.27.2", 323 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", 324 - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", 325 - "cpu": [ 326 - "arm64" 327 - ], 328 - "license": "MIT", 329 - "optional": true, 330 - "os": [ 331 - "openbsd" 332 - ], 333 - "engines": { 334 - "node": ">=18" 335 - } 336 - }, 337 - "node_modules/@esbuild/openbsd-x64": { 338 - "version": "0.27.2", 339 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", 340 - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", 341 - "cpu": [ 342 - "x64" 343 - ], 344 - "license": "MIT", 345 - "optional": true, 346 - "os": [ 347 - "openbsd" 348 - ], 349 - "engines": { 350 - "node": ">=18" 351 - } 352 - }, 353 - "node_modules/@esbuild/openharmony-arm64": { 354 - "version": "0.27.2", 355 - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", 356 - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", 357 - "cpu": [ 358 - "arm64" 359 - ], 360 - "license": "MIT", 361 - "optional": true, 362 - "os": [ 363 - "openharmony" 364 - ], 365 - "engines": { 366 - "node": ">=18" 367 - } 368 - }, 369 - "node_modules/@esbuild/sunos-x64": { 370 - "version": "0.27.2", 371 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", 372 - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", 373 - "cpu": [ 374 - "x64" 375 - ], 376 - "license": "MIT", 377 - "optional": true, 378 - "os": [ 379 - "sunos" 380 - ], 381 - "engines": { 382 - "node": ">=18" 383 - } 384 - }, 385 - "node_modules/@esbuild/win32-arm64": { 386 - "version": "0.27.2", 387 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", 388 - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", 389 - "cpu": [ 390 - "arm64" 391 - ], 392 - "license": "MIT", 393 - "optional": true, 394 - "os": [ 395 - "win32" 396 - ], 397 - "engines": { 398 - "node": ">=18" 399 - } 400 - }, 401 - "node_modules/@esbuild/win32-ia32": { 402 - "version": "0.27.2", 403 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", 404 - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", 405 - "cpu": [ 406 - "ia32" 407 - ], 408 - "license": "MIT", 409 - "optional": true, 410 - "os": [ 411 - "win32" 412 - ], 413 - "engines": { 414 - "node": ">=18" 415 - } 416 - }, 417 - "node_modules/@esbuild/win32-x64": { 418 - "version": "0.27.2", 419 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", 420 - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", 421 - "cpu": [ 422 - "x64" 423 - ], 424 - "license": "MIT", 425 - "optional": true, 426 - "os": [ 427 - "win32" 428 - ], 429 - "engines": { 430 - "node": ">=18" 431 - } 432 - }, 433 - "node_modules/@inertiajs/core": { 434 - "version": "2.3.8", 435 - "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.3.8.tgz", 436 - "integrity": "sha512-WIF/ea9FH+yR/nLLrOX9TNN20X2pcHZBLQJYCLZ/oLMaS6GSlnMtHZv5GtKNjmIpSiMvg2PiAqtDF/mvbnr+rQ==", 437 - "license": "MIT", 438 - "dependencies": { 439 - "@types/lodash-es": "^4.17.12", 440 - "axios": "^1.13.2", 441 - "laravel-precognition": "^1.0.0", 442 - "lodash-es": "^4.17.21", 443 - "qs": "^6.14.1" 444 - } 445 - }, 446 - "node_modules/@inertiajs/svelte": { 447 - "version": "2.3.8", 448 - "resolved": "https://registry.npmjs.org/@inertiajs/svelte/-/svelte-2.3.8.tgz", 449 - "integrity": "sha512-BbwAvhv9ltvg70K6tnfPUjt6qKV2Mk/doiquJeIHnnDyDAq10XuaI5221v2aZQH0nAl38izWwkYXsNIlSu5G1Q==", 450 - "license": "MIT", 451 - "dependencies": { 452 - "@inertiajs/core": "2.3.8", 453 - "@types/lodash-es": "^4.17.12", 454 - "laravel-precognition": "^1.0.0", 455 - "lodash-es": "^4.17.21" 456 - }, 457 - "peerDependencies": { 458 - "svelte": "^4.0.0 || ^5.0.0" 459 - } 460 - }, 461 - "node_modules/@jridgewell/gen-mapping": { 462 - "version": "0.3.13", 463 - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", 464 - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", 465 - "license": "MIT", 466 - "peer": true, 467 - "dependencies": { 468 - "@jridgewell/sourcemap-codec": "^1.5.0", 469 - "@jridgewell/trace-mapping": "^0.3.24" 470 - } 471 - }, 472 - "node_modules/@jridgewell/remapping": { 473 - "version": "2.3.5", 474 - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", 475 - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", 476 - "license": "MIT", 477 - "peer": true, 478 - "dependencies": { 479 - "@jridgewell/gen-mapping": "^0.3.5", 480 - "@jridgewell/trace-mapping": "^0.3.24" 481 - } 482 - }, 483 - "node_modules/@jridgewell/resolve-uri": { 484 - "version": "3.1.2", 485 - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 486 - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 487 - "license": "MIT", 488 - "engines": { 489 - "node": ">=6.0.0" 490 - } 491 - }, 492 - "node_modules/@jridgewell/sourcemap-codec": { 493 - "version": "1.5.5", 494 - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 495 - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 496 - "license": "MIT" 497 - }, 498 - "node_modules/@jridgewell/trace-mapping": { 499 - "version": "0.3.31", 500 - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", 501 - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", 502 - "license": "MIT", 503 - "dependencies": { 504 - "@jridgewell/resolve-uri": "^3.1.0", 505 - "@jridgewell/sourcemap-codec": "^1.4.14" 506 - } 507 - }, 508 - "node_modules/@sveltejs/acorn-typescript": { 509 - "version": "1.0.8", 510 - "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.8.tgz", 511 - "integrity": "sha512-esgN+54+q0NjB0Y/4BomT9samII7jGwNy/2a3wNZbT2A2RpmXsXwUt24LvLhx6jUq2gVk4cWEvcRO6MFQbOfNA==", 512 - "license": "MIT", 513 - "peer": true, 514 - "peerDependencies": { 515 - "acorn": "^8.9.0" 516 - } 517 - }, 518 - "node_modules/@types/estree": { 519 - "version": "1.0.8", 520 - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 521 - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 522 - "license": "MIT", 523 - "peer": true 524 - }, 525 - "node_modules/@types/lodash": { 526 - "version": "4.17.21", 527 - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz", 528 - "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==", 529 - "license": "MIT" 530 - }, 531 - "node_modules/@types/lodash-es": { 532 - "version": "4.17.12", 533 - "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", 534 - "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", 535 - "license": "MIT", 536 - "dependencies": { 537 - "@types/lodash": "*" 538 - } 539 - }, 540 - "node_modules/@types/node": { 541 - "version": "25.0.3", 542 - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", 543 - "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", 544 - "dev": true, 545 - "license": "MIT", 546 - "dependencies": { 547 - "undici-types": "~7.16.0" 548 - } 549 - }, 550 - "node_modules/acorn": { 551 - "version": "8.15.0", 552 - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", 553 - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", 554 - "license": "MIT", 555 - "peer": true, 556 - "bin": { 557 - "acorn": "bin/acorn" 558 - }, 559 - "engines": { 560 - "node": ">=0.4.0" 561 - } 562 - }, 563 - "node_modules/aria-query": { 564 - "version": "5.3.2", 565 - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", 566 - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", 567 - "license": "Apache-2.0", 568 - "peer": true, 569 - "engines": { 570 - "node": ">= 0.4" 571 - } 572 - }, 573 - "node_modules/asynckit": { 574 - "version": "0.4.0", 575 - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 576 - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 577 - "license": "MIT" 578 - }, 579 - "node_modules/axios": { 580 - "version": "1.13.2", 581 - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", 582 - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", 583 - "license": "MIT", 584 - "dependencies": { 585 - "follow-redirects": "^1.15.6", 586 - "form-data": "^4.0.4", 587 - "proxy-from-env": "^1.1.0" 588 - } 589 - }, 590 - "node_modules/axobject-query": { 591 - "version": "4.1.0", 592 - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", 593 - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", 594 - "license": "Apache-2.0", 595 - "peer": true, 596 - "engines": { 597 - "node": ">= 0.4" 598 - } 599 - }, 600 - "node_modules/call-bind-apply-helpers": { 601 - "version": "1.0.2", 602 - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", 603 - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 604 - "license": "MIT", 605 - "dependencies": { 606 - "es-errors": "^1.3.0", 607 - "function-bind": "^1.1.2" 608 - }, 609 - "engines": { 610 - "node": ">= 0.4" 611 - } 612 - }, 613 - "node_modules/call-bound": { 614 - "version": "1.0.4", 615 - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", 616 - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", 617 - "license": "MIT", 618 - "dependencies": { 619 - "call-bind-apply-helpers": "^1.0.2", 620 - "get-intrinsic": "^1.3.0" 621 - }, 622 - "engines": { 623 - "node": ">= 0.4" 624 - }, 625 - "funding": { 626 - "url": "https://github.com/sponsors/ljharb" 627 - } 628 - }, 629 - "node_modules/clsx": { 630 - "version": "2.1.1", 631 - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", 632 - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", 633 - "license": "MIT", 634 - "peer": true, 635 - "engines": { 636 - "node": ">=6" 637 - } 638 - }, 639 - "node_modules/combined-stream": { 640 - "version": "1.0.8", 641 - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 642 - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 643 - "license": "MIT", 644 - "dependencies": { 645 - "delayed-stream": "~1.0.0" 646 - }, 647 - "engines": { 648 - "node": ">= 0.8" 649 - } 650 - }, 651 - "node_modules/delayed-stream": { 652 - "version": "1.0.0", 653 - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 654 - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 655 - "license": "MIT", 656 - "engines": { 657 - "node": ">=0.4.0" 658 - } 659 - }, 660 - "node_modules/devalue": { 661 - "version": "5.6.1", 662 - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.1.tgz", 663 - "integrity": "sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A==", 664 - "license": "MIT", 665 - "peer": true 666 - }, 667 - "node_modules/dunder-proto": { 668 - "version": "1.0.1", 669 - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 670 - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 671 - "license": "MIT", 672 - "dependencies": { 673 - "call-bind-apply-helpers": "^1.0.1", 674 - "es-errors": "^1.3.0", 675 - "gopd": "^1.2.0" 676 - }, 677 - "engines": { 678 - "node": ">= 0.4" 679 - } 680 - }, 681 - "node_modules/es-define-property": { 682 - "version": "1.0.1", 683 - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 684 - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 685 - "license": "MIT", 686 - "engines": { 687 - "node": ">= 0.4" 688 - } 689 - }, 690 - "node_modules/es-errors": { 691 - "version": "1.3.0", 692 - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 693 - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 694 - "license": "MIT", 695 - "engines": { 696 - "node": ">= 0.4" 697 - } 698 - }, 699 - "node_modules/es-object-atoms": { 700 - "version": "1.1.1", 701 - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", 702 - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", 703 - "license": "MIT", 704 - "dependencies": { 705 - "es-errors": "^1.3.0" 706 - }, 707 - "engines": { 708 - "node": ">= 0.4" 709 - } 710 - }, 711 - "node_modules/es-set-tostringtag": { 712 - "version": "2.1.0", 713 - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", 714 - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", 715 - "license": "MIT", 716 - "dependencies": { 717 - "es-errors": "^1.3.0", 718 - "get-intrinsic": "^1.2.6", 719 - "has-tostringtag": "^1.0.2", 720 - "hasown": "^2.0.2" 721 - }, 722 - "engines": { 723 - "node": ">= 0.4" 724 - } 725 - }, 726 - "node_modules/esbuild": { 727 - "version": "0.27.2", 728 - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", 729 - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", 730 - "hasInstallScript": true, 731 - "license": "MIT", 732 - "bin": { 733 - "esbuild": "bin/esbuild" 734 - }, 735 - "engines": { 736 - "node": ">=18" 737 - }, 738 - "optionalDependencies": { 739 - "@esbuild/aix-ppc64": "0.27.2", 740 - "@esbuild/android-arm": "0.27.2", 741 - "@esbuild/android-arm64": "0.27.2", 742 - "@esbuild/android-x64": "0.27.2", 743 - "@esbuild/darwin-arm64": "0.27.2", 744 - "@esbuild/darwin-x64": "0.27.2", 745 - "@esbuild/freebsd-arm64": "0.27.2", 746 - "@esbuild/freebsd-x64": "0.27.2", 747 - "@esbuild/linux-arm": "0.27.2", 748 - "@esbuild/linux-arm64": "0.27.2", 749 - "@esbuild/linux-ia32": "0.27.2", 750 - "@esbuild/linux-loong64": "0.27.2", 751 - "@esbuild/linux-mips64el": "0.27.2", 752 - "@esbuild/linux-ppc64": "0.27.2", 753 - "@esbuild/linux-riscv64": "0.27.2", 754 - "@esbuild/linux-s390x": "0.27.2", 755 - "@esbuild/linux-x64": "0.27.2", 756 - "@esbuild/netbsd-arm64": "0.27.2", 757 - "@esbuild/netbsd-x64": "0.27.2", 758 - "@esbuild/openbsd-arm64": "0.27.2", 759 - "@esbuild/openbsd-x64": "0.27.2", 760 - "@esbuild/openharmony-arm64": "0.27.2", 761 - "@esbuild/sunos-x64": "0.27.2", 762 - "@esbuild/win32-arm64": "0.27.2", 763 - "@esbuild/win32-ia32": "0.27.2", 764 - "@esbuild/win32-x64": "0.27.2" 765 - } 766 - }, 767 - "node_modules/esbuild-svelte": { 768 - "version": "0.9.4", 769 - "resolved": "https://registry.npmjs.org/esbuild-svelte/-/esbuild-svelte-0.9.4.tgz", 770 - "integrity": "sha512-v/a0GjkKN06nal2QLluxjk2GXsei3fdtjIuHRa6pVnri5rQBZ6pj4a2WwjLfRojgRsLwDHl4xSeZ1BeUHsqQrw==", 771 - "license": "MIT", 772 - "dependencies": { 773 - "@jridgewell/trace-mapping": "^0.3.19" 774 - }, 775 - "engines": { 776 - "node": ">=18" 777 - }, 778 - "peerDependencies": { 779 - "esbuild": ">=0.17.0", 780 - "svelte": ">=4.2.1 <6" 781 - } 782 - }, 783 - "node_modules/esm-env": { 784 - "version": "1.2.2", 785 - "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", 786 - "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", 787 - "license": "MIT", 788 - "peer": true 789 - }, 790 - "node_modules/esrap": { 791 - "version": "2.2.1", 792 - "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.1.tgz", 793 - "integrity": "sha512-GiYWG34AN/4CUyaWAgunGt0Rxvr1PTMlGC0vvEov/uOQYWne2bpN03Um+k8jT+q3op33mKouP2zeJ6OlM+qeUg==", 794 - "license": "MIT", 795 - "peer": true, 796 - "dependencies": { 797 - "@jridgewell/sourcemap-codec": "^1.4.15" 798 - } 799 - }, 800 - "node_modules/follow-redirects": { 801 - "version": "1.15.11", 802 - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", 803 - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", 804 - "funding": [ 805 - { 806 - "type": "individual", 807 - "url": "https://github.com/sponsors/RubenVerborgh" 808 - } 809 - ], 810 - "license": "MIT", 811 - "engines": { 812 - "node": ">=4.0" 813 - }, 814 - "peerDependenciesMeta": { 815 - "debug": { 816 - "optional": true 817 - } 818 - } 819 - }, 820 - "node_modules/form-data": { 821 - "version": "4.0.5", 822 - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", 823 - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", 824 - "license": "MIT", 825 - "dependencies": { 826 - "asynckit": "^0.4.0", 827 - "combined-stream": "^1.0.8", 828 - "es-set-tostringtag": "^2.1.0", 829 - "hasown": "^2.0.2", 830 - "mime-types": "^2.1.12" 831 - }, 832 - "engines": { 833 - "node": ">= 6" 834 - } 835 - }, 836 - "node_modules/function-bind": { 837 - "version": "1.1.2", 838 - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 839 - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 840 - "license": "MIT", 841 - "funding": { 842 - "url": "https://github.com/sponsors/ljharb" 843 - } 844 - }, 845 - "node_modules/get-intrinsic": { 846 - "version": "1.3.0", 847 - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", 848 - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 849 - "license": "MIT", 850 - "dependencies": { 851 - "call-bind-apply-helpers": "^1.0.2", 852 - "es-define-property": "^1.0.1", 853 - "es-errors": "^1.3.0", 854 - "es-object-atoms": "^1.1.1", 855 - "function-bind": "^1.1.2", 856 - "get-proto": "^1.0.1", 857 - "gopd": "^1.2.0", 858 - "has-symbols": "^1.1.0", 859 - "hasown": "^2.0.2", 860 - "math-intrinsics": "^1.1.0" 861 - }, 862 - "engines": { 863 - "node": ">= 0.4" 864 - }, 865 - "funding": { 866 - "url": "https://github.com/sponsors/ljharb" 867 - } 868 - }, 869 - "node_modules/get-proto": { 870 - "version": "1.0.1", 871 - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", 872 - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 873 - "license": "MIT", 874 - "dependencies": { 875 - "dunder-proto": "^1.0.1", 876 - "es-object-atoms": "^1.0.0" 877 - }, 878 - "engines": { 879 - "node": ">= 0.4" 880 - } 881 - }, 882 - "node_modules/gopd": { 883 - "version": "1.2.0", 884 - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 885 - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 886 - "license": "MIT", 887 - "engines": { 888 - "node": ">= 0.4" 889 - }, 890 - "funding": { 891 - "url": "https://github.com/sponsors/ljharb" 892 - } 893 - }, 894 - "node_modules/has-symbols": { 895 - "version": "1.1.0", 896 - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", 897 - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", 898 - "license": "MIT", 899 - "engines": { 900 - "node": ">= 0.4" 901 - }, 902 - "funding": { 903 - "url": "https://github.com/sponsors/ljharb" 904 - } 905 - }, 906 - "node_modules/has-tostringtag": { 907 - "version": "1.0.2", 908 - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", 909 - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", 910 - "license": "MIT", 911 - "dependencies": { 912 - "has-symbols": "^1.0.3" 913 - }, 914 - "engines": { 915 - "node": ">= 0.4" 916 - }, 917 - "funding": { 918 - "url": "https://github.com/sponsors/ljharb" 919 - } 920 - }, 921 - "node_modules/hasown": { 922 - "version": "2.0.2", 923 - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 924 - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 925 - "license": "MIT", 926 - "dependencies": { 927 - "function-bind": "^1.1.2" 928 - }, 929 - "engines": { 930 - "node": ">= 0.4" 931 - } 932 - }, 933 - "node_modules/is-reference": { 934 - "version": "3.0.3", 935 - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", 936 - "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", 937 - "license": "MIT", 938 - "peer": true, 939 - "dependencies": { 940 - "@types/estree": "^1.0.6" 941 - } 942 - }, 943 - "node_modules/laravel-precognition": { 944 - "version": "1.0.0", 945 - "resolved": "https://registry.npmjs.org/laravel-precognition/-/laravel-precognition-1.0.0.tgz", 946 - "integrity": "sha512-hvXPT7dayCQAidxnsY0hab9Q+Y2rsh7xRpH9uiFtXN8Dekc3tIZt+NrxrOZ9N5SwHBmRBze/Bv+ElfXac0kD6g==", 947 - "license": "MIT", 948 - "dependencies": { 949 - "axios": "^1.4.0", 950 - "lodash-es": "^4.17.21" 951 - } 952 - }, 953 - "node_modules/locate-character": { 954 - "version": "3.0.0", 955 - "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", 956 - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", 957 - "license": "MIT", 958 - "peer": true 959 - }, 960 - "node_modules/lodash-es": { 961 - "version": "4.17.22", 962 - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.22.tgz", 963 - "integrity": "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==", 964 - "license": "MIT" 965 - }, 966 - "node_modules/magic-string": { 967 - "version": "0.30.21", 968 - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", 969 - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", 970 - "license": "MIT", 971 - "peer": true, 972 - "dependencies": { 973 - "@jridgewell/sourcemap-codec": "^1.5.5" 974 - } 975 - }, 976 - "node_modules/math-intrinsics": { 977 - "version": "1.1.0", 978 - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", 979 - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", 980 - "license": "MIT", 981 - "engines": { 982 - "node": ">= 0.4" 983 - } 984 - }, 985 - "node_modules/mime-db": { 986 - "version": "1.52.0", 987 - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 988 - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 989 - "license": "MIT", 990 - "engines": { 991 - "node": ">= 0.6" 992 - } 993 - }, 994 - "node_modules/mime-types": { 995 - "version": "2.1.35", 996 - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 997 - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 998 - "license": "MIT", 999 - "dependencies": { 1000 - "mime-db": "1.52.0" 1001 - }, 1002 - "engines": { 1003 - "node": ">= 0.6" 1004 - } 1005 - }, 1006 - "node_modules/object-inspect": { 1007 - "version": "1.13.4", 1008 - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", 1009 - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", 1010 - "license": "MIT", 1011 - "engines": { 1012 - "node": ">= 0.4" 1013 - }, 1014 - "funding": { 1015 - "url": "https://github.com/sponsors/ljharb" 1016 - } 1017 - }, 1018 - "node_modules/proxy-from-env": { 1019 - "version": "1.1.0", 1020 - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 1021 - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", 1022 - "license": "MIT" 1023 - }, 1024 - "node_modules/qs": { 1025 - "version": "6.14.1", 1026 - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", 1027 - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", 1028 - "license": "BSD-3-Clause", 1029 - "dependencies": { 1030 - "side-channel": "^1.1.0" 1031 - }, 1032 - "engines": { 1033 - "node": ">=0.6" 1034 - }, 1035 - "funding": { 1036 - "url": "https://github.com/sponsors/ljharb" 1037 - } 1038 - }, 1039 - "node_modules/side-channel": { 1040 - "version": "1.1.0", 1041 - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", 1042 - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", 1043 - "license": "MIT", 1044 - "dependencies": { 1045 - "es-errors": "^1.3.0", 1046 - "object-inspect": "^1.13.3", 1047 - "side-channel-list": "^1.0.0", 1048 - "side-channel-map": "^1.0.1", 1049 - "side-channel-weakmap": "^1.0.2" 1050 - }, 1051 - "engines": { 1052 - "node": ">= 0.4" 1053 - }, 1054 - "funding": { 1055 - "url": "https://github.com/sponsors/ljharb" 1056 - } 1057 - }, 1058 - "node_modules/side-channel-list": { 1059 - "version": "1.0.0", 1060 - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", 1061 - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", 1062 - "license": "MIT", 1063 - "dependencies": { 1064 - "es-errors": "^1.3.0", 1065 - "object-inspect": "^1.13.3" 1066 - }, 1067 - "engines": { 1068 - "node": ">= 0.4" 1069 - }, 1070 - "funding": { 1071 - "url": "https://github.com/sponsors/ljharb" 1072 - } 1073 - }, 1074 - "node_modules/side-channel-map": { 1075 - "version": "1.0.1", 1076 - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", 1077 - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", 1078 - "license": "MIT", 1079 - "dependencies": { 1080 - "call-bound": "^1.0.2", 1081 - "es-errors": "^1.3.0", 1082 - "get-intrinsic": "^1.2.5", 1083 - "object-inspect": "^1.13.3" 1084 - }, 1085 - "engines": { 1086 - "node": ">= 0.4" 1087 - }, 1088 - "funding": { 1089 - "url": "https://github.com/sponsors/ljharb" 1090 - } 1091 - }, 1092 - "node_modules/side-channel-weakmap": { 1093 - "version": "1.0.2", 1094 - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", 1095 - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", 1096 - "license": "MIT", 1097 - "dependencies": { 1098 - "call-bound": "^1.0.2", 1099 - "es-errors": "^1.3.0", 1100 - "get-intrinsic": "^1.2.5", 1101 - "object-inspect": "^1.13.3", 1102 - "side-channel-map": "^1.0.1" 1103 - }, 1104 - "engines": { 1105 - "node": ">= 0.4" 1106 - }, 1107 - "funding": { 1108 - "url": "https://github.com/sponsors/ljharb" 1109 - } 1110 - }, 1111 - "node_modules/svelte": { 1112 - "version": "5.46.1", 1113 - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.46.1.tgz", 1114 - "integrity": "sha512-ynjfCHD3nP2el70kN5Pmg37sSi0EjOm9FgHYQdC4giWG/hzO3AatzXXJJgP305uIhGQxSufJLuYWtkY8uK/8RA==", 1115 - "license": "MIT", 1116 - "peer": true, 1117 - "dependencies": { 1118 - "@jridgewell/remapping": "^2.3.4", 1119 - "@jridgewell/sourcemap-codec": "^1.5.0", 1120 - "@sveltejs/acorn-typescript": "^1.0.5", 1121 - "@types/estree": "^1.0.5", 1122 - "acorn": "^8.12.1", 1123 - "aria-query": "^5.3.1", 1124 - "axobject-query": "^4.1.0", 1125 - "clsx": "^2.1.1", 1126 - "devalue": "^5.5.0", 1127 - "esm-env": "^1.2.1", 1128 - "esrap": "^2.2.1", 1129 - "is-reference": "^3.0.3", 1130 - "locate-character": "^3.0.0", 1131 - "magic-string": "^0.30.11", 1132 - "zimmerframe": "^1.1.2" 1133 - }, 1134 - "engines": { 1135 - "node": ">=18" 1136 - } 1137 - }, 1138 - "node_modules/svelte-preprocess": { 1139 - "version": "6.0.3", 1140 - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-6.0.3.tgz", 1141 - "integrity": "sha512-PLG2k05qHdhmRG7zR/dyo5qKvakhm8IJ+hD2eFRQmMLHp7X3eJnjeupUtvuRpbNiF31RjVw45W+abDwHEmP5OA==", 1142 - "hasInstallScript": true, 1143 - "license": "MIT", 1144 - "engines": { 1145 - "node": ">= 18.0.0" 1146 - }, 1147 - "peerDependencies": { 1148 - "@babel/core": "^7.10.2", 1149 - "coffeescript": "^2.5.1", 1150 - "less": "^3.11.3 || ^4.0.0", 1151 - "postcss": "^7 || ^8", 1152 - "postcss-load-config": ">=3", 1153 - "pug": "^3.0.0", 1154 - "sass": "^1.26.8", 1155 - "stylus": ">=0.55", 1156 - "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", 1157 - "svelte": "^4.0.0 || ^5.0.0-next.100 || ^5.0.0", 1158 - "typescript": "^5.0.0" 1159 - }, 1160 - "peerDependenciesMeta": { 1161 - "@babel/core": { 1162 - "optional": true 1163 - }, 1164 - "coffeescript": { 1165 - "optional": true 1166 - }, 1167 - "less": { 1168 - "optional": true 1169 - }, 1170 - "postcss": { 1171 - "optional": true 1172 - }, 1173 - "postcss-load-config": { 1174 - "optional": true 1175 - }, 1176 - "pug": { 1177 - "optional": true 1178 - }, 1179 - "sass": { 1180 - "optional": true 1181 - }, 1182 - "stylus": { 1183 - "optional": true 1184 - }, 1185 - "sugarss": { 1186 - "optional": true 1187 - }, 1188 - "typescript": { 1189 - "optional": true 1190 - } 1191 - } 1192 - }, 1193 - "node_modules/undici-types": { 1194 - "version": "7.16.0", 1195 - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", 1196 - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", 1197 - "dev": true, 1198 - "license": "MIT" 1199 - }, 1200 - "node_modules/zimmerframe": { 1201 - "version": "1.1.4", 1202 - "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", 1203 - "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", 1204 - "license": "MIT", 1205 - "peer": true 1206 - } 1207 - } 1208 - }
-12
web/package.json
··· 1 - { 2 - "devDependencies": { 3 - "@types/node": "^25.0.3", 4 - "esbuild": "0.27.2", 5 - "esbuild-svelte": "^0.9.4", 6 - "svelte-preprocess": "^6.0.3" 7 - }, 8 - "type": "module", 9 - "dependencies": { 10 - "@inertiajs/svelte": "^2.3.8" 11 - } 12 - }
-12
web/src/main.ts
··· 1 - import { createInertiaApp } from "@inertiajs/svelte"; 2 - import { mount } from "svelte"; 3 - 4 - createInertiaApp({ 5 - resolve: async (name) => { 6 - const page = await import(`../views/${name}.svelte`); 7 - return { default: page.default, layout: page.layout }; 8 - }, 9 - setup({ el, App, props }) { 10 - mount(App, { target: el, props }); 11 - }, 12 - });
-22
web/tsconfig.json
··· 1 - { 2 - "compilerOptions": { 3 - "baseUrl": ".", 4 - "skipLibCheck": true, 5 - "noErrorTruncation": false, 6 - "verbatimModuleSyntax": true, 7 - "paths": { 8 - "$lib/*": ["./js/lib/*"], 9 - "$components/*": ["./components/*"], 10 - "$models/*": ["./js/models/*"], 11 - "$schemas/*": ["./js/schemas/*"], 12 - "$routes/*": ["./js/routes/*"], 13 - "$blacklab/*": ["./js/blacklab/*"], 14 - }, 15 - "module": "es2022", 16 - "target": "es2022", 17 - "isolatedModules": true, 18 - "lib": ["esnext", "DOM", "DOM.Iterable"], 19 - "moduleResolution": "node", 20 - }, 21 - "exclude": ["./node_modules/**"], 22 - }