diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 59b6b1e17..5a68cd6a5 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,7 +1,7 @@ --- name: "Bug Report" description: "Submit a bug report for the current release" -labels: ["bug"] +labels: ["🕷️ bug"] projects: ["sysadminsmedia/2"] body: - type: checkboxes @@ -20,6 +20,8 @@ body: required: true - label: I already read the docs and didn't find an answer. required: true + - label: I can replicate the issue inside the Demo install. + required: true - type: input id: homebox-version attributes: @@ -55,6 +57,18 @@ body: - Other validations: required: true + - type: dropdown + id: arch + attributes: + label: OS Architechture + description: What type of processor are you running on. + multiple: true + options: + - x86_64 (AMD, Intel) + - ARM64 + - ARM/v7 + validations: + required: true - type: textarea id: os-details attributes: diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index d7a3ed13a..3fa4d8024 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,7 +1,7 @@ --- name: "Feature Request" description: "Submit a feature request for the current release" -labels: ["enhancement"] +labels: ["⬆️ enhancement"] projects: ["sysadminsmedia/2"] body: - type: textarea diff --git a/backend/.golangci.yml b/backend/.golangci.yml index 8f6311034..46a451e5a 100644 --- a/backend/.golangci.yml +++ b/backend/.golangci.yml @@ -1,7 +1,5 @@ run: timeout: 10m - skip-dirs: - - internal/data/ent.* linters-settings: goconst: min-len: 5 @@ -45,7 +43,7 @@ linters: - errcheck - errorlint - exhaustive - - exportloopref + - copyloopvar - gochecknoinits - goconst - gocritic @@ -71,4 +69,6 @@ linters: - sqlclosecheck issues: exclude-use-default: false + exclude-dirs: + - internal/data/ent.* fix: true diff --git a/backend/app/api/demo.go b/backend/app/api/demo.go index 7a62b5584..54b04f071 100644 --- a/backend/app/api/demo.go +++ b/backend/app/api/demo.go @@ -2,6 +2,7 @@ package main import ( "context" + "errors" "strings" "time" @@ -9,7 +10,7 @@ import ( "github.com/sysadminsmedia/homebox/backend/internal/core/services" ) -func (a *app) SetupDemo() { +func (a *app) SetupDemo() error { csvText := `HB.import_ref,HB.location,HB.labels,HB.quantity,HB.name,HB.description,HB.insured,HB.serial_number,HB.model_number,HB.manufacturer,HB.notes,HB.purchase_from,HB.purchase_price,HB.purchase_time,HB.lifetime_warranty,HB.warranty_expires,HB.warranty_details,HB.sold_to,HB.sold_price,HB.sold_time,HB.sold_notes ,Garage,IOT;Home Assistant; Z-Wave,1,Zooz Universal Relay ZEN17,"Zooz 700 Series Z-Wave Universal Relay ZEN17 for Awnings, Garage Doors, Sprinklers, and More | 2 NO-C-NC Relays (20A, 10A) | Signal Repeater | Hub Required (Compatible with SmartThings and Hubitat)",,,ZEN17,Zooz,,Amazon,39.95,10/13/2021,,,,,,, ,Living Room,IOT;Home Assistant; Z-Wave,1,Zooz Motion Sensor,"Zooz Z-Wave Plus S2 Motion Sensor ZSE18 with Magnetic Mount, Works with Vera and SmartThings",,,ZSE18,Zooz,,Amazon,29.95,10/15/2021,,,,,,, @@ -33,34 +34,34 @@ func (a *app) SetupDemo() { _, err := a.services.User.Login(ctx, registration.Email, registration.Password, false) if err == nil { log.Info().Msg("Demo user already exists, skipping setup") - return + return nil } log.Debug().Msg("Demo user does not exist, setting up demo") _, err = a.services.User.RegisterUser(ctx, registration) if err != nil { log.Err(err).Msg("Failed to register demo user") - log.Fatal().Msg("Failed to setup demo") + return errors.New("failed to setup demo") } token, err := a.services.User.Login(ctx, registration.Email, registration.Password, false) if err != nil { log.Err(err).Msg("Failed to login demo user") - log.Fatal().Msg("Failed to setup demo") - return + return errors.New("failed to setup demo") } self, err := a.services.User.GetSelf(ctx, token.Raw) if err != nil { log.Err(err).Msg("Failed to get self") - log.Fatal().Msg("Failed to setup demo") - return + return errors.New("failed to setup demo") } _, err = a.services.Items.CsvImport(ctx, self.GroupID, strings.NewReader(csvText)) if err != nil { log.Err(err).Msg("Failed to import CSV") - log.Fatal().Msg("Failed to setup demo") + return errors.New("failed to setup demo") } log.Info().Msg("Demo setup complete") + + return nil } diff --git a/backend/app/api/handlers/v1/v1_ctrl_locations.go b/backend/app/api/handlers/v1/v1_ctrl_locations.go index 8bd403bc0..3903bd928 100644 --- a/backend/app/api/handlers/v1/v1_ctrl_locations.go +++ b/backend/app/api/handlers/v1/v1_ctrl_locations.go @@ -85,15 +85,15 @@ func (ctrl *V1Controller) HandleLocationDelete() errchain.HandlerFunc { return adapters.CommandID("id", fn, http.StatusNoContent) } -func (ctrl *V1Controller) GetLocationWithPrice(auth context.Context, GID uuid.UUID, ID uuid.UUID) (repo.LocationOut, error) { - var location, err = ctrl.repo.Locations.GetOneByGroup(auth, GID, ID) +func (ctrl *V1Controller) GetLocationWithPrice(auth context.Context, gid uuid.UUID, id uuid.UUID) (repo.LocationOut, error) { + var location, err = ctrl.repo.Locations.GetOneByGroup(auth, gid, id) if err != nil { return repo.LocationOut{}, err } // Add direct child items price totalPrice := new(big.Int) - items, err := ctrl.repo.Items.QueryByGroup(auth, GID, repo.ItemQuery{LocationIDs: []uuid.UUID{ID}}) + items, err := ctrl.repo.Items.QueryByGroup(auth, gid, repo.ItemQuery{LocationIDs: []uuid.UUID{id}}) if err != nil { return repo.LocationOut{}, err } @@ -112,7 +112,7 @@ func (ctrl *V1Controller) GetLocationWithPrice(auth context.Context, GID uuid.UU // Add price from child locations for _, childLocation := range location.Children { var childLocationWithPrice repo.LocationOut - childLocationWithPrice, err = ctrl.GetLocationWithPrice(auth, GID, childLocation.ID) + childLocationWithPrice, err = ctrl.GetLocationWithPrice(auth, gid, childLocation.ID) if err != nil { return repo.LocationOut{}, err } diff --git a/backend/app/api/handlers/v1/v1_ctrl_maint_entry.go b/backend/app/api/handlers/v1/v1_ctrl_maint_entry.go index 267dbb87d..e9f1f97c0 100644 --- a/backend/app/api/handlers/v1/v1_ctrl_maint_entry.go +++ b/backend/app/api/handlers/v1/v1_ctrl_maint_entry.go @@ -13,15 +13,16 @@ import ( // HandleMaintenanceLogGet godoc // // @Summary Get Maintenance Log -// @Tags Maintenance +// @Tags Item Maintenance // @Produce json -// @Success 200 {object} repo.MaintenanceLog +// @Param filters query repo.MaintenanceFilters false "which maintenance to retrieve" +// @Success 200 {array} repo.MaintenanceEntryWithDetails[] // @Router /v1/items/{id}/maintenance [GET] // @Security Bearer func (ctrl *V1Controller) HandleMaintenanceLogGet() errchain.HandlerFunc { - fn := func(r *http.Request, ID uuid.UUID, q repo.MaintenanceLogQuery) (repo.MaintenanceLog, error) { + fn := func(r *http.Request, ID uuid.UUID, filters repo.MaintenanceFilters) ([]repo.MaintenanceEntryWithDetails, error) { auth := services.NewContext(r.Context()) - return ctrl.repo.MaintEntry.GetLog(auth, auth.GID, ID, q) + return ctrl.repo.MaintEntry.GetMaintenanceByItemID(auth, auth.GID, ID, filters) } return adapters.QueryID("id", fn, http.StatusOK) @@ -30,7 +31,7 @@ func (ctrl *V1Controller) HandleMaintenanceLogGet() errchain.HandlerFunc { // HandleMaintenanceEntryCreate godoc // // @Summary Create Maintenance Entry -// @Tags Maintenance +// @Tags Item Maintenance // @Produce json // @Param payload body repo.MaintenanceEntryCreate true "Entry Data" // @Success 201 {object} repo.MaintenanceEntry @@ -44,39 +45,3 @@ func (ctrl *V1Controller) HandleMaintenanceEntryCreate() errchain.HandlerFunc { return adapters.ActionID("id", fn, http.StatusCreated) } - -// HandleMaintenanceEntryDelete godoc -// -// @Summary Delete Maintenance Entry -// @Tags Maintenance -// @Produce json -// @Success 204 -// @Router /v1/items/{id}/maintenance/{entry_id} [DELETE] -// @Security Bearer -func (ctrl *V1Controller) HandleMaintenanceEntryDelete() errchain.HandlerFunc { - fn := func(r *http.Request, entryID uuid.UUID) (any, error) { - auth := services.NewContext(r.Context()) - err := ctrl.repo.MaintEntry.Delete(auth, entryID) - return nil, err - } - - return adapters.CommandID("entry_id", fn, http.StatusNoContent) -} - -// HandleMaintenanceEntryUpdate godoc -// -// @Summary Update Maintenance Entry -// @Tags Maintenance -// @Produce json -// @Param payload body repo.MaintenanceEntryUpdate true "Entry Data" -// @Success 200 {object} repo.MaintenanceEntry -// @Router /v1/items/{id}/maintenance/{entry_id} [PUT] -// @Security Bearer -func (ctrl *V1Controller) HandleMaintenanceEntryUpdate() errchain.HandlerFunc { - fn := func(r *http.Request, entryID uuid.UUID, body repo.MaintenanceEntryUpdate) (repo.MaintenanceEntry, error) { - auth := services.NewContext(r.Context()) - return ctrl.repo.MaintEntry.Update(auth, entryID, body) - } - - return adapters.ActionID("entry_id", fn, http.StatusOK) -} diff --git a/backend/app/api/handlers/v1/v1_ctrl_maintenance.go b/backend/app/api/handlers/v1/v1_ctrl_maintenance.go new file mode 100644 index 000000000..647bfa703 --- /dev/null +++ b/backend/app/api/handlers/v1/v1_ctrl_maintenance.go @@ -0,0 +1,65 @@ +package v1 + +import ( + "net/http" + + "github.com/google/uuid" + "github.com/hay-kot/httpkit/errchain" + "github.com/sysadminsmedia/homebox/backend/internal/core/services" + "github.com/sysadminsmedia/homebox/backend/internal/data/repo" + "github.com/sysadminsmedia/homebox/backend/internal/web/adapters" +) + +// HandleMaintenanceGetAll godoc +// +// @Summary Query All Maintenance +// @Tags Maintenance +// @Produce json +// @Param filters query repo.MaintenanceFilters false "which maintenance to retrieve" +// @Success 200 {array} repo.MaintenanceEntryWithDetails[] +// @Router /v1/maintenance [GET] +// @Security Bearer +func (ctrl *V1Controller) HandleMaintenanceGetAll() errchain.HandlerFunc { + fn := func(r *http.Request, filters repo.MaintenanceFilters) ([]repo.MaintenanceEntryWithDetails, error) { + auth := services.NewContext(r.Context()) + return ctrl.repo.MaintEntry.GetAllMaintenance(auth, auth.GID, filters) + } + + return adapters.Query(fn, http.StatusOK) +} + +// HandleMaintenanceEntryUpdate godoc +// +// @Summary Update Maintenance Entry +// @Tags Maintenance +// @Produce json +// @Param payload body repo.MaintenanceEntryUpdate true "Entry Data" +// @Success 200 {object} repo.MaintenanceEntry +// @Router /v1/maintenance/{id} [PUT] +// @Security Bearer +func (ctrl *V1Controller) HandleMaintenanceEntryUpdate() errchain.HandlerFunc { + fn := func(r *http.Request, entryID uuid.UUID, body repo.MaintenanceEntryUpdate) (repo.MaintenanceEntry, error) { + auth := services.NewContext(r.Context()) + return ctrl.repo.MaintEntry.Update(auth, entryID, body) + } + + return adapters.ActionID("id", fn, http.StatusOK) +} + +// HandleMaintenanceEntryDelete godoc +// +// @Summary Delete Maintenance Entry +// @Tags Maintenance +// @Produce json +// @Success 204 +// @Router /v1/maintenance/{id} [DELETE] +// @Security Bearer +func (ctrl *V1Controller) HandleMaintenanceEntryDelete() errchain.HandlerFunc { + fn := func(r *http.Request, entryID uuid.UUID) (any, error) { + auth := services.NewContext(r.Context()) + err := ctrl.repo.MaintEntry.Delete(auth, entryID) + return nil, err + } + + return adapters.CommandID("id", fn, http.StatusNoContent) +} diff --git a/backend/app/api/main.go b/backend/app/api/main.go index 2ba6eb6e4..6247fe6ad 100644 --- a/backend/app/api/main.go +++ b/backend/app/api/main.go @@ -115,16 +115,17 @@ func run(cfg *config.Config) error { err = c.Schema.Create(context.Background(), options...) if err != nil { - log.Fatal(). + log.Error(). Err(err). Str("driver", "sqlite"). Str("url", cfg.Storage.SqliteURL). Msg("failed creating schema resources") + return err } err = os.RemoveAll(temp) if err != nil { - log.Fatal().Err(err).Msg("failed to remove temporary directory for database migrations") + log.Error().Err(err).Msg("failed to remove temporary directory for database migrations") return err } @@ -139,10 +140,11 @@ func run(cfg *config.Config) error { content, err := os.ReadFile(cfg.Options.CurrencyConfig) if err != nil { - log.Fatal(). + log.Error(). Err(err). Str("path", cfg.Options.CurrencyConfig). Msg("failed to read currency config file") + return err } collectFuncs = append(collectFuncs, currencies.CollectJSON(bytes.NewReader(content))) @@ -150,9 +152,10 @@ func run(cfg *config.Config) error { currencies, err := currencies.CollectionCurrencies(collectFuncs...) if err != nil { - log.Fatal(). + log.Error(). Err(err). Msg("failed to collect currencies") + return err } app.bus = eventbus.New() @@ -211,7 +214,10 @@ func run(cfg *config.Config) error { // TODO: Remove through external API that does setup if cfg.Demo { log.Info().Msg("Running in demo mode, creating demo data") - app.SetupDemo() + err := app.SetupDemo() + if err != nil { + log.Fatal().Msg(err.Error()) + } } return nil }) diff --git a/backend/app/api/routes.go b/backend/app/api/routes.go index 03288df52..386675e07 100644 --- a/backend/app/api/routes.go +++ b/backend/app/api/routes.go @@ -4,6 +4,12 @@ import ( "embed" "errors" "fmt" + "io" + "mime" + "net/http" + "path" + "path/filepath" + "github.com/go-chi/chi/v5" "github.com/hay-kot/httpkit/errchain" httpSwagger "github.com/swaggo/http-swagger/v2" // http-swagger middleware @@ -13,11 +19,6 @@ import ( _ "github.com/sysadminsmedia/homebox/backend/app/api/static/docs" "github.com/sysadminsmedia/homebox/backend/internal/data/ent/authroles" "github.com/sysadminsmedia/homebox/backend/internal/data/repo" - "io" - "mime" - "net/http" - "path" - "path/filepath" ) const prefix = "/api" @@ -133,11 +134,14 @@ func (a *app) mountRoutes(r *chi.Mux, chain *errchain.ErrChain, repos *repo.AllR r.Get("/items/{id}/maintenance", chain.ToHandlerFunc(v1Ctrl.HandleMaintenanceLogGet(), userMW...)) r.Post("/items/{id}/maintenance", chain.ToHandlerFunc(v1Ctrl.HandleMaintenanceEntryCreate(), userMW...)) - r.Put("/items/{id}/maintenance/{entry_id}", chain.ToHandlerFunc(v1Ctrl.HandleMaintenanceEntryUpdate(), userMW...)) - r.Delete("/items/{id}/maintenance/{entry_id}", chain.ToHandlerFunc(v1Ctrl.HandleMaintenanceEntryDelete(), userMW...)) r.Get("/assets/{id}", chain.ToHandlerFunc(v1Ctrl.HandleAssetGet(), userMW...)) + // Maintenance + r.Get("/maintenance", chain.ToHandlerFunc(v1Ctrl.HandleMaintenanceGetAll(), userMW...)) + r.Put("/maintenance/{id}", chain.ToHandlerFunc(v1Ctrl.HandleMaintenanceEntryUpdate(), userMW...)) + r.Delete("/maintenance/{id}", chain.ToHandlerFunc(v1Ctrl.HandleMaintenanceEntryDelete(), userMW...)) + // Notifiers r.Get("/notifiers", chain.ToHandlerFunc(v1Ctrl.HandleGetUserNotifiers(), userMW...)) r.Post("/notifiers", chain.ToHandlerFunc(v1Ctrl.HandleCreateNotifier(), userMW...)) diff --git a/backend/app/api/static/docs/docs.go b/backend/app/api/static/docs/docs.go index 7c9a74864..b5fa2dcb2 100644 --- a/backend/app/api/static/docs/docs.go +++ b/backend/app/api/static/docs/docs.go @@ -917,14 +917,34 @@ const docTemplate = `{ "application/json" ], "tags": [ - "Maintenance" + "Item Maintenance" ], "summary": "Get Maintenance Log", + "parameters": [ + { + "enum": [ + "scheduled", + "completed", + "both" + ], + "type": "string", + "x-enum-varnames": [ + "MaintenanceFilterStatusScheduled", + "MaintenanceFilterStatusCompleted", + "MaintenanceFilterStatusBoth" + ], + "name": "status", + "in": "query" + } + ], "responses": { "200": { "description": "OK", "schema": { - "$ref": "#/definitions/repo.MaintenanceLog" + "type": "array", + "items": { + "$ref": "#/definitions/repo.MaintenanceEntryWithDetails" + } } } } @@ -939,7 +959,7 @@ const docTemplate = `{ "application/json" ], "tags": [ - "Maintenance" + "Item Maintenance" ], "summary": "Create Maintenance Entry", "parameters": [ @@ -963,60 +983,6 @@ const docTemplate = `{ } } }, - "/v1/items/{id}/maintenance/{entry_id}": { - "put": { - "security": [ - { - "Bearer": [] - } - ], - "produces": [ - "application/json" - ], - "tags": [ - "Maintenance" - ], - "summary": "Update Maintenance Entry", - "parameters": [ - { - "description": "Entry Data", - "name": "payload", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/repo.MaintenanceEntryUpdate" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/repo.MaintenanceEntry" - } - } - } - }, - "delete": { - "security": [ - { - "Bearer": [] - } - ], - "produces": [ - "application/json" - ], - "tags": [ - "Maintenance" - ], - "summary": "Delete Maintenance Entry", - "responses": { - "204": { - "description": "No Content" - } - } - } - }, "/v1/items/{id}/path": { "get": { "security": [ @@ -1409,6 +1375,104 @@ const docTemplate = `{ } } }, + "/v1/maintenance": { + "get": { + "security": [ + { + "Bearer": [] + } + ], + "produces": [ + "application/json" + ], + "tags": [ + "Maintenance" + ], + "summary": "Query All Maintenance", + "parameters": [ + { + "enum": [ + "scheduled", + "completed", + "both" + ], + "type": "string", + "x-enum-varnames": [ + "MaintenanceFilterStatusScheduled", + "MaintenanceFilterStatusCompleted", + "MaintenanceFilterStatusBoth" + ], + "name": "status", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/repo.MaintenanceEntryWithDetails" + } + } + } + } + } + }, + "/v1/maintenance/{id}": { + "put": { + "security": [ + { + "Bearer": [] + } + ], + "produces": [ + "application/json" + ], + "tags": [ + "Maintenance" + ], + "summary": "Update Maintenance Entry", + "parameters": [ + { + "description": "Entry Data", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/repo.MaintenanceEntryUpdate" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/repo.MaintenanceEntry" + } + } + } + }, + "delete": { + "security": [ + { + "Bearer": [] + } + ], + "produces": [ + "application/json" + ], + "tags": [ + "Maintenance" + ], + "summary": "Delete Maintenance Entry", + "responses": { + "204": { + "description": "No Content" + } + } + } + }, "/v1/notifiers": { "get": { "security": [ @@ -2476,6 +2540,9 @@ const docTemplate = `{ "parent": { "$ref": "#/definitions/repo.LocationSummary" }, + "totalPrice": { + "type": "number" + }, "updatedAt": { "type": "string" } @@ -2611,26 +2678,49 @@ const docTemplate = `{ } } }, - "repo.MaintenanceLog": { + "repo.MaintenanceEntryWithDetails": { "type": "object", "properties": { - "costAverage": { - "type": "number" + "completedDate": { + "type": "string" }, - "costTotal": { - "type": "number" + "cost": { + "type": "string", + "example": "0" }, - "entries": { - "type": "array", - "items": { - "$ref": "#/definitions/repo.MaintenanceEntry" - } + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "itemID": { + "type": "string" + }, + "itemName": { + "type": "string" + }, + "name": { + "type": "string" }, - "itemId": { + "scheduledDate": { "type": "string" } } }, + "repo.MaintenanceFilterStatus": { + "type": "string", + "enum": [ + "scheduled", + "completed", + "both" + ], + "x-enum-varnames": [ + "MaintenanceFilterStatusScheduled", + "MaintenanceFilterStatusCompleted", + "MaintenanceFilterStatusBoth" + ] + }, "repo.NotifierCreate": { "type": "object", "required": [ @@ -2672,6 +2762,10 @@ const docTemplate = `{ "updatedAt": { "type": "string" }, + "url": { + "description": "URL field is not exposed to the client", + "type": "string" + }, "userId": { "type": "string" } diff --git a/backend/app/api/static/docs/swagger.json b/backend/app/api/static/docs/swagger.json index 2b695bc5d..12e556ceb 100644 --- a/backend/app/api/static/docs/swagger.json +++ b/backend/app/api/static/docs/swagger.json @@ -910,14 +910,34 @@ "application/json" ], "tags": [ - "Maintenance" + "Item Maintenance" ], "summary": "Get Maintenance Log", + "parameters": [ + { + "enum": [ + "scheduled", + "completed", + "both" + ], + "type": "string", + "x-enum-varnames": [ + "MaintenanceFilterStatusScheduled", + "MaintenanceFilterStatusCompleted", + "MaintenanceFilterStatusBoth" + ], + "name": "status", + "in": "query" + } + ], "responses": { "200": { "description": "OK", "schema": { - "$ref": "#/definitions/repo.MaintenanceLog" + "type": "array", + "items": { + "$ref": "#/definitions/repo.MaintenanceEntryWithDetails" + } } } } @@ -932,7 +952,7 @@ "application/json" ], "tags": [ - "Maintenance" + "Item Maintenance" ], "summary": "Create Maintenance Entry", "parameters": [ @@ -956,60 +976,6 @@ } } }, - "/v1/items/{id}/maintenance/{entry_id}": { - "put": { - "security": [ - { - "Bearer": [] - } - ], - "produces": [ - "application/json" - ], - "tags": [ - "Maintenance" - ], - "summary": "Update Maintenance Entry", - "parameters": [ - { - "description": "Entry Data", - "name": "payload", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/repo.MaintenanceEntryUpdate" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/repo.MaintenanceEntry" - } - } - } - }, - "delete": { - "security": [ - { - "Bearer": [] - } - ], - "produces": [ - "application/json" - ], - "tags": [ - "Maintenance" - ], - "summary": "Delete Maintenance Entry", - "responses": { - "204": { - "description": "No Content" - } - } - } - }, "/v1/items/{id}/path": { "get": { "security": [ @@ -1402,6 +1368,104 @@ } } }, + "/v1/maintenance": { + "get": { + "security": [ + { + "Bearer": [] + } + ], + "produces": [ + "application/json" + ], + "tags": [ + "Maintenance" + ], + "summary": "Query All Maintenance", + "parameters": [ + { + "enum": [ + "scheduled", + "completed", + "both" + ], + "type": "string", + "x-enum-varnames": [ + "MaintenanceFilterStatusScheduled", + "MaintenanceFilterStatusCompleted", + "MaintenanceFilterStatusBoth" + ], + "name": "status", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/repo.MaintenanceEntryWithDetails" + } + } + } + } + } + }, + "/v1/maintenance/{id}": { + "put": { + "security": [ + { + "Bearer": [] + } + ], + "produces": [ + "application/json" + ], + "tags": [ + "Maintenance" + ], + "summary": "Update Maintenance Entry", + "parameters": [ + { + "description": "Entry Data", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/repo.MaintenanceEntryUpdate" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/repo.MaintenanceEntry" + } + } + } + }, + "delete": { + "security": [ + { + "Bearer": [] + } + ], + "produces": [ + "application/json" + ], + "tags": [ + "Maintenance" + ], + "summary": "Delete Maintenance Entry", + "responses": { + "204": { + "description": "No Content" + } + } + } + }, "/v1/notifiers": { "get": { "security": [ @@ -2607,26 +2671,49 @@ } } }, - "repo.MaintenanceLog": { + "repo.MaintenanceEntryWithDetails": { "type": "object", "properties": { - "costAverage": { - "type": "number" + "completedDate": { + "type": "string" }, - "costTotal": { - "type": "number" + "cost": { + "type": "string", + "example": "0" }, - "entries": { - "type": "array", - "items": { - "$ref": "#/definitions/repo.MaintenanceEntry" - } + "description": { + "type": "string" }, - "itemId": { + "id": { + "type": "string" + }, + "itemID": { + "type": "string" + }, + "itemName": { + "type": "string" + }, + "name": { + "type": "string" + }, + "scheduledDate": { "type": "string" } } }, + "repo.MaintenanceFilterStatus": { + "type": "string", + "enum": [ + "scheduled", + "completed", + "both" + ], + "x-enum-varnames": [ + "MaintenanceFilterStatusScheduled", + "MaintenanceFilterStatusCompleted", + "MaintenanceFilterStatusBoth" + ] + }, "repo.NotifierCreate": { "type": "object", "required": [ @@ -2668,6 +2755,10 @@ "updatedAt": { "type": "string" }, + "url": { + "description": "URL field is not exposed to the client", + "type": "string" + }, "userId": { "type": "string" } @@ -2710,9 +2801,6 @@ }, "total": { "type": "integer" - }, - "totalPrice": { - "type": "number" } } }, @@ -2995,4 +3083,4 @@ "in": "header" } } -} +} \ No newline at end of file diff --git a/backend/app/api/static/docs/swagger.yaml b/backend/app/api/static/docs/swagger.yaml index dbb31e6c8..e663b6a64 100644 --- a/backend/app/api/static/docs/swagger.yaml +++ b/backend/app/api/static/docs/swagger.yaml @@ -390,6 +390,8 @@ definitions: type: string parent: $ref: '#/definitions/repo.LocationSummary' + totalPrice: + type: number updatedAt: type: string type: object @@ -479,19 +481,36 @@ definitions: scheduledDate: type: string type: object - repo.MaintenanceLog: + repo.MaintenanceEntryWithDetails: properties: - costAverage: - type: number - costTotal: - type: number - entries: - items: - $ref: '#/definitions/repo.MaintenanceEntry' - type: array - itemId: + completedDate: + type: string + cost: + example: "0" + type: string + description: + type: string + id: + type: string + itemID: + type: string + itemName: + type: string + name: + type: string + scheduledDate: type: string type: object + repo.MaintenanceFilterStatus: + enum: + - scheduled + - completed + - both + type: string + x-enum-varnames: + - MaintenanceFilterStatusScheduled + - MaintenanceFilterStatusCompleted + - MaintenanceFilterStatusBoth repo.NotifierCreate: properties: isActive: @@ -520,6 +539,9 @@ definitions: type: string updatedAt: type: string + url: + description: URL field is not exposed to the client + type: string userId: type: string type: object @@ -1217,18 +1239,32 @@ paths: - Items Attachments /v1/items/{id}/maintenance: get: + parameters: + - enum: + - scheduled + - completed + - both + in: query + name: status + type: string + x-enum-varnames: + - MaintenanceFilterStatusScheduled + - MaintenanceFilterStatusCompleted + - MaintenanceFilterStatusBoth produces: - application/json responses: "200": description: OK schema: - $ref: '#/definitions/repo.MaintenanceLog' + items: + $ref: '#/definitions/repo.MaintenanceEntryWithDetails' + type: array security: - Bearer: [] summary: Get Maintenance Log tags: - - Maintenance + - Item Maintenance post: parameters: - description: Entry Data @@ -1248,39 +1284,7 @@ paths: - Bearer: [] summary: Create Maintenance Entry tags: - - Maintenance - /v1/items/{id}/maintenance/{entry_id}: - delete: - produces: - - application/json - responses: - "204": - description: No Content - security: - - Bearer: [] - summary: Delete Maintenance Entry - tags: - - Maintenance - put: - parameters: - - description: Entry Data - in: body - name: payload - required: true - schema: - $ref: '#/definitions/repo.MaintenanceEntryUpdate' - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/repo.MaintenanceEntry' - security: - - Bearer: [] - summary: Update Maintenance Entry - tags: - - Maintenance + - Item Maintenance /v1/items/{id}/path: get: parameters: @@ -1581,6 +1585,66 @@ paths: summary: Get Locations Tree tags: - Locations + /v1/maintenance: + get: + parameters: + - enum: + - scheduled + - completed + - both + in: query + name: status + type: string + x-enum-varnames: + - MaintenanceFilterStatusScheduled + - MaintenanceFilterStatusCompleted + - MaintenanceFilterStatusBoth + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/repo.MaintenanceEntryWithDetails' + type: array + security: + - Bearer: [] + summary: Query All Maintenance + tags: + - Maintenance + /v1/maintenance/{id}: + delete: + produces: + - application/json + responses: + "204": + description: No Content + security: + - Bearer: [] + summary: Delete Maintenance Entry + tags: + - Maintenance + put: + parameters: + - description: Entry Data + in: body + name: payload + required: true + schema: + $ref: '#/definitions/repo.MaintenanceEntryUpdate' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/repo.MaintenanceEntry' + security: + - Bearer: [] + summary: Update Maintenance Entry + tags: + - Maintenance /v1/notifiers: get: produces: diff --git a/backend/go.mod b/backend/go.mod index 61db45010..b2f2d597b 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -1,21 +1,19 @@ module github.com/sysadminsmedia/homebox/backend -go 1.22 - -toolchain go1.22.0 +go 1.23.0 require ( ariga.io/atlas v0.19.1 - entgo.io/ent v0.12.5 + entgo.io/ent v0.14.1 github.com/ardanlabs/conf/v3 v3.1.8 github.com/containrrr/shoutrrr v0.8.0 github.com/go-chi/chi/v5 v5.1.0 - github.com/go-playground/validator/v10 v10.22.0 + github.com/go-playground/validator/v10 v10.22.1 github.com/gocarina/gocsv v0.0.0-20240520201108-78e41c74b4b1 github.com/google/uuid v1.6.0 github.com/gorilla/schema v1.4.1 github.com/hay-kot/httpkit v0.0.11 - github.com/mattn/go-sqlite3 v1.14.23 + github.com/mattn/go-sqlite3 v1.14.24 github.com/olahol/melody v1.2.1 github.com/pkg/errors v0.9.1 github.com/rs/zerolog v1.33.0 @@ -24,8 +22,8 @@ require ( github.com/swaggo/swag v1.16.3 github.com/yeqown/go-qrcode/v2 v2.2.4 github.com/yeqown/go-qrcode/writer/standard v1.2.4 - golang.org/x/crypto v0.27.0 - modernc.org/sqlite v1.33.0 + golang.org/x/crypto v0.28.0 + modernc.org/sqlite v1.33.1 ) require ( @@ -63,13 +61,14 @@ require ( github.com/yeqown/reedsolomon v1.0.0 // indirect github.com/zclconf/go-cty v1.14.1 // indirect golang.org/x/image v0.18.0 // indirect - golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.25.0 // indirect - golang.org/x/sys v0.25.0 // indirect - golang.org/x/text v0.18.0 // indirect - golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect + golang.org/x/mod v0.20.0 // indirect + golang.org/x/net v0.28.0 // indirect + golang.org/x/sys v0.26.0 // indirect + golang.org/x/text v0.19.0 // indirect + golang.org/x/tools v0.24.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 // indirect + modernc.org/libc v1.55.3 // indirect modernc.org/mathutil v1.6.0 // indirect modernc.org/memory v1.8.0 // indirect modernc.org/strutil v1.2.0 // indirect diff --git a/backend/go.sum b/backend/go.sum index 6b273da04..f9a83abcd 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -1,7 +1,11 @@ ariga.io/atlas v0.19.1 h1:QzBHkakwzEhmPWOzNhw8Yr/Bbicj6Iq5hwEoNI/Jr9A= ariga.io/atlas v0.19.1/go.mod h1:VPlcXdd4w2KqKnH54yEZcry79UAhpaWaxEsmn5JRNoE= +ariga.io/atlas v0.28.0 h1:qmn9tUyJypJkIw+X3ECUwDtkMTiFupgstHbjRN4xGH0= +ariga.io/atlas v0.28.0/go.mod h1:LOOp18LCL9r+VifvVlJqgYJwYl271rrXD9/wIyzJ8sw= entgo.io/ent v0.12.5 h1:KREM5E4CSoej4zeGa88Ou/gfturAnpUv0mzAjch1sj4= entgo.io/ent v0.12.5/go.mod h1:Y3JVAjtlIk8xVZYSn3t3mf8xlZIn5SAOXZQxD6kKI+Q= +entgo.io/ent v0.14.1 h1:fUERL506Pqr92EPHJqr8EYxbPioflJo6PudkrEA8a/s= +entgo.io/ent v0.14.1/go.mod h1:MH6XLG0KXpkcDQhKiHfANZSzR55TJyPL5IGNpI8wpco= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= @@ -56,6 +60,8 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao= github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= +github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68= @@ -110,8 +116,12 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-sqlite3 v1.14.23 h1:gbShiuAP1W5j9UOksQ06aiiqPMxYecovVGwmTxWtuw0= github.com/mattn/go-sqlite3 v1.14.23/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM= +github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= @@ -119,6 +129,8 @@ github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJm github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/olahol/melody v1.2.1 h1:xdwRkzHxf+B0w4TKbGpUSSkV516ZucQZJIWLztOWICQ= github.com/olahol/melody v1.2.1/go.mod h1:GgkTl6Y7yWj/HtfD48Q5vLKPVoZOH+Qqgfa7CvJgJM4= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU= github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts= github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= @@ -136,6 +148,10 @@ github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -160,14 +176,22 @@ github.com/yeqown/reedsolomon v1.0.0 h1:x1h/Ej/uJnNu8jaX7GLHBWmZKCAWjEJTetkqaabr github.com/yeqown/reedsolomon v1.0.0/go.mod h1:P76zpcn2TCuL0ul1Fso373qHRc69LKwAw/Iy6g1WiiM= github.com/zclconf/go-cty v1.14.1 h1:t9fyA35fwjjUMcmL5hLER+e/rEPqrbCK1/OSE4SI9KA= github.com/zclconf/go-cty v1.14.1/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +github.com/zclconf/go-cty v1.14.4 h1:uXXczd9QDGsgu0i/QFR/hzI5NYCHLf6NQw/atrbnhq8= +github.com/zclconf/go-cty v1.14.4/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= +golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ= golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -175,10 +199,16 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -197,12 +227,16 @@ modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 h1:5D53IMaUuA5InSeMu9eJtlQXS2NxAhyWQvkKEgXZhHI= modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= +modernc.org/libc v1.55.3 h1:AzcW1mhlPNrRtjS5sS+eW2ISCgSOLLNyFzRh/V3Qj/U= +modernc.org/libc v1.55.3/go.mod h1:qFXepLhz+JjFThQ4kzwzOjA/y/artDeg+pcYnY+Q83w= modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU= modernc.org/sqlite v1.33.0 h1:WWkA/T2G17okiLGgKAj4/RMIvgyMT19yQ038160IeYk= modernc.org/sqlite v1.33.0/go.mod h1:9uQ9hF/pCZoYZK73D/ud5Z7cIRIILSZI8NdIemVMTX8= +modernc.org/sqlite v1.33.1 h1:trb6Z3YYoeM9eDL1O8do81kP+0ejv+YzgyFo+Gwy0nM= +modernc.org/sqlite v1.33.1/go.mod h1:pXV2xHxhzXZsgT/RtTFAPY6JJDEvOTcTdwADQCCWD4k= modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= diff --git a/backend/internal/core/services/main_test.go b/backend/internal/core/services/main_test.go index 2bc0cc841..f2e35bb4f 100644 --- a/backend/internal/core/services/main_test.go +++ b/backend/internal/core/services/main_test.go @@ -49,7 +49,7 @@ func bootstrap() { } } -func TestMain(m *testing.M) { +func MainNoExit(m *testing.M) int { client, err := ent.Open("sqlite3", "file:ent?mode=memory&cache=shared&_fk=1") if err != nil { log.Fatalf("failed opening connection to sqlite: %v", err) @@ -77,5 +77,9 @@ func TestMain(m *testing.M) { UID: tUser.ID, } - os.Exit(m.Run()) + return m.Run() +} + +func TestMain(m *testing.M) { + os.Exit(MainNoExit(m)) } diff --git a/backend/internal/core/services/reporting/io_sheet.go b/backend/internal/core/services/reporting/io_sheet.go index cc97bd9be..1db37bc67 100644 --- a/backend/internal/core/services/reporting/io_sheet.go +++ b/backend/internal/core/services/reporting/io_sheet.go @@ -153,7 +153,7 @@ func (s *IOSheet) Read(data io.Reader) error { } // ReadItems writes the sheet to a writer. -func (s *IOSheet) ReadItems(ctx context.Context, items []repo.ItemOut, GID uuid.UUID, repos *repo.AllRepos, hbURL string) error { +func (s *IOSheet) ReadItems(ctx context.Context, items []repo.ItemOut, gid uuid.UUID, repos *repo.AllRepos, hbURL string) error { s.Rows = make([]ExportCSVRow, len(items)) extraHeaders := map[string]struct{}{} @@ -164,7 +164,7 @@ func (s *IOSheet) ReadItems(ctx context.Context, items []repo.ItemOut, GID uuid. // TODO: Support fetching nested locations locID := item.Location.ID - locPaths, err := repos.Locations.PathForLoc(context.Background(), GID, locID) + locPaths, err := repos.Locations.PathForLoc(context.Background(), gid, locID) if err != nil { log.Error().Err(err).Msg("could not get location path") return err diff --git a/backend/internal/core/services/service_items.go b/backend/internal/core/services/service_items.go index 88b7e28a0..650ce6a6c 100644 --- a/backend/internal/core/services/service_items.go +++ b/backend/internal/core/services/service_items.go @@ -38,13 +38,13 @@ func (svc *ItemService) Create(ctx Context, item repo.ItemCreate) (repo.ItemOut, return svc.repo.Items.Create(ctx, ctx.GID, item) } -func (svc *ItemService) EnsureAssetID(ctx context.Context, GID uuid.UUID) (int, error) { - items, err := svc.repo.Items.GetAllZeroAssetID(ctx, GID) +func (svc *ItemService) EnsureAssetID(ctx context.Context, gid uuid.UUID) (int, error) { + items, err := svc.repo.Items.GetAllZeroAssetID(ctx, gid) if err != nil { return 0, err } - highest, err := svc.repo.Items.GetHighestAssetID(ctx, GID) + highest, err := svc.repo.Items.GetHighestAssetID(ctx, gid) if err != nil { return 0, err } @@ -53,7 +53,7 @@ func (svc *ItemService) EnsureAssetID(ctx context.Context, GID uuid.UUID) (int, for _, item := range items { highest++ - err = svc.repo.Items.SetAssetID(ctx, GID, item.ID, highest) + err = svc.repo.Items.SetAssetID(ctx, gid, item.ID, highest) if err != nil { return 0, err } @@ -64,8 +64,8 @@ func (svc *ItemService) EnsureAssetID(ctx context.Context, GID uuid.UUID) (int, return finished, nil } -func (svc *ItemService) EnsureImportRef(ctx context.Context, GID uuid.UUID) (int, error) { - ids, err := svc.repo.Items.GetAllZeroImportRef(ctx, GID) +func (svc *ItemService) EnsureImportRef(ctx context.Context, gid uuid.UUID) (int, error) { + ids, err := svc.repo.Items.GetAllZeroImportRef(ctx, gid) if err != nil { return 0, err } @@ -74,7 +74,7 @@ func (svc *ItemService) EnsureImportRef(ctx context.Context, GID uuid.UUID) (int for _, itemID := range ids { ref := uuid.New().String()[0:8] - err = svc.repo.Items.Patch(ctx, GID, itemID, repo.ItemPatch{ImportRef: &ref}) + err = svc.repo.Items.Patch(ctx, gid, itemID, repo.ItemPatch{ImportRef: &ref}) if err != nil { return 0, err } @@ -96,7 +96,7 @@ func serializeLocation[T ~[]string](location T) string { // 1. If the item does not exist, it is created. // 2. If the item has a ImportRef and it exists it is skipped // 3. Locations and Labels are created if they do not exist. -func (svc *ItemService) CsvImport(ctx context.Context, GID uuid.UUID, data io.Reader) (int, error) { +func (svc *ItemService) CsvImport(ctx context.Context, gid uuid.UUID, data io.Reader) (int, error) { sheet := reporting.IOSheet{} err := sheet.Read(data) @@ -109,7 +109,7 @@ func (svc *ItemService) CsvImport(ctx context.Context, GID uuid.UUID, data io.Re labelMap := make(map[string]uuid.UUID) { - labels, err := svc.repo.Labels.GetAll(ctx, GID) + labels, err := svc.repo.Labels.GetAll(ctx, gid) if err != nil { return 0, err } @@ -124,7 +124,7 @@ func (svc *ItemService) CsvImport(ctx context.Context, GID uuid.UUID, data io.Re locationMap := make(map[string]uuid.UUID) { - locations, err := svc.repo.Locations.Tree(ctx, GID, repo.TreeQuery{WithItems: false}) + locations, err := svc.repo.Locations.Tree(ctx, gid, repo.TreeQuery{WithItems: false}) if err != nil { return 0, err } @@ -153,7 +153,7 @@ func (svc *ItemService) CsvImport(ctx context.Context, GID uuid.UUID, data io.Re // Asset ID Pre-Check highestAID := repo.AssetID(-1) if svc.autoIncrementAssetID { - highestAID, err = svc.repo.Items.GetHighestAssetID(ctx, GID) + highestAID, err = svc.repo.Items.GetHighestAssetID(ctx, gid) if err != nil { return 0, err } @@ -169,7 +169,7 @@ func (svc *ItemService) CsvImport(ctx context.Context, GID uuid.UUID, data io.Re // ======================================== // Preflight check for existing item if row.ImportRef != "" { - exists, err := svc.repo.Items.CheckRef(ctx, GID, row.ImportRef) + exists, err := svc.repo.Items.CheckRef(ctx, gid, row.ImportRef) if err != nil { return 0, fmt.Errorf("error checking for existing item with ref %q: %w", row.ImportRef, err) } @@ -188,7 +188,7 @@ func (svc *ItemService) CsvImport(ctx context.Context, GID uuid.UUID, data io.Re id, ok := labelMap[label] if !ok { - newLabel, err := svc.repo.Labels.Create(ctx, GID, repo.LabelCreate{Name: label}) + newLabel, err := svc.repo.Labels.Create(ctx, gid, repo.LabelCreate{Name: label}) if err != nil { return 0, err } @@ -220,7 +220,7 @@ func (svc *ItemService) CsvImport(ctx context.Context, GID uuid.UUID, data io.Re parentID = locationMap[parentPath] } - newLocation, err := svc.repo.Locations.Create(ctx, GID, repo.LocationCreate{ + newLocation, err := svc.repo.Locations.Create(ctx, gid, repo.LocationCreate{ ParentID: parentID, Name: pathElement, }) @@ -261,12 +261,12 @@ func (svc *ItemService) CsvImport(ctx context.Context, GID uuid.UUID, data io.Re LabelIDs: labelIds, } - item, err = svc.repo.Items.Create(ctx, GID, newItem) + item, err = svc.repo.Items.Create(ctx, gid, newItem) if err != nil { return 0, err } default: - item, err = svc.repo.Items.GetByRef(ctx, GID, row.ImportRef) + item, err = svc.repo.Items.GetByRef(ctx, gid, row.ImportRef) if err != nil { return 0, err } @@ -318,7 +318,7 @@ func (svc *ItemService) CsvImport(ctx context.Context, GID uuid.UUID, data io.Re Fields: fields, } - item, err = svc.repo.Items.UpdateByGroup(ctx, GID, updateItem) + item, err = svc.repo.Items.UpdateByGroup(ctx, gid, updateItem) if err != nil { return 0, err } @@ -329,15 +329,15 @@ func (svc *ItemService) CsvImport(ctx context.Context, GID uuid.UUID, data io.Re return finished, nil } -func (svc *ItemService) ExportCSV(ctx context.Context, GID uuid.UUID, hbURL string) ([][]string, error) { - items, err := svc.repo.Items.GetAll(ctx, GID) +func (svc *ItemService) ExportCSV(ctx context.Context, gid uuid.UUID, hbURL string) ([][]string, error) { + items, err := svc.repo.Items.GetAll(ctx, gid) if err != nil { return nil, err } sheet := reporting.IOSheet{} - err = sheet.ReadItems(ctx, items, GID, svc.repo, hbURL) + err = sheet.ReadItems(ctx, items, gid, svc.repo, hbURL) if err != nil { return nil, err } @@ -345,8 +345,8 @@ func (svc *ItemService) ExportCSV(ctx context.Context, GID uuid.UUID, hbURL stri return sheet.CSV() } -func (svc *ItemService) ExportBillOfMaterialsCSV(ctx context.Context, GID uuid.UUID) ([]byte, error) { - items, err := svc.repo.Items.GetAll(ctx, GID) +func (svc *ItemService) ExportBillOfMaterialsCSV(ctx context.Context, gid uuid.UUID) ([]byte, error) { + items, err := svc.repo.Items.GetAll(ctx, gid) if err != nil { return nil, err } diff --git a/backend/internal/core/services/service_user.go b/backend/internal/core/services/service_user.go index da5d893f9..0b67cb310 100644 --- a/backend/internal/core/services/service_user.go +++ b/backend/internal/core/services/service_user.go @@ -132,13 +132,13 @@ func (svc *UserService) GetSelf(ctx context.Context, requestToken string) (repo. return svc.repos.AuthTokens.GetUserFromToken(ctx, hash) } -func (svc *UserService) UpdateSelf(ctx context.Context, ID uuid.UUID, data repo.UserUpdate) (repo.UserOut, error) { - err := svc.repos.Users.Update(ctx, ID, data) +func (svc *UserService) UpdateSelf(ctx context.Context, id uuid.UUID, data repo.UserUpdate) (repo.UserOut, error) { + err := svc.repos.Users.Update(ctx, id, data) if err != nil { return repo.UserOut{}, err } - return svc.repos.Users.GetOneID(ctx, ID) + return svc.repos.Users.GetOneID(ctx, id) } // ============================================================================ @@ -217,8 +217,8 @@ func (svc *UserService) RenewToken(ctx context.Context, token string) (UserAuthT // DeleteSelf deletes the user that is currently logged based of the provided UUID // There is _NO_ protection against deleting the wrong user, as such this should only // be used when the identify of the user has been confirmed. -func (svc *UserService) DeleteSelf(ctx context.Context, ID uuid.UUID) error { - return svc.repos.Users.Delete(ctx, ID) +func (svc *UserService) DeleteSelf(ctx context.Context, id uuid.UUID) error { + return svc.repos.Users.Delete(ctx, id) } func (svc *UserService) ChangePassword(ctx Context, current string, new string) (ok bool) { diff --git a/backend/internal/data/repo/asset_id_type.go b/backend/internal/data/repo/asset_id_type.go index 0a53a4a1f..1181b89d3 100644 --- a/backend/internal/data/repo/asset_id_type.go +++ b/backend/internal/data/repo/asset_id_type.go @@ -16,9 +16,9 @@ func (aid AssetID) Int() int { return int(aid) } -func ParseAssetIDBytes(d []byte) (AID AssetID, ok bool) { - d = bytes.Replace(d, []byte(`"`), []byte(``), -1) - d = bytes.Replace(d, []byte(`-`), []byte(``), -1) +func ParseAssetIDBytes(d []byte) (aid AssetID, ok bool) { + d = bytes.ReplaceAll(d, []byte(`"`), []byte(``)) + d = bytes.ReplaceAll(d, []byte(`-`), []byte(``)) aidInt, err := strconv.Atoi(string(d)) if err != nil { @@ -28,7 +28,7 @@ func ParseAssetIDBytes(d []byte) (AID AssetID, ok bool) { return AssetID(aidInt), true } -func ParseAssetID(s string) (AID AssetID, ok bool) { +func ParseAssetID(s string) (aid AssetID, ok bool) { return ParseAssetIDBytes([]byte(s)) } @@ -52,8 +52,8 @@ func (aid *AssetID) UnmarshalJSON(d []byte) error { return nil } - d = bytes.Replace(d, []byte(`"`), []byte(``), -1) - d = bytes.Replace(d, []byte(`-`), []byte(``), -1) + d = bytes.ReplaceAll(d, []byte(`"`), []byte(``)) + d = bytes.ReplaceAll(d, []byte(`-`), []byte(``)) aidInt, err := strconv.Atoi(string(d)) if err != nil { diff --git a/backend/internal/data/repo/main_test.go b/backend/internal/data/repo/main_test.go index 3e9f5c6f2..a633d63c1 100644 --- a/backend/internal/data/repo/main_test.go +++ b/backend/internal/data/repo/main_test.go @@ -39,7 +39,7 @@ func bootstrap() { } } -func TestMain(m *testing.M) { +func MainNoExit(m *testing.M) int { client, err := ent.Open("sqlite3", "file:ent?mode=memory&cache=shared&_fk=1") if err != nil { log.Fatalf("failed opening connection to sqlite: %v", err) @@ -59,6 +59,9 @@ func TestMain(m *testing.M) { defer func() { _ = client.Close() }() bootstrap() + return m.Run() +} - os.Exit(m.Run()) +func TestMain(m *testing.M) { + os.Exit(MainNoExit(m)) } diff --git a/backend/internal/data/repo/repo_group.go b/backend/internal/data/repo/repo_group.go index d2e4abdae..2498052e4 100644 --- a/backend/internal/data/repo/repo_group.go +++ b/backend/internal/data/repo/repo_group.go @@ -109,12 +109,12 @@ func (r *GroupRepository) GetAllGroups(ctx context.Context) ([]Group, error) { return r.groupMapper.MapEachErr(r.db.Group.Query().All(ctx)) } -func (r *GroupRepository) StatsLocationsByPurchasePrice(ctx context.Context, GID uuid.UUID) ([]TotalsByOrganizer, error) { +func (r *GroupRepository) StatsLocationsByPurchasePrice(ctx context.Context, gid uuid.UUID) ([]TotalsByOrganizer, error) { var v []TotalsByOrganizer err := r.db.Location.Query(). Where( - location.HasGroupWith(group.ID(GID)), + location.HasGroupWith(group.ID(gid)), ). GroupBy(location.FieldID, location.FieldName). Aggregate(func(sq *sql.Selector) string { @@ -131,12 +131,12 @@ func (r *GroupRepository) StatsLocationsByPurchasePrice(ctx context.Context, GID return v, err } -func (r *GroupRepository) StatsLabelsByPurchasePrice(ctx context.Context, GID uuid.UUID) ([]TotalsByOrganizer, error) { +func (r *GroupRepository) StatsLabelsByPurchasePrice(ctx context.Context, gid uuid.UUID) ([]TotalsByOrganizer, error) { var v []TotalsByOrganizer err := r.db.Label.Query(). Where( - label.HasGroupWith(group.ID(GID)), + label.HasGroupWith(group.ID(gid)), ). GroupBy(label.FieldID, label.FieldName). Aggregate(func(sq *sql.Selector) string { @@ -157,7 +157,7 @@ func (r *GroupRepository) StatsLabelsByPurchasePrice(ctx context.Context, GID uu return v, err } -func (r *GroupRepository) StatsPurchasePrice(ctx context.Context, GID uuid.UUID, start, end time.Time) (*ValueOverTime, error) { +func (r *GroupRepository) StatsPurchasePrice(ctx context.Context, gid uuid.UUID, start, end time.Time) (*ValueOverTime, error) { // Get the Totals for the Start and End of the Given Time Period q := ` SELECT @@ -180,7 +180,7 @@ func (r *GroupRepository) StatsPurchasePrice(ctx context.Context, GID uuid.UUID, var maybeStart *float64 var maybeEnd *float64 - row := r.db.Sql().QueryRowContext(ctx, q, GID, sqliteDateFormat(start), GID, sqliteDateFormat(end)) + row := r.db.Sql().QueryRowContext(ctx, q, gid, sqliteDateFormat(start), gid, sqliteDateFormat(end)) err := row.Scan(&maybeStart, &maybeEnd) if err != nil { return nil, err @@ -198,7 +198,7 @@ func (r *GroupRepository) StatsPurchasePrice(ctx context.Context, GID uuid.UUID, // Get Created Date and Price of all items between start and end err = r.db.Item.Query(). Where( - item.HasGroupWith(group.ID(GID)), + item.HasGroupWith(group.ID(gid)), item.CreatedAtGTE(start), item.CreatedAtLTE(end), item.Archived(false), @@ -226,7 +226,7 @@ func (r *GroupRepository) StatsPurchasePrice(ctx context.Context, GID uuid.UUID, return &stats, nil } -func (r *GroupRepository) StatsGroup(ctx context.Context, GID uuid.UUID) (GroupStatistics, error) { +func (r *GroupRepository) StatsGroup(ctx context.Context, gid uuid.UUID) (GroupStatistics, error) { q := ` SELECT (SELECT COUNT(*) FROM users WHERE group_users = ?) AS total_users, @@ -242,7 +242,7 @@ func (r *GroupRepository) StatsGroup(ctx context.Context, GID uuid.UUID) (GroupS ) AS total_with_warranty ` var stats GroupStatistics - row := r.db.Sql().QueryRowContext(ctx, q, GID, GID, GID, GID, GID, GID) + row := r.db.Sql().QueryRowContext(ctx, q, gid, gid, gid, gid, gid, gid) var maybeTotalItemPrice *float64 var maybeTotalWithWarranty *int @@ -264,8 +264,8 @@ func (r *GroupRepository) GroupCreate(ctx context.Context, name string) (Group, Save(ctx)) } -func (r *GroupRepository) GroupUpdate(ctx context.Context, ID uuid.UUID, data GroupUpdate) (Group, error) { - entity, err := r.db.Group.UpdateOneID(ID). +func (r *GroupRepository) GroupUpdate(ctx context.Context, id uuid.UUID, data GroupUpdate) (Group, error) { + entity, err := r.db.Group.UpdateOneID(id). SetName(data.Name). SetCurrency(strings.ToLower(data.Currency)). Save(ctx) diff --git a/backend/internal/data/repo/repo_items.go b/backend/internal/data/repo/repo_items.go index c714e229b..73d72a89f 100644 --- a/backend/internal/data/repo/repo_items.go +++ b/backend/internal/data/repo/repo_items.go @@ -70,8 +70,8 @@ type ( ParentID uuid.UUID `json:"parentId" extensions:"x-nullable,x-omitempty"` ID uuid.UUID `json:"id"` AssetID AssetID `json:"assetId" swaggertype:"string"` - Name string `json:"name"` - Description string `json:"description"` + Name string `json:"name" validate:"required,min=1,max=255"` + Description string `json:"description" validate:"max=1000"` Quantity int `json:"quantity"` Insured bool `json:"insured"` Archived bool `json:"archived"` @@ -92,12 +92,12 @@ type ( // Purchase PurchaseTime types.Date `json:"purchaseTime"` - PurchaseFrom string `json:"purchaseFrom"` + PurchaseFrom string `json:"purchaseFrom" validate:"max=255"` PurchasePrice float64 `json:"purchasePrice,string"` // Sold SoldTime types.Date `json:"soldTime"` - SoldTo string `json:"soldTo"` + SoldTo string `json:"soldTo" validate:"max=255"` SoldPrice float64 `json:"soldPrice,string"` SoldNotes string `json:"soldNotes"` @@ -277,9 +277,9 @@ func mapItemOut(item *ent.Item) ItemOut { } } -func (e *ItemsRepository) publishMutationEvent(GID uuid.UUID) { +func (e *ItemsRepository) publishMutationEvent(gid uuid.UUID) { if e.bus != nil { - e.bus.Publish(eventbus.EventItemMutation, eventbus.GroupMutationEvent{GID: GID}) + e.bus.Publish(eventbus.EventItemMutation, eventbus.GroupMutationEvent{GID: gid}) } } @@ -305,13 +305,13 @@ func (e *ItemsRepository) GetOne(ctx context.Context, id uuid.UUID) (ItemOut, er return e.getOne(ctx, item.ID(id)) } -func (e *ItemsRepository) CheckRef(ctx context.Context, GID uuid.UUID, ref string) (bool, error) { - q := e.db.Item.Query().Where(item.HasGroupWith(group.ID(GID))) +func (e *ItemsRepository) CheckRef(ctx context.Context, gid uuid.UUID, ref string) (bool, error) { + q := e.db.Item.Query().Where(item.HasGroupWith(group.ID(gid))) return q.Where(item.ImportRef(ref)).Exist(ctx) } -func (e *ItemsRepository) GetByRef(ctx context.Context, GID uuid.UUID, ref string) (ItemOut, error) { - return e.getOne(ctx, item.ImportRef(ref), item.HasGroupWith(group.ID(GID))) +func (e *ItemsRepository) GetByRef(ctx context.Context, gid uuid.UUID, ref string) (ItemOut, error) { + return e.getOne(ctx, item.ImportRef(ref), item.HasGroupWith(group.ID(gid))) } // GetOneByGroup returns a single item by ID. If the item does not exist, an error is returned. @@ -498,9 +498,9 @@ func (e *ItemsRepository) GetAll(ctx context.Context, gid uuid.UUID) ([]ItemOut, All(ctx)) } -func (e *ItemsRepository) GetAllZeroAssetID(ctx context.Context, GID uuid.UUID) ([]ItemSummary, error) { +func (e *ItemsRepository) GetAllZeroAssetID(ctx context.Context, gid uuid.UUID) ([]ItemSummary, error) { q := e.db.Item.Query().Where( - item.HasGroupWith(group.ID(GID)), + item.HasGroupWith(group.ID(gid)), item.AssetID(0), ).Order( ent.Asc(item.FieldCreatedAt), @@ -509,9 +509,9 @@ func (e *ItemsRepository) GetAllZeroAssetID(ctx context.Context, GID uuid.UUID) return mapItemsSummaryErr(q.All(ctx)) } -func (e *ItemsRepository) GetHighestAssetID(ctx context.Context, GID uuid.UUID) (AssetID, error) { +func (e *ItemsRepository) GetHighestAssetID(ctx context.Context, gid uuid.UUID) (AssetID, error) { q := e.db.Item.Query().Where( - item.HasGroupWith(group.ID(GID)), + item.HasGroupWith(group.ID(gid)), ).Order( ent.Desc(item.FieldAssetID), ).Limit(1) @@ -527,10 +527,10 @@ func (e *ItemsRepository) GetHighestAssetID(ctx context.Context, GID uuid.UUID) return AssetID(result.AssetID), nil } -func (e *ItemsRepository) SetAssetID(ctx context.Context, GID uuid.UUID, ID uuid.UUID, assetID AssetID) error { +func (e *ItemsRepository) SetAssetID(ctx context.Context, gid uuid.UUID, id uuid.UUID, assetID AssetID) error { q := e.db.Item.Update().Where( - item.HasGroupWith(group.ID(GID)), - item.ID(ID), + item.HasGroupWith(group.ID(gid)), + item.ID(id), ) _, err := q.SetAssetID(int(assetID)).Save(ctx) @@ -546,7 +546,7 @@ func (e *ItemsRepository) Create(ctx context.Context, gid uuid.UUID, data ItemCr SetLocationID(data.LocationID). SetAssetID(int(data.AssetID)) - if data.LabelIDs != nil && len(data.LabelIDs) > 0 { + if len(data.LabelIDs) > 0 { q.AddLabelIDs(data.LabelIDs...) } @@ -584,8 +584,8 @@ func (e *ItemsRepository) DeleteByGroup(ctx context.Context, gid, id uuid.UUID) return err } -func (e *ItemsRepository) UpdateByGroup(ctx context.Context, GID uuid.UUID, data ItemUpdate) (ItemOut, error) { - q := e.db.Item.Update().Where(item.ID(data.ID), item.HasGroupWith(group.ID(GID))). +func (e *ItemsRepository) UpdateByGroup(ctx context.Context, gid uuid.UUID, data ItemUpdate) (ItemOut, error) { + q := e.db.Item.Update().Where(item.ID(data.ID), item.HasGroupWith(group.ID(gid))). SetName(data.Name). SetDescription(data.Description). SetLocationID(data.LocationID). @@ -696,16 +696,16 @@ func (e *ItemsRepository) UpdateByGroup(ctx context.Context, GID uuid.UUID, data } } - e.publishMutationEvent(GID) + e.publishMutationEvent(gid) return e.GetOne(ctx, data.ID) } -func (e *ItemsRepository) GetAllZeroImportRef(ctx context.Context, GID uuid.UUID) ([]uuid.UUID, error) { +func (e *ItemsRepository) GetAllZeroImportRef(ctx context.Context, gid uuid.UUID) ([]uuid.UUID, error) { var ids []uuid.UUID err := e.db.Item.Query(). Where( - item.HasGroupWith(group.ID(GID)), + item.HasGroupWith(group.ID(gid)), item.Or( item.ImportRefEQ(""), item.ImportRefIsNil(), @@ -720,11 +720,11 @@ func (e *ItemsRepository) GetAllZeroImportRef(ctx context.Context, GID uuid.UUID return ids, nil } -func (e *ItemsRepository) Patch(ctx context.Context, GID, ID uuid.UUID, data ItemPatch) error { +func (e *ItemsRepository) Patch(ctx context.Context, gid, id uuid.UUID, data ItemPatch) error { q := e.db.Item.Update(). Where( - item.ID(ID), - item.HasGroupWith(group.ID(GID)), + item.ID(id), + item.HasGroupWith(group.ID(gid)), ) if data.ImportRef != nil { @@ -735,11 +735,11 @@ func (e *ItemsRepository) Patch(ctx context.Context, GID, ID uuid.UUID, data Ite q.SetQuantity(*data.Quantity) } - e.publishMutationEvent(GID) + e.publishMutationEvent(gid) return q.Exec(ctx) } -func (e *ItemsRepository) GetAllCustomFieldValues(ctx context.Context, GID uuid.UUID, name string) ([]string, error) { +func (e *ItemsRepository) GetAllCustomFieldValues(ctx context.Context, gid uuid.UUID, name string) ([]string, error) { type st struct { Value string `json:"text_value"` } @@ -748,7 +748,7 @@ func (e *ItemsRepository) GetAllCustomFieldValues(ctx context.Context, GID uuid. err := e.db.Item.Query(). Where( - item.HasGroupWith(group.ID(GID)), + item.HasGroupWith(group.ID(gid)), ). QueryFields(). Where( @@ -769,7 +769,7 @@ func (e *ItemsRepository) GetAllCustomFieldValues(ctx context.Context, GID uuid. return valueStrings, nil } -func (e *ItemsRepository) GetAllCustomFieldNames(ctx context.Context, GID uuid.UUID) ([]string, error) { +func (e *ItemsRepository) GetAllCustomFieldNames(ctx context.Context, gid uuid.UUID) ([]string, error) { type st struct { Name string `json:"name"` } @@ -778,7 +778,7 @@ func (e *ItemsRepository) GetAllCustomFieldNames(ctx context.Context, GID uuid.U err := e.db.Item.Query(). Where( - item.HasGroupWith(group.ID(GID)), + item.HasGroupWith(group.ID(gid)), ). QueryFields(). Unique(true). @@ -802,9 +802,9 @@ func (e *ItemsRepository) GetAllCustomFieldNames(ctx context.Context, GID uuid.U // This is designed to resolve a long-time bug that has since been fixed with the time selector on the // frontend. This function is intended to be used as a one-time fix for existing databases and may be // removed in the future. -func (e *ItemsRepository) ZeroOutTimeFields(ctx context.Context, GID uuid.UUID) (int, error) { +func (e *ItemsRepository) ZeroOutTimeFields(ctx context.Context, gid uuid.UUID) (int, error) { q := e.db.Item.Query().Where( - item.HasGroupWith(group.ID(GID)), + item.HasGroupWith(group.ID(gid)), item.Or( item.PurchaseTimeNotNil(), item.PurchaseFromLT("0002-01-01"), @@ -873,11 +873,11 @@ func (e *ItemsRepository) ZeroOutTimeFields(ctx context.Context, GID uuid.UUID) return updated, nil } -func (e *ItemsRepository) SetPrimaryPhotos(ctx context.Context, GID uuid.UUID) (int, error) { +func (e *ItemsRepository) SetPrimaryPhotos(ctx context.Context, gid uuid.UUID) (int, error) { // All items where there is no primary photo itemIDs, err := e.db.Item.Query(). Where( - item.HasGroupWith(group.ID(GID)), + item.HasGroupWith(group.ID(gid)), item.HasAttachmentsWith( attachment.TypeEQ(attachment.TypePhoto), attachment.Not( diff --git a/backend/internal/data/repo/repo_labels.go b/backend/internal/data/repo/repo_labels.go index 51c90103c..03e2b4c15 100644 --- a/backend/internal/data/repo/repo_labels.go +++ b/backend/internal/data/repo/repo_labels.go @@ -65,9 +65,9 @@ func mapLabelOut(label *ent.Label) LabelOut { } } -func (r *LabelRepository) publishMutationEvent(GID uuid.UUID) { +func (r *LabelRepository) publishMutationEvent(gid uuid.UUID) { if r.bus != nil { - r.bus.Publish(eventbus.EventLabelMutation, eventbus.GroupMutationEvent{GID: GID}) + r.bus.Publish(eventbus.EventLabelMutation, eventbus.GroupMutationEvent{GID: gid}) } } @@ -79,8 +79,8 @@ func (r *LabelRepository) getOne(ctx context.Context, where ...predicate.Label) ) } -func (r *LabelRepository) GetOne(ctx context.Context, ID uuid.UUID) (LabelOut, error) { - return r.getOne(ctx, label.ID(ID)) +func (r *LabelRepository) GetOne(ctx context.Context, id uuid.UUID) (LabelOut, error) { + return r.getOne(ctx, label.ID(id)) } func (r *LabelRepository) GetOneByGroup(ctx context.Context, gid, ld uuid.UUID) (LabelOut, error) { @@ -125,13 +125,13 @@ func (r *LabelRepository) update(ctx context.Context, data LabelUpdate, where .. Save(ctx) } -func (r *LabelRepository) UpdateByGroup(ctx context.Context, GID uuid.UUID, data LabelUpdate) (LabelOut, error) { - _, err := r.update(ctx, data, label.ID(data.ID), label.HasGroupWith(group.ID(GID))) +func (r *LabelRepository) UpdateByGroup(ctx context.Context, gid uuid.UUID, data LabelUpdate) (LabelOut, error) { + _, err := r.update(ctx, data, label.ID(data.ID), label.HasGroupWith(group.ID(gid))) if err != nil { return LabelOut{}, err } - r.publishMutationEvent(GID) + r.publishMutationEvent(gid) return r.GetOne(ctx, data.ID) } diff --git a/backend/internal/data/repo/repo_locations.go b/backend/internal/data/repo/repo_locations.go index f5796d504..7ece91b20 100644 --- a/backend/internal/data/repo/repo_locations.go +++ b/backend/internal/data/repo/repo_locations.go @@ -48,8 +48,8 @@ type ( LocationOut struct { Parent *LocationSummary `json:"parent,omitempty"` LocationSummary - Children []LocationSummary `json:"children"` - TotalPrice float64 `json:"totalPrice"` + Children []LocationSummary `json:"children"` + TotalPrice float64 `json:"totalPrice"` } ) @@ -90,9 +90,9 @@ func mapLocationOut(location *ent.Location) LocationOut { } } -func (r *LocationRepository) publishMutationEvent(GID uuid.UUID) { +func (r *LocationRepository) publishMutationEvent(gid uuid.UUID) { if r.bus != nil { - r.bus.Publish(eventbus.EventLocationMutation, eventbus.GroupMutationEvent{GID: GID}) + r.bus.Publish(eventbus.EventLocationMutation, eventbus.GroupMutationEvent{GID: gid}) } } @@ -101,7 +101,7 @@ type LocationQuery struct { } // GetAll returns all locations with item count field populated -func (r *LocationRepository) GetAll(ctx context.Context, GID uuid.UUID, filter LocationQuery) ([]LocationOutCount, error) { +func (r *LocationRepository) GetAll(ctx context.Context, gid uuid.UUID, filter LocationQuery) ([]LocationOutCount, error) { query := `--sql SELECT id, @@ -132,7 +132,7 @@ func (r *LocationRepository) GetAll(ctx context.Context, GID uuid.UUID, filter L query = strings.Replace(query, "{{ FILTER_CHILDREN }}", "", 1) } - rows, err := r.db.Sql().QueryContext(ctx, query, GID) + rows, err := r.db.Sql().QueryContext(ctx, query, gid) if err != nil { return nil, err } @@ -168,19 +168,19 @@ func (r *LocationRepository) getOne(ctx context.Context, where ...predicate.Loca Only(ctx)) } -func (r *LocationRepository) Get(ctx context.Context, ID uuid.UUID) (LocationOut, error) { - return r.getOne(ctx, location.ID(ID)) +func (r *LocationRepository) Get(ctx context.Context, id uuid.UUID) (LocationOut, error) { + return r.getOne(ctx, location.ID(id)) } -func (r *LocationRepository) GetOneByGroup(ctx context.Context, GID, ID uuid.UUID) (LocationOut, error) { - return r.getOne(ctx, location.ID(ID), location.HasGroupWith(group.ID(GID))) +func (r *LocationRepository) GetOneByGroup(ctx context.Context, gid, id uuid.UUID) (LocationOut, error) { + return r.getOne(ctx, location.ID(id), location.HasGroupWith(group.ID(gid))) } -func (r *LocationRepository) Create(ctx context.Context, GID uuid.UUID, data LocationCreate) (LocationOut, error) { +func (r *LocationRepository) Create(ctx context.Context, gid uuid.UUID, data LocationCreate) (LocationOut, error) { q := r.db.Location.Create(). SetName(data.Name). SetDescription(data.Description). - SetGroupID(GID) + SetGroupID(gid) if data.ParentID != uuid.Nil { q.SetParentID(data.ParentID) @@ -191,8 +191,8 @@ func (r *LocationRepository) Create(ctx context.Context, GID uuid.UUID, data Loc return LocationOut{}, err } - location.Edges.Group = &ent.Group{ID: GID} // bootstrap group ID - r.publishMutationEvent(GID) + location.Edges.Group = &ent.Group{ID: gid} // bootstrap group ID + r.publishMutationEvent(gid) return mapLocationOut(location), nil } @@ -216,28 +216,28 @@ func (r *LocationRepository) update(ctx context.Context, data LocationUpdate, wh return r.Get(ctx, data.ID) } -func (r *LocationRepository) UpdateByGroup(ctx context.Context, GID, ID uuid.UUID, data LocationUpdate) (LocationOut, error) { - v, err := r.update(ctx, data, location.ID(ID), location.HasGroupWith(group.ID(GID))) +func (r *LocationRepository) UpdateByGroup(ctx context.Context, gid, id uuid.UUID, data LocationUpdate) (LocationOut, error) { + v, err := r.update(ctx, data, location.ID(id), location.HasGroupWith(group.ID(gid))) if err != nil { return LocationOut{}, err } - r.publishMutationEvent(GID) + r.publishMutationEvent(gid) return v, err } // delete should only be used after checking that the location is owned by the // group. Otherwise, use DeleteByGroup -func (r *LocationRepository) delete(ctx context.Context, ID uuid.UUID) error { - return r.db.Location.DeleteOneID(ID).Exec(ctx) +func (r *LocationRepository) delete(ctx context.Context, id uuid.UUID) error { + return r.db.Location.DeleteOneID(id).Exec(ctx) } -func (r *LocationRepository) DeleteByGroup(ctx context.Context, GID, ID uuid.UUID) error { - _, err := r.db.Location.Delete().Where(location.ID(ID), location.HasGroupWith(group.ID(GID))).Exec(ctx) +func (r *LocationRepository) DeleteByGroup(ctx context.Context, gid, id uuid.UUID) error { + _, err := r.db.Location.Delete().Where(location.ID(id), location.HasGroupWith(group.ID(gid))).Exec(ctx) if err != nil { return err } - r.publishMutationEvent(GID) + r.publishMutationEvent(gid) return err } @@ -274,7 +274,7 @@ type ItemPath struct { Name string `json:"name"` } -func (r *LocationRepository) PathForLoc(ctx context.Context, GID, locID uuid.UUID) ([]ItemPath, error) { +func (r *LocationRepository) PathForLoc(ctx context.Context, gid, locID uuid.UUID) ([]ItemPath, error) { query := `WITH RECURSIVE location_path AS ( SELECT id, name, location_children FROM locations @@ -291,7 +291,7 @@ func (r *LocationRepository) PathForLoc(ctx context.Context, GID, locID uuid.UUI SELECT id, name FROM location_path` - rows, err := r.db.Sql().QueryContext(ctx, query, locID, GID) + rows, err := r.db.Sql().QueryContext(ctx, query, locID, gid) if err != nil { return nil, err } @@ -321,7 +321,7 @@ func (r *LocationRepository) PathForLoc(ctx context.Context, GID, locID uuid.UUI return locations, nil } -func (r *LocationRepository) Tree(ctx context.Context, GID uuid.UUID, tq TreeQuery) ([]TreeItem, error) { +func (r *LocationRepository) Tree(ctx context.Context, gid uuid.UUID, tq TreeQuery) ([]TreeItem, error) { query := ` WITH recursive location_tree(id, NAME, parent_id, level, node_type) AS ( @@ -403,7 +403,7 @@ func (r *LocationRepository) Tree(ctx context.Context, GID uuid.UUID, tq TreeQue query = strings.ReplaceAll(query, "{{ WITH_ITEMS_FROM }}", "") } - rows, err := r.db.Sql().QueryContext(ctx, query, GID) + rows, err := r.db.Sql().QueryContext(ctx, query, gid) if err != nil { return nil, err } diff --git a/backend/internal/data/repo/repo_maintenance.go b/backend/internal/data/repo/repo_maintenance.go new file mode 100644 index 000000000..c488efd7a --- /dev/null +++ b/backend/internal/data/repo/repo_maintenance.go @@ -0,0 +1,72 @@ +package repo + +import ( + "context" + "time" + + "github.com/google/uuid" + "github.com/sysadminsmedia/homebox/backend/internal/data/ent" + "github.com/sysadminsmedia/homebox/backend/internal/data/ent/group" + "github.com/sysadminsmedia/homebox/backend/internal/data/ent/item" + "github.com/sysadminsmedia/homebox/backend/internal/data/ent/maintenanceentry" +) + +type ( + MaintenanceEntryWithDetails struct { + MaintenanceEntry + ItemName string `json:"itemName"` + ItemID uuid.UUID `json:"itemID"` + } +) + +var ( + mapEachMaintenanceEntryWithDetails = mapTEachFunc(mapMaintenanceEntryWithDetails) +) + +func mapMaintenanceEntryWithDetails(entry *ent.MaintenanceEntry) MaintenanceEntryWithDetails { + return MaintenanceEntryWithDetails{ + MaintenanceEntry: mapMaintenanceEntry(entry), + ItemName: entry.Edges.Item.Name, + ItemID: entry.ItemID, + } +} + +type MaintenanceFilterStatus string + +const ( + MaintenanceFilterStatusScheduled MaintenanceFilterStatus = "scheduled" + MaintenanceFilterStatusCompleted MaintenanceFilterStatus = "completed" + MaintenanceFilterStatusBoth MaintenanceFilterStatus = "both" +) + +type MaintenanceFilters struct { + Status MaintenanceFilterStatus `json:"status" schema:"status"` +} + +func (r *MaintenanceEntryRepository) GetAllMaintenance(ctx context.Context, groupID uuid.UUID, filters MaintenanceFilters) ([]MaintenanceEntryWithDetails, error) { + query := r.db.MaintenanceEntry.Query().Where( + maintenanceentry.HasItemWith( + item.HasGroupWith(group.IDEQ(groupID)), + ), + ) + + if filters.Status == MaintenanceFilterStatusScheduled { + query = query.Where(maintenanceentry.Or( + maintenanceentry.DateIsNil(), + maintenanceentry.DateEQ(time.Time{}), + )) + } else if filters.Status == MaintenanceFilterStatusCompleted { + query = query.Where( + maintenanceentry.Not(maintenanceentry.Or( + maintenanceentry.DateIsNil(), + maintenanceentry.DateEQ(time.Time{})), + )) + } + entries, err := query.WithItem().Order(maintenanceentry.ByScheduledDate()).All(ctx) + + if err != nil { + return nil, err + } + + return mapEachMaintenanceEntryWithDetails(entries), nil +} diff --git a/backend/internal/data/repo/repo_maintenance_entry.go b/backend/internal/data/repo/repo_maintenance_entry.go index 73fe6e9ee..6f5c135b0 100644 --- a/backend/internal/data/repo/repo_maintenance_entry.go +++ b/backend/internal/data/repo/repo_maintenance_entry.go @@ -59,13 +59,6 @@ type ( Description string `json:"description"` Cost float64 `json:"cost,string"` } - - MaintenanceLog struct { - ItemID uuid.UUID `json:"itemId"` - CostAverage float64 `json:"costAverage"` - CostTotal float64 `json:"costTotal"` - Entries []MaintenanceEntry `json:"entries"` - } ) var ( @@ -84,11 +77,11 @@ func mapMaintenanceEntry(entry *ent.MaintenanceEntry) MaintenanceEntry { } } -func (r *MaintenanceEntryRepository) GetScheduled(ctx context.Context, GID uuid.UUID, dt types.Date) ([]MaintenanceEntry, error) { +func (r *MaintenanceEntryRepository) GetScheduled(ctx context.Context, gid uuid.UUID, dt types.Date) ([]MaintenanceEntry, error) { entries, err := r.db.MaintenanceEntry.Query(). Where( maintenanceentry.HasItemWith( - item.HasGroupWith(group.ID(GID)), + item.HasGroupWith(group.ID(gid)), ), maintenanceentry.ScheduledDate(dt.Time()), maintenanceentry.Or( @@ -118,8 +111,8 @@ func (r *MaintenanceEntryRepository) Create(ctx context.Context, itemID uuid.UUI return mapMaintenanceEntryErr(item, err) } -func (r *MaintenanceEntryRepository) Update(ctx context.Context, ID uuid.UUID, input MaintenanceEntryUpdate) (MaintenanceEntry, error) { - item, err := r.db.MaintenanceEntry.UpdateOneID(ID). +func (r *MaintenanceEntryRepository) Update(ctx context.Context, id uuid.UUID, input MaintenanceEntryUpdate) (MaintenanceEntry, error) { + item, err := r.db.MaintenanceEntry.UpdateOneID(id). SetDate(input.CompletedDate.Time()). SetScheduledDate(input.ScheduledDate.Time()). SetName(input.Name). @@ -130,78 +123,34 @@ func (r *MaintenanceEntryRepository) Update(ctx context.Context, ID uuid.UUID, i return mapMaintenanceEntryErr(item, err) } -type MaintenanceLogQuery struct { - Completed bool `json:"completed" schema:"completed"` - Scheduled bool `json:"scheduled" schema:"scheduled"` -} - -func (r *MaintenanceEntryRepository) GetLog(ctx context.Context, groupID, itemID uuid.UUID, query MaintenanceLogQuery) (MaintenanceLog, error) { - log := MaintenanceLog{ - ItemID: itemID, - } - - q := r.db.MaintenanceEntry.Query().Where( +func (r *MaintenanceEntryRepository) GetMaintenanceByItemID(ctx context.Context, groupID, itemID uuid.UUID, filters MaintenanceFilters) ([]MaintenanceEntryWithDetails, error) { + query := r.db.MaintenanceEntry.Query().Where( maintenanceentry.ItemID(itemID), maintenanceentry.HasItemWith( item.HasGroupWith(group.IDEQ(groupID)), ), ) - - if query.Completed { - q = q.Where(maintenanceentry.And( - maintenanceentry.DateNotNil(), - maintenanceentry.DateNEQ(time.Time{}), + if filters.Status == MaintenanceFilterStatusScheduled { + query = query.Where(maintenanceentry.Or( + maintenanceentry.DateIsNil(), + maintenanceentry.DateEQ(time.Time{}), )) - } else if query.Scheduled { - q = q.Where(maintenanceentry.And( - maintenanceentry.Or( + } else if filters.Status == MaintenanceFilterStatusCompleted { + query = query.Where( + maintenanceentry.Not(maintenanceentry.Or( maintenanceentry.DateIsNil(), - maintenanceentry.DateEQ(time.Time{}), - ), - maintenanceentry.ScheduledDateNotNil(), - maintenanceentry.ScheduledDateNEQ(time.Time{}), - )) - } - - entries, err := q.Order(ent.Desc(maintenanceentry.FieldDate)). - All(ctx) - if err != nil { - return MaintenanceLog{}, err + maintenanceentry.DateEQ(time.Time{})), + )) } + entries, err := query.WithItem().Order(maintenanceentry.ByScheduledDate()).All(ctx) - log.Entries = mapEachMaintenanceEntry(entries) - - var maybeTotal *float64 - var maybeAverage *float64 - - statement := ` -SELECT - SUM(cost_total) AS total_of_totals, - AVG(cost_total) AS avg_of_averages -FROM - ( - SELECT - strftime('%m-%Y', date) AS my, - SUM(cost) AS cost_total - FROM - maintenance_entries - WHERE - item_id = ? - GROUP BY - my - )` - - row := r.db.Sql().QueryRowContext(ctx, statement, itemID) - err = row.Scan(&maybeTotal, &maybeAverage) if err != nil { - return MaintenanceLog{}, err + return []MaintenanceEntryWithDetails{}, err } - log.CostAverage = orDefault(maybeAverage, 0) - log.CostTotal = orDefault(maybeTotal, 0) - return log, nil + return mapEachMaintenanceEntryWithDetails(entries), nil } -func (r *MaintenanceEntryRepository) Delete(ctx context.Context, ID uuid.UUID) error { - return r.db.MaintenanceEntry.DeleteOneID(ID).Exec(ctx) +func (r *MaintenanceEntryRepository) Delete(ctx context.Context, id uuid.UUID) error { + return r.db.MaintenanceEntry.DeleteOneID(id).Exec(ctx) } diff --git a/backend/internal/data/repo/repo_maintenance_entry_test.go b/backend/internal/data/repo/repo_maintenance_entry_test.go index 0c101ab1a..6f6bc0fdc 100644 --- a/backend/internal/data/repo/repo_maintenance_entry_test.go +++ b/backend/internal/data/repo/repo_maintenance_entry_test.go @@ -60,27 +60,14 @@ func TestMaintenanceEntryRepository_GetLog(t *testing.T) { } // Get the log for the item - log, err := tRepos.MaintEntry.GetLog(context.Background(), tGroup.ID, item.ID, MaintenanceLogQuery{ - Completed: true, - }) + log, err := tRepos.MaintEntry.GetMaintenanceByItemID(context.Background(), tGroup.ID, item.ID, MaintenanceFilters{Status: MaintenanceFilterStatusCompleted}) if err != nil { t.Fatalf("failed to get maintenance log: %v", err) } - assert.Equal(t, item.ID, log.ItemID) - assert.Len(t, log.Entries, 10) + assert.Len(t, log, 10) - // Calculate the average cost - var total float64 - - for _, entry := range log.Entries { - total += entry.Cost - } - - assert.InDelta(t, total, log.CostTotal, .001, "total cost should be equal to the sum of all entries") - assert.InDelta(t, total/2, log.CostAverage, 001, "average cost should be the average of the two months") - - for _, entry := range log.Entries { + for _, entry := range log { err := tRepos.MaintEntry.Delete(context.Background(), entry.ID) require.NoError(t, err) } diff --git a/backend/internal/data/repo/repo_notifier.go b/backend/internal/data/repo/repo_notifier.go index b9eb5a2df..867271b78 100644 --- a/backend/internal/data/repo/repo_notifier.go +++ b/backend/internal/data/repo/repo_notifier.go @@ -55,7 +55,7 @@ type ( Name string `json:"name"` IsActive bool `json:"isActive"` - URL string `json:"-"` // URL field is not exposed to the client + URL string `json:"url"` } ) @@ -114,7 +114,7 @@ func (r *NotifierRepository) Update(ctx context.Context, userID uuid.UUID, id uu return r.mapper.MapErr(notifier, err) } -func (r *NotifierRepository) Delete(ctx context.Context, userID uuid.UUID, ID uuid.UUID) error { - _, err := r.db.Notifier.Delete().Where(notifier.UserID(userID), notifier.ID(ID)).Exec(ctx) +func (r *NotifierRepository) Delete(ctx context.Context, userID uuid.UUID, id uuid.UUID) error { + _, err := r.db.Notifier.Delete().Where(notifier.UserID(userID), notifier.ID(id)).Exec(ctx) return err } diff --git a/backend/internal/data/repo/repo_users.go b/backend/internal/data/repo/repo_users.go index 378bf316f..8007fbc04 100644 --- a/backend/internal/data/repo/repo_users.go +++ b/backend/internal/data/repo/repo_users.go @@ -60,9 +60,9 @@ func mapUserOut(user *ent.User) UserOut { } } -func (r *UserRepository) GetOneID(ctx context.Context, ID uuid.UUID) (UserOut, error) { +func (r *UserRepository) GetOneID(ctx context.Context, id uuid.UUID) (UserOut, error) { return mapUserOutErr(r.db.User.Query(). - Where(user.ID(ID)). + Where(user.ID(id)). WithGroup(). Only(ctx)) } @@ -101,9 +101,9 @@ func (r *UserRepository) Create(ctx context.Context, usr UserCreate) (UserOut, e return r.GetOneID(ctx, entUser.ID) } -func (r *UserRepository) Update(ctx context.Context, ID uuid.UUID, data UserUpdate) error { +func (r *UserRepository) Update(ctx context.Context, id uuid.UUID, data UserUpdate) error { q := r.db.User.Update(). - Where(user.ID(ID)). + Where(user.ID(id)). SetName(data.Name). SetEmail(data.Email) @@ -130,6 +130,6 @@ func (r *UserRepository) GetSuperusers(ctx context.Context) ([]*ent.User, error) return users, nil } -func (r *UserRepository) ChangePassword(ctx context.Context, UID uuid.UUID, pw string) error { - return r.db.User.UpdateOneID(UID).SetPassword(pw).Exec(ctx) +func (r *UserRepository) ChangePassword(ctx context.Context, uid uuid.UUID, pw string) error { + return r.db.User.UpdateOneID(uid).SetPassword(pw).Exec(ctx) } diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 4ca480390..19535d27f 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -1,7 +1,12 @@ import { defineConfig } from 'vitepress' +import enMenu from "./menus/en.mjs"; // https://vitepress.dev/reference/site-config export default defineConfig({ + ignoreDeadLinks: [ + /^https?:\/\/localhost:7745/, + ], + title: "HomeBox", description: "A simple home inventory management software", lastUpdated: true, @@ -9,6 +14,15 @@ export default defineConfig({ hostname: 'https://homebox.software', }, + head: [ + ['link', { rel: 'icon', href: '/favicon.svg' }], + ['meta', { name: 'theme-color', content: '#3eaf7c' }], + ['meta', { name: 'og:title', content: 'HomeBox' }], + ['meta', { name: 'og:description', content: 'A simple home inventory management software' }], + ['meta', { name: 'og:image', content: '/homebox-email-banner.jpg' }], + ['meta', { name: 'twitter:card', content: 'summary' }], + ], + locales: { en: { label: 'English', @@ -32,30 +46,7 @@ export default defineConfig({ ], sidebar: { - '/en/': [ - { - text: 'Getting Started', - items: [ - { text: 'Quick Start', link: '/en/quick-start' }, - { text: 'Installation', link: '/en/installation' }, - { text: 'Configure Homebox', link: '/en/configure-homebox' }, - { text: 'Tips and Tricks', link: '/en/tips-tricks' } - ] - }, - { - text: 'Advanced', - items: [ - { text: 'Import CSV', link: '/en/import-csv' }, - ] - }, - { - text: 'Contributing', - items: [ - { text: 'Get Started', link: '/en/contribute/get-started' }, - { text: 'Bounty Program', link: '/en/contribute/bounty' } - ] - } - ] + '/en/': enMenu, }, socialLinks: [ diff --git a/docs/.vitepress/menus/en.mts b/docs/.vitepress/menus/en.mts new file mode 100644 index 000000000..9063d7730 --- /dev/null +++ b/docs/.vitepress/menus/en.mts @@ -0,0 +1,25 @@ +export default [ + { + text: 'Getting Started', + items: [ + {text: 'Quick Start', link: '/en/quick-start'}, + {text: 'Installation', link: '/en/installation'}, + {text: 'Organizing Your Items', link: '/en/organizing-items'}, + {text: 'Configure Homebox', link: '/en/configure-homebox'}, + {text: 'Tips and Tricks', link: '/en/tips-tricks'} + ] + }, + { + text: 'Advanced', + items: [ + {text: 'Import CSV', link: '/en/import-csv'}, + ] + }, + { + text: 'Contributing', + items: [ + {text: 'Get Started', link: '/en/contribute/get-started'}, + {text: 'Bounty Program', link: '/en/contribute/bounty'} + ] + } +] \ No newline at end of file diff --git a/docs/docs/api/openapi-2.0.json b/docs/docs/api/openapi-2.0.json index 2b695bc5d..12e556ceb 100644 --- a/docs/docs/api/openapi-2.0.json +++ b/docs/docs/api/openapi-2.0.json @@ -910,14 +910,34 @@ "application/json" ], "tags": [ - "Maintenance" + "Item Maintenance" ], "summary": "Get Maintenance Log", + "parameters": [ + { + "enum": [ + "scheduled", + "completed", + "both" + ], + "type": "string", + "x-enum-varnames": [ + "MaintenanceFilterStatusScheduled", + "MaintenanceFilterStatusCompleted", + "MaintenanceFilterStatusBoth" + ], + "name": "status", + "in": "query" + } + ], "responses": { "200": { "description": "OK", "schema": { - "$ref": "#/definitions/repo.MaintenanceLog" + "type": "array", + "items": { + "$ref": "#/definitions/repo.MaintenanceEntryWithDetails" + } } } } @@ -932,7 +952,7 @@ "application/json" ], "tags": [ - "Maintenance" + "Item Maintenance" ], "summary": "Create Maintenance Entry", "parameters": [ @@ -956,60 +976,6 @@ } } }, - "/v1/items/{id}/maintenance/{entry_id}": { - "put": { - "security": [ - { - "Bearer": [] - } - ], - "produces": [ - "application/json" - ], - "tags": [ - "Maintenance" - ], - "summary": "Update Maintenance Entry", - "parameters": [ - { - "description": "Entry Data", - "name": "payload", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/repo.MaintenanceEntryUpdate" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/repo.MaintenanceEntry" - } - } - } - }, - "delete": { - "security": [ - { - "Bearer": [] - } - ], - "produces": [ - "application/json" - ], - "tags": [ - "Maintenance" - ], - "summary": "Delete Maintenance Entry", - "responses": { - "204": { - "description": "No Content" - } - } - } - }, "/v1/items/{id}/path": { "get": { "security": [ @@ -1402,6 +1368,104 @@ } } }, + "/v1/maintenance": { + "get": { + "security": [ + { + "Bearer": [] + } + ], + "produces": [ + "application/json" + ], + "tags": [ + "Maintenance" + ], + "summary": "Query All Maintenance", + "parameters": [ + { + "enum": [ + "scheduled", + "completed", + "both" + ], + "type": "string", + "x-enum-varnames": [ + "MaintenanceFilterStatusScheduled", + "MaintenanceFilterStatusCompleted", + "MaintenanceFilterStatusBoth" + ], + "name": "status", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/repo.MaintenanceEntryWithDetails" + } + } + } + } + } + }, + "/v1/maintenance/{id}": { + "put": { + "security": [ + { + "Bearer": [] + } + ], + "produces": [ + "application/json" + ], + "tags": [ + "Maintenance" + ], + "summary": "Update Maintenance Entry", + "parameters": [ + { + "description": "Entry Data", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/repo.MaintenanceEntryUpdate" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/repo.MaintenanceEntry" + } + } + } + }, + "delete": { + "security": [ + { + "Bearer": [] + } + ], + "produces": [ + "application/json" + ], + "tags": [ + "Maintenance" + ], + "summary": "Delete Maintenance Entry", + "responses": { + "204": { + "description": "No Content" + } + } + } + }, "/v1/notifiers": { "get": { "security": [ @@ -2607,26 +2671,49 @@ } } }, - "repo.MaintenanceLog": { + "repo.MaintenanceEntryWithDetails": { "type": "object", "properties": { - "costAverage": { - "type": "number" + "completedDate": { + "type": "string" }, - "costTotal": { - "type": "number" + "cost": { + "type": "string", + "example": "0" }, - "entries": { - "type": "array", - "items": { - "$ref": "#/definitions/repo.MaintenanceEntry" - } + "description": { + "type": "string" }, - "itemId": { + "id": { + "type": "string" + }, + "itemID": { + "type": "string" + }, + "itemName": { + "type": "string" + }, + "name": { + "type": "string" + }, + "scheduledDate": { "type": "string" } } }, + "repo.MaintenanceFilterStatus": { + "type": "string", + "enum": [ + "scheduled", + "completed", + "both" + ], + "x-enum-varnames": [ + "MaintenanceFilterStatusScheduled", + "MaintenanceFilterStatusCompleted", + "MaintenanceFilterStatusBoth" + ] + }, "repo.NotifierCreate": { "type": "object", "required": [ @@ -2668,6 +2755,10 @@ "updatedAt": { "type": "string" }, + "url": { + "description": "URL field is not exposed to the client", + "type": "string" + }, "userId": { "type": "string" } @@ -2710,9 +2801,6 @@ }, "total": { "type": "integer" - }, - "totalPrice": { - "type": "number" } } }, @@ -2995,4 +3083,4 @@ "in": "header" } } -} +} \ No newline at end of file diff --git a/docs/en/contribute/get-started.md b/docs/en/contribute/get-started.md index 9c7901665..d335e7ad9 100644 --- a/docs/en/contribute/get-started.md +++ b/docs/en/contribute/get-started.md @@ -58,7 +58,12 @@ For documentation contributions, you only need Node.js and PNPM. ::: ## Translations -We use our own [Weblate instance](https://translate.sysadminsmedia.com/projects/homebox/) for translations. If you would like to help translate Homebox, please visit the Weblate instance and help us translate the project. +We use our own [Weblate instance](https://translate.sysadminsmedia.com/projects/homebox/) for translations. If you would like to help translate Homebox, please visit the +Weblate instance and help us translate the project. We accept translations for any language. + +If you add a new language, please go to the English translation, press the `Add new translation string` button and then +use `languages.<language_code>` as the key. For example, if you are adding a French translation, the key would be `languages.fr`. +And then the string should be the name of the language in English. This is used to display the language in the language switcher. [](http://translate.sysadminsmedia.com/engage/homebox/) diff --git a/docs/en/organizing-items.md b/docs/en/organizing-items.md new file mode 100644 index 000000000..15f1cc34e --- /dev/null +++ b/docs/en/organizing-items.md @@ -0,0 +1,80 @@ +# Organizing Your Items + +Homebox allows you to organize your items using locations and labels. + +## Items + +Items represent an item or asset you want to track in Homebox. + +To create an item, click on the Create button in the main menu, the select Item / Asset. The following parameters are available: +- Parent Location (Required) - The location in which the item is stored +- Item Name (Required) - Name of the item +- Item Description (Optional) - Description of the item +- Labels (Optional) - Here, you can add as many Labels to the item as you like for further organization +- Photo (Optional) - Allows you to add a photo of the item. Additional photos can be added after the item has been created. + +::: details Additional Fields +Once the item is created, additional fields become available. These are: + +**Details Section** +- Quantity +- Serial Number +- Model Number +- Manufacturer +- Notes +- Insured (Checkbox) +- Archived (Checkbox) +- Asset-ID (Populated by default) + +**Purchase Details Section** +- Purchased From +- Purchase Price +- Purchase Date + +**Warranty Details Section** +- Lifetime Warranty (Checkbox) +- Warranty Expires +- Warranty Notes + +**Sold Details Section** +- Sold to +- Sold Price +- Sold At +::: + +You can also add custom fields by scrolling down to the Custom Fields section and clicking the add button. Custom fields are added on a per-item basis, not globally. + +You might want to add attachments to an item (such as photos, a user manual, a warranty, a receipt, etc.) Scroll down to the Attachments section, and either click on the box or drag and drop to add files. Once a file has been added, click edit to edit its details. + +> [!TIP] +> To set the primary image (the image that appears in the Search view) for the item, click on the edit button next to the uploaded image and ensure the Primary Photo checkbox is checked. By default, the first photo you upload will automatically be the Primary Photo. + + +## Locations + +*Items* are stored in *locations*. Locations can be nested to create as many locations as you need. Homebox creates some default locations initially, but you can easily change, delete or rearrange them. + +To create a location, click the Create button in the main menu, then select Location. + +Locations have 3 parameters: +- Name +- Description (Optional) +- Parent Location (Optional -Leave blank if this should be a top-level Location, or select the location you want this location to be nested under) + +To view all locations and the items stored in them, select Locations in the main menu. + +## Labels + +Labels allow you to organize items independently of location. For example, you might have electronic devices all over your house. What if you wanted to see a list of every Electronic Device you own without having to go through every single location? + +Labels enable this. In the example above, if you tag all electronic devices with the "Electronics" label when you create them, you can easily see the list of all your Electronics by going to the related page. + +To create a Label, click the Create button in the menu, then select Label. Labels have the following parameters: +- Name +- Description (Optional) + +To see all items related to a specific label (or specific combination of labels): +- From the Home page, scroll to the bottom and select the Label you want to see. +- Alternatively, navigate to the Search page and use the Labels dropdown to filter by one or more labels. + +Items can have as many labels as you wish. The example above is only one example of how labels can be used for organization. Experiment with what labels work best for you! diff --git a/frontend/assets/css/main.css b/frontend/assets/css/main.css index 7fad72750..8a9d8fa72 100644 --- a/frontend/assets/css/main.css +++ b/frontend/assets/css/main.css @@ -27,4 +27,4 @@ ::-webkit-scrollbar-thumb:hover { background-color: #9B9B9B; -} \ No newline at end of file +} diff --git a/frontend/components/Base/Card.vue b/frontend/components/Base/Card.vue index e08c7caf6..ddc2ed81c 100644 --- a/frontend/components/Base/Card.vue +++ b/frontend/components/Base/Card.vue @@ -1,5 +1,5 @@ <template> - <div class="card bg-base-100 shadow-xl rounded-lg"> + <div class="card rounded-lg bg-base-100 shadow-xl"> <div v-if="$slots.title" class="px-4 py-5 sm:px-6"> <component :is="collapsable ? 'button' : 'div'" v-on="collapsable ? { click: toggle } : {}"> <h3 class="flex items-center text-lg font-medium leading-6"> diff --git a/frontend/components/Base/Modal.vue b/frontend/components/Base/Modal.vue index fa63a92f7..e2d0c3820 100644 --- a/frontend/components/Base/Modal.vue +++ b/frontend/components/Base/Modal.vue @@ -2,7 +2,7 @@ <div class="z-[999]"> <input :id="modalId" v-model="modal" type="checkbox" class="modal-toggle" /> <div class="modal modal-bottom overflow-visible sm:modal-middle"> - <div class="modal-box relative overflow-visible"> + <div class="modal-box relative overflow-auto"> <button :for="modalId" class="btn btn-circle btn-sm absolute right-2 top-2" @click="close">✕</button> <h3 class="text-lg font-bold"> diff --git a/frontend/components/Form/DatePicker.vue b/frontend/components/Form/DatePicker.vue index e4bc7bc6e..725a60745 100644 --- a/frontend/components/Form/DatePicker.vue +++ b/frontend/components/Form/DatePicker.vue @@ -1,15 +1,15 @@ <template> <div v-if="!inline" class="form-control w-full"> <label class="label"> - <span class="label-text"> {{ label }}</span> + <span class="label-text"> {{ label }} </span> </label> - <VueDatePicker v-model="selected" :enable-time-picker="false" clearable :dark="isDark" /> + <VueDatePicker v-model="selected" :enable-time-picker="false" clearable :dark="isDark" :teleport="true" /> </div> <div v-else class="sm:grid sm:grid-cols-4 sm:items-start sm:gap-4"> <label class="label"> <span class="label-text"> {{ label }} </span> </label> - <VueDatePicker v-model="selected" :enable-time-picker="false" clearable :dark="isDark" /> + <VueDatePicker v-model="selected" :enable-time-picker="false" clearable :dark="isDark" :teleport="true" /> </div> </template> diff --git a/frontend/components/Form/Multiselect.vue b/frontend/components/Form/Multiselect.vue index 6b75ae0ec..0680394f0 100644 --- a/frontend/components/Form/Multiselect.vue +++ b/frontend/components/Form/Multiselect.vue @@ -8,6 +8,14 @@ <span v-for="itm in value" :key="name != '' ? itm[name] : itm" class="badge"> {{ name != "" ? itm[name] : itm }} </span> + <button + v-if="value.length > 0" + type="button" + class="absolute inset-y-0 right-6 flex items-center rounded-r-md px-2 focus:outline-none" + @click="clear" + > + <MdiClose class="size-5" /> + </button> </div> <div tabindex="0" @@ -36,6 +44,8 @@ </template> <script lang="ts" setup> + import MdiClose from "~icons/mdi/close"; + const emit = defineEmits(["update:modelValue"]); const props = defineProps({ label: { @@ -78,6 +88,10 @@ }); }); + function clear() { + value.value = []; + } + const selected = computed<string[]>(() => { return value.value.map(itm => itm[props.uniqueField]); }); diff --git a/frontend/components/Form/TextArea.vue b/frontend/components/Form/TextArea.vue index e5ac92f4b..f208b3274 100644 --- a/frontend/components/Form/TextArea.vue +++ b/frontend/components/Form/TextArea.vue @@ -2,16 +2,30 @@ <div v-if="!inline" class="form-control w-full"> <label class="label"> <span class="label-text">{{ label }}</span> + <span + :class="{ + 'text-red-600': + typeof value === 'string' && + ((maxLength && value.length > maxLength) || (minLength && value.length < minLength)), + }" + > + {{ typeof value === "string" && (maxLength || minLength) ? `${value.length}/${maxLength}` : "" }} + </span> </label> <textarea ref="el" v-model="value" class="textarea textarea-bordered h-28 w-full" :placeholder="placeholder" /> - <label v-if="limit" class="label"> - <span class="label-text-alt"></span> - <span class="label-text-alt"> {{ valueLen }}/{{ limit }}</span> - </label> </div> <div v-else class="sm:grid sm:grid-cols-4 sm:items-start sm:gap-4"> <label class="label"> <span class="label-text">{{ label }}</span> + <span + :class="{ + 'text-red-600': + typeof value === 'string' && + ((maxLength && value.length > maxLength) || (minLength && value.length < minLength)), + }" + > + {{ typeof value === "string" && (maxLength || minLength) ? `${value.length}/${maxLength}` : "" }} + </span> </label> <textarea ref="el" @@ -39,10 +53,6 @@ type: String, default: "text", }, - limit: { - type: [Number, String], - default: null, - }, placeholder: { type: String, default: "", @@ -51,6 +61,14 @@ type: Boolean, default: false, }, + maxLength: { + type: Number, + required: false, + }, + minLength: { + type: Number, + required: false, + }, }); const el = ref(); diff --git a/frontend/components/Form/TextField.vue b/frontend/components/Form/TextField.vue index 57aa0e0e5..d1aa2e46b 100644 --- a/frontend/components/Form/TextField.vue +++ b/frontend/components/Form/TextField.vue @@ -1,15 +1,46 @@ <template> <div v-if="!inline" class="form-control w-full"> <label class="label"> - <span class="label-text">{{ label }}</span> + <span class="label-text"> {{ label }} </span> + <span + :class="{ + 'text-red-600': + typeof value === 'string' && + ((maxLength && value.length > maxLength) || (minLength && value.length < minLength)), + }" + > + {{ typeof value === "string" && (maxLength || minLength) ? `${value.length}/${maxLength}` : "" }} + </span> </label> - <input ref="input" v-model="value" :placeholder="placeholder" :type="type" class="input input-bordered w-full" /> + <input + ref="input" + v-model="value" + :placeholder="placeholder" + :type="type" + :required="required" + class="input input-bordered w-full" + /> </div> <div v-else class="sm:grid sm:grid-cols-4 sm:items-start sm:gap-4"> <label class="label"> - <span class="label-text">{{ label }}</span> + <span class="label-text"> {{ label }} </span> + <span + :class="{ + 'text-red-600': + typeof value === 'string' && + ((maxLength && value.length > maxLength) || (minLength && value.length < minLength)), + }" + > + {{ typeof value === "string" && (maxLength || minLength) ? `${value.length}/${maxLength}` : "" }} + </span> </label> - <input v-model="value" :placeholder="placeholder" class="input input-bordered col-span-3 mt-2 w-full" /> + <input + v-model="value" + :placeholder="placeholder" + :type="type" + :required="required" + class="input input-bordered col-span-3 mt-2 w-full" + /> </div> </template> @@ -23,6 +54,10 @@ type: [String, Number], default: null, }, + required: { + type: [Boolean], + default: null, + }, type: { type: String, default: "text", @@ -39,6 +74,14 @@ type: String, default: "", }, + maxLength: { + type: Number, + required: false, + }, + minLength: { + type: Number, + required: false, + }, }); const input = ref<HTMLElement | null>(null); diff --git a/frontend/components/Item/CreateModal.vue b/frontend/components/Item/CreateModal.vue index 24e4f7a38..621f8767e 100644 --- a/frontend/components/Item/CreateModal.vue +++ b/frontend/components/Item/CreateModal.vue @@ -3,16 +3,25 @@ <template #title> {{ $t("components.item.create_modal.title") }} </template> <form @submit.prevent="create()"> <LocationSelector v-model="form.location" /> - <FormTextField ref="nameInput" v-model="form.name" :trigger-focus="focused" :autofocus="true" label="Item Name" /> - <FormTextArea v-model="form.description" label="Item Description" /> + <FormTextField + ref="nameInput" + v-model="form.name" + :trigger-focus="focused" + :autofocus="true" + label="Item Name" + :max-length="255" + :min-length="1" + /> + <FormTextArea v-model="form.description" label="Item Description" :max-length="1000" /> <FormMultiselect v-model="form.labels" label="Labels" :items="labels ?? []" /> - <div class="modal-action"> - <div class="flex justify-center"> - <div> - <label for="photo" class="btn">{{ $t("components.item.create_modal.photo_button") }}</label> - <input id="photo" type="file" accept="image/*" style="visibility: hidden" @change="previewImage" /> - </div> + <div class="modal-action mb-6"> + <div> + <label for="photo" class="btn">{{ $t("components.item.create_modal.photo_button") }}</label> + <input id="photo" class="hidden" type="file" accept="image/png,image/jpeg,image/gif" @change="previewImage" /> + </div> + <div class="grow"></div> + <div> <BaseButton class="rounded-r-none" :loading="loading" type="submit"> <template #icon> <MdiPackageVariant class="swap-off size-5" /> diff --git a/frontend/components/Item/View/Selectable.vue b/frontend/components/Item/View/Selectable.vue index 3e326018e..1687123d1 100644 --- a/frontend/components/Item/View/Selectable.vue +++ b/frontend/components/Item/View/Selectable.vue @@ -59,7 +59,7 @@ <template v-else> <div class="grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3"> <ItemCard v-for="item in items" :key="item.id" :item="item" /> - <div class="hidden text-lg first:block">{{ $t("components.item.view.selectable.no_items") }}</div> + <div class="hidden first:block">{{ $t("components.item.view.selectable.no_items") }}</div> </div> </template> </section> diff --git a/frontend/components/Label/CreateModal.vue b/frontend/components/Label/CreateModal.vue index 5d6e85a80..4278fadc2 100644 --- a/frontend/components/Label/CreateModal.vue +++ b/frontend/components/Label/CreateModal.vue @@ -8,8 +8,10 @@ :trigger-focus="focused" :autofocus="true" label="Label Name" + :max-length="255" + :min-length="1" /> - <FormTextArea v-model="form.description" label="Label Description" /> + <FormTextArea v-model="form.description" label="Label Description" :max-length="255" /> <div class="modal-action"> <div class="flex justify-center"> <BaseButton class="rounded-r-none" :loading="loading" type="submit"> {{ $t("global.create") }} </BaseButton> diff --git a/frontend/components/Location/CreateModal.vue b/frontend/components/Location/CreateModal.vue index 83500adfb..8963874ca 100644 --- a/frontend/components/Location/CreateModal.vue +++ b/frontend/components/Location/CreateModal.vue @@ -7,9 +7,12 @@ v-model="form.name" :trigger-focus="focused" :autofocus="true" + :required="true" label="Location Name" + :max-length="255" + :min-length="1" /> - <FormTextArea v-model="form.description" label="Location Description" /> + <FormTextArea v-model="form.description" label="Location Description" :max-length="1000" /> <LocationSelector v-model="form.parent" /> <div class="modal-action"> <div class="flex justify-center"> @@ -18,7 +21,7 @@ <label tabindex="0" class="btn rounded-l-none rounded-r-xl"> <MdiChevronDown class="size-5" /> </label> - <ul tabindex="0" class="dropdown-content menu rounded-box right-0 w-64 bg-base-100 p-2 shadow"> + <ul tabindex="0" class="dropdown-content menu rounded-box bg-base-100 right-0 w-64 p-2 shadow"> <li> <button type="button" @click="create(false)">{{ $t("global.create_and_add") }}</button> </li> diff --git a/frontend/components/Location/Tree/Root.vue b/frontend/components/Location/Tree/Root.vue index b6d92512b..d1b7b1ed1 100644 --- a/frontend/components/Location/Tree/Root.vue +++ b/frontend/components/Location/Tree/Root.vue @@ -11,6 +11,9 @@ <template> <div class="root border-2 p-4"> + <p v-if="locs.length === 0" class="text-center text-sm"> + {{ $t("location.tree.no_locations") }} + </p> <LocationTreeNode v-for="item in locs" :key="item.id" :item="item" :tree-id="treeId" /> </div> </template> diff --git a/frontend/components/Maintenance/EditModal.vue b/frontend/components/Maintenance/EditModal.vue new file mode 100644 index 000000000..37309ecaf --- /dev/null +++ b/frontend/components/Maintenance/EditModal.vue @@ -0,0 +1,164 @@ +<template> + <BaseModal v-model="visible"> + <template #title> + {{ entry.id ? $t("maintenance.modal.edit_title") : $t("maintenance.modal.new_title") }} + </template> + <form @submit.prevent="dispatchFormSubmit"> + <FormTextField v-model="entry.name" autofocus :label="$t('maintenance.modal.entry_name')" /> + <DatePicker v-model="entry.completedDate" :label="$t('maintenance.modal.completed_date')" /> + <DatePicker v-model="entry.scheduledDate" :label="$t('maintenance.modal.scheduled_date')" /> + <FormTextArea v-model="entry.description" :label="$t('maintenance.modal.notes')" /> + <FormTextField v-model="entry.cost" autofocus :label="$t('maintenance.modal.cost')" /> + <div class="flex justify-end py-2"> + <BaseButton type="submit" class="ml-2 mt-2"> + <template #icon> + <MdiPost /> + </template> + {{ entry.id ? $t("maintenance.modal.edit_action") : $t("maintenance.modal.new_action") }} + </BaseButton> + </div> + </form> + </BaseModal> +</template> + +<script setup lang="ts"> + import { useI18n } from "vue-i18n"; + import type { MaintenanceEntry, MaintenanceEntryWithDetails } from "~~/lib/api/types/data-contracts"; + import MdiPost from "~icons/mdi/post"; + import DatePicker from "~~/components/Form/DatePicker.vue"; + + const { t } = useI18n(); + const api = useUserApi(); + const toast = useNotifier(); + + const emit = defineEmits(["changed"]); + + const visible = ref(false); + const entry = reactive({ + id: null as string | null, + name: "", + completedDate: null as Date | null, + scheduledDate: null as Date | null, + description: "", + cost: "", + itemId: null as string | null, + }); + + async function dispatchFormSubmit() { + if (entry.id) { + await editEntry(); + return; + } + + await createEntry(); + } + + async function createEntry() { + if (!entry.itemId) { + return; + } + const { error } = await api.items.maintenance.create(entry.itemId, { + name: entry.name, + completedDate: entry.completedDate ?? "", + scheduledDate: entry.scheduledDate ?? "", + description: entry.description, + cost: parseFloat(entry.cost) ? entry.cost : "0", + }); + + if (error) { + toast.error(t("maintenance.toast.failed_to_create")); + return; + } + + visible.value = false; + emit("changed"); + } + + async function editEntry() { + if (!entry.id) { + return; + } + + const { error } = await api.maintenance.update(entry.id, { + name: entry.name, + completedDate: entry.completedDate ?? "null", + scheduledDate: entry.scheduledDate ?? "null", + description: entry.description, + cost: entry.cost, + }); + + if (error) { + toast.error(t("maintenance.toast.failed_to_update")); + return; + } + + visible.value = false; + emit("changed"); + } + + const openCreateModal = (itemId: string) => { + entry.id = null; + entry.name = ""; + entry.completedDate = null; + entry.scheduledDate = null; + entry.description = ""; + entry.cost = ""; + entry.itemId = itemId; + visible.value = true; + }; + + const openUpdateModal = (maintenanceEntry: MaintenanceEntry | MaintenanceEntryWithDetails) => { + entry.id = maintenanceEntry.id; + entry.name = maintenanceEntry.name; + entry.completedDate = new Date(maintenanceEntry.completedDate); + entry.scheduledDate = new Date(maintenanceEntry.scheduledDate); + entry.description = maintenanceEntry.description; + entry.cost = maintenanceEntry.cost; + entry.itemId = null; + visible.value = true; + }; + + const confirm = useConfirm(); + + async function deleteEntry(id: string) { + const result = await confirm.open(t("maintenance.modal.delete_confirmation")); + if (result.isCanceled) { + return; + } + + const { error } = await api.maintenance.delete(id); + + if (error) { + toast.error(t("maintenance.toast.failed_to_delete")); + return; + } + emit("changed"); + } + + async function complete(maintenanceEntry: MaintenanceEntry) { + const { error } = await api.maintenance.update(maintenanceEntry.id, { + name: maintenanceEntry.name, + completedDate: new Date(Date.now()), + scheduledDate: maintenanceEntry.scheduledDate ?? "null", + description: maintenanceEntry.description, + cost: maintenanceEntry.cost, + }); + if (error) { + toast.error(t("maintenance.toast.failed_to_update")); + } + emit("changed"); + } + + function duplicate(maintenanceEntry: MaintenanceEntry | MaintenanceEntryWithDetails, itemId: string) { + entry.id = null; + entry.name = maintenanceEntry.name; + entry.completedDate = null; + entry.scheduledDate = null; + entry.description = maintenanceEntry.description; + entry.cost = maintenanceEntry.cost; + entry.itemId = itemId; + visible.value = true; + } + + defineExpose({ openCreateModal, openUpdateModal, deleteEntry, complete, duplicate }); +</script> diff --git a/frontend/components/Maintenance/ListView.vue b/frontend/components/Maintenance/ListView.vue new file mode 100644 index 000000000..e91605509 --- /dev/null +++ b/frontend/components/Maintenance/ListView.vue @@ -0,0 +1,201 @@ +<script setup lang="ts"> + import { useI18n } from "vue-i18n"; + import type { MaintenanceEntryWithDetails } from "~~/lib/api/types/data-contracts"; + import { MaintenanceFilterStatus } from "~~/lib/api/types/data-contracts"; + import type { StatsFormat } from "~~/components/global/StatCard/types"; + import MdiCheck from "~icons/mdi/check"; + import MdiDelete from "~icons/mdi/delete"; + import MdiEdit from "~icons/mdi/edit"; + import MdiCalendar from "~icons/mdi/calendar"; + import MdiPlus from "~icons/mdi/plus"; + import MdiWrenchClock from "~icons/mdi/wrench-clock"; + import MdiContentDuplicate from "~icons/mdi/content-duplicate"; + import MaintenanceEditModal from "~~/components/Maintenance/EditModal.vue"; + + const maintenanceFilterStatus = ref(MaintenanceFilterStatus.MaintenanceFilterStatusScheduled); + const maintenanceEditModal = ref<InstanceType<typeof MaintenanceEditModal>>(); + + const api = useUserApi(); + const { t } = useI18n(); + + const props = defineProps({ + currentItemId: { + type: String, + default: undefined, + }, + }); + + const { data: maintenanceDataList, refresh: refreshList } = useAsyncData<MaintenanceEntryWithDetails[]>( + async () => { + const { data } = + props.currentItemId !== undefined + ? await api.items.maintenance.getLog(props.currentItemId, { status: maintenanceFilterStatus.value }) + : await api.maintenance.getAll({ status: maintenanceFilterStatus.value }); + console.log(data); + return data as MaintenanceEntryWithDetails[]; + }, + { + watch: maintenanceFilterStatus, + } + ); + + const stats = computed(() => { + console.log(maintenanceDataList); + if (!maintenanceDataList.value) return []; + + const count = maintenanceDataList.value ? maintenanceDataList.value.length || 0 : 0; + let total = 0; + maintenanceDataList.value.forEach(item => { + total += parseFloat(item.cost); + }); + + const average = count > 0 ? total / count : 0; + + return [ + { + id: "count", + title: t("maintenance.total_entries"), + value: count, + type: "number" as StatsFormat, + }, + { + id: "total", + title: t("maintenance.total_cost"), + value: total, + type: "currency" as StatsFormat, + }, + { + id: "average", + title: t("maintenance.monthly_average"), + value: average, + type: "currency" as StatsFormat, + }, + ]; + }); +</script> + +<template> + <section class="space-y-6"> + <div class="grid grid-cols-1 gap-6 md:grid-cols-3"> + <StatCard + v-for="stat in stats" + :key="stat.id" + class="stats border-l-primary block shadow-xl" + :title="stat.title" + :value="stat.value" + :type="stat.type" + /> + </div> + <div class="flex"> + <div class="btn-group"> + <BaseButton + size="sm" + :class="`${maintenanceFilterStatus == MaintenanceFilterStatus.MaintenanceFilterStatusScheduled ? 'btn-active' : ''}`" + @click="maintenanceFilterStatus = MaintenanceFilterStatus.MaintenanceFilterStatusScheduled" + > + {{ $t("maintenance.filter.scheduled") }} + </BaseButton> + <BaseButton + size="sm" + :class="`${maintenanceFilterStatus == MaintenanceFilterStatus.MaintenanceFilterStatusCompleted ? 'btn-active' : ''}`" + @click="maintenanceFilterStatus = MaintenanceFilterStatus.MaintenanceFilterStatusCompleted" + > + {{ $t("maintenance.filter.completed") }} + </BaseButton> + <BaseButton + size="sm" + :class="`${maintenanceFilterStatus == MaintenanceFilterStatus.MaintenanceFilterStatusBoth ? 'btn-active' : ''}`" + @click="maintenanceFilterStatus = MaintenanceFilterStatus.MaintenanceFilterStatusBoth" + > + {{ $t("maintenance.filter.both") }} + </BaseButton> + </div> + <BaseButton + v-if="props.currentItemId" + class="ml-auto" + size="sm" + @click="maintenanceEditModal?.openCreateModal(props.currentItemId)" + > + <template #icon> + <MdiPlus /> + </template> + {{ $t("maintenance.list.new") }} + </BaseButton> + </div> + </section> + <section> + <!-- begin --> + <MaintenanceEditModal ref="maintenanceEditModal" @changed="refreshList"></MaintenanceEditModal> + <div class="container space-y-6"> + <BaseCard v-for="e in maintenanceDataList" :key="e.id"> + <BaseSectionHeader class="border-b border-b-gray-300 p-6"> + <span class="text-base-content"> + <span v-if="!props.currentItemId"> + <NuxtLink class="hover:underline" :to="`/item/${(e as MaintenanceEntryWithDetails).itemID}`"> + {{ (e as MaintenanceEntryWithDetails).itemName }} + </NuxtLink> + - + </span> + {{ e.name }} + </span> + <template #description> + <div class="flex flex-wrap gap-2"> + <div v-if="validDate(e.completedDate)" class="badge p-3"> + <MdiCheck class="mr-2" /> + <DateTime :date="e.completedDate" format="human" datetime-type="date" /> + </div> + <div v-else-if="validDate(e.scheduledDate)" class="badge p-3"> + <MdiCalendar class="mr-2" /> + <DateTime :date="e.scheduledDate" format="human" datetime-type="date" /> + </div> + <div class="tooltip tooltip-primary" data-tip="Cost"> + <div class="badge badge-primary p-3"> + <Currency :amount="e.cost" /> + </div> + </div> + </div> + </template> + </BaseSectionHeader> + <div class="p-6"> + <Markdown :source="e.description" /> + </div> + <div class="flex flex-wrap justify-end gap-1 p-4"> + <BaseButton size="sm" @click="maintenanceEditModal?.openUpdateModal(e)"> + <template #icon> + <MdiEdit /> + </template> + {{ $t("maintenance.list.edit") }} + </BaseButton> + <BaseButton v-if="!validDate(e.completedDate)" size="sm" @click="maintenanceEditModal?.complete(e)"> + <template #icon> + <MdiCheck /> + </template> + {{ $t("maintenance.list.complete") }} + </BaseButton> + <BaseButton size="sm" @click="maintenanceEditModal?.duplicate(e, e.itemID)"> + <template #icon> + <MdiContentDuplicate /> + </template> + {{ $t("maintenance.list.duplicate") }} + </BaseButton> + <BaseButton size="sm" class="btn-error" @click="maintenanceEditModal?.deleteEntry(e.id)"> + <template #icon> + <MdiDelete /> + </template> + {{ $t("maintenance.list.delete") }} + </BaseButton> + </div> + </BaseCard> + <div v-if="props.currentItemId" class="hidden first:block"> + <button + type="button" + class="border-base-content relative block w-full rounded-lg border-2 border-dashed p-12 text-center" + @click="maintenanceEditModal?.openCreateModal(props.currentItemId)" + > + <MdiWrenchClock class="inline size-16" /> + <span class="mt-2 block text-sm font-medium text-gray-900"> {{ $t("maintenance.list.create_first") }} </span> + </button> + </div> + </div> + </section> +</template> diff --git a/frontend/components/global/DetailsSection/DetailsSection.vue b/frontend/components/global/DetailsSection/DetailsSection.vue index 835b4590d..366440772 100644 --- a/frontend/components/global/DetailsSection/DetailsSection.vue +++ b/frontend/components/global/DetailsSection/DetailsSection.vue @@ -27,7 +27,7 @@ </ClientOnly> </template> <template v-else> - <span class="flex items-center"> + <span class="flex items-center text-wrap"> {{ detail.text }} <span v-if="detail.copyable" diff --git a/frontend/components/global/Markdown.vue b/frontend/components/global/Markdown.vue index 0e48ae091..0408c690d 100644 --- a/frontend/components/global/Markdown.vue +++ b/frontend/components/global/Markdown.vue @@ -24,7 +24,7 @@ </script> <template> - <div class="markdown" v-html="raw"></div> + <div class="markdown text-wrap" v-html="raw"></div> </template> <style scoped> diff --git a/frontend/layouts/default.vue b/frontend/layouts/default.vue index b7b873897..4e7abe658 100644 --- a/frontend/layouts/default.vue +++ b/frontend/layouts/default.vue @@ -12,15 +12,15 @@ <AppToast /> <div class="drawer drawer-mobile"> <input id="my-drawer-2" v-model="drawerToggle" type="checkbox" class="drawer-toggle" /> - <div class="drawer-content justify-center bg-base-300 pt-20 lg:pt-0"> + <div class="drawer-content bg-base-300 justify-center pt-20 lg:pt-0"> <AppHeaderDecor v-if="preferences.displayHeaderDecor" class="-mt-10 hidden lg:block" /> <!-- Button --> - <div class="navbar drawer-button fixed top-0 z-[99] bg-primary shadow-md lg:hidden"> + <div class="navbar drawer-button bg-primary fixed top-0 z-[99] shadow-md lg:hidden"> <label for="my-drawer-2" class="btn btn-square btn-ghost drawer-button text-base-100 lg:hidden"> <MdiMenu class="size-6" /> </label> <NuxtLink to="/home"> - <h2 class="flex text-3xl font-bold tracking-tight text-base-100"> + <h2 class="text-base-100 flex text-3xl font-bold tracking-tight"> HomeB <AppLogo class="-mb-3 w-8" /> x @@ -29,7 +29,7 @@ </div> <slot></slot> - <footer v-if="status" class="bottom-0 w-full bg-base-300 pb-4 text-center text-secondary-content"> + <footer v-if="status" class="bg-base-300 text-secondary-content bottom-0 w-full pb-4 text-center"> <p class="text-center text-sm"> {{ $t("global.version", { version: status.build.version }) }} ~ {{ $t("global.build", { build: status.build.commit }) }} @@ -42,26 +42,26 @@ <label for="my-drawer-2" class="drawer-overlay"></label> <!-- Top Section --> - <div class="flex w-60 flex-col bg-base-200 py-5 md:py-10"> + <div class="bg-base-200 flex min-w-40 max-w-min flex-col p-5 md:py-10"> <div class="space-y-8"> <div class="flex flex-col items-center gap-4"> <p>{{ $t("global.welcome", { username: username }) }}</p> <NuxtLink class="avatar placeholder" to="/home"> - <div class="w-24 rounded-full bg-base-300 p-4 text-neutral-content"> + <div class="bg-base-300 text-neutral-content w-24 rounded-full p-4"> <AppLogo /> </div> </NuxtLink> </div> - <div class="flex flex-col bg-base-200"> - <div class="mx-auto mb-6 w-40"> - <div class="dropdown visible w-40"> + <div class="bg-base-200 flex flex-col"> + <div class="mb-6"> + <div class="dropdown visible w-full"> <label tabindex="0" class="text-no-transform btn btn-primary btn-block text-lg"> <span> <MdiPlus class="-ml-1 mr-1" /> </span> {{ $t("global.create") }} </label> - <ul tabindex="0" class="dropdown-content menu rounded-box w-40 bg-base-100 p-2 shadow"> + <ul tabindex="0" class="dropdown-content menu rounded-box bg-base-100 w-full p-2 shadow"> <li v-for="btn in dropdown" :key="btn.name"> <button @click="btn.action"> {{ btn.name }} @@ -70,7 +70,7 @@ </ul> </div> </div> - <ul class="menu mx-auto flex w-40 flex-col gap-2"> + <ul class="menu mx-auto flex flex-col gap-2"> <li v-for="n in nav" :key="n.id" class="text-xl" @click="unfocus"> <NuxtLink v-if="n.to" @@ -89,7 +89,7 @@ </div> <!-- Bottom --> - <button class="rounded-btn mx-2 mt-auto p-3 hover:bg-base-300" @click="logout"> + <button class="rounded-btn hover:bg-base-300 mx-2 mt-auto p-3" @click="logout"> {{ $t("global.sign_out") }} </button> </div> @@ -99,6 +99,7 @@ </template> <script lang="ts" setup> + import { useI18n } from "vue-i18n"; import { useLabelStore } from "~~/stores/labels"; import { useLocationStore } from "~~/stores/locations"; import MdiMenu from "~icons/mdi/menu"; @@ -109,6 +110,9 @@ import MdiMagnify from "~icons/mdi/magnify"; import MdiAccount from "~icons/mdi/account"; import MdiCog from "~icons/mdi/cog"; + import MdiWrench from "~icons/mdi/wrench"; + + const { t } = useI18n(); const username = computed(() => authCtx.user?.name || "User"); const preferences = useViewPreferences(); @@ -164,35 +168,42 @@ icon: MdiHome, active: computed(() => route.path === "/home"), id: 0, - name: "Home", + name: t("menu.home"), to: "/home", }, { icon: MdiFileTree, - id: 4, + id: 1, active: computed(() => route.path === "/locations"), - name: "Locations", + name: t("menu.locations"), to: "/locations", }, { icon: MdiMagnify, - id: 3, + id: 2, active: computed(() => route.path === "/items"), - name: "Search", + name: t("menu.search"), to: "/items", }, + { + icon: MdiWrench, + id: 3, + active: computed(() => route.path === "/maintenance"), + name: t("menu.maintenance"), + to: "/maintenance", + }, { icon: MdiAccount, - id: 1, + id: 4, active: computed(() => route.path === "/profile"), - name: "Profile", + name: t("menu.profile"), to: "/profile", }, { icon: MdiCog, - id: 6, + id: 5, active: computed(() => route.path === "/tools"), - name: "Tools", + name: t("menu.tools"), to: "/tools", }, ]; diff --git a/frontend/lib/api/classes/items.ts b/frontend/lib/api/classes/items.ts index 22fbda2d1..cd321e184 100644 --- a/frontend/lib/api/classes/items.ts +++ b/frontend/lib/api/classes/items.ts @@ -10,10 +10,10 @@ import type { ItemUpdate, MaintenanceEntry, MaintenanceEntryCreate, - MaintenanceEntryUpdate, - MaintenanceLog, + MaintenanceEntryWithDetails, } from "../types/data-contracts"; import type { AttachmentTypes, PaginationResult } from "../types/non-generated"; +import type { MaintenanceFilters } from "./maintenance.ts"; import type { Requests } from "~~/lib/requests"; export type ItemsQuery = { @@ -66,14 +66,11 @@ export class FieldsAPI extends BaseAPI { } } -type MaintenanceEntryQuery = { - scheduled?: boolean; - completed?: boolean; -}; - -export class MaintenanceAPI extends BaseAPI { - getLog(itemId: string, q: MaintenanceEntryQuery = {}) { - return this.http.get<MaintenanceLog>({ url: route(`/items/${itemId}/maintenance`, q) }); +export class ItemMaintenanceAPI extends BaseAPI { + getLog(itemId: string, filters: MaintenanceFilters = {}) { + return this.http.get<MaintenanceEntryWithDetails[]>({ + url: route(`/items/${itemId}/maintenance`, { status: filters.status?.toString() }), + }); } create(itemId: string, data: MaintenanceEntryCreate) { @@ -82,29 +79,18 @@ export class MaintenanceAPI extends BaseAPI { body: data, }); } - - delete(itemId: string, entryId: string) { - return this.http.delete<void>({ url: route(`/items/${itemId}/maintenance/${entryId}`) }); - } - - update(itemId: string, entryId: string, data: MaintenanceEntryUpdate) { - return this.http.put<MaintenanceEntryUpdate, MaintenanceEntry>({ - url: route(`/items/${itemId}/maintenance/${entryId}`), - body: data, - }); - } } export class ItemsApi extends BaseAPI { attachments: AttachmentsAPI; - maintenance: MaintenanceAPI; + maintenance: ItemMaintenanceAPI; fields: FieldsAPI; constructor(http: Requests, token: string) { super(http, token); this.fields = new FieldsAPI(http); this.attachments = new AttachmentsAPI(http); - this.maintenance = new MaintenanceAPI(http); + this.maintenance = new ItemMaintenanceAPI(http); } fullpath(id: string) { diff --git a/frontend/lib/api/classes/maintenance.ts b/frontend/lib/api/classes/maintenance.ts new file mode 100644 index 000000000..87b290620 --- /dev/null +++ b/frontend/lib/api/classes/maintenance.ts @@ -0,0 +1,30 @@ +import { BaseAPI, route } from "../base"; +import type { + MaintenanceEntry, + MaintenanceEntryWithDetails, + MaintenanceEntryUpdate, + MaintenanceFilterStatus, +} from "../types/data-contracts"; + +export interface MaintenanceFilters { + status?: MaintenanceFilterStatus; +} + +export class MaintenanceAPI extends BaseAPI { + getAll(filters: MaintenanceFilters) { + return this.http.get<MaintenanceEntryWithDetails[]>({ + url: route(`/maintenance`, { status: filters.status?.toString() }), + }); + } + + delete(id: string) { + return this.http.delete<void>({ url: route(`/maintenance/${id}`) }); + } + + update(id: string, data: MaintenanceEntryUpdate) { + return this.http.put<MaintenanceEntryUpdate, MaintenanceEntry>({ + url: route(`/maintenance/${id}`), + body: data, + }); + } +} diff --git a/frontend/lib/api/types/data-contracts.ts b/frontend/lib/api/types/data-contracts.ts index 3b4674dd7..f56ffae1a 100644 --- a/frontend/lib/api/types/data-contracts.ts +++ b/frontend/lib/api/types/data-contracts.ts @@ -288,11 +288,22 @@ export interface MaintenanceEntryUpdate { scheduledDate: Date | string; } -export interface MaintenanceLog { - costAverage: number; - costTotal: number; - entries: MaintenanceEntry[]; - itemId: string; +export interface MaintenanceEntryWithDetails { + completedDate: Date | string; + /** @example "0" */ + cost: string; + description: string; + id: string; + itemID: string; + itemName: string; + name: string; + scheduledDate: Date | string; +} + +export enum MaintenanceFilterStatus { + MaintenanceFilterStatusScheduled = "scheduled", + MaintenanceFilterStatusCompleted = "completed", + MaintenanceFilterStatusBoth = "both", } export interface NotifierCreate { @@ -312,6 +323,8 @@ export interface NotifierOut { isActive: boolean; name: string; updatedAt: Date | string; + /** URL field is not exposed to the client */ + url: string; userId: string; } @@ -330,7 +343,6 @@ export interface PaginationResultItemSummary { page: number; pageSize: number; total: number; - totalPrice: number; } export interface TotalsByOrganizer { diff --git a/frontend/lib/api/user.ts b/frontend/lib/api/user.ts index d477d480f..eccafeaff 100644 --- a/frontend/lib/api/user.ts +++ b/frontend/lib/api/user.ts @@ -9,12 +9,14 @@ import { StatsAPI } from "./classes/stats"; import { AssetsApi } from "./classes/assets"; import { ReportsAPI } from "./classes/reports"; import { NotifiersAPI } from "./classes/notifiers"; +import { MaintenanceAPI } from "./classes/maintenance"; import type { Requests } from "~~/lib/requests"; export class UserClient extends BaseAPI { locations: LocationsApi; labels: LabelsApi; items: ItemsApi; + maintenance: MaintenanceAPI; group: GroupApi; user: UserApi; actions: ActionsAPI; @@ -29,6 +31,7 @@ export class UserClient extends BaseAPI { this.locations = new LocationsApi(requests); this.labels = new LabelsApi(requests); this.items = new ItemsApi(requests, attachmentToken); + this.maintenance = new MaintenanceAPI(requests); this.group = new GroupApi(requests); this.user = new UserApi(requests); this.actions = new ActionsAPI(requests); diff --git a/frontend/locales/ca.json b/frontend/locales/ca.json index 1b4ed9a8d..be0677c3d 100644 --- a/frontend/locales/ca.json +++ b/frontend/locales/ca.json @@ -2,16 +2,24 @@ "components": { "app": { "import_dialog": { - "title": "Importa un fitxer CSV", - "upload": "Puja", + "change_warning": "El comportament de les importacions amb import_refs existents ha canviat. Si hi ha un import_refs al fitxer CSV, \nl'article s'actualitzarà amb els valors del fitxer CSV.", "description": "Importa un fitxer CSV que contingui els articles, etiquetes i ubicacions. \nConsulteu la documentació per a més informació sobre el format requerit.", - "change_warning": "El comportament de les importacions amb import_refs existents ha canviat. Si hi ha un import_refs al fitxer CSV, \nl'article s'actualitzarà amb els valors del fitxer CSV." + "title": "Importa un fitxer CSV", + "upload": "Puja" + } + }, + "global": { + "page_qr_code": { + "page_url": "URL de la pàgina" + }, + "password_score": { + "password_strength": "Força de la contrasenya" } }, "item": { "create_modal": { - "title": "Crea un article", - "photo_button": "Foto 📷" + "photo_button": "Foto 📷", + "title": "Crea un article" }, "view": { "selectable": { @@ -31,14 +39,6 @@ "create_modal": { "title": "Crea una ubicació" } - }, - "global": { - "page_qr_code": { - "page_url": "URL de la pàgina" - }, - "password_score": { - "password_strength": "Força de la contrasenya" - } } }, "global": { @@ -52,22 +52,22 @@ "github": "Projecte de GitHub", "items": "Articles", "join_discord": "Uniu-vos a Discord", + "labels": "Etiquetes", "locations": "Ubicacions", "name": "Nom", + "password": "Contrasenya", "read_docs": "Llegiu la documentació", "search": "Cerca", "sign_out": "Tanca la sessió", "submit": "Envia", - "welcome": "Us donem la benvinguda, { username }", - "labels": "Etiquetes", - "password": "Contrasenya", - "version": "Versió {version}" + "version": "Versió {version}", + "welcome": "Us donem la benvinguda, { username }" }, "index": { - "joining_group": "Us uniu a un grup existent!", + "disabled_registration": "El registre és desactivat", "dont_join_group": "Voleu unir-vos al grup?", + "joining_group": "Us uniu a un grup existent!", "login": "Inici de sessió", - "disabled_registration": "El registre és desactivat", "register": "Registra-m'hi", "remember_me": "Recorda'm", "set_email": "Quin és el seu correu electrònic?", @@ -76,53 +76,107 @@ "tagline": "Feu el seguiment, organitzeu i gestioneu les vostres coses." }, "items": { - "negate_labels": "Nega les etiquetes seleccionades", - "no_results": "No s'ha trobat cap element", - "tip_1": "Els filtres d'ubicació i etiquetes utilitzen l'operació «O». Si se'n selecciona més d'un, \nnomés se'n requerirà un per a coincidència.", "add": "Afegeix", + "created_at": "Creat a", + "custom_fields": "Camps personalitzats", "field_selector": "Selector del camp", "field_value": "Valor del camp", "first": "Primer", "include_archive": "Inclou els articles arxivats", "last": "Últim", + "negate_labels": "Nega les etiquetes seleccionades", "next_page": "Pàgina següent", + "no_results": "No s'ha trobat cap element", "options": "Opcions", "order_by": "Ordena per", - "tip_2": "Les cerques amb el prefix «#» sol·licitaran un ID d'un actiu (per exemple, «#000-001»)", - "tip_3": "Els filtres de camp utilitzen l'operació «O». Si se'n selecciona més d'un, \nnomés se'n requerirà un per a coincidència.", - "tips": "Consells", - "tips_sub": "Consells de cerca", - "updated_at": "Actualitzat a", - "query_id": "S'està consultant el número d'identificació de l'actiu: { id }", "pages": "Pàgina { page } de { totalPages }", "prev_page": "Pàgina anterior", + "query_id": "S'està consultant el número d'identificació de l'actiu: { id }", "reset_search": "Reinicia la cerca", "results": "{ total } resultats", - "created_at": "Creat a", - "custom_fields": "Camps personalitzats" + "tip_1": "Els filtres d'ubicació i etiquetes utilitzen l'operació «O». Si se'n selecciona més d'un, \nnomés se'n requerirà un per a coincidència.", + "tip_2": "Les cerques amb el prefix «#» sol·licitaran un ID d'un actiu (per exemple, «#000-001»)", + "tip_3": "Els filtres de camp utilitzen l'operació «O». Si se'n selecciona més d'un, \nnomés se'n requerirà un per a coincidència.", + "tips": "Consells", + "tips_sub": "Consells de cerca", + "updated_at": "Actualitzat a" + }, + "labels": { + "no_results": "No s'han trobat etiquetes" + }, + "languages": { + "ca": "Català", + "de": "Alemany", + "en": "Anglès", + "es": "Castellà", + "fr": "Francès", + "hu": "Hongarès", + "it": "Italià", + "nl": "Neerlandès", + "pl": "Polonès", + "pt-BR": "Portuguès (Brasil)", + "ru": "Rus", + "sl": "Eslovè", + "sv": "Suec", + "tr": "Turc", + "zh-CN": "Xinès (simplificat)", + "zh-HK": "Xinès (Hong Kong)", + "zh-MO": "Xinès (Macau)", + "zh-TW": "Xinès (tradicional)" + }, + "locations": { + "no_results": "No s'han trobat ubicacions" + }, + "maintenance": { + "filter": { + "both": "Ambdós" + }, + "total_cost": "Cost total", + "total_entries": "Nombre d' entrades" + }, + "menu": { + "home": "Inici", + "locations": "Ubicacions", + "maintenance": "Manteniment", + "profile": "Perfil", + "search": "Cerca", + "tools": "Eines" }, "profile": { "active": "Actiu", "change_password": "Canvia contrasenya", - "delete_account_sub": "Elimina el compte i totes les dades associades. Aquesta acció no es pot desfer.", - "enabled": "Habilitat", "currency_format": "Format de moneda", "current_password": "Contrasenya actual", "delete_account": "Suprimeix el compte", + "delete_account_sub": "Elimina el compte i totes les dades associades. Aquesta acció no es pot desfer.", + "display_header": "{ currentValue, select, true {Amaga la capçalera} false {Mostra la capçalera} other {Desconegut}}", + "enabled": "Habilitat", "gen_invite": "Genera un enllaç d'invitació", "group_settings": "Configuració del grup", "group_settings_sub": "Configuració del grup compartit. És possible que hàgiu d'actualitzar la pàgina per aplicar la configuració.", - "theme_settings_sub": "La configuració del tema s'emmagatzema a l'emmagatzematge local del navegador. Podeu canviar el tema en qualsevol moment. \nSi teniu problemes per definir el tema, proveu d'actualitzar el navegador.", + "inactive": "Inactiu", + "language": "Idioma", + "new_password": "Contrasenya nova", + "no_notifiers": "No hi ha notificadors configurats", "notifier_modal": "{ type, select, true {Edita} false {Crea} other {Altres}} Notificació", + "notifiers": "Notificadors", "notifiers_sub": "Rebeu notificacions per als pròxims recordatoris de manteniment", "test": "Prova", "theme_settings": "Configuracions del tema", + "theme_settings_sub": "La configuració del tema s'emmagatzema a l'emmagatzematge local del navegador. Podeu canviar el tema en qualsevol moment. \nSi teniu problemes per definir el tema, proveu d'actualitzar el navegador.", "update_group": "Actualitza el grup", + "update_language": "Actualitza l'idioma", "url": "URL", - "user_profile_sub": "Convida usuaris i gestiona el compte.", - "inactive": "Inactiu", - "new_password": "Contrasenya nova", - "notifiers": "Notificadors", - "user_profile": "Perfil d'usuari" + "user_profile": "Perfil d'usuari", + "user_profile_sub": "Convida usuaris i gestiona el compte." + }, + "tools": { + "actions": "Accions d'inventari", + "actions_set": { + "ensure_ids": "Assegura els identificadors de recursos", + "ensure_ids_button": "Assegura els identificadors de recursos", + "set_primary_photo": "Defineix la foto principal", + "set_primary_photo_button": "Defineix la foto principal" + } } } diff --git a/frontend/locales/de.json b/frontend/locales/de.json index 2b9eb5a36..08223d86c 100644 --- a/frontend/locales/de.json +++ b/frontend/locales/de.json @@ -18,8 +18,8 @@ }, "item": { "create_modal": { - "title": "Gegenstand erstellen", - "photo_button": "Foto 📷" + "photo_button": "Foto 📷", + "title": "Gegenstand erstellen" }, "view": { "selectable": { @@ -38,6 +38,9 @@ "location": { "create_modal": { "title": "Standort erstellen" + }, + "tree": { + "no_locations": "Keine Standorte verfügbar. Fügen Sie neue Standorte über die Schaltfläche\n `<`span class=\"link-primary\"`>`Erstellen`<`/span`>` in der Navigationsleiste hinzu." } } }, @@ -87,7 +90,7 @@ "negate_labels": "Ausgewählte Etiketten negieren", "next_page": "Nächste Seite", "no_results": "Keine Elemente gefunden", - "options": "Optionen", + "options": "Optionen (Options)", "order_by": "Sortieren nach", "pages": "Seite { page } von { totalPages }", "prev_page": "Vorherige Seite", @@ -101,6 +104,75 @@ "tips_sub": "Suchtipps", "updated_at": "Aktualisiert am" }, + "labels": { + "no_results": "Keine Labels gefunden" + }, + "languages": { + "ca": "Katalanisch", + "de": "Deutsch", + "en": "Englisch", + "es": "Spanisch", + "fr": "Französisch", + "hu": "Ungarisch", + "it": "Italienisch", + "nl": "Niederländisch", + "pl": "Polnisch", + "pt-BR": "Portugiesisch (Brasilien)", + "ru": "Russisch", + "sl": "Slowenisch", + "sv": "Schwedisch", + "tr": "Türkisch", + "zh-CN": "Chinesisch (einfach)", + "zh-HK": "Chinesisch (Hong Kong)", + "zh-MO": "Chinesisch (Macao)", + "zh-TW": "Chinesisch (Traditionell)" + }, + "locations": { + "no_results": "Keine Standorte gefunden" + }, + "maintenance": { + "filter": { + "both": "Beide", + "completed": "Abgeschlossen", + "scheduled": "Geplant" + }, + "list": { + "complete": "Vollständig", + "create_first": "Erstellen Sie Ihren ersten Eintrag", + "delete": "Löschen", + "duplicate": "Duplizieren", + "edit": "Bearbeiten", + "new": "Neu" + }, + "modal": { + "completed_date": "Fertigstellungsdatum", + "cost": "Kosten", + "delete_confirmation": "Sind Sie sicher, dass Sie diesen Eintrag löschen wollen?", + "edit_action": "Aktualisieren", + "edit_title": "Eintrag bearbeiten", + "entry_name": "Eingabename", + "new_action": "Erstellen", + "new_title": "Neuer Eintrag", + "notes": "Anmerkungen", + "scheduled_date": "Geplantes Datum" + }, + "monthly_average": "Monatsdurchschnitt", + "toast": { + "failed_to_create": "Eintrag konnte nicht erstellt werden", + "failed_to_delete": "Eintrag konnte nicht gelöscht werden", + "failed_to_update": "Fehler beim Aktualisieren des Eintrags." + }, + "total_cost": "Gesamtkosten", + "total_entries": "Gesamteinträge" + }, + "menu": { + "home": "Home", + "locations": "Lagerorte", + "maintenance": "Wartung", + "profile": "Profil", + "search": "Suche", + "tools": "Tools" + }, "profile": { "active": "Aktiv", "change_password": "Passwort ändern", @@ -108,12 +180,15 @@ "current_password": "Aktuelles Passwort", "delete_account": "Konto löschen", "delete_account_sub": "Lösche dein Konto und alle zugehörigen Daten. Dies kann nicht rückgängig gemacht werden.", + "display_header": "{ currentValue, select, true {Header ausblenden} false {Header anzeigen} other {Kein Treffer}}", "enabled": "Aktiviert", "gen_invite": "Einladungslink generieren", "group_settings": "Gruppeneinstellungen", - "group_settings_sub": "Geteilte Gruppeneinstellungen. Möglicherweise musst du die Seite neu laden, damit einige Einstellungen wirksam werden.", + "group_settings_sub": "Gemeinsame Gruppeneinstellungen. Möglicherweise müssen Sie Ihren Browser aktualisieren, damit die Einstellungen wirksam werden.", "inactive": "Inaktiv", + "language": "Sprache", "new_password": "Neues Passwort", + "no_notifiers": "Keine Benachrichtigungen konfiguriert", "notifier_modal": "{ type, select, true {Bearbeiten} false {Erstellen} other {Andere}} Notifier", "notifiers": "Melder", "notifiers_sub": "Erhalte Benachrichtigungen über bevorstehende Wartungserinnerungen", @@ -121,38 +196,47 @@ "theme_settings": "Themes", "theme_settings_sub": "Theme-Einstellungen werden im lokalen Speicher deines Browsers gespeichert. Du kannst das Theme jederzeit ändern. Wenn du Probleme hast, dein Theme einzustellen, versuche, die Seite neu zu laden.", "update_group": "Gruppe aktualisieren", + "update_language": "Sprache aktualisieren", "url": "URL", "user_profile": "Benutzerprofil", - "user_profile_sub": "Lade Benutzer ein und verwalte dein Konto.", - "language": "Sprache", - "update_language": "Sprache ändern" + "user_profile_sub": "Lade Benutzer ein und verwalte dein Konto." }, "tools": { + "actions": "Inventar Aktionen", + "actions_set": { + "ensure_ids": "Sicherstellen von Asset-IDs", + "ensure_ids_button": "Sicherstellen von Asset-IDs", + "ensure_ids_sub": "Es wird sichergestellt, dass alle Artikel in Ihrem Bestand ein gültiges asset_id-Feld haben. Dazu wird das Feld mit der höchsten aktuellen asset_id in der Datenbank ermittelt und der nächste Wert auf jeden Artikel mit einem nicht gesetzten asset_id-Feld angewendet. Dies geschieht in der Reihenfolge des Feldes created_at.", + "ensure_import_refs": "Sicherstellen, dass Import-Referenzen importiert wurden", + "ensure_import_refs_button": "Sicherstellen, dass Referenzen importiert werden", + "ensure_import_refs_sub": "Es wird sichergestellt, dass alle Gegenstände in Ihrem Inventar ein gültiges import_ref-Feld haben. Dazu wird nach dem Zufallsprinzip eine 8-stellige Zeichenkette für jeden Gegenstand mit einem ungültigen import_ref-Feld erzeugt.", + "set_primary_photo": "Primärfoto festlegen", + "set_primary_photo_button": "Primäres Foto festlegen", + "set_primary_photo_sub": "In Homebox Version v0.10.0 wurde die Auswahl des Primärbilds von angehängten Bildern hinzugefügt. Mit dieser Funktion wird für jeden Artikel ohne Primärbild das erste angehängt Bild als solches definiert. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'See GitHub PR #576'</a>'", + "zero_datetimes": "Null-Punkt-Datum-Zeiten", + "zero_datetimes_button": "Null-Punkt-Datum-Zeiten", + "zero_datetimes_sub": "Setzt den Zeitwert für alle Datums-Zeit-Felder in Ihrem Inventar auf den Anfang des Datums zurück. Damit wird ein Fehler behoben, der zu Beginn der Entwicklung der Website eingeführt wurde und dazu führte, dass das Datum zusammen mit der Uhrzeit gespeichert wurde, was zu Problemen bei der Anzeige von genauen Werten in Datumsfeldern führte. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'See Github Issue #236 for more details.'</a>'" + }, + "actions_sub": "Aktionen in großen Mengen auf das Inventar anwenden. Diese Aktionen sind unumkehrbar. '<b>'Sei vorsichtig.'</b>'", + "import_export": "Import/Export", "import_export_set": { - "import_button": "Inventar importieren", + "export": "Gesamten Bestand exportieren", + "export_button": "Gesamten Bestand exportieren", + "export_sub": "Exportiert das Standard-CSV-Format für Homebox", "import": "Inventar importieren", - "export_sub": "Exportiert das Standard-CSV-Format für Homebox. Damit werden alle Artikel in deinem Inventar exportiert.", - "export": "Inventar exportieren", + "import_button": "Inventar importieren", "import_sub": "Importiert das Standard-CSV-Format für Homebox. Ohne eine '<code>'HB.import_ref'</code>' Spalte werden vorhandenen Artikel in Ihrem Bestand '<b>'nicht'</b>' überschrieben, sondern nur neue Artikel hinzugefügt. Zeilen mit einer '<code>'HB.import_ref'</code>' Spalte werden mit vorhandenen Artikeln mit der gleichen import_ref zusammengeführt, sofern vorhanden." }, + "import_export_sub": "Importieren und exportieren Sie Ihren Lagerbestand in und aus einer CSV-Datei", + "reports": "Berichte", "reports_set": { - "bill_of_materials_button": "Stückliste generieren", - "asset_labels_button": "Etikettengenerator", - "bill_of_materials": "Stückliste", - "bill_of_materials_sub": "Erzeugt eine CSV-Datei (Comma Separated Values), die in ein Tabellenkalkulationsprogramm importiert werden kann. Dies ist eine Zusammenfassung des Bestands mit grundlegenden Artikel- und Preisinformationen.", + "asset_labels": "Asset-ID-Etiketten", + "asset_labels_button": "Etiketten-Generator", "asset_labels_sub": "Erzeugt eine druckbare PDF-Datei mit Etiketten für eine Reihe von Asset-IDs. Diese sind nicht spezifisch für deine Inventargegenstände, so dass du die Etiketten im Voraus ausdrucken und bei Erhalt auf deinen Inventargegenständen anbringen kannst.", - "asset_labels": "Asset-ID-Etiketten" + "bill_of_materials": "Stückliste", + "bill_of_materials_button": "Stückliste generieren", + "bill_of_materials_sub": "Generiert eine CSV-Datei (Comma Separated Values), die in ein Tabellenkalkulationsprogramm importiert werden kann" }, - "import_export": "Import/Export", - "reports_sub": "Erstelle verschiedene Berichte für dein Inventar.", - "import_export_sub": "Importieren und exportieren des Inventars in und aus einer CSV-Datei. Dies ist nützlich, um das Inventar auf eine neue Instanz von Homebox zu migrieren.", - "reports": "Berichte", - "actions": "Inventar Aktionen", - "actions_sub": "Aktionen in großen Mengen auf das Inventar anwenden. Diese Aktionen sind unumkehrbar. '<b>'Sei vorsichtig.'</b>'", - "actions_set": { - "ensure_ids_button": "Sicherstellen von Asset-IDs", - "ensure_ids": "Sicherstellen von Asset-IDs", - "ensure_import_refs": "Sicherstellen, dass Import-Referenzen importiert wurden" - } + "reports_sub": "Erstellen Sie verschiedene Berichte für Ihr Inventar." } } diff --git a/frontend/locales/en.json b/frontend/locales/en.json index 2ad502e62..37cf97f13 100644 --- a/frontend/locales/en.json +++ b/frontend/locales/en.json @@ -18,8 +18,8 @@ }, "item": { "create_modal": { - "title": "Create Item", - "photo_button": "Photo 📷" + "photo_button": "Photo 📷", + "title": "Create Item" }, "view": { "selectable": { @@ -38,6 +38,9 @@ "location": { "create_modal": { "title": "Create Location" + }, + "tree": { + "no_locations": "No locations available. Add new locations through the\n `<`span class=\"link-primary\"`>`Create`<`/span`>` button on the navigation bar." } } }, @@ -101,6 +104,75 @@ "tips_sub": "Search Tips", "updated_at": "Updated At" }, + "labels": { + "no_results": "No Labels Found" + }, + "languages": { + "ca": "Catalan", + "de": "German", + "en": "English", + "es": "Spanish", + "fr": "French", + "hu": "Hungarian", + "it": "Italian", + "nl": "Dutch", + "pl": "Polish", + "pt-BR": "Portuguese (Brazil)", + "ru": "Russian", + "sl": "Slovenian", + "sv": "Swedish", + "tr": "Turkish", + "zh-CN": "Chinese (Simplified)", + "zh-HK": "Chinese (Hong Kong)", + "zh-MO": "Chinese (Macau)", + "zh-TW": "Chinese (Traditional)" + }, + "locations": { + "no_results": "No Locations Found" + }, + "maintenance": { + "filter": { + "both": "Both", + "completed": "Completed", + "scheduled": "Scheduled" + }, + "list": { + "create_first": "Create Your First Entry", + "delete": "Delete", + "edit": "Edit", + "new": "New", + "complete": "Complete", + "duplicate" : "Duplicate" + }, + "modal": { + "completed_date": "Completed Date", + "cost": "Cost", + "delete_confirmation": "Are you sure you want to delete this entry?", + "edit_action": "Update", + "edit_title": "Edit Entry", + "entry_name": "Entry Name", + "new_action": "Create", + "new_title": "New Entry", + "notes": "Notes", + "scheduled_date": "Scheduled Date" + }, + "monthly_average": "Monthly Average", + "toast": { + "failed_to_create": "Failed to create entry", + "failed_to_delete": "Failed to delete entry", + "failed_to_update": "Failed to update entry" + }, + "total_cost": "Total Cost", + "total_entries": "Total Entries" + }, + "menu": { + "home": "Home", + "locations": "Locations", + "maintenance": "Maintenance", + "profile": "Profile", + "search": "Search", + "tools": "Tools" + }, "profile": { "active": "Active", "change_password": "Change Password", @@ -108,12 +180,15 @@ "current_password": "Current Password", "delete_account": "Delete Account", "delete_account_sub": "Delete your account and all its associated data. This can not be undone.", + "display_header": "{ currentValue, select, true {Hide Header} false {Show Header} other {Not Hit}}", "enabled": "Enabled", "gen_invite": "Generate Invite Link", "group_settings": "Group Settings", "group_settings_sub": "Shared Group Settings. You may need to refresh your browser for some settings to apply.", "inactive": "Inactive", + "language": "Language", "new_password": "New Password", + "no_notifiers": "No notifiers configured", "notifier_modal": "{ type, select, true {Edit} false {Create} other {Other}} Notifier", "notifiers": "Notifiers", "notifiers_sub": "Get notifications for upcoming maintenance reminders", @@ -121,69 +196,47 @@ "theme_settings": "Theme Settings", "theme_settings_sub": "Theme settings are stored in your browser's local storage. You can change the theme at any time. If you're\n having trouble setting your theme try refreshing your browser.", "update_group": "Update Group", + "update_language": "Update Language", "url": "URL", "user_profile": "User Profile", - "user_profile_sub": "Invite users, and manage your account.", - "display_header": "{ currentValue, select, true {Hide Header} false {Show Header} other {Not Hit}}", - "language": "Language", - "update_language": "Update Language" + "user_profile_sub": "Invite users, and manage your account." }, "tools": { - "reports": "Reports", - "reports_sub": "Generate different reports for your inventory.", - "reports_set": { - "asset_labels": "Asset ID Labels", - "asset_labels_sub": "Generates a printable PDF of labels for a range of Asset ID. These are not specific to your inventory so you are able to print labels ahead of time and apply them to your inventory when you receive them.", - "asset_labels_button": "Label Generator", - "bill_of_materials": "Bill of Materials", - "bill_of_materials_sub": "Generates a CSV (Comma Separated Values) file that can be imported into a spreadsheet program. This is a summary of your inventory with basic item and pricing information.", - "bill_of_materials_button": "Generate BOM" - }, - "import_export": "Import/Export", - "import_export_sub": "Import and export your inventory to and from a CSV file. This is useful for migrating your inventory to a new instance of Homebox.", - "import_export_set": { - "import": "Import Inventory", - "import_sub": "Imports the standard CSV format for Homebox. Without an '<code>'HB.import_ref'</code>' column, this will '<b>'not'</b>' overwrite any existing items in your inventory, only add new items. Rows with an '<code>'HB.import_ref'</code>' column are merged into existing items with the same import_ref, if one exists.", - "import_button": "Import Inventory", - "export": "Export Inventory", - "export_sub": "Exports the standard CSV format for Homebox. This will export all items in your inventory.", - "export_button": "Export Inventory" - }, "actions": "Inventory Actions", - "actions_sub": "Apply Actions to your inventory in bulk. These are irreversible actions. '<b>'Be careful.'</b>'", "actions_set": { "ensure_ids": "Ensure Asset IDs", - "ensure_ids_sub": "Ensures that all items in your inventory have a valid asset_id field. This is done by finding the highest current asset_id field in the database and applying the next value to each item that has an unset asset_id field. This is done in order of the created_at field.", "ensure_ids_button": "Ensure Asset IDs", + "ensure_ids_sub": "Ensures that all items in your inventory have a valid asset_id field. This is done by finding the highest current asset_id field in the database and applying the next value to each item that has an unset asset_id field. This is done in order of the created_at field.", "ensure_import_refs": "Ensure Import Refs", - "ensure_import_refs_sub": "Ensures that all items in your inventory have a valid import_ref field. This is done by randomly generating a 8 character string for each item that has an unset import_ref field.", "ensure_import_refs_button": "Ensure Import Refs", - "zero_datetimes": "Zero Item Date Times", - "zero_datetimes_sub": "Resets the time value for all date time fields in your inventory to the beginning of the date. This is to fix a bug that was introduced early on in the development of the site that caused the time value to be stored with the time which caused issues with date fields displaying accurate values. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'See Github Issue #236 for more details.'</a>'", - "zero_datetimes_button": "Zero Item Date Times", + "ensure_import_refs_sub": "Ensures that all items in your inventory have a valid import_ref field. This is done by randomly generating a 8 character string for each item that has an unset import_ref field.", "set_primary_photo": "Set Primary Photo", + "set_primary_photo_button": "Set Primary Photo", "set_primary_photo_sub": "In version v0.10.0 of Homebox, the primary image field was added to attachments of type photo. This action will set the primary image field to the first image in the attachments array in the database, if it is not already set. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'See GitHub PR #576'</a>'", - "set_primary_photo_button": "Set Primary Photo" - } - }, - "languages": { - "ca": "Catalan", - "de": "German", - "en": "English", - "es": "Spanish", - "fr": "French", - "hu": "Hungarian", - "it": "Italian", - "nl": "Dutch", - "pl": "Polish", - "pt-BR": "Portuguese (Brazil)", - "ru": "Russian", - "sl": "Slovenian", - "sv": "Swedish", - "tr": "Turkish", - "zh-CN": "Chinese (Simplified)", - "zh-HK": "Chinese (Hong Kong)", - "zh-MO": "Chinese (Macau)", - "zh-TW": "Chinese (Traditional)" + "zero_datetimes": "Zero Item Date Times", + "zero_datetimes_button": "Zero Item Date Times", + "zero_datetimes_sub": "Resets the time value for all date time fields in your inventory to the beginning of the date. This is to fix a bug that was introduced early on in the development of the site that caused the time value to be stored with the time which caused issues with date fields displaying accurate values. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'See Github Issue #236 for more details.'</a>'" + }, + "actions_sub": "Apply Actions to your inventory in bulk. These are irreversible actions. '<b>'Be careful.'</b>'", + "import_export": "Import/Export", + "import_export_set": { + "export": "Export Inventory", + "export_button": "Export Inventory", + "export_sub": "Exports the standard CSV format for Homebox. This will export all items in your inventory.", + "import": "Import Inventory", + "import_button": "Import Inventory", + "import_sub": "Imports the standard CSV format for Homebox. Without an '<code>'HB.import_ref'</code>' column, this will '<b>'not'</b>' overwrite any existing items in your inventory, only add new items. Rows with an '<code>'HB.import_ref'</code>' column are merged into existing items with the same import_ref, if one exists." + }, + "import_export_sub": "Import and export your inventory to and from a CSV file. This is useful for migrating your inventory to a new instance of Homebox.", + "reports": "Reports", + "reports_set": { + "asset_labels": "Asset ID Labels", + "asset_labels_button": "Label Generator", + "asset_labels_sub": "Generates a printable PDF of labels for a range of Asset ID. These are not specific to your inventory so you are able to print labels ahead of time and apply them to your inventory when you receive them.", + "bill_of_materials": "Bill of Materials", + "bill_of_materials_button": "Generate BOM", + "bill_of_materials_sub": "Generates a CSV (Comma Separated Values) file that can be imported into a spreadsheet program. This is a summary of your inventory with basic item and pricing information." + }, + "reports_sub": "Generate different reports for your inventory." } } diff --git a/frontend/locales/es.json b/frontend/locales/es.json index d30d2d3e9..81af55941 100644 --- a/frontend/locales/es.json +++ b/frontend/locales/es.json @@ -18,8 +18,8 @@ }, "item": { "create_modal": { - "title": "Crear Elemento", - "photo_button": "Foto 📷" + "photo_button": "Foto 📷", + "title": "Crear Elemento" }, "view": { "selectable": { @@ -45,8 +45,10 @@ "build": "Compilación: { build }", "confirm": "Confirmar", "create": "Crear", + "create_and_add": "Crear y Añadir Otro", "created": "Creado", "email": "Email", + "follow_dev": "Seguir al Desarrollador", "github": "Proyecto GitHub", "items": "Elementos", "join_discord": "Únete al Discord", @@ -58,22 +60,20 @@ "search": "Buscar", "sign_out": "Cerrar Sesión", "submit": "Enviar", - "welcome": "Bienvenido/a, { username }", - "create_and_add": "Crear y Añadir Otro", - "follow_dev": "Seguir al Desarrollador", - "version": "Versión: { version }" + "version": "Versión: { version }", + "welcome": "Bienvenido/a, { username }" }, "index": { "disabled_registration": "Registro Desactivado", "dont_join_group": "¿No quieres unirte a un grupo?", + "joining_group": "¡Te estás uniendo a un grupo existente!", "login": "Iniciar sesión", "register": "Registrarse", "remember_me": "Recuérdame", "set_email": "¿Cuál es tu email?", "set_name": "¿Cómo te llamas?", "set_password": "Establece tu contraseña", - "tagline": "Rastrea, Organiza y Gestiona tus Cosas.", - "joining_group": "¡Te estás uniendo a un grupo existente!" + "tagline": "Rastrea, Organiza y Gestiona tus Cosas." }, "items": { "add": "Añadir", @@ -94,35 +94,96 @@ "query_id": "Consultar Número ID del Activo: { id }", "reset_search": "Restablecer Búsqueda", "results": "{ total } Resultados", + "tip_1": "Los filtros de ubicación y etiquetas utilizan el operador \"OR\". Si se selecciona más de uno, sólo uno será\n necesario para obtener una coincidencia.", "tip_2": "Las búsquedas precedidas de \"#\" buscarán un ID de activo (por ejemplo, \"#000-001\")", "tip_3": "Los filtros de campo utilizan el operador \"OR\". Si se selecciona más de uno, sólo se requerirá uno para una\n coincidencia.", - "tip_1": "Los filtros de ubicación y etiquetas utilizan el operador \"OR\". Si se selecciona más de uno, sólo uno será\n necesario para obtener una coincidencia.", "tips": "Sugerencias", "tips_sub": "Sugerencias de Búsqueda", "updated_at": "Actualizado El" }, + "languages": { + "ca": "Catalán", + "de": "Alemán", + "en": "Inglés", + "es": "Español", + "fr": "Francés", + "hu": "Húngaro", + "it": "Italiano", + "nl": "Holandés", + "pl": "Polaco", + "pt-BR": "Portugués (Brasil)", + "ru": "Ruso", + "sl": "Esloveno", + "sv": "Sueco", + "tr": "Turco", + "zh-CN": "Chino (Simplificado)", + "zh-HK": "Chino (Hong Kong)", + "zh-MO": "Chino (Macao)", + "zh-TW": "Chino (Tradicional)" + }, "profile": { "active": "Activo", "change_password": "Cambiar Contraseña", "currency_format": "Formato Divisa", "current_password": "Contraseña Actual", "delete_account": "Eliminar Cuenta", + "delete_account_sub": "Elimina tu cuenta y todos sus datos asociados. Esto no se puede deshacer.", + "display_header": "{ currentValue, select, true {Ocultar Encabezado} false {Mostrar Encabezado} other {Desconocido}}", "enabled": "Habilitado", "gen_invite": "Generar Enlace de Invitación", "group_settings": "Ajustes de Grupo", "group_settings_sub": "Configuración de Grupo Compartido. Es posible que tengas que actualizar tu navegador para que se apliquen algunos ajustes.", "inactive": "Inactivo", + "language": "Idioma", "new_password": "Nueva Contraseña", + "notifier_modal": "{ type, select, true {Edit} false {Create} other {Other}} Notificación", "notifiers": "Notificaciones", "notifiers_sub": "Recibe notificaciones de los próximos recordatorios de mantenimiento", "test": "Probar", "theme_settings": "Ajustes de Tema", + "theme_settings_sub": "La configuración del tema se guarda en el almacenamiento local de tu navegador. Puedes cambiar el tema en cualquier momento. Si tienes\n problemas para configurar el tema, prueba a actualizar el navegador.", "update_group": "Actualizar Grupo", + "update_language": "Cambiar Idioma", "url": "URL", "user_profile": "Perfil de Usuario", - "user_profile_sub": "Invita a usuarios y gestiona tu cuenta.", - "delete_account_sub": "Elimina tu cuenta y todos sus datos asociados. Esto no se puede deshacer.", - "notifier_modal": "{ type, select, true {Edit} false {Create} other {Other}} Notificación", - "theme_settings_sub": "La configuración del tema se guarda en el almacenamiento local de tu navegador. Puedes cambiar el tema en cualquier momento. Si tienes\n problemas para configurar el tema, prueba a actualizar el navegador." + "user_profile_sub": "Invita a usuarios y gestiona tu cuenta." + }, + "tools": { + "actions": "Acciones de Inventario", + "actions_set": { + "ensure_ids": "Garantizar IDs de Activos", + "ensure_ids_button": "Garantizar IDs de Activos", + "ensure_ids_sub": "Garantiza que todos los elementos de tu inventario tienen un campo asset_id válido. Esto se hace encontrando el campo asset_id actual más alto en la base de datos y aplicando el siguiente valor a cada artículo que tenga un campo asset_id sin establecer. Esto se hace en orden del campo created_at.", + "ensure_import_refs": "Garantizar Referencias de Importación", + "ensure_import_refs_button": "Garantizar Referencias de Importación", + "ensure_import_refs_sub": "Garantiza que todos los artículos de tu inventario tienen un campo import_ref válido. Esto se hace generando aleatoriamente una cadena de 8 caracteres para cada artículo que tenga un campo import_ref sin establecer.", + "set_primary_photo": "Establecer Foto Principal", + "set_primary_photo_button": "Establecer Foto Principal", + "set_primary_photo_sub": "En la versión v0.10.0 de Homebox, se añadió el indicador de imagen principal a los ficheros adjuntos de tipo foto. Esta acción establecerá la primera imagen de cada artículo como su imagen principal, si no hay una imagen principal ya definida. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Ver PR #576 en GitHub'</a>'", + "zero_datetimes": "Cero Horas Elementos", + "zero_datetimes_button": "Cero Horas Elementos", + "zero_datetimes_sub": "Restablece el valor de la hora para todos los campos de fecha/hora en tu inventario al principio de esa fecha. Esto se hace para corregir un error que se introdujo al principio del desarrollo de la aplicación, que causó que el valor de la hora se almacenase con la fecha, lo cual produjo problemas al mostrar valores precisos del campo. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'Ver el issue #236 de GitHub para más detalles.'</a>'" + }, + "actions_sub": "Aplica Acciones a tu inventario de forma masiva. Estas son acciones irreversibles. '<b>'Ten Cuidado.'</b>'", + "import_export": "Importar/Exportar", + "import_export_set": { + "export": "Exportar Inventario", + "export_button": "Exportar Inventario", + "export_sub": "Exporta el formato CSV estándar para Homebox. Esto exportará todos los elementos de tu inventario.", + "import": "Importar Inventario", + "import_button": "Importar Inventario", + "import_sub": "Importa el formato CSV estándar para Homebox. Sin una columna '<code>'HB.import_ref'</code>', esto '<b>'no'</b>' sobrescribirá cualquier elemento existente en tu inventario, sólo añadirá nuevos artículos. Las filas con una columna '<code>'HB.import_ref'</code>' se fusionan con los artículos existentes con la misma import_ref, si existe." + }, + "import_export_sub": "Importa y exporta tu inventario a y desde un archivo CSV. Esto es útil para migrar tu inventario a una nueva instancia de Homebox.", + "reports": "Informes", + "reports_set": { + "asset_labels": "Etiquetas de ID de Activo", + "asset_labels_button": "Generador de Etiquetas", + "asset_labels_sub": "Genera un PDF para impresión de etiquetas para un rango de ID de Activos. Estas etiquetas no son específicas de tu inventario, por lo que puedes imprimirlas con antelación y aplicarlas a tu inventario cuando las recibas.", + "bill_of_materials": "Lista de Materiales", + "bill_of_materials_button": "Generar lista de materiales", + "bill_of_materials_sub": "Genera un archivo CSV (Valores Separados por Comas) que puede importarse a un programa de hojas de cálculo. Es un resumen de tu inventario con información básica sobre artículos y precios." + }, + "reports_sub": "Genera diferentes informes para tu inventario." } } diff --git a/frontend/locales/fr.json b/frontend/locales/fr.json index 328de57c8..3b5be6b23 100644 --- a/frontend/locales/fr.json +++ b/frontend/locales/fr.json @@ -1,105 +1,82 @@ { - "global": { - "email": "Courriel", - "read_docs": "Lire la documentation", - "password": "Mot de passe", - "github": "Projet GitHub", - "join_discord": "Rejoindre le Discord", - "follow_dev": "Suivre le développeur", - "version": "Version : { version }", - "build": "Assemblage : { build }", - "create": "Créer", - "submit": "Soumettre", - "create_and_add": "Créer et en ajouter un autre", - "confirm": "Confirmer", - "sign_out": "Déconnexion", - "welcome": "Bienvenue, { username }", - "created": "Créé", - "labels": "Étiquettes", - "locations": "Emplacements", - "name": "Nom", - "search": "Rechercher", - "items": "Articles" - }, - "index": { - "set_email": "Quel est vôtre courriel ?", - "set_name": "Quel est votre nom ?", - "login": "Se connecter", - "register": "S'enregistrer", - "remember_me": "Se souvenir de moi", - "set_password": "Définir votre mot de passe", - "dont_join_group": "Vous ne voulez pas joindre un groupe ?", - "tagline": "Répertoriez, organisez et gérez vos affaires.", - "disabled_registration": "Les inscriptions sont désactivées", - "joining_group": "Vous rejoignez un groupe existant !" - }, "components": { - "label": { - "create_modal": { - "title": "Créer une étiquette" + "app": { + "import_dialog": { + "change_warning": "Le comportement lors d’importations avec des import_ref existants a changé. Si une valeur pour import_ref est présente dans le fichier CSV, alors l’élément sera mis à jour avec celle-ci.", + "description": "Importer un fichier CSV contenant vos articles, étiquettes, et emplacements. Voir la documentation pour plus d’informations sur le format requis.", + "title": "Importer un fichier CSV", + "upload": "Téléverser" + } + }, + "global": { + "page_qr_code": { + "page_url": "URL de la page" + }, + "password_score": { + "password_strength": "Force du mot de passe" } }, "item": { + "create_modal": { + "photo_button": "Photo 📷", + "title": "Créer un article" + }, "view": { "selectable": { + "card": "Carte", "items": "Articles", - "no_items": "Nb. d’articles à afficher", - "table": "Tableau", - "card": "Carte" + "no_items": "Pas d'articles à afficher", + "table": "Tableau" } - }, + } + }, + "label": { "create_modal": { - "title": "Créer un article", - "photo_button": "Photo 📷" + "title": "Créer une étiquette" } }, "location": { "create_modal": { "title": "Créer un emplacement" - } - }, - "global": { - "password_score": { - "password_strength": "Solidité du mot de passe" }, - "page_qr_code": { - "page_url": "URL de la page" - } - }, - "app": { - "import_dialog": { - "title": "Importer un fichier CSV", - "upload": "Téléverser", - "description": "Importer un fichier CSV contenant vos articles, étiquettes, et emplacements. Voir la documentation pour plus d’informations sur le format requis.", - "change_warning": "Le comportement lors d’importations avec des import_ref existants a changé. Si une valeur pour import_ref est présente dans le fichier CSV, alors l’élément sera mis à jour avec celle-ci." + "tree": { + "no_locations": "Aucun emplacement disponible. Ajoutez votre premiers emplacements avec le bouton `<`span class=\"link-primary\"`>`Créer`<`/span`>` dans la barre de navigation." } } }, - "profile": { - "notifiers_sub": "Recevez des notifications pour vous prévenir des prochaines maintenances.", - "active": "Actif", - "enabled": "Activé", - "test": "Test", - "current_password": "Mot de passe actuel", - "new_password": "Nouveau mot de passe", - "change_password": "Changer de mot de passe", - "inactive": "Inactif", - "notifiers": "Notifications", - "gen_invite": "Générer un lien d’invitation", - "user_profile": "Profil utilisateur", - "user_profile_sub": "Gérez votre compte et invitez des utilisateurs.", - "url": "URL", - "delete_account": "Effacer le compte", - "delete_account_sub": "Supprimer le compte et toutes ses données. Aucune récupération possible.", - "group_settings": "Paramètres du groupe", - "group_settings_sub": "Paramètres du groupe partagé. Il peut être nécessaire de recharger la page pour qu’ils deviennent effectifs.", - "currency_format": "Format de la devise", - "update_group": "Mettre à jour le groupe", - "theme_settings": "Paramètres du thème", - "theme_settings_sub": "Les paramètres du thème sont stockés dans le navigateur. Vous pouvez les changer à tout moment. Si vous\nrencontrez des problèmes, il est conseillé de rafraichir la page.", - "notifier_modal": "Notifications { type, select, true {Edit} false {Create} other {Other}}", - "update_language": "Mettre à jour la langue", - "language": "Langue" + "global": { + "build": "Assemblage : { build }", + "confirm": "Confirmer", + "create": "Créer", + "create_and_add": "Créer et en ajouter un autre", + "created": "Créé", + "email": "Courriel", + "follow_dev": "Suivre le développeur", + "github": "Projet GitHub", + "items": "Articles", + "join_discord": "Rejoindre le Discord", + "labels": "Étiquettes", + "locations": "Emplacements", + "name": "Nom", + "password": "Mot de passe", + "read_docs": "Lire la documentation", + "search": "Rechercher", + "sign_out": "Déconnexion", + "submit": "Soumettre", + "version": "Version : { version }", + "welcome": "Bienvenue, { username }" + }, + "index": { + "disabled_registration": "Les inscriptions sont désactivées", + "dont_join_group": "Vous ne voulez pas joindre un groupe ?", + "joining_group": "Vous rejoignez un groupe existant !", + "login": "Se connecter", + "register": "S'enregistrer", + "remember_me": "Se souvenir de moi", + "set_email": "Quel est vôtre courriel ?", + "set_name": "Quel est votre nom ?", + "set_password": "Définir votre mot de passe", + "tagline": "Répertoriez, organisez et gérez vos affaires." }, "items": { "add": "Ajouter", @@ -119,20 +96,146 @@ "prev_page": "Page précédente", "query_id": "Interrogation du numéro d'identification de l'actif : { id }", "reset_search": "Réinitialiser la recherche", + "results": "{ total } résultats", "tip_1": "Les filtres d’emplacement et d’étiquette utilisent l’opérateur « OU ».\nUn seul des filtres n’a besoin de correspondre pour retourner un résultat.", "tip_2": "Les recherches préfixées par '#'' rechercheront un ID d'actif (exemple '#000-001')", "tip_3": "Les filtres de champ utilisent l’opérateur « OU ».\nUn seul des filtres n’a besoin de correspondre pour retourner un résultat.", "tips": "Conseils", "tips_sub": "Conseils pour la recherche", - "updated_at": "Mis à jour le", - "results": "{ total } résultats" + "updated_at": "Mis à jour le" + }, + "labels": { + "no_results": "Aucune étiquette trouvée" + }, + "languages": { + "ca": "Catalan", + "de": "Allemand", + "en": "Anglais", + "es": "Espagnol", + "fr": "Français", + "hu": "Hongrois", + "it": "Italien", + "nl": "Néerlandais", + "pl": "Polonais", + "pt-BR": "Portugais (Brésil)", + "ru": "Russe", + "sl": "Slovène", + "sv": "Suédois", + "tr": "Turc", + "zh-CN": "Chinois (simplifié)", + "zh-HK": "Chinois (Hong Kong)", + "zh-MO": "Chinois (Macao)", + "zh-TW": "Chinois (traditionnel)" + }, + "locations": { + "no_results": "Aucun emplacement trouvé" + }, + "maintenance": { + "filter": { + "both": "Toutes", + "completed": "Terminées", + "scheduled": "Prévues" + }, + "list": { + "complete": "Terminer", + "create_first": "Créer votre première entrée", + "delete": "Supprimer", + "duplicate": "Dupliquer", + "edit": "Modifier", + "new": "Ajouter" + }, + "modal": { + "completed_date": "Date d'achèvement", + "cost": "Coût", + "delete_confirmation": "Êtes-vous certain de vouloir supprimer cette entrée ?", + "edit_action": "Modifier", + "edit_title": "Modifier l'entrée", + "entry_name": "Nom", + "new_action": "Créer", + "new_title": "Nouvelle entrée", + "notes": "Notes", + "scheduled_date": "Date prévue" + }, + "monthly_average": "Moyenne mensuelle", + "toast": { + "failed_to_create": "Échec de suppression de l'entrée", + "failed_to_delete": "Échec de création de l'entrée", + "failed_to_update": "Échec de mise à jour de l'entrée" + }, + "total_cost": "Coût total", + "total_entries": "Nombre d'entrées" + }, + "menu": { + "home": "Accueil", + "locations": "Emplacements", + "maintenance": "Maintenance", + "profile": "Profil", + "search": "Recherche", + "tools": "Outils" + }, + "profile": { + "active": "Actif", + "change_password": "Changer de mot de passe", + "currency_format": "Format de la devise", + "current_password": "Mot de passe actuel", + "delete_account": "Supprimer le compte", + "delete_account_sub": "Supprimer le compte et toutes ses données. Aucune récupération possible.", + "display_header": "{ currentValue, select, true {Masquer l’en-tête} false {Afficher l’en-tête} other {Not Hit}}", + "enabled": "Activé", + "gen_invite": "Générer un lien d’invitation", + "group_settings": "Paramètres du groupe", + "group_settings_sub": "Paramètres du groupe partagé. Il peut être nécessaire de recharger la page pour qu’ils deviennent effectifs.", + "inactive": "Inactif", + "language": "Langue", + "new_password": "Nouveau mot de passe", + "no_notifiers": "Aucune notification configurée", + "notifier_modal": "Notifications { type, select, true {Edit} false {Create} other {Other}}", + "notifiers": "Notifications", + "notifiers_sub": "Recevez des notifications pour vous prévenir des prochaines maintenances.", + "test": "Test", + "theme_settings": "Paramètres du thème", + "theme_settings_sub": "Les paramètres du thème sont stockés dans le navigateur. Vous pouvez les changer à tout moment. Si vous\nrencontrez des problèmes, il est conseillé de rafraichir la page.", + "update_group": "Mettre à jour le groupe", + "update_language": "Mettre à jour la langue", + "url": "URL", + "user_profile": "Profil utilisateur", + "user_profile_sub": "Gérez votre compte et invitez des utilisateurs." }, "tools": { + "actions": "Actions d’inventaire", + "actions_set": { + "ensure_ids": "Vérifier les identifiants d'actif", + "ensure_ids_button": "Vérifier les identifiants d'actifs", + "ensure_ids_sub": "Vérifie que tous les éléments de votre inventaire comportent un champ asset_id valide. Ceci est effectué en cherchant l’identifiant actuel le plus élevé et en appliquant les valeurs suivantes à tous les éléments sans identifiant. L'action est effectuée en suivant l'ordre du champ created_at.", + "ensure_import_refs": "Vérifier les références d'importation", + "ensure_import_refs_button": "Vérifier les références d'importation", + "ensure_import_refs_sub": "Vérifie que tous les éléments de votre inventaire comportent un champ import_ref valide. Ceci est effectué en générant une chaîne de 8 caractères aléatoires pour chaque élément ne comportant pas de champ import_ref.", + "set_primary_photo": "Définir la photo principale", + "set_primary_photo_button": "Définir la photo principale", + "set_primary_photo_sub": "Dans la version v0.10.0 d'Homebox, le champ d'image principal à été ajouté aux pièces jointes de type photo. Cette action définira en tant qu'image principale toute première image en pièce jointe déjà présente en base de donnée, si le champ n'est pas déjà défini. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Voir GitHub PR #576'</a>'", + "zero_datetimes": "Remettre à zéro les dates et heures", + "zero_datetimes_button": "Remettre à zéro les dates et heures" + }, + "actions_sub": "Appliquer des actions en masse à votre inventaire. Ces actions sont irréversibles. '<b>'Soyez vigilant.'</b>'", + "import_export": "Importer/Exporter", + "import_export_set": { + "export": "Exporter l'inventaire", + "export_button": "Exporter l'inventaire", + "export_sub": "Exporte l'inventaire au format CSV Homebox. Cela exportera l'intégralité de votre inventaire.", + "import": "Importer l'inventaire", + "import_button": "Importer l'inventaire", + "import_sub": "Importer un fichier CSV au format Homebox. Sans la colonne '<code>'HB.import_ref'</code>' , cela '<b>'n'écrasera pas'</b>' d'éléments de votre inventaire actuel, seuls les nouveaux éléments seront importés. Les lignes contenant une colonne '<code>'HB.import_ref'</code>' seront fusionnées avec les éléments existants comportant le même '<code>'HB.import_ref'</code>', si existant." + }, + "import_export_sub": "Importez et exportez votre inventaire vers et depuis un fichier CSV", + "reports": "Rapports", "reports_set": { + "asset_labels": "Étiquettes d’identifiant d’actif", + "asset_labels_button": "Générateur d’étiquettes", + "asset_labels_sub": "Génère un fichier PDF imprimable pour une plage d'identifiants d'actifs. Ils ne sont pas spécifiques à votre inventaire donc vous pouvez les imprimer en avance et les appliquer à votre inventaire par la suite.", "bill_of_materials": "Nomenclature", - "asset_labels_button": "Générateur d’étiquettes" + "bill_of_materials_button": "Générer une nomenclature", + "bill_of_materials_sub": "Génère un fichier CSV (valeurs séparées par des virgules) qui peut être importé dans un tableur. Il s'agit d'un aperçu de votre inventaire contenant les informations essentielles." }, - "reports": "Rapports", "reports_sub": "Générez différents rapports pour votre inventaire." } } diff --git a/frontend/locales/hu.json b/frontend/locales/hu.json index e6dea98c6..50e0cc9df 100644 --- a/frontend/locales/hu.json +++ b/frontend/locales/hu.json @@ -2,13 +2,15 @@ "components": { "app": { "import_dialog": { - "upload": "Feltöltés", - "title": "CSV fájl importálása" + "change_warning": "A meglévő import_ref-fel rendelkező tételek importálásának menete megváltozott. Ha a CSV fájlban van import_ref, \nakkor a tételt felülírják a CSV fájlban található értékek.", + "description": "Importálj egy CSV fájlt, amely tartalmazza a tételeidet, címkéidet és helyeidet. A szükséges formátumról bővebben \na dokumentációban olvashatsz.", + "title": "Importálás CSV-fájlból", + "upload": "Feltöltés" } }, "global": { "page_qr_code": { - "page_url": "Oldal URL" + "page_url": "Oldal URL-je" }, "password_score": { "password_strength": "Jelszó erőssége" @@ -16,14 +18,14 @@ }, "item": { "create_modal": { - "title": "Tétel létrehozása", - "photo_button": "Fénykép 📷" + "photo_button": "Fénykép 📷", + "title": "Új elem létrehozása" }, "view": { "selectable": { "card": "Kártya", "items": "Tételek", - "no_items": "Nincs megjeleníthető tétel", + "no_items": "Nincs megjeleníthető elem", "table": "Táblázat" } } @@ -35,7 +37,10 @@ }, "location": { "create_modal": { - "title": "Helyszín létrehozása" + "title": "Új hely létrehozása" + }, + "tree": { + "no_locations": "Nincs elérhető hely. Adj hozzá új helyet a\n `<`span class=\"link-primary\"`>`Létrehozás`<`/span`>` gombbal a navigációs sávon." } } }, @@ -46,39 +51,192 @@ "create_and_add": "Létrehozás és újabb hozzáadása", "created": "Létrehozva", "email": "Email", - "follow_dev": "Fejlesztő követése", - "github": "GitHub Projekt", + "follow_dev": "Kövesd a fejlesztőt", + "github": "Github projekt", "items": "Tételek", - "join_discord": "Csatlakozás a Discordhoz", + "join_discord": "Csatlakozz a Discordhoz", "labels": "Címkék", - "locations": "Helyszínek", + "locations": "Helyek", "name": "Név", "password": "Jelszó", - "read_docs": "Dokumentáció elolvasása", + "read_docs": "Olvasd el a dokumentációt", "search": "Keresés", - "sign_out": "Kilépés", + "sign_out": "Kijelentkezés", "submit": "Elküldés", "version": "Verzió: { version }", "welcome": "Üdv, { username }" }, "index": { "disabled_registration": "Regisztráció kikapcsolva", - "dont_join_group": "Nem akarsz csoporthoz csatlakozni?", - "joining_group": "Egy létező csoporthoz csatlakozol!", - "login": "Belépés", + "dont_join_group": "Nem szeretnél csatlakozni egy csoporthoz?", + "joining_group": "Meglévő csoporthoz csatlakozol!", + "login": "Bejelentkezés", "register": "Regisztráció", - "remember_me": "Emlékezzen rám", + "remember_me": "Emlékezzen rám!", "set_email": "Mi az email címed?", "set_name": "Mi a neved?", - "set_password": "Jelszó beállítása", - "tagline": "Kövesd, rendszerezd és igazgasd a tárgyaidat." + "set_password": "Állíts be egy jelszót!", + "tagline": "Kövesd nyomon, rendszerezd és kezeld a dolgaidat." }, "items": { "add": "Hozzáadás", "created_at": "Létrehozás dátuma", + "custom_fields": "Egyedi mezők", "field_selector": "Mezőválasztó", "field_value": "Mező értéke", "first": "Első", - "custom_fields": "Egyedi mezők" + "include_archive": "Archivált elemek belefoglalása", + "last": "Utolsó", + "negate_labels": "Címkeválasztás negálása", + "next_page": "Következő oldal", + "no_results": "Egy elem sem található", + "options": "Opciók", + "order_by": "Rendezés", + "pages": "{page}/{totalPages} oldal", + "prev_page": "Előző oldal", + "query_id": "Eszközazonosító szám lekérdezése: { id }", + "reset_search": "Alaphelyzet", + "results": "{total} találat", + "tip_1": "A hely- és címkeszűrők a „vagy” műveletet használják. Ha egynél többet választasz ki,\n bármelyik egyezése esetén megjelenik a tétel.", + "tip_2": "A '#' előtaggal ellátott keresések egy eszközazonosítót fognak lekérdezni (például '#000-001')", + "tip_3": "A mezőszűrők a „vagy” műveletet használják. Ha egynél többet választasz ki,\n bármelyik egyezése esetén megjelenik a tétel.", + "tips": "Tippek", + "tips_sub": "Tippek a kereséshez", + "updated_at": "Változtatás dátuma" + }, + "labels": { + "no_results": "Nem található címke" + }, + "languages": { + "ca": "Katalán", + "de": "Német", + "en": "Angol", + "es": "Spanyol", + "fr": "Francia", + "hu": "Magyar", + "it": "Olasz", + "nl": "Holland", + "pl": "Lengyel", + "pt-BR": "Portugál (brazíliai)", + "ru": "Orosz", + "sl": "Szlovén", + "sv": "Svéd", + "tr": "Török", + "zh-CN": "Kínai (egyszerűsített)", + "zh-HK": "Kínai (hongkongi)", + "zh-MO": "Kínai (makaói)", + "zh-TW": "Kínai (hagyományos)" + }, + "locations": { + "no_results": "Nem található hely" + }, + "maintenance": { + "filter": { + "both": "Mindkettő", + "completed": "Teljesítve", + "scheduled": "Időzítve" + }, + "list": { + "complete": "Kész", + "create_first": "Hozd létre az első bejegyzést", + "delete": "Törlés", + "duplicate": "Másolás", + "edit": "Szerkesztés", + "new": "Új" + }, + "modal": { + "completed_date": "Teljesítés dátuma", + "cost": "Költség", + "delete_confirmation": "Biztosan törli ezt a bejegyzést?", + "edit_action": "Módosítás", + "edit_title": "Bejegyzés szerkesztése", + "entry_name": "Bejegyzés neve", + "new_action": "Létrehozás", + "new_title": "Új bejegyzés", + "notes": "Megjegyzések", + "scheduled_date": "Ütemezett dátum" + }, + "monthly_average": "Havi átlag", + "toast": { + "failed_to_create": "Bejegyzés létrehozása sikertelen", + "failed_to_delete": "Bejegyzés törlése sikertelen", + "failed_to_update": "Bejegyzés frissítése sikertelen" + }, + "total_cost": "Teljes költség", + "total_entries": "Összes bejegyzés" + }, + "menu": { + "home": "Kezdőlap", + "locations": "Helyek", + "maintenance": "Karbantartás", + "profile": "Profil", + "search": "Keresés", + "tools": "Eszközök" + }, + "profile": { + "active": "Aktív", + "change_password": "Jelszó módosítása", + "currency_format": "Pénz formátum", + "current_password": "Jelenlegi jelszó", + "delete_account": "Fiók törlése", + "delete_account_sub": "Törlöd a fiókodat és az összes kapcsolódó adatot. Ezt a műveletet nem lehet visszavonni.", + "display_header": "{ currentValue, select, true {Fejléc elrejtése} false {Fejléc megjelenítése} other{Nincs találat}}", + "enabled": "Engedélyezve", + "gen_invite": "Meghívó link létrehozása", + "group_settings": "Csoport beállításai", + "group_settings_sub": "Ezek a csoport közös beállításai. Lehet hogy frissítened kell az oldalt a böngésződben a beállítások megváltoztatása után.", + "inactive": "Inaktív", + "language": "Nyelv", + "new_password": "Új jelszó", + "no_notifiers": "Nincs értesítő beállítva", + "notifier_modal": "Értesítő { type, select, true {szerkesztése} false {létrehozása} other {egyéb}}", + "notifiers": "Értesítők", + "notifiers_sub": "Értesítések kérése a közelgő karbantartási emlékeztetőkről", + "test": "Teszt", + "theme_settings": "Téma Beállítások", + "theme_settings_sub": "A témabeállítások a böngésző helyi tárhelyén tárolódnak. Bármikor megváltoztathatod a témát. Ha problémába\n ütközöl a téma beállításakor, próbáld meg frissíteni az oldalt a böngésződben.", + "update_group": "Csoport módosítása", + "update_language": "Nyelv átállítása", + "url": "URL", + "user_profile": "Felhasználói profil", + "user_profile_sub": "Hívj meg felhasználókat, és kezeld a fiókodat." + }, + "tools": { + "actions": "Készletműveletek", + "actions_set": { + "ensure_ids": "Eszközazonosítók meglétének biztosítása", + "ensure_ids_button": "Eszközazonosítók generálása", + "ensure_ids_sub": "Biztosítja, hogy a készletben lévő összes tétel rendelkezzen érvényes asset_id (eszközazonosító) mezővel. Ehhez megkeresi a legmagasabb asset_id mezőértéket az adatbázisban és minden olyan tételhez, amelynek nem beállított az asset_id mezője, rendre eggyel növelt értéket állít be. Ezt a created_at mezők értékének (a tétel létrehozásának dátuma) sorrendjében teszi.", + "ensure_import_refs": "Importálási hivatkozások meglétének biztosítása", + "ensure_import_refs_button": "Hivatkozások generálása", + "ensure_import_refs_sub": "Biztosítja, hogy a készletben lévő összes tétel rendelkezzen érvényes import_ref mezővel. Véletlenszerűen generál egy 8 hosszúságú karakterláncot minden olyan tételhez, amelynél az import_ref mező üres.", + "set_primary_photo": "Elsődleges fénykép hozzárendelése", + "set_primary_photo_button": "Hozzárendelés", + "set_primary_photo_sub": "A Homebox v0.10.0 verziójában hozzáadtuk a fénykép típusú mellékletekhez az elsődleges fényképként történő megjelölés lehetőségét. Ezzel a művelettel a mellékletekben található első fényképet állítod be elsődleges fényképnek, ha ilyen a tételhez még nincs kiválasztva. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Lásd az #576 GitHub PR-t'</a>'", + "zero_datetimes": "Idő törlése a tételek dátummezőiből", + "zero_datetimes_button": "Dátummezők javítása", + "zero_datetimes_sub": "Visszaállítja a dátumot és időt tartalmazó mezők értékét a dátum kezdetére a teljes készletben. Ezzel javíthatsz egy olyan bugot, mely során az oldal fejlesztésének korai szakaszában az időértékek mentése a dátumok pontos megjelenítésében hibát okozott. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'Lásd a #236 Github Issue-t további részletekért.'</a>'" + }, + "actions_sub": "Műveletek tömeges alkalmazása a készletre. Ezeket a vissza nem vonható műveleteket csak '<b>'kellő körültekintés mellett használd'</b>'.", + "import_export": "Import/Export", + "import_export_set": { + "export": "Készlet exportálása", + "export_button": "Készlet exportálása", + "export_sub": "Exportálja a Homebox szabványos CSV formátumát. Ez minden készletedben található tételt exportál.", + "import": "Készlet importálása", + "import_button": "Készlet importálása", + "import_sub": "Importálja a Homebox szabványos CSV formátumát. Amennyiben nem található '<code>'HB.import_ref'</code>' oszlop a fájlban, ez '<b>'nem'</b>' ír felül létező tételeket a készletedben, csak újakat ad hozzá. Azon sorok, melyeknél a '<code>'HB.import_ref'</code>' oszlop értéke megegyezik egy létező tétel import_ref mezőjének értékével, a sor tartalma beolvad a létező tételbe." + }, + "import_export_sub": "Készlet importálása és exportálása CSV-fájlba és CSV-fájlból. Ez hasznos lehet a készleted átmozgatásához a Homebox egy új példányába.", + "reports": "Jelentések", + "reports_set": { + "asset_labels": "Eszközazonosító címkék", + "asset_labels_button": "Címkegenerátor", + "asset_labels_sub": "Nyomtatható PDF-fájlt hoz létre, amely címkéket tartalmaz eszközazonosítók egy meghatározott tartományához. Ezek nem készletspecifikusak, így előre is kinyomtathatod a címkéket, és később felviheted a készleted beérkező tételeire.", + "bill_of_materials": "Anyagjegyzék", + "bill_of_materials_button": "Jegyzék létrehozása", + "bill_of_materials_sub": "Létrehoz egy CSV (vesszővel elválasztott értékek) fájlt, amely importálható egy táblázatkezelő programba. Ez a készleted összesítése a tételek alap és árra vonatkozó információival." + }, + "reports_sub": "Hozz létre különböző jelentéseket a készletedhez." } } diff --git a/frontend/locales/it.json b/frontend/locales/it.json index eebf29cd6..f86278554 100644 --- a/frontend/locales/it.json +++ b/frontend/locales/it.json @@ -18,6 +18,7 @@ }, "item": { "create_modal": { + "photo_button": "Foto 📷", "title": "Crea Oggetto" }, "view": { @@ -41,7 +42,7 @@ } }, "global": { - "build": "Build: { build }", + "build": "Compila: { build }", "confirm": "Conferma", "create": "Crea", "create_and_add": "Crea e aggiungi un altro", @@ -61,7 +62,7 @@ "submit": "Invia", "version": "Versione: { version }", "welcome": "Benvenuto, { username }" - }, + }, "index": { "disabled_registration": "Registrazione Disabilitata", "dont_join_group": "Non vuoi unirti a un gruppo?", @@ -100,6 +101,26 @@ "tips_sub": "Suggerimenti per la Ricerca", "updated_at": "Aggiornato Il" }, + "languages": { + "ca": "Catalano", + "de": "Tedesco", + "en": "Inglese", + "es": "Spagnolo", + "fr": "Francese", + "hu": "Ungherese", + "it": "Italiano", + "nl": "Olandese", + "pl": "Polacco", + "pt-BR": "Portoghese (Brasile)", + "ru": "Russo", + "sl": "Sloveno", + "sv": "Svedese", + "tr": "Turco", + "zh-CN": "Cinese (semplificato)", + "zh-HK": "Cinese Mandarino", + "zh-MO": "Cinese (Macao)", + "zh-TW": "Cinese (tradizionale)" + }, "profile": { "active": "Attivo", "change_password": "Cambia Password", @@ -107,11 +128,13 @@ "current_password": "Password Corrente", "delete_account": "Elimina Account", "delete_account_sub": "Elimina il tuo account e tutti i dati associati. Questa operazione non può essere annullata.", + "display_header": "{ currentValue, select, true {Nascondi intestazione} false {Mostra intestazione} other {Sconosciuto}}", "enabled": "Abilitato", "gen_invite": "Genera Link di Invito", "group_settings": "Impostazioni Gruppo", "group_settings_sub": "Impostazioni Gruppo Condivise. Potrebbe essere necessario aggiornare il browser affinché alcune impostazioni vengano applicate.", "inactive": "Inattivo", + "language": "Lingua", "new_password": "Nuova Password", "notifier_modal": "{ type, select, true {Modifica} false {Crea} other {Altro}} Notifier", "notifiers": "Notifiche", @@ -120,8 +143,47 @@ "theme_settings": "Impostazioni Tema", "theme_settings_sub": "Le impostazioni del tema sono memorizzate nella memoria locale del tuo browser. Puoi cambiare il tema \nin qualsiasi momento. Se hai problemi a impostare il tuo tema, prova a ricaricare la pagina.", "update_group": "Aggiorna Gruppo", + "update_language": "Aggiorna Lingua", "url": "URL", "user_profile": "Profilo Utente", "user_profile_sub": "Invita utenti e gestisci il tuo account." + }, + "tools": { + "actions": "Azioni Inventario", + "actions_set": { + "ensure_ids": "Verifica ID delle risorse", + "ensure_ids_button": "Verifica ID delle risorse", + "ensure_ids_sub": "Garantisce che tutti gli articoli nel tuo inventario abbiano un campo asset_id valido. Questo viene fatto trovando il campo asset_id corrente più alto nel database e applicando il valore successivo a ogni elemento che ha un campo asset_id non impostato. Questo viene fatto per il campo created_at.", + "ensure_import_refs": "Verifica riferimenti di importazione", + "ensure_import_refs_button": "Verifica riferimenti di importazione", + "ensure_import_refs_sub": "Verifica che tutti gli articoli nel tuo inventario abbiano un campo import_ref valido. Questo viene fatto generando in modo casuale una stringa di 8 caratteri per ogni elemento che ha un campo import_ref non impostato.", + "set_primary_photo": "Imposta foto principale", + "set_primary_photo_button": "Imposta immagine principale", + "set_primary_photo_sub": "Nella versione v0.10.0 di Homebox, il campo immagine principale è stato aggiunto agli allegati di tipo foto. Questa azione imposterà il campo immagine principale alla prima immagine nella matrice allegati nel database, se non è già impostato. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Vedi GitHub PR #576'</a>'", + "zero_datetimes": "Azzera Data e Orario oggetti", + "zero_datetimes_button": "Azzera Date e Ora articoli", + "zero_datetimes_sub": "Reimposta il valore dell'ora per tutti i campi data e ora dell'inventario all'inizio della data. Questo è per correggere un bug che è stato introdotto all'inizio dello sviluppo del sito che ha causato il valore di orario memorizzato con il tempo che ha causato problemi con i campi data visualizzazione dei valori esatti. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'Vedi Github Issue #236 per maggiori dettagli.'</a>'" + }, + "actions_sub": "Applica Azioni massive al tuo inventario. Questo sono azioni irreversibili. '<b>'Presta attenzione.'</b>'", + "import_export": "Importa/Esporta", + "import_export_set": { + "export": "Esporta Inventario", + "export_button": "Esporta Inventario", + "export_sub": "Esporta il formato CSV standard per Homebox. Questo esporterà tutti gli oggetti del tuo inventario.", + "import": "Importa Inventario", + "import_button": "Importa Inventario", + "import_sub": "Importa il formato CSV standard per Homebox. Senza una colonna '<code>'HB.import_ref'</code>' questo '<b>'non'</b>' sovrascriverà gli oggetti esistenti nel tuo inventario, aggiungerà solamente nuovi oggetti. Le righe con una colonna '<code>'HB.import_ref'</code>' saranno unite agli oggetti esistenti con lo stesso import_ref, se presente." + }, + "import_export_sub": "Importa ed esporta il tuo inventario da e verso un file CSV. Questo è utile per migrare il tuo inventario verso una nuova istanza di Homebox.", + "reports": "Rapporti", + "reports_set": { + "asset_labels": "Etichette ID risorsa", + "asset_labels_button": "Generatore di etichette", + "asset_labels_sub": "Genera una etichetta PDF stampabile per un gruppo di ID Risorsa. Le etichette non sono specifiche per il tuo inventario così puoi stamparle in anticipo ed applicarle al tuo inventario quando lo ricevi.", + "bill_of_materials": "Distinta base", + "bill_of_materials_button": "Genera BOM", + "bill_of_materials_sub": "Genera un file CSV (Comma Separated Values) che può essere importato in un foglio di calcolo. Questo è un sommario del tuo inventario con informazioni di base su oggetto e prezzo." + }, + "reports_sub": "Genera diversi report per il tuo inventario." } } diff --git a/frontend/locales/nl.json b/frontend/locales/nl.json index ac57c7006..aa55ad67d 100644 --- a/frontend/locales/nl.json +++ b/frontend/locales/nl.json @@ -1,66 +1,32 @@ { - "global": { - "version": "Versie: { version }", - "github": "GitHub Project", - "join_discord": "Sluit je aan bij de Discord", - "follow_dev": "Volg de ontwikkelaar", - "read_docs": "Lees de documentatie", - "email": "E-mail", - "submit": "Indienen", - "confirm": "Bevestigen", - "create": "Maken", - "create_and_add": "Maak en voeg nog een toe", - "password": "Wachtwoord", - "build": "Bouw: { build }", - "created": "Gemaakt", - "welcome": "Welkom, { username }", - "sign_out": "Log uit", - "labels": "etiketten", - "locations": "Locaties", - "name": "Naam", - "items": "artikelen", - "search": "Zoeken" - }, - "index": { - "disabled_registration": "Registratie uitgeschakeld", - "login": "Log in", - "register": "Registreer", - "remember_me": "Onthoud mij", - "set_email": "Wat is je mailadres?", - "set_password": "Stel je wachtwoord in", - "set_name": "Wat is je naam?", - "joining_group": "Je neemt deel aan een bestaande groep!", - "tagline": "Volg, Organiseer en beheer je dingen.", - "dont_join_group": "Wil je niet aan een groep deelnemen?" - }, "components": { - "global": { - "password_score": { - "password_strength": "Wachtwoord sterkte" - }, - "page_qr_code": { - "page_url": "Pagina URL" - } - }, "app": { "import_dialog": { - "title": "Importeer CSV bestand", "change_warning": "Gedrag voor importeren met bestaande import_refs is veranderd. Als een import_refs reeds bestaat in het CSV bestand, het\nobject zal worden aangepast met de waardes van het CSV bestand.", - "upload": "Upload", - "description": "Importeer een CSV bestand met je objecten, labels en locaties. Zie documentatie voor meer informatie m.b.t.\n vereist format." + "description": "Importeer een CSV bestand met je objecten, labels en locaties. Zie documentatie voor meer informatie m.b.t.\n vereist format.", + "title": "Importeer CSV bestand", + "upload": "Upload" + } + }, + "global": { + "page_qr_code": { + "page_url": "Pagina URL" + }, + "password_score": { + "password_strength": "Wachtwoord sterkte" } }, "item": { "create_modal": { - "title": "Maak object", - "photo_button": "Foto 📷" + "photo_button": "Foto 📷", + "title": "Maak object" }, "view": { "selectable": { - "items": "Objecten", "card": "Kaart", - "table": "Tabel", - "no_items": "Geen objecten om te tonen" + "items": "Objecten", + "no_items": "Geen objecten om te tonen", + "table": "Tabel" } } }, @@ -75,45 +41,41 @@ } } }, - "profile": { - "gen_invite": "Genereer Uitnodigingslink", - "notifier_modal": "{ type, select, true {Bewerk} false {Creëer} other {overig}} Notifier", - "change_password": "Verander Wachtwoord", - "current_password": "Huidig Wachtwoord", - "new_password": "Nieuw Wachtwoord", - "url": "URL", - "enabled": "ingeschakeld", - "test": "Test", - "user_profile": "Gebruikers Profiel", - "user_profile_sub": "Nodig gebruikers uit, en beheer je account.", - "active": "Actief", - "inactive": "Inactief", - "notifiers_sub": "Krijg notificaties voor opkomende onderhouds herinneringen", - "group_settings_sub": "Gedeelde groepsinstellingen", - "group_settings": "Groeps Instellingen", - "notifiers": "Notificatie", - "currency_format": "Valutanotatie", - "update_group": "Groep bijwerken", - "theme_settings": "Theme instellingen", - "theme_settings_sub": "Thema-instellingen worden opgeslagen in de lokale opslag van uw browser. Je kan deze wijzigen op elk moment. \nAls je problemen hebt met de instellingen kun je je browser verversen.", - "delete_account": "Verwijder account", - "delete_account_sub": "Verwijder je account en alle geassocieerde data. Deze actie kan niet ongedaan worden." + "global": { + "build": "Bouw: { build }", + "confirm": "Bevestigen", + "create": "Maken", + "create_and_add": "Maak en voeg nog een toe", + "created": "Gemaakt", + "email": "E-mail", + "follow_dev": "Volg de ontwikkelaar", + "github": "GitHub Project", + "items": "artikelen", + "join_discord": "Sluit je aan bij de Discord", + "labels": "etiketten", + "locations": "Locaties", + "name": "Naam", + "password": "Wachtwoord", + "read_docs": "Lees de documentatie", + "search": "Zoeken", + "sign_out": "Log uit", + "submit": "Indienen", + "version": "Versie: { version }", + "welcome": "Welkom, { username }" + }, + "index": { + "disabled_registration": "Registratie uitgeschakeld", + "dont_join_group": "Wil je niet aan een groep deelnemen?", + "joining_group": "Je neemt deel aan een bestaande groep!", + "login": "Log in", + "register": "Registreer", + "remember_me": "Onthoud mij", + "set_email": "Wat is je mailadres?", + "set_name": "Wat is je naam?", + "set_password": "Stel je wachtwoord in", + "tagline": "Volg, Organiseer en beheer je dingen." }, "items": { - "tip_1": "Locatie- en labelfilters gebruiken de 'OF' -werking. Als er meer dan een is geselecteerd,\nis er maar een nodig voor een overeenkomst.", - "tip_2": "Zoekopdrachten voorafgegaan door '#'' zullen om een object-ID vragen (bijvoorbeeld '#000-001')", - "tip_3": "Veldfilters gebruiken de 'OF' -bewerking. Indien meer dan 1 is geselecteerd\nzal er maar 1 nodig zijn voor een match.", - "tips_sub": "Zoektips", - "updated_at": "Bijgewerkt op", - "pages": "Pagina { page } van { totalPages }", - "prev_page": "Vorige pagina", - "query_id": "ID-nummer van object opvragen: { id }", - "reset_search": "Reset Zoeken", - "tips": "Tips", - "no_results": "Geen Items Gevonden", - "options": "Opties", - "order_by": "Sorteren op", - "results": "{ total } Resultaten", "add": "Toevoegen", "created_at": "Aangemaakt op", "custom_fields": "Aangepaste velden", @@ -123,6 +85,149 @@ "include_archive": "Inclusief gearchiveerde items", "last": "Achternaam", "negate_labels": "Negeer Geselecteerde Etiketten", - "next_page": "Volgende pagina" + "next_page": "Volgende pagina", + "no_results": "Geen Items Gevonden", + "options": "Opties", + "order_by": "Sorteren op", + "pages": "Pagina { page } van { totalPages }", + "prev_page": "Vorige pagina", + "query_id": "ID-nummer van object opvragen: { id }", + "reset_search": "Reset Zoeken", + "results": "{ total } Resultaten", + "tip_1": "Locatie- en labelfilters gebruiken de 'OF' -werking. Als er meer dan een is geselecteerd,\nis er maar een nodig voor een overeenkomst.", + "tip_2": "Zoekopdrachten voorafgegaan door '#'' zullen om een object-ID vragen (bijvoorbeeld '#000-001')", + "tip_3": "Veldfilters gebruiken de 'OF' -bewerking. Indien meer dan 1 is geselecteerd\nzal er maar 1 nodig zijn voor een match.", + "tips": "Tips", + "tips_sub": "Zoektips", + "updated_at": "Bijgewerkt op" + }, + "labels": { + "no_results": "Geen labels gevonden" + }, + "languages": { + "ca": "Catalaans", + "de": "Duits", + "en": "Engels", + "es": "Spaans", + "fr": "Frans", + "hu": "Hongaars", + "it": "Italiaans", + "nl": "Nederlands", + "pl": "Pools", + "pt-BR": "Portugees (Brazilië)", + "ru": "Russisch", + "sl": "Sloveens", + "sv": "Zweeds", + "tr": "Turks", + "zh-CN": "Chinees (vereenvoudigd)", + "zh-HK": "Chinees (Hong Kong)", + "zh-MO": "Chinees (Macau)", + "zh-TW": "Chinees (traditioneel)" + }, + "locations": { + "no_results": "Geen locaties gevonden" + }, + "maintenance": { + "filter": { + "both": "Beide", + "completed": "Voltooid", + "scheduled": "Gepland" + }, + "list": { + "complete": "Compleet", + "create_first": "Maak je eerste invoer aan", + "delete": "Verwijderen", + "duplicate": "Dubbel", + "edit": "Bewerken", + "new": "Nieuw" + }, + "modal": { + "completed_date": "Voltooiings Datum", + "cost": "Kosten", + "delete_confirmation": "Weet u zeker dat u deze gegevens wilt verwijderen?", + "edit_action": "Bijwerken", + "edit_title": "Bewerk entry", + "entry_name": "Ingangsnaam", + "new_action": "Maak", + "new_title": "Nieuw fragment", + "notes": "Opmerkingen", + "scheduled_date": "Gepland datum" + }, + "monthly_average": "Maandelijks", + "toast": { + "failed_to_create": "Kan invoer niet maken", + "failed_to_delete": "Kon item niet verwijderen.", + "failed_to_update": "Kan invoer niet bijwerken" + }, + "total_cost": "Totale kosten", + "total_entries": "Totaal aantal Inzendingen" + }, + "menu": { + "home": "Home", + "locations": "Locaties", + "maintenance": "Onderhoud", + "profile": "Profiel", + "search": "Zoeken", + "tools": "Gereedschappen" + }, + "profile": { + "active": "Actief", + "change_password": "Verander Wachtwoord", + "currency_format": "Valutanotatie", + "current_password": "Huidig Wachtwoord", + "delete_account": "Verwijder account", + "delete_account_sub": "Verwijder je account en alle geassocieerde data. Deze actie kan niet ongedaan worden.", + "enabled": "ingeschakeld", + "gen_invite": "Genereer Uitnodigingslink", + "group_settings": "Groeps Instellingen", + "group_settings_sub": "Gedeelde groepsinstellingen", + "inactive": "Inactief", + "language": "Taal", + "new_password": "Nieuw Wachtwoord", + "no_notifiers": "Geen melders geconfigureerd", + "notifier_modal": "{ type, select, true {Bewerk} false {Creëer} other {overig}} Notifier", + "notifiers": "Notificatie", + "notifiers_sub": "Krijg notificaties voor opkomende onderhouds herinneringen", + "test": "Test", + "theme_settings": "Theme instellingen", + "theme_settings_sub": "Thema-instellingen worden opgeslagen in de lokale opslag van uw browser. Je kan deze wijzigen op elk moment. \nAls je problemen hebt met de instellingen kun je je browser verversen.", + "update_group": "Groep bijwerken", + "update_language": "Taal bijwerken", + "url": "URL", + "user_profile": "Gebruikers Profiel", + "user_profile_sub": "Nodig gebruikers uit, en beheer je account." + }, + "tools": { + "actions": "Acties inventariseren", + "actions_set": { + "ensure_ids": "Zorg voor item-ID's", + "ensure_ids_button": "Zorg voor item-ID's", + "ensure_import_refs": "Zorg ervoor dat Import Refs", + "ensure_import_refs_button": "Zorg ervoor dat Import Refs", + "set_primary_photo": "Hoofdfoto instellen", + "set_primary_photo_button": "Hoofdfoto instellen", + "zero_datetimes": "Nul item Datum Tijden", + "zero_datetimes_button": "Nul item Datum Tijden" + }, + "actions_sub": "Acties bulksgewijs toepassen op je voorraad. Deze zijn onomkeerbaar '<b>'Wees voorzichtig.'</b>'", + "import_export": "Importeer/Exporteer", + "import_export_set": { + "export": "Export voorraad", + "export_button": "Export voorraad", + "export_sub": "Exporteert het standaard CSV-formaat voor Homebox", + "import": "Inventaris Importeren", + "import_button": "Inventaris Importeren" + }, + "import_export_sub": "Importeer en exporteer je voorraad van en naar een CSV-bestand. Dit is handig voor het migreren van je voorraad naar een nieuwe HomeBox installatie.", + "reports": "Rapportages", + "reports_set": { + "asset_labels": "Labels voor item-ID", + "asset_labels_button": "Etiket Generator", + "asset_labels_sub": "Genereert een afdrukbare PDF met labels voor een reeks Asset ID's. Deze zijn niet specifiek voor de voorraad dus kun je deze van te voren printen en gebruiken wanneer je voorraad ontvangt.", + "bill_of_materials": "Materiaallijst", + "bill_of_materials_button": "BOM genereren", + "bill_of_materials_sub": "Genereert een CSV-bestand (door komma's gescheiden waarden) dat kan worden geïmporteerd in een spreadsheetprogramma. Dit is een samenvattting van je voorraad met basis item en prijs informatie." + }, + "reports_sub": "Genereer verschillende rapporten van je voorraad." } } diff --git a/frontend/locales/pt-BR.json b/frontend/locales/pt-BR.json index 0967ef424..8757b35a7 100644 --- a/frontend/locales/pt-BR.json +++ b/frontend/locales/pt-BR.json @@ -1 +1,242 @@ -{} +{ + "components": { + "app": { + "import_dialog": { + "change_warning": "O comportamento de importações com import_refs existentes foi alterado. Se houver um import_ref presente no arquivo CSV, o\nitem será atualizado com os valores presentes no arquivo CSV.", + "description": "Importe um arquivo CSV contendo seus items, etiquetas e locais. Consulte a documentação para mais informações\nsobre a formatação aceita.", + "title": "Importar arquivo CSV", + "upload": "Enviar" + } + }, + "global": { + "page_qr_code": { + "page_url": "URL da página" + }, + "password_score": { + "password_strength": "Segurança da Senha" + } + }, + "item": { + "create_modal": { + "photo_button": "Foto📷", + "title": "Criar Item" + }, + "view": { + "selectable": { + "card": "Cartão", + "items": "Items", + "no_items": "Nenhum item para exibir", + "table": "Tabela" + } + } + }, + "label": { + "create_modal": { + "title": "Criar etiqueta" + } + }, + "location": { + "create_modal": { + "title": "Criar Local" + }, + "tree": { + "no_locations": "Não há locais disponíveis. Adicione novos locais\n através do botão \"Criar\" na barra de navegação." + } + } + }, + "global": { + "build": "Compilação: { build }", + "confirm": "Confirmar", + "create": "Criar", + "create_and_add": "Criar e Adicionar Outro", + "created": "Criado", + "email": "Email", + "follow_dev": "Seguir o desenvolvedor", + "github": "Projeto GitHub", + "items": "Items", + "join_discord": "Junte-se ao Discord", + "labels": "Etiquetas", + "locations": "Locais", + "name": "Nome", + "password": "Senha", + "read_docs": "Leia a Documentação", + "search": "Buscar", + "sign_out": "Sair", + "submit": "Enviar", + "version": "Versão: { version }", + "welcome": "Bem-vindo, {username}" + }, + "index": { + "disabled_registration": "Registro Desativado", + "dont_join_group": "Não quer participar de um grupo?", + "joining_group": "Você está se juntando a um grupo existente!", + "login": "Login", + "register": "Registro", + "remember_me": "Lembrar-me", + "set_email": "Qual o seu e-mail?", + "set_name": "Qual é o seu nome?", + "set_password": "Defina a sua Senha", + "tagline": "Rastreie, organize e gerencie suas coisas." + }, + "items": { + "add": "Adicionar", + "created_at": "Criado em", + "custom_fields": "Campos Personalizados", + "field_selector": "Seletor de Campo", + "field_value": "Valor do Campo", + "first": "Primeiro", + "include_archive": "Incluir itens arquivados", + "last": "Último", + "negate_labels": "Negar os rótulos selecionados", + "next_page": "Próxima página", + "no_results": "Nenhum Item Encontrado", + "options": "Opções", + "order_by": "Ordenar Por", + "pages": "Página { page } de { totalPages }", + "prev_page": "Página anterior", + "query_id": "Consultando o número de ID do ativo: { id }", + "reset_search": "Reiniciar Pesquisa", + "results": "{ total } Resultados", + "tip_1": "Os filtros de local e etiqueta usam o operador \"OR\". Se você selecionar mais de um, somente um será\nnecessário para obter um resultado.", + "tip_2": "As pesquisas comprefixo '#'' buscam um ID de ativo (exemplo '#000-001')", + "tip_3": "Os filtros de local e etiqueta usam o operador \"OR\". Se você selecionar mais de um, somente um será\nnecessário para obter um resultado.", + "tips": "Dicas", + "tips_sub": "Dicas de pesquisa", + "updated_at": "Atualizado em" + }, + "labels": { + "no_results": "Nenhuma etiqueta encontrada" + }, + "languages": { + "ca": "Catalão", + "de": "Alemão", + "en": "Inglês", + "es": "Espanhol", + "fr": "Francês", + "hu": "Húngaro", + "it": "Italiano", + "nl": "Holandês", + "pl": "Polonês", + "pt-BR": "Português (Brasil)", + "ru": "Russo", + "sl": "Esloveno", + "sv": "Sueco", + "tr": "Turco", + "zh-CN": "Chinês (Simplificado)", + "zh-HK": "Chinês (Hong Kong)", + "zh-MO": "Chinês (Macau)", + "zh-TW": "Chinês (Tradicional)" + }, + "locations": { + "no_results": "Nenhum local encontrado" + }, + "maintenance": { + "filter": { + "both": "Ambos", + "completed": "Concluído", + "scheduled": "Agendado" + }, + "list": { + "complete": "Completo", + "create_first": "Crie sua primeira entrada", + "delete": "Excluir", + "duplicate": "Duplicar", + "edit": "Editar", + "new": "Novo" + }, + "modal": { + "completed_date": "Data de conclusão", + "cost": "Custo", + "delete_confirmation": "Tem certeza que deseja excluir este item?", + "edit_action": "Atualizar", + "edit_title": "Editar entrada", + "entry_name": "Nome de entrada", + "new_action": "Criar", + "new_title": "Nova entrada", + "notes": "Notas", + "scheduled_date": "Data agendada" + }, + "monthly_average": "Média Mensal", + "toast": { + "failed_to_create": "Falha ao criar entrada", + "failed_to_delete": "Falha ao excluir entrada", + "failed_to_update": "Falha ao atualizar entrada" + }, + "total_cost": "Custo Total", + "total_entries": "Total de Entradas" + }, + "menu": { + "home": "Início", + "locations": "Locais", + "maintenance": "Manutenção", + "profile": "Perfil", + "search": "Buscar", + "tools": "Ferramentas" + }, + "profile": { + "active": "Ativo", + "change_password": "Alterar Senha", + "currency_format": "Formato da moeda", + "current_password": "Senha Atual", + "delete_account": "Excluir conta", + "delete_account_sub": "Excluir sua conta e todos os dados associados. Essa ação não pode ser desfeita.", + "display_header": "{ currentValue, select, true {Ocultar cabeçalho} false {Mostrar cabeçalho} other {Não encontrado}}", + "enabled": "Ativado", + "gen_invite": "Gerar link de convite", + "group_settings": "Definições do grupo", + "group_settings_sub": "Configurações de Grupo Compartilhado. É possível que tenha que recarregar a página para que alguns ajustes sejam aplicados.", + "inactive": "Inativa", + "language": "Idioma", + "new_password": "Nova Senha", + "no_notifiers": "Nenhum notificador configurado", + "notifier_modal": "{ type, select, true {Edit} false {Create} other {Other}} Notificação", + "notifiers": "Notificadores", + "notifiers_sub": "Receba notificações para lembretes de manutenção futuros", + "test": "Teste", + "theme_settings": "Configurações do Tema", + "theme_settings_sub": "As configurações de tema são salvas localmente em seu navegador. Você pode mudar o tema a qualquer momento. Se está\ntendo problemas com a mudança de tema, tente recarregar a pagina.", + "update_group": "Atualizar grupo", + "update_language": "Atualizar idioma", + "url": "URL", + "user_profile": "Perfil do usuário", + "user_profile_sub": "Convide usuários e gerencie sua conta." + }, + "tools": { + "actions": "Ações de inventário", + "actions_set": { + "ensure_ids": "Garantir IDs de ativos", + "ensure_ids_button": "Garantir IDs de ativos", + "ensure_ids_sub": "Garante que todos os itens em seu inventário tenham um campo de asset_id válido. Isso é feito através da procura do mais alto asset_id no banco de dados e aplicando o próximo valor aos itens seguintes que não tenham valores de asset_id definidos. Isso é feito com base no campo created_at.", + "ensure_import_refs": "Garantir refs de importação", + "ensure_import_refs_button": "Garantir refs de importação", + "ensure_import_refs_sub": "Garante que todos os itens no seu inventário tenham um campo import_ref válido. Isso é feito gerando aleatoriamente uma sequência de 8 caracteres para cada item que não possuir um campo import_ref válido.", + "set_primary_photo": "Definir foto principal", + "set_primary_photo_button": "Definir foto principal", + "set_primary_photo_sub": "Na versão v0.10.0 do Homebox, o campo principal de foto foi adicionado aos anexos do tipo foto. Essa ação irá marcar o campo da imagem principal para a primeira imagem no array de anexos do banco de dados, se não estiver feito ainda.'<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Veja no GitHub PR #576'</a>'", + "zero_datetimes": "Zerar Data Hora do Item", + "zero_datetimes_button": "Zerar Data Hora do Item", + "zero_datetimes_sub": "Redefine o valor de hora de todos os itens do inventário para o início da data. Isso é para corrigir um bug que foi introduzido no início do desenvolvimento do site que causava o valor da hora ser armazenado errado, resultando em um erro na mostra da data/hora do item. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'Veja o item #236 do Github para mais detalhes.'</a>'" + }, + "actions_sub": "Aplicar ações ao seu inventário em massa. Essas ações são irreversíveis. '<b>'Tenha cuidado'</b>'", + "import_export": "Importar/Exportar", + "import_export_set": { + "export": "Exportar inventário", + "export_button": "Exportar inventário", + "export_sub": "Exporta o formato CSV padrão para o Homebox. Isso irá exportar todos os itens do seu inventário.", + "import": "Importar inventário", + "import_button": "Importar inventário", + "import_sub": "Importa o formato CSV padrão para o Homebox. Sem uma coluna '<code>'HB.import_ref'</code>' , isso '<b>não</b>' vai sobrescrever nenhum item de seu inventário, apenas adicionar novos items. Linhas que tenham '<code>'HB.import_ref'</code>' colunas são mescladas em itens existentes com o mesmo import_ref, se existir." + }, + "import_export_sub": "Importar e exportar seu inventário de ou para um arquivo CSV. Isso é útil para migrar o seu inventário para uma nova instância do Homebox.", + "reports": "Relatórios", + "reports_set": { + "asset_labels": "Etiquetas de ID de ativo", + "asset_labels_button": "Gerador de etiquetas", + "asset_labels_sub": "Gera um PDF imprimível das etiquetas no intervalo de ID de Ativo. Essas não são específicas do seu inventário, então você pode imprimir elas antes e aplicar no seu inventário depois quando receber os items.", + "bill_of_materials": "Lista de Materiais", + "bill_of_materials_button": "Gerar Lista de Materiais", + "bill_of_materials_sub": "Gera um arquivo CSV (Valores Separados por Vírgula) que pode ser importado para um programa de planilha. Esse é um sumário do seu inventário com informações básicas dos itens e dos preços." + }, + "reports_sub": "Gere relatórios diferentes para o seu inventário." + } +} diff --git a/frontend/locales/pt-PT.json b/frontend/locales/pt-PT.json new file mode 100644 index 000000000..05a5787f0 --- /dev/null +++ b/frontend/locales/pt-PT.json @@ -0,0 +1,195 @@ +{ + "components": { + "app": { + "import_dialog": { + "change_warning": "O comportamento para ficheiros importados com import_refs foi alterado. Se um import_ref está presente no ficheiro CSV, \no item vai ser atualizado com os valores no ficheiro CSV.", + "description": "Importe um ficheiro CSV com artigos, rótulos e localizações. Consulte a documentação para mais informações\nacerca do formato necessário.", + "title": "Importar ficheiro CSV", + "upload": "UploadUploadCarregar" + } + }, + "global": { + "page_qr_code": { + "page_url": "Endereço da página" + }, + "password_score": { + "password_strength": "Força da Senha" + } + }, + "item": { + "create_modal": { + "photo_button": "Foto 📷", + "title": "Criar Item" + }, + "view": { + "selectable": { + "card": "Cartão", + "items": "Items", + "no_items": "Nenhum item para mostrar", + "table": "Tabela" + } + } + }, + "label": { + "create_modal": { + "title": "Criar etiqueta" + } + }, + "location": { + "create_modal": { + "title": "Criar Localização" + } + } + }, + "global": { + "build": "Build: { build }", + "confirm": "Confirmar", + "create": "Criar", + "create_and_add": "Criar e adicionar outro", + "created": "Criado", + "email": "Email", + "follow_dev": "Siga o programador", + "github": "Código Fonte no Github", + "items": "Items", + "join_discord": "Juntar-se ao Discord", + "labels": "Marcadores", + "locations": "Localizações", + "name": "Nome", + "password": "Senha", + "read_docs": "Ler os Documentos", + "search": "Pesquisar", + "sign_out": "Terminar sessão", + "submit": "Enviar", + "version": "Versão: { version }", + "welcome": "Bem-vindo, {username}" + }, + "index": { + "disabled_registration": "Registo Desativado", + "dont_join_group": "Não quer juntar-se a um grupo?", + "joining_group": "Está a juntar-se a um grupo existente!", + "login": "Iniciar sessão", + "register": "Registar", + "remember_me": "Lembrar-me", + "set_email": "Qual é o seu email?", + "set_name": "Como se chama?", + "set_password": "Defina a sua senha", + "tagline": "Acompanhe, organize e faça a gestão das suas coisas." + }, + "labels": { + "no_results": "Nenhuma etiqueta encontrada" + }, + "locations": { + "no_results": "Nenhuma localização encontrada" + }, + "items": { + "add": "Adicionar", + "created_at": "Criado em", + "custom_fields": "Campos personalizados", + "field_selector": "Selector de Campos", + "field_value": "Valor do Campo", + "first": "Primeiro", + "include_archive": "Incluir Items Arquivados", + "last": "Último", + "negate_labels": "Negar etiquetas selecionadas", + "next_page": "Página seguinte", + "no_results": "Nenhum item encontrado", + "options": "Opções", + "order_by": "Ordenar por", + "pages": "Página { page } de { totalPages }", + "prev_page": "Página Anterior", + "query_id": "A consultar o número de identificação do ativo: { id }", + "reset_search": "Fazer Reset à Pesquisa", + "results": "{ total } Resultados", + "tip_1": "Os filtros de localização e etiqueta usam a operação 'OU'. Se forem selecionados vários, apenas\n um será utilizado para a pesquisa.", + "tip_2": "As pesquisas prefixadas com '#' ' consultarão um ID de ativo (exemplo '#000-001')", + "tip_3": "Os filtros dos campos usal a operação 'OU'. Se mais do que um for seleccionado apenas um será necessário\npara fazer match.", + "tips": "Dicas", + "tips_sub": "Dicas de pesquisa", + "updated_at": "Atualizado em" + }, + "languages": { + "ca": "Catalão", + "de": "Alemão", + "en": "Inglês", + "es": "Espanhol", + "fr": "Francês", + "hu": "Húngaro", + "it": "Italiano", + "nl": "Holandês", + "pl": "Polaco", + "pt-BR": "Português do Brasil", + "ru": "Russo", + "sl": "Esloveno", + "sv": "Sueco", + "tr": "Turco", + "zh-CN": "Chinês (Simplificado)", + "zh-HK": "Chinês (Hong Kong)", + "zh-MO": "Chinês (Macau)", + "zh-TW": "Chinês (Tradicional)" + }, + "profile": { + "active": "Ativo", + "change_password": "Alterar Senha", + "currency_format": "Moeda", + "current_password": "Senha Atual", + "delete_account": "Eliminar Conta", + "delete_account_sub": "Eliminar a sua conta e todos os dados associados. Esta ação não pode ser revertida.", + "display_header": "{ currentValue, select, true {Ocultar cabeçalho} false {Mostrar cabeçalho} other {Não atingido}}", + "enabled": "Ativado", + "gen_invite": "Gerar link de convite", + "group_settings": "Definições de Grupo", + "group_settings_sub": "Definições de Grupo Partilhadas. Pode ter de atualizar a página para algumas definições serem aplicadas.", + "inactive": "Inativo", + "language": "Idioma", + "new_password": "Nova Senha", + "notifier_modal": "{ type, select, true {Editar} false {Criar} other {Outro}} Notificador", + "notifiers": "Notificadores", + "notifiers_sub": "Receba notificações para os próximos lembretes de manutenção", + "no_notifiers": "Nenhum notificador configurado", + "test": "Testar", + "theme_settings": "Definições do tema", + "theme_settings_sub": "As configurações do tema são guardadas no armazenamento local do seu navegador. Pode alterar o tema em qualquer altura.\nSe encontrar algum problema com a alteração do tema, tente refrescar o browser.", + "update_group": "Atualizar Grupo", + "update_language": "Atualizar Idioma", + "url": "URL", + "user_profile": "Perfil de Utilizador", + "user_profile_sub": "Convide utilizadores e faça a gestão da sua conta." + }, + "tools": { + "actions": "Ações de Inventário", + "actions_set": { + "ensure_ids": "Garantir IDs de Ativos", + "ensure_ids_button": "Garantir IDs de Ativos", + "ensure_ids_sub": "Garante que todos os items no inventário tenham um campo asset_id válido. Para tal, procuramos o valor mais alto do asset_id na base de dados e aplicamos o próximo valor a cada item que não tem um asset_id definido, ordenando pelo campo created_at.", + "ensure_import_refs": "Garantir Refs de Importação", + "ensure_import_refs_button": "Garantir Refs de Importação", + "ensure_import_refs_sub": "Garante que todos os itens do seu inventário tenham um campo import_ref válido", + "set_primary_photo": "Definir foto principal", + "set_primary_photo_button": "Definir foto principal", + "set_primary_photo_sub": "Na versão v0.10.0 do Homebox, o campo de imagem principal foi adicionado aos anexos do tipo foto. Esta acção vai definir a imagem principal para a primeira imagem na lista de anexos na base de dados, se ainda não estiver definido. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'GitHub PR #576'</a>'", + "zero_datetimes": "Zero Item Data e Hora", + "zero_datetimes_button": "Zero Data Horas do Item" + }, + "actions_sub": "Aplicar Ações ao seu inventário em massa. Estas acções são irreversíveis. '<b>'Cuidado.'</b>'", + "import_export": "Importar/Exportar", + "import_export_set": { + "export": "Exportar Inventário", + "export_button": "Exportar Inventário", + "export_sub": "Exporta o formato CSV padrão para o Homebox. Isto vai exportar todos os items do inventário.", + "import": "Importar inventário", + "import_button": "Importar inventário", + "import_sub": "Importa o formato standard do CSV para o Homebox. Sem uma coluna '<code>'HB.import_ref'</code>' , isto '<b>'não '</b>' vai escrever por cima de items existentes no inventário, apenas adiciona novos. As linhas com uma coluna '<code>'HB.import_ref'</code>' vão ser fundidas com os items que tenham o mesmo import_ref, se existirem." + }, + "import_export_sub": "Importe e exporte o seu inventário de e para um ficheiro CSV. Isto é útil para migrar o inventário para uma nova instância do Homebox.", + "reports": "Relatórios", + "reports_set": { + "asset_labels": "Etiquetas de ID do Ativo", + "asset_labels_button": "Gerador de Rótulos", + "asset_labels_sub": "Gera um PDF imprimível de etiquetas para um um conjunto de Activos. Estas não são específicas do seu inventário por isso pode imprimi-las com antecedência e aplicar as mesmas ao inventário quando o receber.", + "bill_of_materials": "Lista de materiais", + "bill_of_materials_button": "Gerar BOM", + "bill_of_materials_sub": "Gera um ficheiro CSV (Valores Separados por Vírgulas) que pode ser importado para uma folha de cálculo. Isto é um resumo do seu inventário com a informação do item e do preço." + }, + "reports_sub": "Gere relatórios diferentes para o seu inventário." + } +} diff --git a/frontend/locales/ru.json b/frontend/locales/ru.json index 756cc2964..eb6eb71d2 100644 --- a/frontend/locales/ru.json +++ b/frontend/locales/ru.json @@ -2,9 +2,9 @@ "components": { "app": { "import_dialog": { - "title": "Импорт CSV файла", "change_warning": "Изменено поведение для импортов с существующими import_ref. Если в CSV-файле присутствует import_ref, \nто элемент будет обновлен значениями из CSV-файла.", "description": "Импортируйте CSV-файл, содержащий ваши предметы, ярлыки и местоположения. Для получения информации о требуемом формате \nсм. документацию.", + "title": "Импорт CSV файла", "upload": "Загрузить" } }, @@ -18,41 +18,41 @@ }, "item": { "create_modal": { - "title": "Создать элемент", - "photo_button": "Фото 📷" + "photo_button": "Фото 📷", + "title": "Создать элемент" }, "view": { "selectable": { + "card": "Карточка", "items": "Элементы", "no_items": "Нет элементов для отображения", - "table": "Таблица", - "card": "Карта" + "table": "Таблица" } } }, - "location": { + "label": { "create_modal": { - "title": "Создать локацию" + "title": "Создать ярлык" } }, - "label": { + "location": { "create_modal": { - "title": "Создать ярлык" + "title": "Создать локацию" } } }, "global": { - "email": "Email", - "items": "Элементы", "build": "Сборка: { build }", "confirm": "Подтвердить", "create": "Создать", "create_and_add": "Создать и добавить еще", "created": "Создано", + "email": "Email", "follow_dev": "Следить за разработчиком", "github": "Проект Github", - "labels": "Ярлыки", + "items": "Элементы", "join_discord": "Присоединяйтесь к Discord", + "labels": "Ярлыки", "locations": "Локации", "name": "Имя", "password": "Пароль", @@ -64,65 +64,100 @@ "welcome": "Добро пожаловать, { username }" }, "index": { + "disabled_registration": "Регистрация отключена", + "dont_join_group": "Не хотите ли вступить в группу?", + "joining_group": "Вы присоединяетесь к уже существующей группе!", "login": "Войти", "register": "Зарегистрироваться", + "remember_me": "Запомнить меня", "set_email": "Какой у вас адрес электронной почты?", "set_name": "Как вас зовут?", "set_password": "Установите пароль", - "tagline": "Отслеживайте, упорядочивайте и управляйте своими вещами.", - "disabled_registration": "Регистрация отключена", - "dont_join_group": "Не хотите ли вступить в группу?", - "remember_me": "Запомнить меня", - "joining_group": "Вы присоединяетесь к уже существующей группе!" + "tagline": "Отслеживайте, упорядочивайте и управляйте своими вещами." }, "items": { "add": "Добавить", "created_at": "Создано в", "custom_fields": "Настраиваемые поля", - "first": "Первый", - "pages": "Страница {page} из {totalPages}", - "prev_page": "Предыдущая страница", - "reset_search": "Сбросить Поиск", "field_selector": "Поле выбора", "field_value": "Значение поля", + "first": "Первый", + "include_archive": "Включить архивированные элементы", "last": "Последний", "negate_labels": "Снять выбранные ярлыки", "next_page": "Следующая страница", "no_results": "Элементы не найдены", "options": "Параметры", + "order_by": "Сортировка по", + "pages": "Страница {page} из {totalPages}", + "prev_page": "Предыдущая страница", + "query_id": "Запрос идентификационного номера актива: { id }", + "reset_search": "Сбросить Поиск", "results": "{ total } Результатов", + "tip_1": "При фильтрации по локации и по ярлыкам используется логический оператор «ИЛИ». Если выбрано несколько фильтров, то для срабатывания\n требуется лишь одно совпадение.", + "tip_2": "Поисковые запросы с префиксом \"#\" должны включать в себя ID актива (прим. '#000-001')", + "tip_3": "Фильтры по полю используют операцию «ИЛИ». Если выбрано несколько фильтров, для совпадения\n требуется только один.", "tips": "Подсказки", "tips_sub": "Поисковые подсказки", - "updated_at": "Обновлено в", - "tip_3": "Фильтры по полю используют операцию «ИЛИ». Если выбрано несколько фильтров, для совпадения\n требуется только один.", - "tip_2": "Поисковые запросы с префиксом \"#\" должны включать в себя ID актива (прим. '#000-001')", - "include_archive": "Включить архивированные элементы", - "order_by": "Сортировка по", - "query_id": "Запрос идентификационного номера актива: { id }", - "tip_1": "При фильтрации по локации и по ярлыкам используется логический оператор «ИЛИ». Если выбрано несколько фильтров, то для срабатывания\n требуется лишь одно совпадение." + "updated_at": "Обновлено в" }, "profile": { - "new_password": "Новый пароль", - "update_group": "Обновить группу", "active": "Активный", "change_password": "Изменить пароль", "currency_format": "Формат валюты", "current_password": "Текущий пароль", "delete_account": "Удалить аккаунт", + "delete_account_sub": "Удалить свой аккаунт и все связанные с ним данные. Это действие невозможно отменить.", + "display_header": "{ currentValue, select, true {Hide Header} false {Show Header} other {Not Hit}}", + "enabled": "Активен", + "gen_invite": "Сгенерировать ссылку-приглашение", "group_settings": "Настройки группы", + "group_settings_sub": "Настройки общей группы. Для применения изменений возможно потребуется перезагрузить страницу.", "inactive": "Неактивный", + "language": "Язык", + "new_password": "Новый пароль", "notifier_modal": "{ type, select, true {Edit} false {Create} other {Other}} Уведомитель", "notifiers": "Уведомители", "notifiers_sub": "Получить уведомление о предстоящем обслуживании", "test": "Тест", "theme_settings": "Настройки темы", + "theme_settings_sub": "Настройки темы хранятся в локальном хранилище браузера. Вы можете изменить тему в любое время. Если у вас\n не удается установить тему, попробуйте перезапустить браузер.", + "update_group": "Обновить группу", + "update_language": "Обновить язык", "url": "URL", "user_profile": "Профиль пользователя", - "user_profile_sub": "Приглашайте пользователей и управляйте своим аккаунтом.", - "enabled": "Активен", - "theme_settings_sub": "Настройки темы хранятся в локальном хранилище браузера. Вы можете изменить тему в любое время. Если у вас\n не удается установить тему, попробуйте перезапустить браузер.", - "delete_account_sub": "Удалить свой аккаунт и все связанные с ним данные. Это действие невозможно отменить.", - "gen_invite": "Сгенерировать ссылку-приглашение", - "group_settings_sub": "Настройки общей группы. Для применения изменений возможно потребуется перезагрузить страницу." + "user_profile_sub": "Приглашайте пользователей и управляйте своим аккаунтом." + }, + "tools": { + "actions": "Действия с инвентарем", + "actions_set": { + "ensure_ids": "Проверить ID активов", + "ensure_ids_button": "Проверить ID активов", + "ensure_ids_sub": "Гарантирует, что все вещи в вашем инвентаре будут иметь корректное поле asset_id. Это производится при помощи поиска самого большого текущего значения поля asset_id в базе данных и применяет ко всем вещам новые значения, где они не были установлены в поле asset_id. Это производится в порядке сортировки по полю created_at.", + "ensure_import_refs": "Проверка ссылок импорта", + "ensure_import_refs_button": "Обеспечение импорта ссылок", + "ensure_import_refs_sub": "Гарантирует что все вещи в Вашем инвентаре имеют корректное поле import_ref. Это производится при помощи генерации строки из 8 случайных символов для каждой вещи, где не поле import_ref не заполнено." + }, + "actions_sub": "Применить действия ко всему Вашему инвентарю. Это необратимое действие. '<b>'Будьте осторожны.'</b>'", + "import_export": "Импорт/Экспорт", + "import_export_set": { + "export": "Экспортировать инвентарь", + "export_button": "Экспортировать инвентарь", + "export_sub": "Экспортирует файл в стандартном CSV формате для Homebox. Это экспортирует все Ваши вещи из Вашего инвентаря.", + "import": "Импорт из инвентаря", + "import_button": "Импортировать инвентарь", + "import_sub": "Импортирует стандартный CSV формат в Homebox. Без колонки '<code>'HB.import_ref'</code>' , это '<b>'не'</b>' перезапишет какую либо существующую вещь в вашем инвентаре, только добавит новые вещи. Строки с колонкой '<code>'HB.import_ref'</code>' будут объеденены с существующими вещами с теми же import_ref, если такие существуют." + }, + "import_export_sub": "Импортировать или экспортировать ваш инвентарь в или из CSV файла. Это полезно при миграции вашего инвентаря в новый экземпляр Homebox.", + "reports": "Отчеты", + "reports_set": { + "asset_labels": "Этикетки с ID активов", + "asset_labels_button": "Генератор этикеток", + "asset_labels_sub": "Генерирует PDF с этикетками для диапазона ID активов. Отсутствует привязка к Вашему инвентарю, так что Вы можете напечатать этикетки заранее и применить их к вашему инвентарю позднее.", + "bill_of_materials": "Ведомость материалов", + "bill_of_materials_button": "Сгенерировать BOM", + "bill_of_materials_sub": "Генерирует файл CSV (значения, разделенные запятой), который может быть импортировать в приложении электронных таблиц. Это сводка вашего инвентаря с базовой информацией о вещах и их цене." + }, + "reports_sub": "Создавайте различные отчеты для вашего инвентаря." } } diff --git a/frontend/locales/sl.json b/frontend/locales/sl.json index 704023881..42ac73de0 100644 --- a/frontend/locales/sl.json +++ b/frontend/locales/sl.json @@ -1,26 +1,4 @@ { - "global": { - "follow_dev": "Sledi razvijjalcu", - "build": "Gradnja: [ build ]", - "confirm": "Potrdi", - "create": "Ustvari", - "create_and_add": "Ustvari in dodaj še enega", - "created": "Ustvarjeno", - "email": "E-pošta", - "github": "GitHub projekt", - "items": "Predmeti", - "join_discord": "Pridruži se na Discord", - "labels": "Oznake", - "locations": "Lokacije", - "name": "Naziv", - "password": "Geslo", - "read_docs": "Preberite dokumentacijo", - "search": "Iskanje", - "sign_out": "Odjava", - "submit": "Pošlji", - "version": "Verzija: { version }", - "welcome": "Dobrodošel, { username }" - }, "components": { "app": { "import_dialog": { @@ -40,8 +18,8 @@ }, "item": { "create_modal": { - "title": "Ustvari predmet", - "photo_button": "Fotografija 📷" + "photo_button": "Fotografija 📷", + "title": "Ustvari predmet" }, "view": { "selectable": { @@ -60,9 +38,34 @@ "location": { "create_modal": { "title": "Ustvari lokacijo" + }, + "tree": { + "no_locations": "Ni razpoložljivih lokacij. Dodaj novo lokacije preko \n `<`span class=\"link-primary\"`>`Ustvari`<`/span`>` gumba v navigacijski vrstici." } } }, + "global": { + "build": "Gradnja: [ build ]", + "confirm": "Potrdi", + "create": "Ustvari", + "create_and_add": "Ustvari in dodaj še enega", + "created": "Ustvarjeno", + "email": "E-pošta", + "follow_dev": "Sledi razvijjalcu", + "github": "GitHub projekt", + "items": "Predmeti", + "join_discord": "Pridruži se na Discord", + "labels": "Oznake", + "locations": "Lokacije", + "name": "Naziv", + "password": "Geslo", + "read_docs": "Preberite dokumentacijo", + "search": "Iskanje", + "sign_out": "Odjava", + "submit": "Pošlji", + "version": "Verzija: { version }", + "welcome": "Dobrodošel, { username }" + }, "index": { "disabled_registration": "Registracija je onemogočena", "dont_join_group": "Se ne želite pridružiti skupini?", @@ -71,58 +74,169 @@ "register": "Registriraj se", "remember_me": "Zapomni si me", "set_email": "Kakšen je vaš e-poštni naslov?", + "set_name": "Kako vam je ime?", "set_password": "Nastavite geslo", - "tagline": "Sledite, organizirajte in upravljajte svoje stvari.", - "set_name": "Kako vam je ime?" + "tagline": "Sledite, organizirajte in upravljajte svoje stvari." }, "items": { + "add": "Dodaj", "created_at": "Ustvarjeno ob", + "custom_fields": "Polje po meri", + "field_selector": "Izbirnik polj", + "field_value": "Vrednost polja", + "first": "Prvi", "include_archive": "Vključi arhivirane predmete", "last": "Zadnji", "negate_labels": "Negiraj izbrane oznake", + "next_page": "Naslednja stran", "no_results": "Ni najdenih predmetov", "options": "Možnosti", + "order_by": "Razvrsti po", "pages": "Stran { page } od { totalPages }", - "tip_2": "Iskanja s predpono '#' bodo iskala ID sredstva (primer '#000-001')", - "tip_3": "Filtri polj uporabljajo operacijo 'ALI'. Če je izbranih več kot eno, bo za ujemanje dovolj samo\n eno.", - "tips": "Nasveti", - "updated_at": "Posodobljeno ob", - "custom_fields": "Polje po meri", - "results": "Rezultatov: { total }", - "tip_1": "Filtri lokacij in oznak uporabljajo operacijo 'ALI'. Če je izbranih več kot ena, bo izbrana samo ena\n potrebna za ujemanje.", - "add": "Dodaj", - "field_selector": "Izbirnik polj", - "field_value": "Vrednost polja", - "first": "Prvi", - "next_page": "Naslednja stran", "prev_page": "Prejšnja stran", "query_id": "Poizvedovanje po identifikacijski številki sredstva: { id }", "reset_search": "Ponastavi iskanje", + "results": "Rezultatov: { total }", + "tip_1": "Filtri lokacij in oznak uporabljajo operacijo 'ALI'. Če je izbranih več kot ena, bo izbrana samo ena\n potrebna za ujemanje.", + "tip_2": "Iskanja s predpono '#' bodo iskala ID sredstva (primer '#000-001')", + "tip_3": "Filtri polj uporabljajo operacijo 'ALI'. Če je izbranih več kot eno, bo za ujemanje dovolj samo\n eno.", + "tips": "Nasveti", "tips_sub": "Nasveti za iskanje", - "order_by": "Razvrsti po" + "updated_at": "Posodobljeno ob" + }, + "labels": { + "no_results": "Ni najdenih oznak" + }, + "languages": { + "ca": "Katalonščina", + "de": "Nemščina", + "en": "Angleščina", + "es": "Španščina", + "fr": "Francoščina", + "hu": "Madžarščina", + "it": "Italijanščina", + "nl": "Nizozemščina", + "pl": "Polščina", + "pt-BR": "Portugalščina (brazilska)", + "ru": "Ruščina", + "sl": "Slovenščina", + "sv": "Švedščina", + "tr": "Turkščina", + "zh-CN": "Kitajščina (splošna)", + "zh-HK": "Kitajščina (Hong Kong)", + "zh-MO": "Kitajščina (Macau)", + "zh-TW": "Kitajsščina (tradicionalna)" + }, + "locations": { + "no_results": "Ni najdenih lokacij" + }, + "maintenance": { + "filter": { + "both": "Oboje", + "completed": "Zaključeno", + "scheduled": "Načrtovano" + }, + "list": { + "complete": "Končano", + "create_first": "Ustvarite prvi vnos", + "delete": "Izbriši", + "duplicate": "Podvoji", + "edit": "Uredi", + "new": "Nov" + }, + "modal": { + "completed_date": "Datum zaključka", + "cost": "Stroški", + "delete_confirmation": "Ali ste prepričani, da želite izbrisati ta vnos?", + "edit_action": "Posodobi", + "edit_title": "Uredi vnos", + "entry_name": "Ime vnosa", + "new_action": "Ustvari", + "new_title": "Nov vnos", + "notes": "Opombe", + "scheduled_date": "Načrtovani datum" + }, + "monthly_average": "Mesečno povprečje", + "toast": { + "failed_to_create": "Vnosa ni bilo mogoče ustvariti", + "failed_to_delete": "Vnosa ni bilo mogoče izbrisati", + "failed_to_update": "Vnosa ni bilo mogoče posodobiti" + }, + "total_cost": "Skupni znesek", + "total_entries": "Vseh predmetov" + }, + "menu": { + "home": "Domov", + "locations": "Lokacije", + "maintenance": "Vzdrževanje", + "profile": "Profil", + "search": "Iskanje", + "tools": "Orodja" }, "profile": { - "gen_invite": "Ustvari povezavo povabila", - "group_settings_sub": "Nastavitve skupine v skupni rabi. Morda boste morali osvežiti brskalnik, da bodo nekatere nastavitve veljale.", - "notifiers": "Obveščevalci", - "notifier_modal": "{ type, select, true {Edit} false {Create} other {Other}} Obveščevalec", - "notifiers_sub": "Prejemajte obvestila za prihajajoče opomnike o vzdrževanju", - "theme_settings_sub": "Nastavitve teme so shranjene v lokalni shrambi vašega brskalnika. Temo lahko kadar koli spremenite. Če\n imate težave z nastavitvijo teme, poskusite osvežiti brskalnik.", - "update_group": "Posodobi skupino", - "url": "URL", - "delete_account_sub": "Izbrišite svoj račun in vse z njim povezane podatke. Tega ni mogoče razveljaviti.", "active": "Aktivno", "change_password": "Sprememba gesla", "currency_format": "Oblika valute", "current_password": "Trenutno geslo", "delete_account": "Izbriši račun", + "delete_account_sub": "Izbrišite svoj račun in vse z njim povezane podatke. Tega ni mogoče razveljaviti.", + "display_header": "{ currentValue, select, true {Skrij glavo} false {Pokaži glavo} other {Brez zadetkov}}", "enabled": "Omogočeno", + "gen_invite": "Ustvari povezavo povabila", "group_settings": "Nastavitve skupine", + "group_settings_sub": "Nastavitve skupine v skupni rabi. Morda boste morali osvežiti brskalnik, da bodo nekatere nastavitve veljale.", "inactive": "Neaktivno", + "language": "Jezik", "new_password": "Novo geslo", + "no_notifiers": "Ni nastavljenih sporočanj", + "notifier_modal": "{ type, select, true {Edit} false {Create} other {Other}} Obveščevalec", + "notifiers": "Obveščevalci", + "notifiers_sub": "Prejemajte obvestila za prihajajoče opomnike o vzdrževanju", "test": "Preizkus", "theme_settings": "Nastavitve teme", + "theme_settings_sub": "Nastavitve teme so shranjene v lokalni shrambi vašega brskalnika. Temo lahko kadar koli spremenite. Če\n imate težave z nastavitvijo teme, poskusite osvežiti brskalnik.", + "update_group": "Posodobi skupino", + "update_language": "Posodobi jezik", + "url": "URL", "user_profile": "Profil uporabnika", "user_profile_sub": "Povabite uporabnike in upravljajte svoj račun." + }, + "tools": { + "actions": "Dejanja inventarja", + "actions_set": { + "ensure_ids": "Zagotovi ID-je sredstev", + "ensure_ids_button": "Zagotovi ID-je sredstev", + "ensure_ids_sub": "Zagotavlja, da imajo vsi predmeti v vašem inventarju veljavno polje asset_id. To storite tako, da poiščete najvišje trenutno polje asset_id v bazi podatkov in uporabite naslednjo vrednost za vsak element, ki ima nenastavljeno polje asset_id. To se naredi po vrstnem redu polja created_at.", + "ensure_import_refs": "Zagotovi uvoz referenc", + "ensure_import_refs_button": "Zagotovi uvoz referenc", + "ensure_import_refs_sub": "Zagotavlja, da imajo vsi predmeti v vašem inventarju veljavno polje import_ref. To se naredi tako, da se naključno ustvari 8-mestni niz za vsak element, ki ima nenastavljeno polje import_ref.", + "set_primary_photo": "Nastavi primarno fotografijo", + "set_primary_photo_button": "Nastavi primarno fotografijo", + "set_primary_photo_sub": "V različici v0.10.0 Homeboxa je bilo primarno slikovno polje dodano prilogam tipa fotografija. To dejanje bo polje primarne slike nastavilo na prvo sliko v tabeli prilog v bazi podatkov, če še ni nastavljeno. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'Glej GitHub PR #576'</a>'", + "zero_datetimes": "Datumski časi ničelnega elementa", + "zero_datetimes_button": "Datumski časi ničelnega elementa", + "zero_datetimes_sub": "Ponastavi časovno vrednost za vsa polja datuma in časa v vašem inventarju na začetek datuma. To je namenjeno odpravljanju napake, ki je bila predstavljena zgodaj v razvoju spletnega mesta in je povzročila, da je bila časovna vrednost shranjena s časom, kar je povzročilo težave z datumskimi polji, ki prikazujejo točne vrednosti. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'Glejte številko 236 Githuba za več podrobnosti.'</a> '" + }, + "actions_sub": "Uporabite dejanja v večjem obsegu za svoj inventar. To so nepovratna dejanja. '<b>'Bodite previdni.'</b>'", + "import_export": "Uvozi/Izvozi", + "import_export_set": { + "export": "Izvozi inventar", + "export_button": "Izvozi Inventar", + "export_sub": "Izvozi standardni format CSV za Homebox. S tem boste izvozili vse predmete v vašem inventarju.", + "import": "Uvozi inventar", + "import_button": "Uvozi inventar", + "import_sub": "Uvozi standardni format CSV za Homebox. Brez stolpca '<code>'HB.import_ref'</code>' to '<b>'ne'</b>' bo prepisalo vse obstoječe elemente v vašem inventarju, samo dodaja nove elemente. Vrstice s stolpcem '<code>'HB.import_ref'</code>' so združene v obstoječe elemente z istim import_ref, če le ta obstaja." + }, + "import_export_sub": "Uvozite in izvozite svoj inventar v in iz datoteke CSV. To je uporabno za selitev vašega inventarja v novo namestitev Homeboxa.", + "reports": "Poročila", + "reports_set": { + "asset_labels": "Oznake ID-jev sredstev", + "asset_labels_button": "Generator etiket", + "asset_labels_sub": "Ustvari natisljiv PDF z nalepkami za vrsto ID-jev sredstev. Te niso specifične za vaš inventar, zato lahko nalepke natisnete vnaprej in jih uporabite v svojem inventarju, ko jih prejmete.", + "bill_of_materials": "Kosovnica", + "bill_of_materials_button": "Ustvari kosovnico", + "bill_of_materials_sub": "Ustvari datoteko CSV (vrednosti, ločene z vejico), ki jo je mogoče uvoziti v program za preglednice. To je povzetek vaše zaloge z osnovnimi informacijami o izdelkih in cenah." + }, + "reports_sub": "Ustvari različna poročila za svoj inventar." } } diff --git a/frontend/locales/zh-CN.json b/frontend/locales/zh-CN.json index 4e515189f..d8b6c643f 100644 --- a/frontend/locales/zh-CN.json +++ b/frontend/locales/zh-CN.json @@ -2,16 +2,24 @@ "components": { "app": { "import_dialog": { - "title": "导入 CSV 文件", - "upload": "上传", + "change_warning": "导入行为会导致现有的 import_refs 的字段被覆盖。\n如果 CSV 文件中存在 import_ref,则将使用 CSV 文件中的值更新该项。", "description": "导入包含物品、标签和位置的CSV文件。更多有关信息,\n请参阅文档查看所需格式。", - "change_warning": "导入行为会导致现有的 import_refs 的字段被覆盖。\n如果 CSV 文件中存在 import_ref,则将使用 CSV 文件中的值更新该项。" + "title": "导入 CSV 文件", + "upload": "上传" + } + }, + "global": { + "page_qr_code": { + "page_url": "页面URL" + }, + "password_score": { + "password_strength": "密码强度" } }, "item": { "create_modal": { - "title": "创建物品", - "photo_button": "照片 📷" + "photo_button": "照片 📷", + "title": "创建物品" }, "view": { "selectable": { @@ -22,46 +30,41 @@ } } }, - "location": { + "label": { "create_modal": { - "title": "创建位置" - } - }, - "global": { - "page_qr_code": { - "page_url": "页面URL" - }, - "password_score": { - "password_strength": "密码强度" + "title": "创建标签" } }, - "label": { + "location": { "create_modal": { - "title": "创建标签" + "title": "创建位置" + }, + "tree": { + "no_locations": "没有可用的位置。请添加新的位置\n `<`span class=\"link-primary\"`>`创建`<`/span`>` 按钮在导航栏上" } } }, "global": { - "create_and_add": "保存并继续创建", - "email": "邮箱", - "items": "物品", "build": "编译:{build}", "confirm": "确认", "create": "创建", + "create_and_add": "保存并继续创建", "created": "已创建", + "email": "邮箱", "follow_dev": "关注开发者", "github": "Github项目", + "items": "物品", "join_discord": "加入Discord讨论", "labels": "标签", - "sign_out": "注销", - "version": "版本:{version}", - "welcome": "欢迎,{username}", + "locations": "位置", "name": "名称", "password": "密码", "read_docs": "查阅文档", "search": "搜索", + "sign_out": "注销", "submit": "提交", - "locations": "位置" + "version": "版本:{version}", + "welcome": "欢迎,{username}" }, "index": { "disabled_registration": "已禁用注册", @@ -69,29 +72,29 @@ "joining_group": "您正在加入现有群组!", "login": "登录", "register": "注册", - "set_name": "你的名称叫什么?", "remember_me": "记住我", "set_email": "您的电子邮箱是什么?", - "tagline": "跟踪、整理和管理您的物品。", - "set_password": "设置密码" + "set_name": "你的名称叫什么?", + "set_password": "设置密码", + "tagline": "跟踪、整理和管理您的物品。" }, "items": { + "add": "添加", + "created_at": "创建于", + "custom_fields": "自定义字段", + "field_selector": "字段选择", + "field_value": "字段值", + "first": "第一页", + "include_archive": "包括已存档的项目", "last": "最后一页", "negate_labels": "取消选中的标签", "next_page": "下一页", "no_results": "没有可显示的物品", "options": "选项", - "prev_page": "上一页", - "add": "添加", - "field_selector": "字段选择", - "first": "第一页", "order_by": "排序方式", "pages": "第{page}页,共{totalPages}页", + "prev_page": "上一页", "query_id": "查询资产ID: {id}", - "created_at": "创建于", - "custom_fields": "自定义字段", - "field_value": "字段值", - "include_archive": "包括已存档的项目", "reset_search": "重置搜索", "results": "{ total } 条结果", "tip_1": "位置和标签过滤器使用“或”操作。如果选择了多个位置或标签,\n则只需要任意一个匹配上即可。", @@ -101,30 +104,139 @@ "tips_sub": "搜索提示", "updated_at": "更新于" }, + "labels": { + "no_results": "未找到标签。" + }, + "languages": { + "ca": "加泰罗尼亚语", + "de": "德语", + "en": "英语", + "es": "西班牙语", + "fr": "法国", + "hu": "匈牙利语", + "it": "意大利语", + "nl": "荷兰语", + "pl": "波兰语", + "pt-BR": "葡萄牙语(巴西)", + "ru": "俄语", + "sl": "斯洛文尼亚语", + "sv": "瑞典语", + "tr": "土耳其语", + "zh-CN": "中文(简体)", + "zh-HK": "中文(香港)", + "zh-MO": "中文(澳门)", + "zh-TW": "中文(繁体)" + }, + "locations": { + "no_results": "找不到位置" + }, + "maintenance": { + "filter": { + "both": "与", + "completed": "已完成", + "scheduled": "已预定" + }, + "list": { + "complete": "标记已完成", + "create_first": "创建您的第一个项目", + "delete": "刪除", + "duplicate": "复制", + "edit": "修改", + "new": "创建" + }, + "modal": { + "completed_date": "完成日期", + "cost": "成本", + "delete_confirmation": "您确定要删除该项内容吗?", + "edit_action": "更新", + "edit_title": "编辑项目", + "entry_name": "项目名称", + "new_action": "创建", + "new_title": "新的项目", + "notes": "笔记", + "scheduled_date": "预定日期" + }, + "monthly_average": "统计看板", + "toast": { + "failed_to_create": "创建项目失败", + "failed_to_delete": "删除项目失败", + "failed_to_update": "更新项目失败" + }, + "total_cost": "总成本", + "total_entries": "总项目" + }, + "menu": { + "home": "主页", + "locations": "位置", + "maintenance": "维护", + "profile": "用户", + "search": "搜索", + "tools": "工具" + }, "profile": { - "group_settings_sub": "共享组设置。您可能需要刷新浏览器来让某些设置生效。", - "notifier_modal": "{ type, select, true {编辑} false {创建} other {Other}} 通知器", "active": "活跃", - "delete_account_sub": "删除您的帐户及其所有相关数据。这是无法撤消的。", - "inactive": "非活跃", - "theme_settings_sub": "主题设置存储在浏览器的本地存储中。您可以随时更改主题。\n如果您在设置主题时遇到问题,请尝试刷新浏览器。", - "update_group": "更新组", "change_password": "更改密码", "currency_format": "货币格式", "current_password": "原密码", "delete_account": "删除帐户", + "delete_account_sub": "删除您的帐户及其所有相关数据。这是无法撤消的。", + "display_header": "{currentValue, select, true {隐藏页眉} false {显示页眉} other {未选中}}", "enabled": "已启用", "gen_invite": "生成邀请链接", "group_settings": "组设置", + "group_settings_sub": "共享组设置。您可能需要刷新浏览器来让某些设置生效。", + "inactive": "非活跃", + "language": "语言", "new_password": "新密码", + "no_notifiers": "未配置通知程序", + "notifier_modal": "{ type, select, true {编辑} false {创建} other {Other}} 通知器", "notifiers": "通知器", "notifiers_sub": "获取即将到来的维护提醒通知", "test": "测试", "theme_settings": "主题设置", + "theme_settings_sub": "主题设置存储在浏览器的本地存储中。您可以随时更改主题。\n如果您在设置主题时遇到问题,请尝试刷新浏览器。", + "update_group": "更新组", + "update_language": "更新语言", "url": "网址", "user_profile": "用户资料", - "user_profile_sub": "邀请用户共同管理您的资产。", - "update_language": "更新语言", - "language": "语言" + "user_profile_sub": "邀请用户共同管理您的资产。" + }, + "tools": { + "actions": "库存操作", + "actions_set": { + "ensure_ids": "确认资产ID", + "ensure_ids_button": "确认资产ID", + "ensure_ids_sub": "确保库存中的所有项目都有有效的asset_id字段。它会找到库中最大的asset_id字段,并将下一个值应用于还未设置asset_id字段的每个项目。未设置asset_id的项目将按created_at字段的顺序生成。", + "ensure_import_refs": "确认导入参考", + "ensure_import_refs_button": "确认导入参考", + "ensure_import_refs_sub": "确保库存中的所有项目都有有效的import_ref字段。这是通过为每个具有未设置的import_ref字段的项目随机生成一个8个字符的字符串来实现的。", + "set_primary_photo": "设置封面图片", + "set_primary_photo_button": "设置封面", + "set_primary_photo_sub": "设置封面在 Homebox v0.10.0 版本中,该列的类型为图片。如果没有设置封面,则会把附件中第一张图片作为封面。 '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'更多请参考 GitHub PR #576'</a>'", + "zero_datetimes": "清空时间项", + "zero_datetimes_button": "清空时间项", + "zero_datetimes_sub": "将库存中所有日期时间字段的值重置为开始日期。这是为了修复在网站开发早期出现的一个错误,该错误导致自定义时间值保存时,日期会出现偏移的问题。 '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'详细问题请参考 Github Issue #236 '</a>'" + }, + "actions_sub": "将操作批量应用于您的库存。这些都是不可逆转的行动'<b> '谨慎操作。'</b>'", + "import_export": "导入/导出", + "import_export_set": { + "export": "导出库存", + "export_button": "导出库存", + "export_sub": "按标准CSV格式导出Homebox。这将导出库存中的所有项目。", + "import": "导入库存", + "import_button": "导入库存", + "import_sub": "Homebox只能导入标准的CSV格式文件。当不存在 '<code>'HB.import_ref'</code>' 列的时候,将 '<b>'不会'</b>' 覆盖现数据库存中的任何现有项目,只添加为新项目。如果与现有的 '<code>'HB.import_ref'</code>' 的项目一样,则会将新旧数据合并。" + }, + "import_export_sub": "按CSV格式导入和导出您的库存。在将库存迁移到Homebox的新实例时非常有用。", + "reports": "报告", + "reports_set": { + "asset_labels": "资产ID标签", + "asset_labels_button": "标签生成器", + "asset_labels_sub": "为资产ID标签生成可打印PDF。这些标签并不特定于您的库存,因此您可以提前打印标签,并在收到标签时将其应用于您的仓库。", + "bill_of_materials": "物料清单", + "bill_of_materials_button": "生成物料清单", + "bill_of_materials_sub": "生成可以导入的CSV电子表格文件(使用逗号分隔值)。这是您的库存摘要,包括基本商品和定价信息。" + }, + "reports_sub": "为您的库存生成其他的报告。" } } diff --git a/frontend/package.json b/frontend/package.json index fc50b4c49..3b8ffbe65 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -23,7 +23,7 @@ "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", "@vite-pwa/nuxt": "^0.5.0", - "eslint": "^8.57.0", + "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-tailwindcss": "^3.17.4", @@ -31,18 +31,18 @@ "h3": "^1.7.1", "intl-messageformat": "^10.5.14", "isomorphic-fetch": "^3.0.0", - "nuxt": "3.6.5", + "nuxt": "3.7.4", "prettier": "^3.3.3", - "typescript": "^5.5.4", + "typescript": "^5.6.2", "unplugin-icons": "^0.18.5", "vite-plugin-eslint": "^1.8.1", "vitest": "^1.6.0", - "vue-i18n": "^9.14.0" + "vue-i18n": "^9.14.1" }, "dependencies": { - "@headlessui/vue": "^1.7.22", + "@headlessui/vue": "^1.7.23", "@nuxtjs/tailwindcss": "^6.12.1", - "@pinia/nuxt": "^0.5.4", + "@pinia/nuxt": "^0.5.5", "@tailwindcss/aspect-ratio": "^0.4.2", "@tailwindcss/forms": "^0.5.9", "@tailwindcss/typography": "^0.5.15", @@ -53,15 +53,15 @@ "autoprefixer": "^10.4.20", "daisyui": "^2.52.0", "date-fns": "^3.6.0", - "dompurify": "^3.1.6", - "h3": "^1.12.0", + "dompurify": "^3.1.7", + "h3": "^1.13.0", "http-proxy": "^1.18.1", "lunr": "^2.3.9", "markdown-it": "^14.1.0", - "pinia": "^2.2.2", - "postcss": "^8.4.45", - "tailwindcss": "^3.4.10", + "pinia": "^2.2.4", + "postcss": "^8.4.47", + "tailwindcss": "^3.4.13", "vue": "3.4.8", - "vue-router": "^4.4.3" + "vue-router": "^4.4.5" } } diff --git a/frontend/pages/home/index.vue b/frontend/pages/home/index.vue index 2398f1946..463d221bf 100644 --- a/frontend/pages/home/index.vue +++ b/frontend/pages/home/index.vue @@ -35,9 +35,10 @@ </section> <section> - <Subtitle> Recently Added </Subtitle> + <Subtitle>Recently Added</Subtitle> - <BaseCard v-if="breakpoints.lg"> + <p v-if="itemTable.items.length === 0" class="ml-2 text-sm">{{ $t("items.no_results") }}</p> + <BaseCard v-else-if="breakpoints.lg"> <ItemViewTable :items="itemTable.items" disable-controls /> </BaseCard> <div v-else class="grid grid-cols-1 gap-4 md:grid-cols-2"> @@ -47,14 +48,16 @@ <section> <Subtitle> Storage Locations </Subtitle> - <div class="card grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3"> + <p v-if="locations.length === 0" class="ml-2 text-sm">{{ $t("locations.no_results") }}</p> + <div v-else class="card grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3"> <LocationCard v-for="location in locations" :key="location.id" :location="location" /> </div> </section> <section> <Subtitle> Labels </Subtitle> - <div class="flex flex-wrap gap-4"> + <p v-if="labels.length === 0" class="ml-2 text-sm">{{ $t("labels.no_results") }}</p> + <div v-else class="flex flex-wrap gap-4"> <LabelChip v-for="label in labels" :key="label.id" size="lg" :label="label" class="shadow-md" /> </div> </section> diff --git a/frontend/pages/index.vue b/frontend/pages/index.vue index c8b2cbca2..369fa41d5 100644 --- a/frontend/pages/index.vue +++ b/frontend/pages/index.vue @@ -180,12 +180,7 @@ <a href="https://discord.gg/aY4DCkpNA9" class="tooltip" :data-tip="$t('global.join_discord')" target="_blank"> <MdiDiscord class="size-8" /> </a> - <a - href="https://homebox.software/en/" - class="tooltip" - :data-tip="$t('global.read_docs')" - target="_blank" - > + <a href="https://homebox.software/en/" class="tooltip" :data-tip="$t('global.read_docs')" target="_blank"> <MdiFolder class="size-8" /> </a> </div> diff --git a/frontend/pages/item/[id]/index.vue b/frontend/pages/item/[id]/index.vue index e3fecc713..cc5acdaaf 100644 --- a/frontend/pages/item/[id]/index.vue +++ b/frontend/pages/item/[id]/index.vue @@ -445,7 +445,7 @@ <template> <BaseContainer v-if="item" class="pb-8"> <Title>{{ item.name }}</Title> - <dialog ref="refDialog" class="fixed z-[999] bg-transparent"> + <dialog ref="refDialog" class="fixed z-[999] overflow-visible bg-transparent"> <div ref="refDialogBody" class="relative"> <div class="absolute right-0 -mr-3 -mt-3 space-x-1 sm:-mr-4 sm:-mt-4"> <a class="btn btn-circle btn-primary btn-sm sm:btn-md" :href="dialoged.src" download> diff --git a/frontend/pages/item/[id]/index/edit.vue b/frontend/pages/item/[id]/index/edit.vue index 83aab7230..2d9c9a703 100644 --- a/frontend/pages/item/[id]/index/edit.vue +++ b/frontend/pages/item/[id]/index/edit.vue @@ -96,6 +96,8 @@ label: string; // key of ItemOut where the value is a string ref: keyof OnlyString<NoUndefinedField<ItemOut>>; + maxLength?: number; + minLength?: number; }; type NumberFormField = { @@ -131,6 +133,8 @@ type: "text", label: "Name", ref: "name", + maxLength: 255, + minLength: 1, }, { type: "number", @@ -141,26 +145,31 @@ type: "textarea", label: "Description", ref: "description", + maxLength: 1000, }, { type: "text", label: "Serial Number", ref: "serialNumber", + maxLength: 255, }, { type: "text", label: "Model Number", ref: "modelNumber", + maxLength: 255, }, { type: "text", label: "Manufacturer", ref: "manufacturer", + maxLength: 255, }, { type: "textarea", label: "Notes", ref: "notes", + maxLength: 1000, }, { type: "checkbox", @@ -184,9 +193,10 @@ type: "text", label: "Purchased From", ref: "purchaseFrom", + maxLength: 255, }, { - type: "text", + type: "number", label: "Purchase Price", ref: "purchasePrice", }, @@ -214,6 +224,7 @@ type: "textarea", label: "Warranty Notes", ref: "warrantyDetails", + maxLength: 1000, }, ]; @@ -222,9 +233,10 @@ type: "text", label: "Sold To", ref: "soldTo", + maxLength: 255, }, { - type: "text", + type: "number", label: "Sold Price", ref: "soldPrice", }, @@ -480,12 +492,22 @@ <div class="border-t border-gray-300 sm:p-0"> <div v-for="field in mainFields" :key="field.ref" class="grid grid-cols-1 sm:divide-y sm:divide-gray-300"> <div class="border-b border-gray-300 px-4 pb-4 pt-2 sm:px-6"> - <FormTextArea v-if="field.type === 'textarea'" v-model="item[field.ref]" :label="field.label" inline /> + <FormTextArea + v-if="field.type === 'textarea'" + v-model="item[field.ref]" + :label="field.label" + inline + :max-length="field.maxLength" + :min-length="field.minLength" + /> <FormTextField v-else-if="field.type === 'text'" v-model="item[field.ref]" :label="field.label" inline + type="text" + :max-length="field.maxLength" + :min-length="field.minLength" /> <FormTextField v-else-if="field.type === 'number'" @@ -522,7 +544,7 @@ <!-- <FormSelect v-model:value="field.type" label="Field Type" :items="fieldTypes" value-key="value" /> --> <FormTextField v-model="field.name" label="Name" /> <div class="col-span-3 flex items-end"> - <FormTextField v-model="field.textValue" label="Value" /> + <FormTextField v-model="field.textValue" label="Value" :max-length="500" /> <div class="tooltip" data-tip="Delete"> <button class="btn btn-square btn-sm mb-2 ml-2" @click="item.fields.splice(idx, 1)"> <MdiDelete /> @@ -604,12 +626,21 @@ class="grid grid-cols-1 sm:divide-y sm:divide-gray-300" > <div class="border-b border-gray-300 px-4 pb-4 pt-2 sm:px-6"> - <FormTextArea v-if="field.type === 'textarea'" v-model="item[field.ref]" :label="field.label" inline /> + <FormTextArea + v-if="field.type === 'textarea'" + v-model="item[field.ref]" + :label="field.label" + inline + :max-length="field.maxLength" + :min-length="field.minLength" + /> <FormTextField v-else-if="field.type === 'text'" v-model="item[field.ref]" :label="field.label" inline + :max-length="field.maxLength" + :min-length="field.minLength" /> <FormTextField v-else-if="field.type === 'number'" @@ -646,12 +677,21 @@ class="grid grid-cols-1 sm:divide-y sm:divide-gray-300" > <div class="border-b border-gray-300 px-4 pb-4 pt-2 sm:px-6"> - <FormTextArea v-if="field.type === 'textarea'" v-model="item[field.ref]" :label="field.label" inline /> + <FormTextArea + v-if="field.type === 'textarea'" + v-model="item[field.ref]" + :label="field.label" + inline + :max-length="field.maxLength" + :min-length="field.minLength" + /> <FormTextField v-else-if="field.type === 'text'" v-model="item[field.ref]" :label="field.label" inline + :max-length="field.maxLength" + :min-length="field.minLength" /> <FormTextField v-else-if="field.type === 'number'" @@ -684,12 +724,21 @@ <div class="border-t border-gray-300 sm:p-0"> <div v-for="field in soldFields" :key="field.ref" class="grid grid-cols-1 sm:divide-y sm:divide-gray-300"> <div class="border-b border-gray-300 px-4 pb-4 pt-2 sm:px-6"> - <FormTextArea v-if="field.type === 'textarea'" v-model="item[field.ref]" :label="field.label" inline /> + <FormTextArea + v-if="field.type === 'textarea'" + v-model="item[field.ref]" + :label="field.label" + inline + :max-length="field.maxLength" + :min-length="field.minLength" + /> <FormTextField v-else-if="field.type === 'text'" v-model="item[field.ref]" :label="field.label" inline + :max-length="field.maxLength" + :min-length="field.minLength" /> <FormTextField v-else-if="field.type === 'number'" diff --git a/frontend/pages/item/[id]/index/maintenance.vue b/frontend/pages/item/[id]/index/maintenance.vue index 7fd90c399..21088852a 100644 --- a/frontend/pages/item/[id]/index/maintenance.vue +++ b/frontend/pages/item/[id]/index/maintenance.vue @@ -1,284 +1,13 @@ <script setup lang="ts"> - import DatePicker from "~~/components/Form/DatePicker.vue"; - import type { StatsFormat } from "~~/components/global/StatCard/types"; - import type { ItemOut, MaintenanceEntry } from "~~/lib/api/types/data-contracts"; - import MdiPost from "~icons/mdi/post"; - import MdiPlus from "~icons/mdi/plus"; - import MdiCheck from "~icons/mdi/check"; - import MdiDelete from "~icons/mdi/delete"; - import MdiEdit from "~icons/mdi/edit"; - import MdiCalendar from "~icons/mdi/calendar"; - import MdiWrenchClock from "~icons/mdi/wrench-clock"; + import type { ItemOut } from "~~/lib/api/types/data-contracts"; const props = defineProps<{ item: ItemOut; }>(); - - const api = useUserApi(); - const toast = useNotifier(); - - const scheduled = ref(true); - - watch( - () => scheduled.value, - () => { - refreshLog(); - } - ); - - const { data: log, refresh: refreshLog } = useAsyncData(async () => { - const { data } = await api.items.maintenance.getLog(props.item.id, { - scheduled: scheduled.value, - completed: !scheduled.value, - }); - return data; - }); - - const count = computed(() => { - if (!log.value) return 0; - return log.value.entries.length; - }); - const stats = computed(() => { - if (!log.value) return []; - - return [ - { - id: "count", - title: "Total Entries", - value: count.value || 0, - type: "number" as StatsFormat, - }, - { - id: "total", - title: "Total Cost", - value: log.value.costTotal || 0, - type: "currency" as StatsFormat, - }, - { - id: "average", - title: "Monthly Average", - value: log.value.costAverage || 0, - type: "currency" as StatsFormat, - }, - ]; - }); - - const entry = reactive({ - id: null as string | null, - modal: false, - name: "", - completedDate: null as Date | null, - scheduledDate: null as Date | null, - description: "", - cost: "", - }); - - function newEntry() { - entry.modal = true; - } - - function resetEntry() { - console.log("Resetting entry"); - entry.id = null; - entry.name = ""; - entry.completedDate = null; - entry.scheduledDate = null; - entry.description = ""; - entry.cost = ""; - } - - watch( - () => entry.modal, - (v, pv) => { - if (pv === true && v === false) { - resetEntry(); - } - } - ); - - // Calls either edit or create depending on entry.id being set - async function dispatchFormSubmit() { - if (entry.id) { - await editEntry(); - return; - } - - await createEntry(); - } - - async function createEntry() { - const { error } = await api.items.maintenance.create(props.item.id, { - name: entry.name, - completedDate: entry.completedDate ?? "", - scheduledDate: entry.scheduledDate ?? "", - description: entry.description, - cost: parseFloat(entry.cost) ? entry.cost : "0", - }); - - if (error) { - toast.error("Failed to create entry"); - return; - } - - entry.modal = false; - - refreshLog(); - resetEntry(); - } - - const confirm = useConfirm(); - - async function deleteEntry(id: string) { - const result = await confirm.open("Are you sure you want to delete this entry?"); - if (result.isCanceled) { - return; - } - - const { error } = await api.items.maintenance.delete(props.item.id, id); - - if (error) { - toast.error("Failed to delete entry"); - return; - } - refreshLog(); - } - - function openEditDialog(e: MaintenanceEntry) { - entry.id = e.id; - entry.name = e.name; - entry.completedDate = new Date(e.completedDate); - entry.scheduledDate = new Date(e.scheduledDate); - entry.description = e.description; - entry.cost = e.cost; - entry.modal = true; - } - - async function editEntry() { - if (!entry.id) { - return; - } - - const { error } = await api.items.maintenance.update(props.item.id, entry.id, { - name: entry.name, - completedDate: entry.completedDate ?? "null", - scheduledDate: entry.scheduledDate ?? "null", - description: entry.description, - cost: entry.cost, - }); - - if (error) { - toast.error("Failed to update entry"); - return; - } - - entry.modal = false; - refreshLog(); - } </script> <template> - <div v-if="log"> - <BaseModal v-model="entry.modal"> - <template #title> - {{ entry.id ? "Edit Entry" : "New Entry" }} - </template> - <form @submit.prevent="dispatchFormSubmit"> - <FormTextField v-model="entry.name" autofocus label="Entry Name" /> - <DatePicker v-model="entry.completedDate" label="Completed Date" /> - <DatePicker v-model="entry.scheduledDate" label="Scheduled Date" /> - <FormTextArea v-model="entry.description" label="Notes" /> - <FormTextField v-model="entry.cost" autofocus label="Cost" /> - <div class="flex justify-end py-2"> - <BaseButton type="submit" class="ml-2 mt-2"> - <template #icon> - <MdiPost /> - </template> - {{ entry.id ? "Update" : "Create" }} - </BaseButton> - </div> - </form> - </BaseModal> - - <section class="space-y-6"> - <div class="grid grid-cols-1 gap-6 md:grid-cols-3"> - <StatCard - v-for="stat in stats" - :key="stat.id" - class="stats block border-l-primary shadow-xl" - :title="stat.title" - :value="stat.value" - :type="stat.type" - /> - </div> - <div class="flex"> - <div class="btn-group"> - <button class="btn btn-sm" :class="`${scheduled ? 'btn-active' : ''}`" @click="scheduled = true"> - Scheduled - </button> - <button class="btn btn-sm" :class="`${scheduled ? '' : 'btn-active'}`" @click="scheduled = false"> - Completed - </button> - </div> - <BaseButton class="ml-auto" size="sm" @click="newEntry()"> - <template #icon> - <MdiPlus /> - </template> - New - </BaseButton> - </div> - <div class="container space-y-6"> - <BaseCard v-for="e in log.entries" :key="e.id"> - <BaseSectionHeader class="border-b border-b-gray-300 p-6"> - <span class="text-base-content"> - {{ e.name }} - </span> - <template #description> - <div class="flex flex-wrap gap-2"> - <div v-if="validDate(e.completedDate)" class="badge p-3"> - <MdiCheck class="mr-2" /> - <DateTime :date="e.completedDate" format="human" datetime-type="date" /> - </div> - <div v-else-if="validDate(e.scheduledDate)" class="badge p-3"> - <MdiCalendar class="mr-2" /> - <DateTime :date="e.scheduledDate" format="human" datetime-type="date" /> - </div> - <div class="tooltip tooltip-primary" data-tip="Cost"> - <div class="badge badge-primary p-3"> - <Currency :amount="e.cost" /> - </div> - </div> - </div> - </template> - </BaseSectionHeader> - <div class="p-6"> - <Markdown :source="e.description" /> - </div> - <div class="flex justify-end gap-1 p-4"> - <BaseButton size="sm" @click="openEditDialog(e)"> - <template #icon> - <MdiEdit /> - </template> - Edit - </BaseButton> - <BaseButton size="sm" @click="deleteEntry(e.id)"> - <template #icon> - <MdiDelete /> - </template> - Delete - </BaseButton> - </div> - </BaseCard> - <div class="hidden first:block"> - <button - type="button" - class="relative block w-full rounded-lg border-2 border-dashed border-base-content p-12 text-center" - @click="newEntry()" - > - <MdiWrenchClock class="inline size-16" /> - <span class="mt-2 block text-sm font-medium text-gray-900"> Create Your First Entry </span> - </button> - </div> - </div> - </section> - </div> + <BaseContainer class="mb-6 flex flex-col gap-8"> + <MaintenanceListView :current-item-id="props.item.id"></MaintenanceListView> + </BaseContainer> </template> diff --git a/frontend/pages/items.vue b/frontend/pages/items.vue index ea16729ad..8d46c1ee5 100644 --- a/frontend/pages/items.vue +++ b/frontend/pages/items.vue @@ -3,6 +3,7 @@ import { useLabelStore } from "~~/stores/labels"; import { useLocationStore } from "~~/stores/locations"; import MdiLoading from "~icons/mdi/loading"; + import MdiSelectSearch from "~icons/mdi/select-search"; import MdiMagnify from "~icons/mdi/magnify"; import MdiDelete from "~icons/mdi/delete"; import MdiChevronRight from "~icons/mdi/chevron-right"; @@ -463,15 +464,17 @@ <section class="mt-10"> <BaseSectionHeader ref="itemsTitle"> {{ $t("global.items") }} </BaseSectionHeader> - <p class="flex items-center text-base font-medium"> + <p v-if="items.length > 0" class="flex items-center text-base font-medium"> {{ $t("items.results", { total: total }) }} <span class="ml-auto text-base"> {{ $t("items.pages", { page: page, totalPages: totalPages }) }} </span> </p> - <div ref="cardgrid" class="mt-4 grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3"> + <div v-if="items.length === 0" class="flex flex-col items-center gap-2"> + <MdiSelectSearch class="size-10" /> + <p>{{ $t("items.no_results") }}</p> + </div> + <div v-else ref="cardgrid" class="mt-4 grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3"> <ItemCard v-for="item in items" :key="item.id" :item="item" /> - - <div class="hidden text-xl first:inline">{{ $t("items.no_results") }}</div> </div> <div v-if="items.length > 0 && (hasNext || hasPrev)" class="mt-10 flex flex-col items-center gap-2"> <div class="flex"> diff --git a/frontend/pages/label/[id].vue b/frontend/pages/label/[id].vue index 7a87d356d..37812485b 100644 --- a/frontend/pages/label/[id].vue +++ b/frontend/pages/label/[id].vue @@ -97,8 +97,14 @@ <BaseModal v-model="updateModal"> <template #title> Update Label </template> <form v-if="label" @submit.prevent="update"> - <FormTextField v-model="updateData.name" :autofocus="true" label="Label Name" /> - <FormTextArea v-model="updateData.description" label="Label Description" /> + <FormTextField + v-model="updateData.name" + :autofocus="true" + label="Label Name" + :max-length="255" + :min-length="1" + /> + <FormTextArea v-model="updateData.description" label="Label Description" :max-length="255" /> <div class="modal-action"> <BaseButton type="submit" :loading="updating"> Update </BaseButton> </div> diff --git a/frontend/pages/location/[id].vue b/frontend/pages/location/[id].vue index 19fc58ca8..d5a4263ac 100644 --- a/frontend/pages/location/[id].vue +++ b/frontend/pages/location/[id].vue @@ -47,7 +47,7 @@ } toast.success("Location deleted"); - navigateTo("/home"); + navigateTo("/locations"); } const updateModal = ref(false); @@ -111,8 +111,8 @@ <BaseModal v-model="updateModal"> <template #title> Update Location </template> <form v-if="location" @submit.prevent="update"> - <FormTextField v-model="updateData.name" :autofocus="true" label="Location Name" /> - <FormTextArea v-model="updateData.description" label="Location Description" /> + <FormTextField v-model="updateData.name" :autofocus="true" label="Location Name" :max-length="255" :min-length="1" /> + <FormTextArea v-model="updateData.description" label="Location Description" :max-length="1000" /> <LocationSelector v-model="parent" /> <div class="modal-action"> <BaseButton type="submit" :loading="updating"> Update </BaseButton> diff --git a/frontend/pages/locations.vue b/frontend/pages/locations.vue index b2780e3cf..fab4b497b 100644 --- a/frontend/pages/locations.vue +++ b/frontend/pages/locations.vue @@ -62,7 +62,7 @@ <template> <BaseContainer class="mb-16"> - <BaseSectionHeader> Locations </BaseSectionHeader> + <BaseSectionHeader> {{ $t("menu.locations") }} </BaseSectionHeader> <BaseCard> <div class="p-4"> <div class="mb-2 flex justify-end"> diff --git a/frontend/pages/maintenance.vue b/frontend/pages/maintenance.vue new file mode 100644 index 000000000..4d98c95ac --- /dev/null +++ b/frontend/pages/maintenance.vue @@ -0,0 +1,10 @@ +<script setup lang="ts"></script> + +<template> + <div> + <BaseContainer class="mb-6 flex flex-col gap-8"> + <BaseSectionHeader> {{ $t("menu.maintenance") }} </BaseSectionHeader> + <MaintenanceListView></MaintenanceListView> + </BaseContainer> + </div> +</template> diff --git a/frontend/pages/profile.vue b/frontend/pages/profile.vue index 8872cb5d8..0fe287394 100644 --- a/frontend/pages/profile.vue +++ b/frontend/pages/profile.vue @@ -208,7 +208,7 @@ targetID.value = v.id; notifier.value = { name: v.name, - url: "", + url: v.url, isActive: v.isActive, }; } else { @@ -372,7 +372,7 @@ {{ token }} </div> </div> - <div class="p-5 pt-0 form-control w-full"> + <div class="form-control w-full p-5 pt-0"> <label class="label"> <span class="label-text">{{ $t("profile.language") }}</span> </label> @@ -397,7 +397,10 @@ </template> <div v-if="notifiers.data.value" class="mx-4 divide-y divide-gray-400 rounded-md border border-gray-400"> - <article v-for="n in notifiers.data.value" :key="n.id" class="p-2"> + <p v-if="notifiers.data.value.length === 0" class="p-2 text-center text-sm"> + {{ $t("profile.no_notifiers") }} + </p> + <article v-for="n in notifiers.data.value" v-else :key="n.id" class="p-2"> <div class="flex flex-wrap items-center gap-2"> <p class="mr-auto text-lg">{{ n.name }}</p> <div class="flex justify-end gap-2"> @@ -465,7 +468,9 @@ <div class="px-4 pb-4"> <div class="mb-3"> - <BaseButton size="sm" @click="setDisplayHeader"> {{ $t("profile.display_header", { currentValue: preferences.displayHeaderDecor }) }} </BaseButton> + <BaseButton size="sm" @click="setDisplayHeader"> + {{ $t("profile.display_header", { currentValue: preferences.displayHeaderDecor }) }} + </BaseButton> </div> <div class="rounded-box grid grid-cols-1 gap-4 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5"> <div diff --git a/frontend/pages/reports/label-generator.vue b/frontend/pages/reports/label-generator.vue index 894804ced..f9a3659af 100644 --- a/frontend/pages/reports/label-generator.vue +++ b/frontend/pages/reports/label-generator.vue @@ -9,6 +9,8 @@ title: "Homebox | Printer", }); + const api = useUserApi(); + const bordered = ref(false); const displayProperties = reactive({ @@ -181,7 +183,7 @@ return route(`/qrcode`, { data: encodeURIComponent(data) }); } - function getItem(n: number): LabelData { + function getItem(n: number, item: { name: string; location: { name: string } } | null): LabelData { // format n into - seperated string with leading zeros const assetID = fmtAssetID(n); @@ -189,11 +191,21 @@ return { url: getQRCodeUrl(assetID), assetID, - name: "_______________", - location: "_______________", + name: item?.name ?? "_______________", + location: item?.location?.name ?? "_______________", }; } + const { data: allFields } = await useAsyncData(async () => { + const { data, error } = await api.items.getAll(); + + if (error) { + return []; + } + + return data; + }); + const items = computed(() => { if (displayProperties.assetRange > displayProperties.assetRangeMax) { return []; @@ -207,7 +219,7 @@ const items: LabelData[] = []; for (let i = displayProperties.assetRange; i < displayProperties.assetRangeMax; i++) { - items.push(getItem(i)); + items.push(getItem(i, allFields?.value?.items?.[i] ?? null)); } return items; }); diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 22ae77ddd..14acc73e8 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -9,50 +9,50 @@ importers: .: dependencies: '@headlessui/vue': - specifier: ^1.7.22 - version: 1.7.22(vue@3.4.8(typescript@5.5.4)) + specifier: ^1.7.23 + version: 1.7.23(vue@3.4.8(typescript@5.6.2)) '@nuxtjs/tailwindcss': specifier: ^6.12.1 - version: 6.12.1(rollup@4.21.2)(webpack-sources@3.2.3) + version: 6.12.1(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) '@pinia/nuxt': - specifier: ^0.5.4 - version: 0.5.4(rollup@4.21.2)(typescript@5.5.4)(vue@3.4.8(typescript@5.5.4))(webpack-sources@3.2.3) + specifier: ^0.5.5 + version: 0.5.5(magicast@0.3.5)(rollup@4.24.0)(typescript@5.6.2)(vue@3.4.8(typescript@5.6.2))(webpack-sources@3.2.3) '@tailwindcss/aspect-ratio': specifier: ^0.4.2 - version: 0.4.2(tailwindcss@3.4.10) + version: 0.4.2(tailwindcss@3.4.13) '@tailwindcss/forms': specifier: ^0.5.9 - version: 0.5.9(tailwindcss@3.4.10) + version: 0.5.9(tailwindcss@3.4.13) '@tailwindcss/typography': specifier: ^0.5.15 - version: 0.5.15(tailwindcss@3.4.10) + version: 0.5.15(tailwindcss@3.4.13) '@types/lunr': specifier: ^2.3.7 version: 2.3.7 '@vuepic/vue-datepicker': specifier: ^8.8.1 - version: 8.8.1(vue@3.4.8(typescript@5.5.4)) + version: 8.8.1(vue@3.4.8(typescript@5.6.2)) '@vueuse/nuxt': specifier: ^10.11.1 - version: 10.11.1(nuxt@3.6.5(@parcel/watcher@2.4.1)(@types/node@22.5.4)(eslint@8.57.0)(optionator@0.9.4)(rollup@4.21.2)(terser@5.31.6)(typescript@5.5.4)(webpack-sources@3.2.3))(rollup@4.21.2)(vue@3.4.8(typescript@5.5.4))(webpack-sources@3.2.3) + version: 10.11.1(magicast@0.3.5)(nuxt@3.7.4(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@8.57.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.2)(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.4.8(typescript@5.6.2))(webpack-sources@3.2.3) '@vueuse/router': specifier: ^10.11.1 - version: 10.11.1(vue-router@4.4.3(vue@3.4.8(typescript@5.5.4)))(vue@3.4.8(typescript@5.5.4)) + version: 10.11.1(vue-router@4.4.5(vue@3.4.8(typescript@5.6.2)))(vue@3.4.8(typescript@5.6.2)) autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.45) + version: 10.4.20(postcss@8.4.47) daisyui: specifier: ^2.52.0 - version: 2.52.0(autoprefixer@10.4.20(postcss@8.4.45))(postcss@8.4.45) + version: 2.52.0(autoprefixer@10.4.20(postcss@8.4.47))(postcss@8.4.47) date-fns: specifier: ^3.6.0 version: 3.6.0 dompurify: - specifier: ^3.1.6 - version: 3.1.6 + specifier: ^3.1.7 + version: 3.1.7 h3: - specifier: ^1.12.0 - version: 1.12.0 + specifier: ^1.13.0 + version: 1.13.0 http-proxy: specifier: ^1.18.1 version: 1.18.1 @@ -63,20 +63,20 @@ importers: specifier: ^14.1.0 version: 14.1.0 pinia: - specifier: ^2.2.2 - version: 2.2.2(typescript@5.5.4)(vue@3.4.8(typescript@5.5.4)) + specifier: ^2.2.4 + version: 2.2.4(typescript@5.6.2)(vue@3.4.8(typescript@5.6.2)) postcss: - specifier: ^8.4.45 - version: 8.4.45 + specifier: ^8.4.47 + version: 8.4.47 tailwindcss: - specifier: ^3.4.10 - version: 3.4.10 + specifier: ^3.4.13 + version: 3.4.13 vue: specifier: 3.4.8 - version: 3.4.8(typescript@5.5.4) + version: 3.4.8(typescript@5.6.2) vue-router: - specifier: ^4.4.3 - version: 4.4.3(vue@3.4.8(typescript@5.5.4)) + specifier: ^4.4.5 + version: 4.4.5(vue@3.4.8(typescript@5.6.2)) devDependencies: '@faker-js/faker': specifier: ^8.4.1 @@ -86,10 +86,10 @@ importers: version: 1.2.0 '@intlify/unplugin-vue-i18n': specifier: ^4.0.0 - version: 4.0.0(rollup@4.21.2)(vue-i18n@9.14.0(vue@3.4.8(typescript@5.5.4)))(webpack-sources@3.2.3) + version: 4.0.0(rollup@4.24.0)(vue-i18n@9.14.1(vue@3.4.8(typescript@5.6.2)))(webpack-sources@3.2.3) '@nuxtjs/eslint-config-typescript': specifier: ^12.1.0 - version: 12.1.0(eslint@8.57.0)(typescript@5.5.4) + version: 12.1.0(eslint@8.57.1)(typescript@5.6.2) '@types/dompurify': specifier: ^3.0.5 version: 3.0.5 @@ -98,28 +98,28 @@ importers: version: 13.0.9 '@typescript-eslint/eslint-plugin': specifier: ^6.21.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) '@typescript-eslint/parser': specifier: ^6.21.0 - version: 6.21.0(eslint@8.57.0)(typescript@5.5.4) + version: 6.21.0(eslint@8.57.1)(typescript@5.6.2) '@vite-pwa/nuxt': specifier: ^0.5.0 - version: 0.5.0(rollup@4.21.2)(vite@4.3.9(@types/node@22.5.4)(terser@5.31.6))(webpack-sources@3.2.3)(workbox-build@7.1.1)(workbox-window@7.1.0) + version: 0.5.0(magicast@0.3.5)(rollup@4.24.0)(vite@4.5.5(@types/node@22.7.4)(terser@5.34.1))(webpack-sources@3.2.3)(workbox-build@7.1.1)(workbox-window@7.1.0) eslint: - specifier: ^8.57.0 - version: 8.57.0 + specifier: ^8.57.1 + version: 8.57.1 eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) + version: 9.1.0(eslint@8.57.1) eslint-plugin-prettier: specifier: ^5.2.1 - version: 5.2.1(@types/eslint@8.56.12)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3) + version: 5.2.1(@types/eslint@8.56.12)(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3) eslint-plugin-tailwindcss: specifier: ^3.17.4 - version: 3.17.4(tailwindcss@3.4.10) + version: 3.17.4(tailwindcss@3.4.13) eslint-plugin-vue: specifier: ^9.28.0 - version: 9.28.0(eslint@8.57.0) + version: 9.28.0(eslint@8.57.1) intl-messageformat: specifier: ^10.5.14 version: 10.5.14 @@ -127,26 +127,26 @@ importers: specifier: ^3.0.0 version: 3.0.0 nuxt: - specifier: 3.6.5 - version: 3.6.5(@parcel/watcher@2.4.1)(@types/node@22.5.4)(eslint@8.57.0)(optionator@0.9.4)(rollup@4.21.2)(terser@5.31.6)(typescript@5.5.4)(webpack-sources@3.2.3) + specifier: 3.7.4 + version: 3.7.4(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@8.57.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.2)(webpack-sources@3.2.3) prettier: specifier: ^3.3.3 version: 3.3.3 typescript: - specifier: ^5.5.4 - version: 5.5.4 + specifier: ^5.6.2 + version: 5.6.2 unplugin-icons: specifier: ^0.18.5 - version: 0.18.5(@vue/compiler-sfc@3.5.3)(webpack-sources@3.2.3) + version: 0.18.5(@vue/compiler-sfc@3.5.11)(webpack-sources@3.2.3) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.0)(vite@4.3.9(@types/node@22.5.4)(terser@5.31.6)) + version: 1.8.1(eslint@8.57.1)(vite@4.5.5(@types/node@22.7.4)(terser@5.34.1)) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.5.4)(terser@5.31.6) + version: 1.6.0(@types/node@22.7.4)(terser@5.34.1) vue-i18n: - specifier: ^9.14.0 - version: 9.14.0(vue@3.4.8(typescript@5.5.4)) + specifier: ^9.14.1 + version: 9.14.1(vue@3.4.8(typescript@5.6.2)) packages: @@ -173,42 +173,42 @@ packages: peerDependencies: ajv: '>=8' - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + '@babel/code-frame@7.25.7': + resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.25.4': - resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} + '@babel/compat-data@7.25.7': + resolution: {integrity: sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==} engines: {node: '>=6.9.0'} - '@babel/core@7.25.2': - resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + '@babel/core@7.25.7': + resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==} engines: {node: '>=6.9.0'} - '@babel/generator@7.25.6': - resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} + '@babel/generator@7.25.7': + resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.24.7': - resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} + '@babel/helper-annotate-as-pure@7.25.7': + resolution: {integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==} engines: {node: '>=6.9.0'} - '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': - resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7': + resolution: {integrity: sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.2': - resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + '@babel/helper-compilation-targets@7.25.7': + resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.25.4': - resolution: {integrity: sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==} + '@babel/helper-create-class-features-plugin@7.25.7': + resolution: {integrity: sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.25.2': - resolution: {integrity: sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==} + '@babel/helper-create-regexp-features-plugin@7.25.7': + resolution: {integrity: sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -218,103 +218,103 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-member-expression-to-functions@7.24.8': - resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} + '@babel/helper-member-expression-to-functions@7.25.7': + resolution: {integrity: sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + '@babel/helper-module-imports@7.25.7': + resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.25.2': - resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + '@babel/helper-module-transforms@7.25.7': + resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.24.7': - resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} + '@babel/helper-optimise-call-expression@7.25.7': + resolution: {integrity: sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.24.8': - resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + '@babel/helper-plugin-utils@7.25.7': + resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.25.0': - resolution: {integrity: sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==} + '@babel/helper-remap-async-to-generator@7.25.7': + resolution: {integrity: sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.25.0': - resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} + '@babel/helper-replace-supers@7.25.7': + resolution: {integrity: sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + '@babel/helper-simple-access@7.25.7': + resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} engines: {node: '>=6.9.0'} - '@babel/helper-skip-transparent-expression-wrappers@7.24.7': - resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} + '@babel/helper-skip-transparent-expression-wrappers@7.25.7': + resolution: {integrity: sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + '@babel/helper-string-parser@7.25.7': + resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + '@babel/helper-validator-identifier@7.25.7': + resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + '@babel/helper-validator-option@7.25.7': + resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.25.0': - resolution: {integrity: sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==} + '@babel/helper-wrap-function@7.25.7': + resolution: {integrity: sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.25.6': - resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} + '@babel/helpers@7.25.7': + resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + '@babel/highlight@7.25.7': + resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.25.6': - resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + '@babel/parser@7.25.7': + resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3': - resolution: {integrity: sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7': + resolution: {integrity: sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0': - resolution: {integrity: sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==} + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7': + resolution: {integrity: sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0': - resolution: {integrity: sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7': + resolution: {integrity: sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7': - resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7': + resolution: {integrity: sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0': - resolution: {integrity: sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7': + resolution: {integrity: sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -351,14 +351,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.25.6': - resolution: {integrity: sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==} + '@babel/plugin-syntax-import-assertions@7.25.7': + resolution: {integrity: sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.25.6': - resolution: {integrity: sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==} + '@babel/plugin-syntax-import-attributes@7.25.7': + resolution: {integrity: sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -373,8 +373,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.24.7': - resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} + '@babel/plugin-syntax-jsx@7.25.7': + resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -421,8 +421,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.25.4': - resolution: {integrity: sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==} + '@babel/plugin-syntax-typescript@7.25.7': + resolution: {integrity: sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -433,308 +433,308 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-arrow-functions@7.24.7': - resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} + '@babel/plugin-transform-arrow-functions@7.25.7': + resolution: {integrity: sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.25.4': - resolution: {integrity: sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==} + '@babel/plugin-transform-async-generator-functions@7.25.7': + resolution: {integrity: sha512-4B6OhTrwYKHYYgcwErvZjbmH9X5TxQBsaBHdzEIB4l71gR5jh/tuHGlb9in47udL2+wVUcOz5XXhhfhVJwEpEg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-to-generator@7.24.7': - resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} + '@babel/plugin-transform-async-to-generator@7.25.7': + resolution: {integrity: sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.24.7': - resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} + '@babel/plugin-transform-block-scoped-functions@7.25.7': + resolution: {integrity: sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.25.0': - resolution: {integrity: sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==} + '@babel/plugin-transform-block-scoping@7.25.7': + resolution: {integrity: sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.25.4': - resolution: {integrity: sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==} + '@babel/plugin-transform-class-properties@7.25.7': + resolution: {integrity: sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.24.7': - resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} + '@babel/plugin-transform-class-static-block@7.25.7': + resolution: {integrity: sha512-rvUUtoVlkDWtDWxGAiiQj0aNktTPn3eFynBcMC2IhsXweehwgdI9ODe+XjWw515kEmv22sSOTp/rxIRuTiB7zg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.25.4': - resolution: {integrity: sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==} + '@babel/plugin-transform-classes@7.25.7': + resolution: {integrity: sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-computed-properties@7.24.7': - resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} + '@babel/plugin-transform-computed-properties@7.25.7': + resolution: {integrity: sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.24.8': - resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} + '@babel/plugin-transform-destructuring@7.25.7': + resolution: {integrity: sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.24.7': - resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} + '@babel/plugin-transform-dotall-regex@7.25.7': + resolution: {integrity: sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-keys@7.24.7': - resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} + '@babel/plugin-transform-duplicate-keys@7.25.7': + resolution: {integrity: sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0': - resolution: {integrity: sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7': + resolution: {integrity: sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-dynamic-import@7.24.7': - resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} + '@babel/plugin-transform-dynamic-import@7.25.7': + resolution: {integrity: sha512-UvcLuual4h7/GfylKm2IAA3aph9rwvAM2XBA0uPKU3lca+Maai4jBjjEVUS568ld6kJcgbouuumCBhMd/Yz17w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.24.7': - resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} + '@babel/plugin-transform-exponentiation-operator@7.25.7': + resolution: {integrity: sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-export-namespace-from@7.24.7': - resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} + '@babel/plugin-transform-export-namespace-from@7.25.7': + resolution: {integrity: sha512-h3MDAP5l34NQkkNulsTNyjdaR+OiB0Im67VU//sFupouP8Q6m9Spy7l66DcaAQxtmCqGdanPByLsnwFttxKISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.24.7': - resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} + '@babel/plugin-transform-for-of@7.25.7': + resolution: {integrity: sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-function-name@7.25.1': - resolution: {integrity: sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==} + '@babel/plugin-transform-function-name@7.25.7': + resolution: {integrity: sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.24.7': - resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} + '@babel/plugin-transform-json-strings@7.25.7': + resolution: {integrity: sha512-Ot43PrL9TEAiCe8C/2erAjXMeVSnE/BLEx6eyrKLNFCCw5jvhTHKyHxdI1pA0kz5njZRYAnMO2KObGqOCRDYSA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-literals@7.25.2': - resolution: {integrity: sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==} + '@babel/plugin-transform-literals@7.25.7': + resolution: {integrity: sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.24.7': - resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} + '@babel/plugin-transform-logical-assignment-operators@7.25.7': + resolution: {integrity: sha512-iImzbA55BjiovLyG2bggWS+V+OLkaBorNvc/yJoeeDQGztknRnDdYfp2d/UPmunZYEnZi6Lg8QcTmNMHOB0lGA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-member-expression-literals@7.24.7': - resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} + '@babel/plugin-transform-member-expression-literals@7.25.7': + resolution: {integrity: sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-amd@7.24.7': - resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} + '@babel/plugin-transform-modules-amd@7.25.7': + resolution: {integrity: sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.24.8': - resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} + '@babel/plugin-transform-modules-commonjs@7.25.7': + resolution: {integrity: sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.25.0': - resolution: {integrity: sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==} + '@babel/plugin-transform-modules-systemjs@7.25.7': + resolution: {integrity: sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-umd@7.24.7': - resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} + '@babel/plugin-transform-modules-umd@7.25.7': + resolution: {integrity: sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-named-capturing-groups-regex@7.24.7': - resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} + '@babel/plugin-transform-named-capturing-groups-regex@7.25.7': + resolution: {integrity: sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-new-target@7.24.7': - resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} + '@babel/plugin-transform-new-target@7.25.7': + resolution: {integrity: sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7': - resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} + '@babel/plugin-transform-nullish-coalescing-operator@7.25.7': + resolution: {integrity: sha512-FbuJ63/4LEL32mIxrxwYaqjJxpbzxPVQj5a+Ebrc8JICV6YX8nE53jY+K0RZT3um56GoNWgkS2BQ/uLGTjtwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.24.7': - resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} + '@babel/plugin-transform-numeric-separator@7.25.7': + resolution: {integrity: sha512-8CbutzSSh4hmD+jJHIA8vdTNk15kAzOnFLVVgBSMGr28rt85ouT01/rezMecks9pkU939wDInImwCKv4ahU4IA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.24.7': - resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} + '@babel/plugin-transform-object-rest-spread@7.25.7': + resolution: {integrity: sha512-1JdVKPhD7Y5PvgfFy0Mv2brdrolzpzSoUq2pr6xsR+m+3viGGeHEokFKsCgOkbeFOQxfB1Vt2F0cPJLRpFI4Zg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-super@7.24.7': - resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} + '@babel/plugin-transform-object-super@7.25.7': + resolution: {integrity: sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.24.7': - resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} + '@babel/plugin-transform-optional-catch-binding@7.25.7': + resolution: {integrity: sha512-m9obYBA39mDPN7lJzD5WkGGb0GO54PPLXsbcnj1Hyeu8mSRz7Gb4b1A6zxNX32ZuUySDK4G6it8SDFWD1nCnqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.24.8': - resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} + '@babel/plugin-transform-optional-chaining@7.25.7': + resolution: {integrity: sha512-h39agClImgPWg4H8mYVAbD1qP9vClFbEjqoJmt87Zen8pjqK8FTPUwrOXAvqu5soytwxrLMd2fx2KSCp2CHcNg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-parameters@7.24.7': - resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} + '@babel/plugin-transform-parameters@7.25.7': + resolution: {integrity: sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.25.4': - resolution: {integrity: sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==} + '@babel/plugin-transform-private-methods@7.25.7': + resolution: {integrity: sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-property-in-object@7.24.7': - resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} + '@babel/plugin-transform-private-property-in-object@7.25.7': + resolution: {integrity: sha512-LzA5ESzBy7tqj00Yjey9yWfs3FKy4EmJyKOSWld144OxkTji81WWnUT8nkLUn+imN/zHL8ZQlOu/MTUAhHaX3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-property-literals@7.24.7': - resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} + '@babel/plugin-transform-property-literals@7.25.7': + resolution: {integrity: sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.24.7': - resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} + '@babel/plugin-transform-regenerator@7.25.7': + resolution: {integrity: sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-reserved-words@7.24.7': - resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} + '@babel/plugin-transform-reserved-words@7.25.7': + resolution: {integrity: sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-shorthand-properties@7.24.7': - resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} + '@babel/plugin-transform-shorthand-properties@7.25.7': + resolution: {integrity: sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-spread@7.24.7': - resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} + '@babel/plugin-transform-spread@7.25.7': + resolution: {integrity: sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-sticky-regex@7.24.7': - resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} + '@babel/plugin-transform-sticky-regex@7.25.7': + resolution: {integrity: sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-template-literals@7.24.7': - resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} + '@babel/plugin-transform-template-literals@7.25.7': + resolution: {integrity: sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.24.8': - resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} + '@babel/plugin-transform-typeof-symbol@7.25.7': + resolution: {integrity: sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.25.2': - resolution: {integrity: sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==} + '@babel/plugin-transform-typescript@7.25.7': + resolution: {integrity: sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-escapes@7.24.7': - resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} + '@babel/plugin-transform-unicode-escapes@7.25.7': + resolution: {integrity: sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.24.7': - resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} + '@babel/plugin-transform-unicode-property-regex@7.25.7': + resolution: {integrity: sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-regex@7.24.7': - resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} + '@babel/plugin-transform-unicode-regex@7.25.7': + resolution: {integrity: sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-sets-regex@7.25.4': - resolution: {integrity: sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==} + '@babel/plugin-transform-unicode-sets-regex@7.25.7': + resolution: {integrity: sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.25.4': - resolution: {integrity: sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==} + '@babel/preset-env@7.25.7': + resolution: {integrity: sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -744,27 +744,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/regjsgen@0.8.0': - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - - '@babel/runtime@7.25.6': - resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} + '@babel/runtime@7.25.7': + resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} engines: {node: '>=6.9.0'} - '@babel/standalone@7.25.6': - resolution: {integrity: sha512-Kf2ZcZVqsKbtYhlA7sP0z5A3q5hmCVYMKMWRWNK/5OVwHIve3JY1djVRmIVAx8FMueLIfZGKQDIILK2w8zO4mg==} + '@babel/standalone@7.25.7': + resolution: {integrity: sha512-7H+mK18Ew4C/pIIiZwF1eiVjUEh2Ju/BpwRZwcPeXltF/rIjHjFL0gol7PtGrHocmIq6P6ubJrylmmWQ3lGJPA==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.0': - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + '@babel/template@7.25.7': + resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.6': - resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} + '@babel/traverse@7.25.7': + resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.6': - resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + '@babel/types@7.25.7': + resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} engines: {node: '>=6.9.0'} '@cloudflare/kv-asset-handler@0.3.4': @@ -783,6 +780,12 @@ packages: peerDependencies: postcss-selector-parser: ^6.0.13 + '@esbuild/aix-ppc64@0.19.12': + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.20.2': resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} @@ -795,14 +798,14 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.17.19': - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.18.20': - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + '@esbuild/android-arm64@0.19.12': + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -819,14 +822,14 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.17.19': - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} cpu: [arm] os: [android] - '@esbuild/android-arm@0.18.20': - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + '@esbuild/android-arm@0.19.12': + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -843,14 +846,14 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.17.19': - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} cpu: [x64] os: [android] - '@esbuild/android-x64@0.18.20': - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + '@esbuild/android-x64@0.19.12': + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -867,14 +870,14 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.17.19': - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.18.20': - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + '@esbuild/darwin-arm64@0.19.12': + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -891,14 +894,14 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.17.19': - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.18.20': - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + '@esbuild/darwin-x64@0.19.12': + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -915,14 +918,14 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.17.19': - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.18.20': - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + '@esbuild/freebsd-arm64@0.19.12': + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -939,14 +942,14 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.17.19': - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.18.20': - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + '@esbuild/freebsd-x64@0.19.12': + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -963,14 +966,14 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.17.19': - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.18.20': - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + '@esbuild/linux-arm64@0.19.12': + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -987,14 +990,14 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.17.19': - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.18.20': - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + '@esbuild/linux-arm@0.19.12': + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -1011,14 +1014,14 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.17.19': - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.18.20': - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + '@esbuild/linux-ia32@0.19.12': + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -1035,14 +1038,14 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.17.19': - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.18.20': - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + '@esbuild/linux-loong64@0.19.12': + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -1059,14 +1062,14 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.17.19': - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.18.20': - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + '@esbuild/linux-mips64el@0.19.12': + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -1083,14 +1086,14 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.17.19': - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.18.20': - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + '@esbuild/linux-ppc64@0.19.12': + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -1107,14 +1110,14 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.17.19': - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.18.20': - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + '@esbuild/linux-riscv64@0.19.12': + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -1131,14 +1134,14 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.17.19': - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.18.20': - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + '@esbuild/linux-s390x@0.19.12': + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -1155,14 +1158,14 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.17.19': - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.18.20': - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + '@esbuild/linux-x64@0.19.12': + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -1179,14 +1182,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.17.19': - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.18.20': - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + '@esbuild/netbsd-x64@0.19.12': + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -1203,14 +1206,14 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/openbsd-x64@0.17.19': - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.18.20': - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + '@esbuild/openbsd-x64@0.19.12': + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -1227,14 +1230,14 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.17.19': - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.18.20': - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + '@esbuild/sunos-x64@0.19.12': + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -1251,14 +1254,14 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.17.19': - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.18.20': - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + '@esbuild/win32-arm64@0.19.12': + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -1275,14 +1278,14 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.17.19': - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.18.20': - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + '@esbuild/win32-ia32@0.19.12': + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -1299,14 +1302,14 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.17.19': - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.18.20': - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + '@esbuild/win32-x64@0.19.12': + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -1329,16 +1332,16 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.0': - resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + '@eslint-community/regexpp@4.11.1': + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@faker-js/faker@8.4.1': @@ -1364,14 +1367,14 @@ packages: '@formatjs/intl-localematcher@0.5.4': resolution: {integrity: sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==} - '@headlessui/vue@1.7.22': - resolution: {integrity: sha512-Hoffjoolq1rY+LOfJ+B/OvkhuBXXBFgd8oBlN+l1TApma2dB0En0ucFZrwQtb33SmcCqd32EQd0y07oziXWNYg==} + '@headlessui/vue@1.7.23': + resolution: {integrity: sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg==} engines: {node: '>=10'} peerDependencies: vue: ^3.2.0 - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead @@ -1389,8 +1392,8 @@ packages: '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@2.1.32': - resolution: {integrity: sha512-LeifFZPPKu28O3AEDpYJNdEbvS4/ojAPyIW+pF/vUpJTYnbTiXUHkCh0bwgFRzKvdpb8H4Fbfd/742++MF4fPQ==} + '@iconify/utils@2.1.33': + resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==} '@intlify/bundle-utils@8.0.0': resolution: {integrity: sha512-1B++zykRnMwQ+20SpsZI1JCnV/YJt9Oq7AGlEurzkWJOFtFAVqaGc/oV36PBRYeiKnTbY9VYfjBimr2Vt42wLQ==} @@ -1404,16 +1407,16 @@ packages: vue-i18n: optional: true - '@intlify/core-base@9.14.0': - resolution: {integrity: sha512-zJn0imh9HIsZZUtt9v8T16PeVstPv6bP2YzlrYJwoF8F30gs4brZBwW2KK6EI5WYKFi3NeqX6+UU4gniz5TkGg==} + '@intlify/core-base@9.14.1': + resolution: {integrity: sha512-rG5/hlNW6Qfve41go37szEf0mVLcfhYuOu83JcY0jZKasnwsrcZYYWDzebCcuO5I/6Sy1JFWo9p+nvkQS1Dy+w==} engines: {node: '>= 16'} - '@intlify/message-compiler@9.14.0': - resolution: {integrity: sha512-sXNsoMI0YsipSXW8SR75drmVK56tnJHoYbPXUv2Cf9lz6FzvwsosFm6JtC1oQZI/kU+n7qx0qRrEWkeYFTgETA==} + '@intlify/message-compiler@9.14.1': + resolution: {integrity: sha512-MY8hwukJBnXvGAncVKlHsqKDQ5ZcQx4peqEmI8wBUTXn4pezrtTGYXNoz81cLyEEHB+L/zlKWVBSh5TiX4gYoQ==} engines: {node: '>= 16'} - '@intlify/shared@9.14.0': - resolution: {integrity: sha512-r+N8KRQL7LgN1TMTs1A2svfuAU0J94Wu9wWdJVJqYsoMMLIeJxrPjazihfHpmJqfgZq0ah3Y9Q4pgWV2O90Fyg==} + '@intlify/shared@9.14.1': + resolution: {integrity: sha512-XjHu6PEQup9MnP1x0W9y0nXXfq9jFftAYSfV11hryjtH4XqXP8HrzMvXI+ZVifF+jZLszaTzIhvukllplxTQTg==} engines: {node: '>= 16'} '@intlify/unplugin-vue-i18n@4.0.0': @@ -1467,24 +1470,24 @@ packages: resolution: {integrity: sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==} engines: {node: '>=10'} - '@koa/router@12.0.1': - resolution: {integrity: sha512-ribfPYfHb+Uw3b27Eiw6NPqjhIhTpVFzEWLwyc/1Xp+DCdwRRyIlAUODX+9bPARF6aQtUu1+/PHzdNvRzcs/+Q==} + '@koa/router@12.0.2': + resolution: {integrity: sha512-sYcHglGKTxGF+hQ6x67xDfkE9o+NhVlRHBqq6gLywaMc6CojK/5vFZByphdonKinYlMLkEkacm+HEse9HzwgTA==} engines: {node: '>= 12'} '@mapbox/node-pre-gyp@1.0.11': resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@netlify/functions@2.8.1': - resolution: {integrity: sha512-+6wtYdoz0yE06dSa9XkP47tw5zm6g13QMeCwM3MmHx1vn8hzwFa51JtmfraprdkL7amvb7gaNM+OOhQU1h6T8A==} + '@netlify/functions@2.8.2': + resolution: {integrity: sha512-DeoAQh8LuNPvBE4qsKlezjKj0PyXDryOFJfJKo3Z1qZLKzQ21sT314KQKPVjfvw6knqijj+IO+0kHXy/TJiqNA==} engines: {node: '>=14.0.0'} '@netlify/node-cookies@0.1.0': resolution: {integrity: sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g==} engines: {node: ^14.16.0 || >=16.0.0} - '@netlify/serverless-functions-api@1.19.1': - resolution: {integrity: sha512-2KYkyluThg1AKfd0JWI7FzpS4A/fzVVGYIf6AM4ydWyNj8eI/86GQVLeRgDoH7CNOxt243R5tutWlmHpVq0/Ew==} + '@netlify/serverless-functions-api@1.26.1': + resolution: {integrity: sha512-q3L9i3HoNfz0SGpTIS4zTcKBbRkxzCRpd169eyiTuk3IwcPC3/85mzLHranlKo2b+HYT0gu37YxGB45aD8A3Tw==} engines: {node: '>=18.0.0'} '@nodelib/fs.scandir@2.1.5': @@ -1506,31 +1509,31 @@ packages: '@nuxt/devalue@2.0.2': resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==} - '@nuxt/kit@3.13.1': - resolution: {integrity: sha512-FkUL349lp/3nVfTIyws4UDJ3d2jyv5Pk1DC1HQUCOkSloYYMdbRcQAUcb4fe2TCLNWvHM+FhU8jnzGTzjALZYA==} + '@nuxt/kit@3.13.2': + resolution: {integrity: sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==} engines: {node: ^14.18.0 || >=16.10.0} - '@nuxt/kit@3.6.5': - resolution: {integrity: sha512-uBI5I2Zx6sk+vRHU+nBmifwxg/nyXCGZ1g5hUKrUfgv1ZfiKB8JkN5T9iRoduDOaqbwM6XSnEl1ja73iloDcrw==} + '@nuxt/kit@3.7.4': + resolution: {integrity: sha512-/S5abZL62BITCvC/TY3KWA6N721U1Osln3cQdBb56XHIeafZCBVqTi92Xb0o7ovl72mMRhrKwRu7elzvz9oT/g==} engines: {node: ^14.18.0 || >=16.10.0} - '@nuxt/schema@3.13.1': - resolution: {integrity: sha512-ishbhzVGspjshG9AG0hYnKYY6LWXzCtua7OXV7C/DQ2yA7rRcy1xHpzKZUDbIRyxCHHCAcBd8jfHEUmEuhEPrA==} + '@nuxt/schema@3.13.2': + resolution: {integrity: sha512-CCZgpm+MkqtOMDEgF9SWgGPBXlQ01hV/6+2reDEpJuqFPGzV8HYKPBcIFvn7/z5ahtgutHLzjP71Na+hYcqSpw==} engines: {node: ^14.18.0 || >=16.10.0} - '@nuxt/schema@3.6.5': - resolution: {integrity: sha512-UPUnMB0W5TZ/Pi1fiF71EqIsPlj8LGZqzhSf8wOeh538KHwxbA9r7cuvEUU92eXRksOZaylbea3fJxZWhOITVw==} + '@nuxt/schema@3.7.4': + resolution: {integrity: sha512-q6js+97vDha4Fa2x2kDVEuokJr+CGIh1TY2wZp2PLZ7NhG3XEeib7x9Hq8XE8B6pD0GKBRy3eRPPOY69gekBCw==} engines: {node: ^14.18.0 || >=16.10.0} - '@nuxt/telemetry@2.5.4': - resolution: {integrity: sha512-KH6wxzsNys69daSO0xUv0LEBAfhwwjK1M+0Cdi1/vxmifCslMIY7lN11B4eywSfscbyVPAYJvANyc7XiVPImBQ==} + '@nuxt/telemetry@2.6.0': + resolution: {integrity: sha512-h4YJ1d32cU7tDKjjhjtIIEck4WF/w3DTQBT348E9Pz85YLttnLqktLM0Ez9Xc2LzCeUgBDQv1el7Ob/zT3KUqg==} hasBin: true '@nuxt/ui-templates@1.3.4': resolution: {integrity: sha512-zjuslnkj5zboZGis5QpmR5gvRTx5N8Ha/Rll+RRT8YZhXVNBincifhZ9apUQ9f6T0xJE8IHPyVyPx6WokomdYw==} - '@nuxt/vite-builder@3.6.5': - resolution: {integrity: sha512-pwSpt257ApCp3XWUs8vrC7X9QHeHUv5PbbIR3+5w0n5f95XPNOQWDJa2fTPX/H6oaRJCPYAsBPqiQhQ7qW/NZQ==} + '@nuxt/vite-builder@3.7.4': + resolution: {integrity: sha512-EWZlUzYvkSfIZPA0pQoi7P++68Mlvf5s/G3GBPksS5JB/9l3yZTX+ZqGvLeORSBmoEpJ6E2oMn2WvCHV0W5y6Q==} engines: {node: ^14.18.0 || >=16.10.0} peerDependencies: vue: ^3.3.4 @@ -1630,8 +1633,8 @@ packages: resolution: {integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==} engines: {node: '>= 10.0.0'} - '@pinia/nuxt@0.5.4': - resolution: {integrity: sha512-nNEs2pq6+Ji5qIyRwmeD9LUdctL8aJ8QMVLTYxUc16cXEOcIIN+MSA8Xudsd0lVETYgEAROT5HiBHnOYRDY3yQ==} + '@pinia/nuxt@0.5.5': + resolution: {integrity: sha512-wjxS7YqIesh4OLK+qE3ZjhdOJ5pYZQ+VlEmZNtTwzQn1Kavei/khovx7mzXVXNA/mvSPXVhb9xBzhyS3XMURtw==} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -1641,8 +1644,8 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@rollup/plugin-alias@5.1.0': - resolution: {integrity: sha512-lpA3RZ9PdIG7qqhEfv79tBffNaoDuukFDrmhLqg9ifv99u/ehn+lOg30x2zmhf8AQqQUZaMk/B9fZraQ6/acDQ==} + '@rollup/plugin-alias@5.1.1': + resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -1688,8 +1691,8 @@ packages: rollup: optional: true - '@rollup/plugin-node-resolve@15.2.3': - resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} + '@rollup/plugin-node-resolve@15.3.0': + resolution: {integrity: sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.78.0||^3.0.0||^4.0.0 @@ -1730,8 +1733,8 @@ packages: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} - '@rollup/pluginutils@5.1.0': - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + '@rollup/pluginutils@5.1.2': + resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -1739,83 +1742,83 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.21.2': - resolution: {integrity: sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==} + '@rollup/rollup-android-arm-eabi@4.24.0': + resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.21.2': - resolution: {integrity: sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==} + '@rollup/rollup-android-arm64@4.24.0': + resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.21.2': - resolution: {integrity: sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==} + '@rollup/rollup-darwin-arm64@4.24.0': + resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.21.2': - resolution: {integrity: sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==} + '@rollup/rollup-darwin-x64@4.24.0': + resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.21.2': - resolution: {integrity: sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==} + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.21.2': - resolution: {integrity: sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==} + '@rollup/rollup-linux-arm-musleabihf@4.24.0': + resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.21.2': - resolution: {integrity: sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==} + '@rollup/rollup-linux-arm64-gnu@4.24.0': + resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.21.2': - resolution: {integrity: sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==} + '@rollup/rollup-linux-arm64-musl@4.24.0': + resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.21.2': - resolution: {integrity: sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.21.2': - resolution: {integrity: sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==} + '@rollup/rollup-linux-riscv64-gnu@4.24.0': + resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.21.2': - resolution: {integrity: sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==} + '@rollup/rollup-linux-s390x-gnu@4.24.0': + resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.21.2': - resolution: {integrity: sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==} + '@rollup/rollup-linux-x64-gnu@4.24.0': + resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.21.2': - resolution: {integrity: sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==} + '@rollup/rollup-linux-x64-musl@4.24.0': + resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.21.2': - resolution: {integrity: sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==} + '@rollup/rollup-win32-arm64-msvc@4.24.0': + resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.21.2': - resolution: {integrity: sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==} + '@rollup/rollup-win32-ia32-msvc@4.24.0': + resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.21.2': - resolution: {integrity: sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==} + '@rollup/rollup-win32-x64-msvc@4.24.0': + resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} cpu: [x64] os: [win32] @@ -1847,11 +1850,11 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20' - '@tanstack/virtual-core@3.10.7': - resolution: {integrity: sha512-ND5dfsU0n9F4gROzwNNDJmg6y8n9pI8YWxtgbfJ5UcNn7Hx+MxEXtXcQ189tS7sh8pmCObgz2qSiyRKTZxT4dg==} + '@tanstack/virtual-core@3.10.8': + resolution: {integrity: sha512-PBu00mtt95jbKFi6Llk9aik8bnR3tR/oQP1o3TSi+iG//+Q2RTIzCEgKkHG8BB86kxMNW6O8wku+Lmi+QFR6jA==} - '@tanstack/vue-virtual@3.10.7': - resolution: {integrity: sha512-OSK1fkvz4GaBhF80KVmBsJZoMI9ncVaUU//pI8OqTdBnepw467zcuF2Y+Ia1VC0CPYfUEALyS8n4Ar0RI/7ASg==} + '@tanstack/vue-virtual@3.10.8': + resolution: {integrity: sha512-DB5QA8c/LfqOqIUCpSs3RdOTVroRRdqeHMqBkYrcashSZtOzIv8xbiqHgg7RYxDfkH5F3Y+e0MkuuyGNDVB0BQ==} peerDependencies: vue: ^2.7.0 || ^3.0.0 @@ -1868,8 +1871,8 @@ packages: '@types/estree@0.0.39': resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} '@types/http-proxy@1.17.15': resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==} @@ -1892,8 +1895,8 @@ packages: '@types/mdurl@1.0.5': resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} - '@types/node@22.5.4': - resolution: {integrity: sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==} + '@types/node@22.7.4': + resolution: {integrity: sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1971,20 +1974,20 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@unhead/dom@1.11.1': - resolution: {integrity: sha512-lyqegiA35OzcvsaP9gQpAPWv5LmZpP9D/55xkFVTnaXfd1kl1TCxBkioAzv3lxtaYsu6CLSqH/jRxO+fB3Q2kQ==} + '@unhead/dom@1.11.7': + resolution: {integrity: sha512-Nj2ulnbY5lvIcxqXwdO5YfdvLm8EYLjcaOje2b2aQnfyPAyOIVeR8iB79DDKk/uZZAPEwkdhSnUdEh9Ny0b3lw==} - '@unhead/schema@1.11.1': - resolution: {integrity: sha512-oEl5vV3+zZyY1Y3PVE1+gWNMj2wJczP6w0gscp8RnFRSik9p94XqYzBnzeb0tezIyVJWKWycGne9ocV0uGHbzw==} + '@unhead/schema@1.11.7': + resolution: {integrity: sha512-j9uN7T63aUXrZ6yx2CfjVT7xZHjn0PZO7TPMaWqMFjneIH/NONKvDVCMEqDlXeqdSIERIYtk/xTHgCUMer5eyw==} - '@unhead/shared@1.11.1': - resolution: {integrity: sha512-05hd92qxAwkndMU8Ftklf4/97GuRVYHM0XzMz3ioENxJl8NfFGAyV48H/idt8WFv8JIkY9d7KgJDBmxG+CHi9Q==} + '@unhead/shared@1.11.7': + resolution: {integrity: sha512-5v3PmV1LMyikGyQi/URYS5ilH8dg1Iomtja7iFWke990O8RBDEzAdagJqcsUE/fw+o7cXRSOamyx5wCf5Q1TrA==} - '@unhead/ssr@1.11.1': - resolution: {integrity: sha512-rol3eGQZOvkKAsx604rZCM3uiBXNfro5V73kQKWq4kv6GNEifzY1r54Fqj1cOk6AMVYpNqowmDcvBwBC/rqXZw==} + '@unhead/ssr@1.11.7': + resolution: {integrity: sha512-qI1zNFY8fU5S9EhroxlXSA5Q/XKbWAKXrVVNG+6bIh/IRrMOMJrPk4d1GmphF4gmNri3ARqly+OWx4VVaj0scA==} - '@unhead/vue@1.11.1': - resolution: {integrity: sha512-MSeFsRr0Pco96bjoY8bijV5su+xw7joqv1LUJQxcDVIp51M1cfrutzMIBTGne30/0K43aIvshCGbmyuW8jouxw==} + '@unhead/vue@1.11.7': + resolution: {integrity: sha512-SLr0eQfznVp63iKi47L4s5Yz+oiQjDA82VBP4jlXi7dM9fSIn1ul1aKvBqle/ZxI2cqY8zVGz60EjhjWeu754A==} peerDependencies: vue: '>=2.7 || >=3' @@ -2025,8 +2028,8 @@ packages: '@vitest/utils@1.6.0': resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} - '@vue-macros/common@1.12.3': - resolution: {integrity: sha512-dlSqrGdIDhqMOz92XtlMNyuHHeHe594O6f10XLtmlB0Jrq/Pl4Hj8rXAnVlRdjg+ptbZRSNL6MSgOPPoC82owg==} + '@vue-macros/common@1.14.0': + resolution: {integrity: sha512-xwQhDoEXRNXobNQmdqOD20yUGdVLVLZe4zhDlT9q/E+z+mvT3wukaAoJG80XRnv/BcgOOCVpxqpkQZ3sNTgjWA==} engines: {node: '>=16.14.0'} peerDependencies: vue: ^2.7.0 || ^3.2.25 @@ -2034,48 +2037,48 @@ packages: vue: optional: true - '@vue/babel-helper-vue-transform-on@1.2.4': - resolution: {integrity: sha512-3L9zXWRN2jvmLjtSyw9vtcO5KTSCfKhCD5rEZM+024bc+4dKSzTjIABl/5b+uZ5nXe5y31uUMxxLo1PdXkYaig==} + '@vue/babel-helper-vue-transform-on@1.2.5': + resolution: {integrity: sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==} - '@vue/babel-plugin-jsx@1.2.4': - resolution: {integrity: sha512-jwAVtHUaDfOGGT1EmVKBi0anXOtPvsuKbImcdnHXluaJQ6GEJzshf1JMTtMRx2fPiG7BZjNmyMv+NdZY2OyZEA==} + '@vue/babel-plugin-jsx@1.2.5': + resolution: {integrity: sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true - '@vue/babel-plugin-resolve-type@1.2.4': - resolution: {integrity: sha512-jWcJAmfKvc/xT2XBC4JAmy2eezNjU3CLfeDecl2Ge3tSjJCTmKJWkEhHdzXyx9Nr6PbIcQrFKhCaEDobhSrPqw==} + '@vue/babel-plugin-resolve-type@1.2.5': + resolution: {integrity: sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==} peerDependencies: '@babel/core': ^7.0.0-0 '@vue/compiler-core@3.4.8': resolution: {integrity: sha512-GjAwOydZV6UyVBi1lYW5v4jjfU6wOeyi3vBATKJOwV7muYF0/nZi4kfdJc0pwdT5lXwbbx57lyA2Y356rFpw1A==} - '@vue/compiler-core@3.5.3': - resolution: {integrity: sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==} + '@vue/compiler-core@3.5.11': + resolution: {integrity: sha512-PwAdxs7/9Hc3ieBO12tXzmTD+Ln4qhT/56S+8DvrrZ4kLDn4Z/AMUr8tXJD0axiJBS0RKIoNaR0yMuQB9v9Udg==} '@vue/compiler-dom@3.4.8': resolution: {integrity: sha512-GsPyji42zmkSJlaDFKXvwB97ukTlHzlFH/iVzPFYz/APnSzuhu/CMFQbsYmrtsnc2yscF39eC4rKzvKR27aBug==} - '@vue/compiler-dom@3.5.3': - resolution: {integrity: sha512-wnzFArg9zpvk/811CDOZOadJRugf1Bgl/TQ3RfV4nKfSPok4hi0w10ziYUQR6LnnBAUlEXYLUfZ71Oj9ds/+QA==} + '@vue/compiler-dom@3.5.11': + resolution: {integrity: sha512-pyGf8zdbDDRkBrEzf8p7BQlMKNNF5Fk/Cf/fQ6PiUz9at4OaUfyXW0dGJTo2Vl1f5U9jSLCNf0EZJEogLXoeew==} '@vue/compiler-sfc@3.4.8': resolution: {integrity: sha512-3ZcurOa6bQdZ6VZLtMqYSUZqpsMqfX0MC3oCxQG0VIJFCqouZAgRYJN1c8QvGs7HW5wW8aXVvUOQU0ILVlYHKA==} - '@vue/compiler-sfc@3.5.3': - resolution: {integrity: sha512-P3uATLny2tfyvMB04OQFe7Sczteno7SLFxwrOA/dw01pBWQHB5HL15a8PosoNX2aG/EAMGqnXTu+1LnmzFhpTQ==} + '@vue/compiler-sfc@3.5.11': + resolution: {integrity: sha512-gsbBtT4N9ANXXepprle+X9YLg2htQk1sqH/qGJ/EApl+dgpUBdTv3yP7YlR535uHZY3n6XaR0/bKo0BgwwDniw==} '@vue/compiler-ssr@3.4.8': resolution: {integrity: sha512-nxN79LHeAemhBpIa2PQ6rz57cW7W4C/XIJCOMSn2g49u6q2ekirmJI0osAOTErQPApOR0KwP2QyeTexX4zQCrw==} - '@vue/compiler-ssr@3.5.3': - resolution: {integrity: sha512-F/5f+r2WzL/2YAPl7UlKcJWHrvoZN8XwEBLnT7S4BXwncH25iDOabhO2M2DWioyTguJAGavDOawejkFXj8EM1w==} + '@vue/compiler-ssr@3.5.11': + resolution: {integrity: sha512-P4+GPjOuC2aFTk1Z4WANvEhyOykcvEd5bIj2KVNGKGfM745LaXGr++5njpdBTzVz5pZifdlR1kpYSJJpIlSePA==} - '@vue/devtools-api@6.6.3': - resolution: {integrity: sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==} + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} '@vue/reactivity@3.4.8': resolution: {integrity: sha512-UJYMQ3S2rqIGw9IvKomD4Xw2uS5VlcKEEmwcfboGOdrI79oqebxnCgTvXWLMClvg3M5SF0Cyn+9eDQoyGMLu9Q==} @@ -2094,8 +2097,8 @@ packages: '@vue/shared@3.4.8': resolution: {integrity: sha512-ChLCWzXiJboQ009oVkemhEoUdrxHme7v3ip+Kh+/kDDeF1WtHWGt0knRLGm1Y4YqCRTSs9QxsZIY8paJj5Szrw==} - '@vue/shared@3.5.3': - resolution: {integrity: sha512-Jp2v8nylKBT+PlOUjun2Wp/f++TfJVFjshLzNtJDdmFJabJa7noGMncqXRM1vXGX+Yo2V7WykQFNxusSim8SCA==} + '@vue/shared@3.5.11': + resolution: {integrity: sha512-W8GgysJVnFo81FthhzurdRAWP/byq3q2qIw70e0JWblzVhjgOMiC2GyovXrZTFQJnFVryYaKGP3Tc9vYzYm6PQ==} '@vuepic/vue-datepicker@8.8.1': resolution: {integrity: sha512-8ehfUz1m69Vuc16Pm4ukgb3Mg1VT14x4EsG1ag4O/qbSNRWztTo+pUV4JnFt0FGLl5gGb6NXlxIvR7EjLgD7Gg==} @@ -2142,8 +2145,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.3: - resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} acorn@8.10.0: @@ -2178,8 +2181,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} ansi-styles@3.2.1: @@ -2258,12 +2261,16 @@ packages: assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - ast-kit@1.1.0: - resolution: {integrity: sha512-RlNqd4u6c/rJ5R+tN/ZTtyNrH8X0NHCvyt6gD8RHa3JjzxxHWoyaU0Ujk3Zjbh7IZqrYl1Sxm6XzZifmVxXxHQ==} + ast-kit@0.9.5: + resolution: {integrity: sha512-kbL7ERlqjXubdDd+szuwdlQ1xUxEz9mCz1+m07ftNVStgwRb2RWw+U6oKo08PAvOishMxiqz1mlJyLl8yQx2Qg==} + engines: {node: '>=16.14.0'} + + ast-kit@1.2.1: + resolution: {integrity: sha512-h31wotR7rkFLrlmGPn0kGqOZ/n5EQFvp7dBs400chpHDhHc8BK3gpvyHDluRujuGgeoTAv3dSIMz9BI3JxAWyQ==} engines: {node: '>=16.14.0'} - ast-walker-scope@0.4.2: - resolution: {integrity: sha512-vdCU9JvpsrxWxvJiRHAr8If8cu07LWJXDPhkqLiP4ErbN1fu/mK623QGmU4Qbn2Nq4Mx0vR/Q017B6+HcHg1aQ==} + ast-walker-scope@0.5.0: + resolution: {integrity: sha512-NsyHMxBh4dmdEHjBo1/TBZvCKxffmZxRYhmclfu0PP6Aftre47jOHYaYaNqJcV0bxihxFXhDkzLHUwHc0ocd0Q==} engines: {node: '>=16.14.0'} async-sema@3.1.1: @@ -2290,8 +2297,8 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - b4a@1.6.6: - resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} babel-plugin-polyfill-corejs2@0.4.11: resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} @@ -2311,8 +2318,8 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.4.2: - resolution: {integrity: sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==} + bare-events@2.5.0: + resolution: {integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -2337,8 +2344,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.23.3: - resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + browserslist@4.24.0: + resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -2393,8 +2400,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001658: - resolution: {integrity: sha512-N2YVqWbJELVdrnsW5p+apoQyYt51aBMSsBZki1XZEfeBCexcM/sf4xiAHcXQBkuOwJBXtWF7aW1sYX6tKebPHw==} + caniuse-lite@1.0.30001667: + resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==} chai@4.5.0: resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} @@ -2566,8 +2573,8 @@ packages: create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - croner@8.1.1: - resolution: {integrity: sha512-1VdUuRnQP4drdFkS8NKvDR1NBgevm8TOuflcaZEKsxw42CxonjW/2vkj1AKlinJb4ZLwBcuWF9GiPr7FQc6AQA==} + croner@8.1.2: + resolution: {integrity: sha512-ypfPFcAXHuAZRCzo3vJL6ltENzniTjwe/qsLleH1V2/7SRDjgvRQyrLmumFTLmjFax4IuSxfGXEn79fozXcJog==} engines: {node: '>=18.0'} cross-spawn@7.0.3: @@ -2582,6 +2589,9 @@ packages: uWebSockets.js: optional: true + crossws@0.3.1: + resolution: {integrity: sha512-HsZgeVYaG+b5zA+9PbIPGq4+J/CJynJuearykPsXx4V/eMhyQ5EDVg3Ak2FBZtVXCiOLu/U7IiwDHTr9MA+IKw==} + crypto-random-string@2.0.0: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} @@ -2798,8 +2808,8 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - dompurify@3.1.6: - resolution: {integrity: sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==} + dompurify@3.1.7: + resolution: {integrity: sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==} domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} @@ -2826,8 +2836,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.18: - resolution: {integrity: sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==} + electron-to-chromium@1.5.32: + resolution: {integrity: sha512-M+7ph0VGBQqqpTT2YrabjNKSQ2fEl9PVx6AK3N558gDH9NO8O6XN9SXXFWRo9u9PbEg/bWq+tjXQr+eXmxubCw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2839,6 +2849,10 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + enhanced-resolve@4.5.0: resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==} engines: {node: '>=6.9.0'} @@ -2885,13 +2899,13 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} - esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} hasBin: true - esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} engines: {node: '>=12'} hasBin: true @@ -2960,8 +2974,8 @@ packages: eslint-plugin-import-x: optional: true - eslint-module-utils@2.11.0: - resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -2993,12 +3007,12 @@ packages: peerDependencies: eslint: '>=4.19.1' - eslint-plugin-import@2.30.0: - resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 peerDependenciesMeta: '@typescript-eslint/parser': optional: true @@ -3079,8 +3093,8 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true @@ -3133,10 +3147,6 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -3163,8 +3173,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.0.1: - resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + fast-uri@3.0.2: + resolution: {integrity: sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==} fastparse@1.1.2: resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} @@ -3172,8 +3182,8 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - fdir@6.3.0: - resolution: {integrity: sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==} + fdir@6.4.0: + resolution: {integrity: sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -3288,10 +3298,6 @@ packages: get-port-please@3.1.2: resolution: {integrity: sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==} - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} @@ -3300,8 +3306,8 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.8.0: - resolution: {integrity: sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==} + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} giget@1.2.3: resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} @@ -3314,8 +3320,8 @@ packages: git-up@7.0.0: resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} - git-url-parse@14.1.0: - resolution: {integrity: sha512-8xg65dTxGHST3+zGpycMMFZcoTzAdZ2dOtu4vmgIfkTFnVHBxHMzBC2L1k8To7EmrSiHesT8JgPLT91VKw1B5g==} + git-url-parse@15.0.0: + resolution: {integrity: sha512-5reeBufLi+i4QD3ZFftcJs9jC26aULFLBU23FeKM/b1rI0K6ofIeAblmDVO7Ht22zTDE9+CkJ3ZVb0CgJmz3UQ==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -3375,8 +3381,8 @@ packages: resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - h3@1.12.0: - resolution: {integrity: sha512-Zi/CcNeWBXDrFNlV0hUBJQR9F7a96RjMeAZweW/ZWkR9fuXrMcvKnSA63f/zZ9l0GgQOZDVHGvXivNN9PWOwhA==} + h3@1.13.0: + resolution: {integrity: sha512-vFEAu/yf8UMUcB4s43OaDaigcqpQd14yanmOsn+NcRX3/guSKncyE2rOYhq8RIchgJrPSs/QiIddnTTR1ddiAg==} has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -3455,10 +3461,6 @@ packages: httpxy@0.1.5: resolution: {integrity: sha512-hqLDO+rfststuyEUTWObQK6zHEEmZ/kaIP2/zclGGZn6X8h/ESTWg+WKecQ/e5k4nPswjzZD+q2VqZIbr15CoQ==} - human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -3687,6 +3689,10 @@ packages: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true + jiti@2.2.1: + resolution: {integrity: sha512-weIl/Bv3G0J3UKamLxEA2G+FfQ33Z1ZkQJGPjKFV21zQdKWu2Pi6o4elpj2uEl5XdFJZ9xzn1fsanWTFSt45zw==} + hasBin: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -3697,13 +3703,9 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} hasBin: true json-buffer@3.0.1: @@ -3751,10 +3753,6 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - klona@2.0.6: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} @@ -3810,8 +3808,8 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - listhen@1.7.2: - resolution: {integrity: sha512-7/HamOm5YD9Wb7CFgAZkKgVPA96WwhcTQoqtm2VTZGVbVVn3IWKRBTgrU7cchA3Q8k9iCsG8Osoi9GX4JsGM9g==} + listhen@1.9.0: + resolution: {integrity: sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==} hasBin: true local-pkg@0.4.3: @@ -3882,6 +3880,9 @@ packages: magic-string@0.30.11: resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -4108,13 +4109,13 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nuxi@3.6.5: - resolution: {integrity: sha512-4XEXYz71UiWWiKC1/cJCzqRSUEImYRmjcvKpSsBKMU58ALYVSx5KIoas5SwLO8tEKO5BS4DAe4u7MYix7hfuHQ==} - engines: {node: ^14.18.0 || >=16.10.0} + nuxi@3.14.0: + resolution: {integrity: sha512-MhG4QR6D95jQxhnwKfdKXulZ8Yqy1nbpwbotbxY5IcabOzpEeTB8hYn2BFkmYdMUB0no81qpv2ldZmVCT9UsnQ==} + engines: {node: ^16.10.0 || >=18.0.0} hasBin: true - nuxt@3.6.5: - resolution: {integrity: sha512-0A7V8B1HrIXX9IlqPc2w+5ZPXi+7MYa9QVhtuGYuLvjRKoSFANhCoMPRP6pKdoxigM1MBxhLue2VmHA/VbtJCw==} + nuxt@3.7.4: + resolution: {integrity: sha512-voXN2kheEpi7DJd0hkikfLuA41UiP9IwDDol65dvoJiHnRseWfaw1MyJl6FLHHDHwRzisX9QXWIyMfa9YF4nGg==} engines: {node: ^14.18.0 || >=16.10.0} hasBin: true peerDependencies: @@ -4123,13 +4124,11 @@ packages: peerDependenciesMeta: '@parcel/watcher': optional: true + '@types/node': + optional: true - nypm@0.2.2: - resolution: {integrity: sha512-O7bumfWgUXlJefT1Y41SF4vsCvzeUYmnKABuOKStheCObzrkWPDmqJc+RJVU+57oFu9bITcrUq8sKFIHgjCnTg==} - engines: {node: ^14.16.0 || >=16.10.0} - - nypm@0.3.11: - resolution: {integrity: sha512-E5GqaAYSnbb6n1qZyik2wjPDZON43FqOJO59+3OkWrnmQtjggrMOVnsyzfjxp/tS6nlYJBA4zRA5jSM2YaadMg==} + nypm@0.3.12: + resolution: {integrity: sha512-D3pzNDWIvgA+7IORhD/IuWzEk4uXv6GsgOxiid4UU3h9oq5IqV1KtPDi63n4sZJ/xcWlr88c0QM2RgN5VbOhFA==} engines: {node: ^14.16.0 || >=16.10.0} hasBin: true @@ -4165,11 +4164,11 @@ packages: resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} - ofetch@1.3.4: - resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==} + ofetch@1.4.0: + resolution: {integrity: sha512-MuHgsEhU6zGeX+EMh+8mSMrYTnsqJQQrpM00Q6QHMKNqQ0bKy0B43tk8tL1wg+CnsSTy1kg4Ir2T5Ig6rD+dfQ==} - ohash@1.1.3: - resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} + ohash@1.1.4: + resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==} on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} @@ -4225,8 +4224,8 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - package-json-from-dist@1.0.0: - resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} package-manager-detector@0.2.0: resolution: {integrity: sha512-E385OSk9qDcXhcM9LNSe4sdhx8a9mAPrZ4sMLW+tmxl5ZuGtPUcdFu+MPP2jbgiWAZ6Pfe5soGFMd+0Db5Vrog==} @@ -4276,8 +4275,8 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-to-regexp@6.2.2: - resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -4311,8 +4310,8 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - pinia@2.2.2: - resolution: {integrity: sha512-ja2XqFWZC36mupU4z1ZzxeTApV7DOw44cV4dhQ9sGwun+N89v/XP7+j7q6TanS1u1tdbK4r+1BUx7heMaIdagA==} + pinia@2.2.4: + resolution: {integrity: sha512-K7ZhpMY9iJ9ShTC0cR2+PnxdQRuwVIsXDO/WIEV/RnMC/vmSoKDTKW/exNQYPI+4ij10UjXqdNiEHwn47McANQ==} peerDependencies: '@vue/composition-api': ^1.4.0 typescript: '>=4.4.4' @@ -4560,8 +4559,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.45: - resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==} + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -4596,10 +4595,6 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - protocols@2.0.1: resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} @@ -4673,8 +4668,8 @@ packages: resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} engines: {node: '>=4'} - regenerate-unicode-properties@10.1.1: - resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} engines: {node: '>=4'} regenerate@1.4.2: @@ -4690,20 +4685,23 @@ packages: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} engines: {node: '>= 0.4'} regexpp@3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} - regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + regexpu-core@6.1.1: + resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==} engines: {node: '>=4'} - regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.11.0: + resolution: {integrity: sha512-vTbzVAjQDzwQdKuvj7qEq6OlAprCjE656khuGQ4QaBLg7abQ9I9ISpmLuc6inWe7zP75AECjqUa4g4sdQvOXhg==} hasBin: true replace-in-file@6.3.5: @@ -4760,18 +4758,18 @@ packages: rollup: optional: true - rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + rollup@2.79.2: + resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} engines: {node: '>=10.0.0'} hasBin: true - rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} + rollup@3.29.5: + resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true - rollup@4.21.2: - resolution: {integrity: sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==} + rollup@4.24.0: + resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4811,8 +4809,8 @@ packages: engines: {node: '>=10'} hasBin: true - send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} serialize-javascript@6.0.2: @@ -4821,8 +4819,8 @@ packages: serve-placeholder@2.0.2: resolution: {integrity: sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==} - serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} set-blocking@2.0.0: @@ -4867,9 +4865,6 @@ packages: simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -4937,8 +4932,8 @@ packages: std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} - streamx@2.20.0: - resolution: {integrity: sha512-ZGd1LhDeGFucr1CUCTBOS58ZhEendd0ttpGT3usTvosS4ntIwKN9LJFp+OeCSprsCPL14BXVRZlHGRY1V9PVzQ==} + streamx@2.20.1: + resolution: {integrity: sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==} string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} @@ -5061,8 +5056,8 @@ packages: peerDependencies: tailwindcss: 1 || 2 || 2.0.1-compat || 3 - tailwindcss@3.4.10: - resolution: {integrity: sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==} + tailwindcss@3.4.13: + resolution: {integrity: sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==} engines: {node: '>=14.0.0'} hasBin: true @@ -5089,13 +5084,13 @@ packages: resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} engines: {node: '>=10'} - terser@5.31.6: - resolution: {integrity: sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==} + terser@5.34.1: + resolution: {integrity: sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==} engines: {node: '>=10'} hasBin: true - text-decoder@1.1.1: - resolution: {integrity: sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==} + text-decoder@1.2.0: + resolution: {integrity: sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==} text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -5116,8 +5111,8 @@ packages: tinyexec@0.3.0: resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} - tinyglobby@0.2.5: - resolution: {integrity: sha512-Dlqgt6h0QkoHttG53/WGADNh9QhcjCAIZMTERAVhdpmIBEejSuLI9ZmGKWzB7tweBjlk30+s/ofi4SLmBeTYhw==} + tinyglobby@0.2.9: + resolution: {integrity: sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw==} engines: {node: '>=12.0.0'} tinypool@0.8.4: @@ -5217,8 +5212,8 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} engines: {node: '>=14.17'} hasBin: true @@ -5250,19 +5245,19 @@ packages: unenv@1.10.0: resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==} - unhead@1.11.1: - resolution: {integrity: sha512-2BqoGPtor6eR427J2m6+Qhxwpi+6Uea0Dok+gGn8v+LOzOxQG/fNR6m7qw+7a0uB2PlR3ImvoAvWQ/LiNevymg==} + unhead@1.11.7: + resolution: {integrity: sha512-aA0+JBRryLhDKUq6L2JhMDLZEG/ElyyDASyC9wiwDl6nvvsj9hD26LgPWgmAsSd+9HtMGM2N1gU27CWEMo16CQ==} - unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} unicode-match-property-ecmascript@2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} - unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} engines: {node: '>=4'} unicode-property-aliases-ecmascript@2.1.0: @@ -5273,8 +5268,8 @@ packages: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} - unimport@3.11.1: - resolution: {integrity: sha512-DuB1Uoq01LrrXTScxnwOoMSlTXxyKcULguFxbLrMDFcE/CO0ZWHpEiyhovN0mycPt7K6luAHe8laqvwvuoeUPg==} + unimport@3.13.1: + resolution: {integrity: sha512-nNrVzcs93yrZQOW77qnyOVHtb68LegvhYFwxFMfuuWScmwQmyVCG/NBuN8tYsaGzgQUVYv34E/af+Cc9u4og4A==} unique-string@2.0.0: resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} @@ -5304,16 +5299,16 @@ packages: vue-template-es2015-compiler: optional: true - unplugin-vue-router@0.6.4: - resolution: {integrity: sha512-9THVhhtbVFxbsIibjK59oPwMI1UCxRWRPX7azSkTUABsxovlOXJys5SJx0kd/0oKIqNJuYgkRfAgPuO77SqCOg==} + unplugin-vue-router@0.7.0: + resolution: {integrity: sha512-ddRreGq0t5vlSB7OMy4e4cfU1w2AwBQCwmvW3oP/0IHQiokzbx4hd3TpwBu3eIAFVuhX2cwNQwp1U32UybTVCw==} peerDependencies: vue-router: ^4.1.0 peerDependenciesMeta: vue-router: optional: true - unplugin@1.13.1: - resolution: {integrity: sha512-6Kq1iSSwg7KyjcThRUks9LuqDAKvtnioxbL9iEtB9ctTyBA5OmrB8gZd/d225VJu1w3UpUsKV7eGrvf59J7+VA==} + unplugin@1.14.1: + resolution: {integrity: sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==} engines: {node: '>=14.0.0'} peerDependencies: webpack-sources: ^3 @@ -5369,8 +5364,8 @@ packages: resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==} hasBin: true - untyped@1.4.2: - resolution: {integrity: sha512-nC5q0DnPEPVURPhfPQLahhSTnemVtPzdx7ofiRxXpOB2SYnb3MfdU3DVGyJdS8Lx+tBWeAePO8BfU/3EgksM7Q==} + untyped@1.5.0: + resolution: {integrity: sha512-o2Vjmn2dal08BzCcINxSmWuAteReUUiXseii5VRhmxyLF0b21K0iKZQ9fMYK7RWspVkY+0saqaVQNq4roe3Efg==} hasBin: true unwasm@0.3.9: @@ -5380,8 +5375,8 @@ packages: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} - update-browserslist-db@1.1.0: - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -5464,13 +5459,14 @@ packages: '@vite-pwa/assets-generator': optional: true - vite@4.3.9: - resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} + vite@4.5.5: + resolution: {integrity: sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: '@types/node': '>= 14' less: '*' + lightningcss: ^1.21.0 sass: '*' stylus: '*' sugarss: '*' @@ -5480,6 +5476,8 @@ packages: optional: true less: optional: true + lightningcss: + optional: true sass: optional: true stylus: @@ -5489,8 +5487,8 @@ packages: terser: optional: true - vite@5.4.3: - resolution: {integrity: sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==} + vite@5.4.8: + resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -5569,8 +5567,8 @@ packages: vscode-uri@3.0.8: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} - vue-bundle-renderer@1.0.3: - resolution: {integrity: sha512-EfjX+5TTUl70bki9hPuVp+54JiZOvFIfoWBcfXsSwLzKEiDYyHNi5iX8srnqLIv3YRnvxgbntdcG1WPq0MvffQ==} + vue-bundle-renderer@2.1.1: + resolution: {integrity: sha512-+qALLI5cQncuetYOXp4yScwYvqh8c6SMXee3B+M7oTZxOgtESP0l4j/fXdEJoZ+EdMxkGWIj+aSEyjXkOdmd7g==} vue-demi@0.14.10: resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} @@ -5592,14 +5590,14 @@ packages: peerDependencies: eslint: '>=6.0.0' - vue-i18n@9.14.0: - resolution: {integrity: sha512-LxmpRuCt2rI8gqU+kxeflRZMQn4D5+4M3oP3PWZdowW/ePJraHqhF7p4CuaME52mUxdw3Mmy2yAUKgfZYgCRjA==} + vue-i18n@9.14.1: + resolution: {integrity: sha512-xjxV0LYc1xQ8TbAVfIyZiOSS8qoU1R0YwV7V5I8I6Fd64+zvsTsdPgtylPsie3Vdt9wekeYhr+smKDeaK6RBuA==} engines: {node: '>= 16'} peerDependencies: vue: ^3.0.0 - vue-router@4.4.3: - resolution: {integrity: sha512-sv6wmNKx2j3aqJQDMxLFzs/u/mjA9Z5LCgy6BE0f7yFWMjrPLnS/sPNn8ARY/FXw6byV18EFutn5lTO6+UsV5A==} + vue-router@4.4.5: + resolution: {integrity: sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==} peerDependencies: vue: ^3.2.0 @@ -5797,25 +5795,25 @@ snapshots: jsonpointer: 5.0.1 leven: 3.1.0 - '@babel/code-frame@7.24.7': + '@babel/code-frame@7.25.7': dependencies: - '@babel/highlight': 7.24.7 + '@babel/highlight': 7.25.7 picocolors: 1.1.0 - '@babel/compat-data@7.25.4': {} + '@babel/compat-data@7.25.7': {} - '@babel/core@7.25.2': + '@babel/core@7.25.7': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helpers': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helpers': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 convert-source-map: 2.0.0 debug: 4.3.7 gensync: 1.0.0-beta.2 @@ -5824,761 +5822,759 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.25.6': + '@babel/generator@7.25.7': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 + jsesc: 3.0.2 - '@babel/helper-annotate-as-pure@7.24.7': + '@babel/helper-annotate-as-pure@7.25.7': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 - '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-compilation-targets@7.25.2': + '@babel/helper-compilation-targets@7.25.7': dependencies: - '@babel/compat-data': 7.25.4 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.3 + '@babel/compat-data': 7.25.7 + '@babel/helper-validator-option': 7.25.7 + browserslist: 4.24.0 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.25.2)': + '@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.8 - '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/traverse': 7.25.6 + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-member-expression-to-functions': 7.25.7 + '@babel/helper-optimise-call-expression': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/traverse': 7.25.7 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.25.2(@babel/core@7.25.2)': + '@babel/helper-create-regexp-features-plugin@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.24.7 - regexpu-core: 5.3.2 + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + regexpu-core: 6.1.1 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.2)': + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 debug: 4.3.7 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: - supports-color - '@babel/helper-member-expression-to-functions@7.24.8': + '@babel/helper-member-expression-to-functions@7.25.7': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.24.7': + '@babel/helper-module-imports@7.25.7': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': + '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.6 + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.24.7': + '@babel/helper-optimise-call-expression@7.25.7': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 - '@babel/helper-plugin-utils@7.24.8': {} + '@babel/helper-plugin-utils@7.25.7': {} - '@babel/helper-remap-async-to-generator@7.25.0(@babel/core@7.25.2)': + '@babel/helper-remap-async-to-generator@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-wrap-function': 7.25.0 - '@babel/traverse': 7.25.6 + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-wrap-function': 7.25.7 + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2)': + '@babel/helper-replace-supers@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-member-expression-to-functions': 7.24.8 - '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/traverse': 7.25.6 + '@babel/core': 7.25.7 + '@babel/helper-member-expression-to-functions': 7.25.7 + '@babel/helper-optimise-call-expression': 7.25.7 + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-simple-access@7.24.7': + '@babel/helper-simple-access@7.25.7': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + '@babel/helper-skip-transparent-expression-wrappers@7.25.7': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.24.8': {} + '@babel/helper-string-parser@7.25.7': {} - '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-identifier@7.25.7': {} - '@babel/helper-validator-option@7.24.8': {} + '@babel/helper-validator-option@7.25.7': {} - '@babel/helper-wrap-function@7.25.0': + '@babel/helper-wrap-function@7.25.7': dependencies: - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helpers@7.25.6': + '@babel/helpers@7.25.7': dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 - '@babel/highlight@7.24.7': + '@babel/highlight@7.25.7': dependencies: - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.25.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.0 - '@babel/parser@7.25.6': + '@babel/parser@7.25.7': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3(@babel/core@7.25.2)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/traverse': 7.25.6 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0(@babel/core@7.25.2)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0(@babel/core@7.25.2)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/plugin-transform-optional-chaining': 7.25.7(@babel/core@7.25.7) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0(@babel/core@7.25.2)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/traverse': 7.25.6 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.25.7 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-import-assertions@7.25.6(@babel/core@7.25.2)': + '@babel/plugin-syntax-import-assertions@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-import-attributes@7.25.6(@babel/core@7.25.2)': + '@babel/plugin-syntax-import-attributes@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-typescript@7.25.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-arrow-functions@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-async-generator-functions@7.25.4(@babel/core@7.25.2)': + '@babel/plugin-transform-async-generator-functions@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) - '@babel/traverse': 7.25.6 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-async-to-generator@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-block-scoped-functions@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-block-scoping@7.25.0(@babel/core@7.25.2)': + '@babel/plugin-transform-block-scoping@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-class-properties@7.25.4(@babel/core@7.25.2)': + '@babel/plugin-transform-class-properties@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-class-static-block@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.25.4(@babel/core@7.25.2)': + '@babel/plugin-transform-classes@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) - '@babel/traverse': 7.25.6 + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) + '@babel/traverse': 7.25.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-computed-properties@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/template': 7.25.0 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/template': 7.25.7 - '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.25.2)': + '@babel/plugin-transform-destructuring@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-dotall-regex@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-duplicate-keys@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0(@babel/core@7.25.2)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-dynamic-import@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-exponentiation-operator@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-export-namespace-from@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-for-of@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.25.1(@babel/core@7.25.2)': + '@babel/plugin-transform-function-name@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/traverse': 7.25.6 + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-json-strings@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-transform-literals@7.25.2(@babel/core@7.25.2)': + '@babel/plugin-transform-literals@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-logical-assignment-operators@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-member-expression-literals@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-modules-amd@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2)': + '@babel/plugin-transform-modules-commonjs@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-simple-access': 7.24.7 + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-simple-access': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.25.0(@babel/core@7.25.2)': + '@babel/plugin-transform-modules-systemjs@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.6 + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-modules-umd@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-named-capturing-groups-regex@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-new-target@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-nullish-coalescing-operator@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-numeric-separator@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-object-rest-spread@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-object-super@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-optional-catch-binding@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.25.2)': + '@babel/plugin-transform-optional-chaining@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-parameters@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-private-methods@7.25.4(@babel/core@7.25.2)': + '@babel/plugin-transform-private-methods@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-private-property-in-object@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-property-literals@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-regenerator@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 regenerator-transform: 0.15.2 - '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-reserved-words@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-shorthand-properties@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-spread@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-spread@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-sticky-regex@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-template-literals@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.25.2)': + '@babel/plugin-transform-typeof-symbol@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-typescript@7.25.2(@babel/core@7.25.2)': + '@babel/plugin-transform-typescript@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-unicode-sets-regex@7.25.4(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/preset-env@7.25.4(@babel/core@7.25.2)': - dependencies: - '@babel/compat-data': 7.25.4 - '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.3(@babel/core@7.25.2) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.0(@babel/core@7.25.2) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.0(@babel/core@7.25.2) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.0(@babel/core@7.25.2) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-import-assertions': 7.25.6(@babel/core@7.25.2) - '@babel/plugin-syntax-import-attributes': 7.25.6(@babel/core@7.25.2) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2) - '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-async-generator-functions': 7.25.4(@babel/core@7.25.2) - '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-block-scoping': 7.25.0(@babel/core@7.25.2) - '@babel/plugin-transform-class-properties': 7.25.4(@babel/core@7.25.2) - '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-classes': 7.25.4(@babel/core@7.25.2) - '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.25.2) - '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.0(@babel/core@7.25.2) - '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-function-name': 7.25.1(@babel/core@7.25.2) - '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-literals': 7.25.2(@babel/core@7.25.2) - '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) - '@babel/plugin-transform-modules-systemjs': 7.25.0(@babel/core@7.25.2) - '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-private-methods': 7.25.4(@babel/core@7.25.2) - '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.25.2) - '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-unicode-sets-regex': 7.25.4(@babel/core@7.25.2) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-escapes@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-unicode-property-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-unicode-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-unicode-sets-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/preset-env@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/compat-data': 7.25.7 + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-validator-option': 7.25.7 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-import-assertions': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.7) + '@babel/plugin-transform-arrow-functions': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-async-generator-functions': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-async-to-generator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-block-scoped-functions': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-block-scoping': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-class-properties': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-class-static-block': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-classes': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-computed-properties': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-destructuring': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-dotall-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-duplicate-keys': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-dynamic-import': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-exponentiation-operator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-export-namespace-from': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-for-of': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-function-name': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-json-strings': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-literals': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-logical-assignment-operators': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-member-expression-literals': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-modules-amd': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-modules-commonjs': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-modules-systemjs': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-modules-umd': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-new-target': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-numeric-separator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-object-rest-spread': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-object-super': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-optional-catch-binding': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-optional-chaining': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-private-methods': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-private-property-in-object': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-property-literals': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-regenerator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-reserved-words': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-shorthand-properties': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-spread': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-sticky-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-template-literals': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-typeof-symbol': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-escapes': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-property-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-sets-regex': 7.25.7(@babel/core@7.25.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.7) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.7) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.7) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.7) core-js-compat: 3.38.1 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/types': 7.25.6 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/types': 7.25.7 esutils: 2.0.3 - '@babel/regjsgen@0.8.0': {} - - '@babel/runtime@7.25.6': + '@babel/runtime@7.25.7': dependencies: regenerator-runtime: 0.14.1 - '@babel/standalone@7.25.6': {} + '@babel/standalone@7.25.7': {} - '@babel/template@7.25.0': + '@babel/template@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 - '@babel/traverse@7.25.6': + '@babel/traverse@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.25.6': + '@babel/types@7.25.7': dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-string-parser': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 to-fast-properties: 2.0.0 '@cloudflare/kv-asset-handler@0.3.4': @@ -6593,16 +6589,19 @@ snapshots: dependencies: postcss-selector-parser: 6.1.2 + '@esbuild/aix-ppc64@0.19.12': + optional: true + '@esbuild/aix-ppc64@0.20.2': optional: true '@esbuild/aix-ppc64@0.21.5': optional: true - '@esbuild/android-arm64@0.17.19': + '@esbuild/android-arm64@0.18.20': optional: true - '@esbuild/android-arm64@0.18.20': + '@esbuild/android-arm64@0.19.12': optional: true '@esbuild/android-arm64@0.20.2': @@ -6611,10 +6610,10 @@ snapshots: '@esbuild/android-arm64@0.21.5': optional: true - '@esbuild/android-arm@0.17.19': + '@esbuild/android-arm@0.18.20': optional: true - '@esbuild/android-arm@0.18.20': + '@esbuild/android-arm@0.19.12': optional: true '@esbuild/android-arm@0.20.2': @@ -6623,10 +6622,10 @@ snapshots: '@esbuild/android-arm@0.21.5': optional: true - '@esbuild/android-x64@0.17.19': + '@esbuild/android-x64@0.18.20': optional: true - '@esbuild/android-x64@0.18.20': + '@esbuild/android-x64@0.19.12': optional: true '@esbuild/android-x64@0.20.2': @@ -6635,10 +6634,10 @@ snapshots: '@esbuild/android-x64@0.21.5': optional: true - '@esbuild/darwin-arm64@0.17.19': + '@esbuild/darwin-arm64@0.18.20': optional: true - '@esbuild/darwin-arm64@0.18.20': + '@esbuild/darwin-arm64@0.19.12': optional: true '@esbuild/darwin-arm64@0.20.2': @@ -6647,10 +6646,10 @@ snapshots: '@esbuild/darwin-arm64@0.21.5': optional: true - '@esbuild/darwin-x64@0.17.19': + '@esbuild/darwin-x64@0.18.20': optional: true - '@esbuild/darwin-x64@0.18.20': + '@esbuild/darwin-x64@0.19.12': optional: true '@esbuild/darwin-x64@0.20.2': @@ -6659,10 +6658,10 @@ snapshots: '@esbuild/darwin-x64@0.21.5': optional: true - '@esbuild/freebsd-arm64@0.17.19': + '@esbuild/freebsd-arm64@0.18.20': optional: true - '@esbuild/freebsd-arm64@0.18.20': + '@esbuild/freebsd-arm64@0.19.12': optional: true '@esbuild/freebsd-arm64@0.20.2': @@ -6671,10 +6670,10 @@ snapshots: '@esbuild/freebsd-arm64@0.21.5': optional: true - '@esbuild/freebsd-x64@0.17.19': + '@esbuild/freebsd-x64@0.18.20': optional: true - '@esbuild/freebsd-x64@0.18.20': + '@esbuild/freebsd-x64@0.19.12': optional: true '@esbuild/freebsd-x64@0.20.2': @@ -6683,10 +6682,10 @@ snapshots: '@esbuild/freebsd-x64@0.21.5': optional: true - '@esbuild/linux-arm64@0.17.19': + '@esbuild/linux-arm64@0.18.20': optional: true - '@esbuild/linux-arm64@0.18.20': + '@esbuild/linux-arm64@0.19.12': optional: true '@esbuild/linux-arm64@0.20.2': @@ -6695,10 +6694,10 @@ snapshots: '@esbuild/linux-arm64@0.21.5': optional: true - '@esbuild/linux-arm@0.17.19': + '@esbuild/linux-arm@0.18.20': optional: true - '@esbuild/linux-arm@0.18.20': + '@esbuild/linux-arm@0.19.12': optional: true '@esbuild/linux-arm@0.20.2': @@ -6707,10 +6706,10 @@ snapshots: '@esbuild/linux-arm@0.21.5': optional: true - '@esbuild/linux-ia32@0.17.19': + '@esbuild/linux-ia32@0.18.20': optional: true - '@esbuild/linux-ia32@0.18.20': + '@esbuild/linux-ia32@0.19.12': optional: true '@esbuild/linux-ia32@0.20.2': @@ -6719,10 +6718,10 @@ snapshots: '@esbuild/linux-ia32@0.21.5': optional: true - '@esbuild/linux-loong64@0.17.19': + '@esbuild/linux-loong64@0.18.20': optional: true - '@esbuild/linux-loong64@0.18.20': + '@esbuild/linux-loong64@0.19.12': optional: true '@esbuild/linux-loong64@0.20.2': @@ -6731,10 +6730,10 @@ snapshots: '@esbuild/linux-loong64@0.21.5': optional: true - '@esbuild/linux-mips64el@0.17.19': + '@esbuild/linux-mips64el@0.18.20': optional: true - '@esbuild/linux-mips64el@0.18.20': + '@esbuild/linux-mips64el@0.19.12': optional: true '@esbuild/linux-mips64el@0.20.2': @@ -6743,10 +6742,10 @@ snapshots: '@esbuild/linux-mips64el@0.21.5': optional: true - '@esbuild/linux-ppc64@0.17.19': + '@esbuild/linux-ppc64@0.18.20': optional: true - '@esbuild/linux-ppc64@0.18.20': + '@esbuild/linux-ppc64@0.19.12': optional: true '@esbuild/linux-ppc64@0.20.2': @@ -6755,10 +6754,10 @@ snapshots: '@esbuild/linux-ppc64@0.21.5': optional: true - '@esbuild/linux-riscv64@0.17.19': + '@esbuild/linux-riscv64@0.18.20': optional: true - '@esbuild/linux-riscv64@0.18.20': + '@esbuild/linux-riscv64@0.19.12': optional: true '@esbuild/linux-riscv64@0.20.2': @@ -6767,10 +6766,10 @@ snapshots: '@esbuild/linux-riscv64@0.21.5': optional: true - '@esbuild/linux-s390x@0.17.19': + '@esbuild/linux-s390x@0.18.20': optional: true - '@esbuild/linux-s390x@0.18.20': + '@esbuild/linux-s390x@0.19.12': optional: true '@esbuild/linux-s390x@0.20.2': @@ -6779,10 +6778,10 @@ snapshots: '@esbuild/linux-s390x@0.21.5': optional: true - '@esbuild/linux-x64@0.17.19': + '@esbuild/linux-x64@0.18.20': optional: true - '@esbuild/linux-x64@0.18.20': + '@esbuild/linux-x64@0.19.12': optional: true '@esbuild/linux-x64@0.20.2': @@ -6791,10 +6790,10 @@ snapshots: '@esbuild/linux-x64@0.21.5': optional: true - '@esbuild/netbsd-x64@0.17.19': + '@esbuild/netbsd-x64@0.18.20': optional: true - '@esbuild/netbsd-x64@0.18.20': + '@esbuild/netbsd-x64@0.19.12': optional: true '@esbuild/netbsd-x64@0.20.2': @@ -6803,10 +6802,10 @@ snapshots: '@esbuild/netbsd-x64@0.21.5': optional: true - '@esbuild/openbsd-x64@0.17.19': + '@esbuild/openbsd-x64@0.18.20': optional: true - '@esbuild/openbsd-x64@0.18.20': + '@esbuild/openbsd-x64@0.19.12': optional: true '@esbuild/openbsd-x64@0.20.2': @@ -6815,10 +6814,10 @@ snapshots: '@esbuild/openbsd-x64@0.21.5': optional: true - '@esbuild/sunos-x64@0.17.19': + '@esbuild/sunos-x64@0.18.20': optional: true - '@esbuild/sunos-x64@0.18.20': + '@esbuild/sunos-x64@0.19.12': optional: true '@esbuild/sunos-x64@0.20.2': @@ -6827,10 +6826,10 @@ snapshots: '@esbuild/sunos-x64@0.21.5': optional: true - '@esbuild/win32-arm64@0.17.19': + '@esbuild/win32-arm64@0.18.20': optional: true - '@esbuild/win32-arm64@0.18.20': + '@esbuild/win32-arm64@0.19.12': optional: true '@esbuild/win32-arm64@0.20.2': @@ -6839,10 +6838,10 @@ snapshots: '@esbuild/win32-arm64@0.21.5': optional: true - '@esbuild/win32-ia32@0.17.19': + '@esbuild/win32-ia32@0.18.20': optional: true - '@esbuild/win32-ia32@0.18.20': + '@esbuild/win32-ia32@0.19.12': optional: true '@esbuild/win32-ia32@0.20.2': @@ -6851,10 +6850,10 @@ snapshots: '@esbuild/win32-ia32@0.21.5': optional: true - '@esbuild/win32-x64@0.17.19': + '@esbuild/win32-x64@0.18.20': optional: true - '@esbuild/win32-x64@0.18.20': + '@esbuild/win32-x64@0.19.12': optional: true '@esbuild/win32-x64@0.20.2': @@ -6863,12 +6862,12 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.0': {} + '@eslint-community/regexpp@4.11.1': {} '@eslint/eslintrc@2.1.4': dependencies: @@ -6884,7 +6883,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@8.57.1': {} '@faker-js/faker@8.4.1': {} @@ -6914,12 +6913,12 @@ snapshots: dependencies: tslib: 2.7.0 - '@headlessui/vue@1.7.22(vue@3.4.8(typescript@5.5.4))': + '@headlessui/vue@1.7.23(vue@3.4.8(typescript@5.6.2))': dependencies: - '@tanstack/vue-virtual': 3.10.7(vue@3.4.8(typescript@5.5.4)) - vue: 3.4.8(typescript@5.5.4) + '@tanstack/vue-virtual': 3.10.8(vue@3.4.8(typescript@5.6.2)) + vue: 3.4.8(typescript@5.6.2) - '@humanwhocodes/config-array@0.11.14': + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.7 @@ -6937,7 +6936,7 @@ snapshots: '@iconify/types@2.0.0': {} - '@iconify/utils@2.1.32': + '@iconify/utils@2.1.33': dependencies: '@antfu/install-pkg': 0.4.1 '@antfu/utils': 0.7.10 @@ -6949,10 +6948,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@intlify/bundle-utils@8.0.0(vue-i18n@9.14.0(vue@3.4.8(typescript@5.5.4)))': + '@intlify/bundle-utils@8.0.0(vue-i18n@9.14.1(vue@3.4.8(typescript@5.6.2)))': dependencies: - '@intlify/message-compiler': 9.14.0 - '@intlify/shared': 9.14.0 + '@intlify/message-compiler': 9.14.1 + '@intlify/shared': 9.14.1 acorn: 8.12.1 escodegen: 2.1.0 estree-walker: 2.0.2 @@ -6961,26 +6960,26 @@ snapshots: source-map-js: 1.2.1 yaml-eslint-parser: 1.2.3 optionalDependencies: - vue-i18n: 9.14.0(vue@3.4.8(typescript@5.5.4)) + vue-i18n: 9.14.1(vue@3.4.8(typescript@5.6.2)) - '@intlify/core-base@9.14.0': + '@intlify/core-base@9.14.1': dependencies: - '@intlify/message-compiler': 9.14.0 - '@intlify/shared': 9.14.0 + '@intlify/message-compiler': 9.14.1 + '@intlify/shared': 9.14.1 - '@intlify/message-compiler@9.14.0': + '@intlify/message-compiler@9.14.1': dependencies: - '@intlify/shared': 9.14.0 + '@intlify/shared': 9.14.1 source-map-js: 1.2.1 - '@intlify/shared@9.14.0': {} + '@intlify/shared@9.14.1': {} - '@intlify/unplugin-vue-i18n@4.0.0(rollup@4.21.2)(vue-i18n@9.14.0(vue@3.4.8(typescript@5.5.4)))(webpack-sources@3.2.3)': + '@intlify/unplugin-vue-i18n@4.0.0(rollup@4.24.0)(vue-i18n@9.14.1(vue@3.4.8(typescript@5.6.2)))(webpack-sources@3.2.3)': dependencies: - '@intlify/bundle-utils': 8.0.0(vue-i18n@9.14.0(vue@3.4.8(typescript@5.5.4))) - '@intlify/shared': 9.14.0 - '@rollup/pluginutils': 5.1.0(rollup@4.21.2) - '@vue/compiler-sfc': 3.5.3 + '@intlify/bundle-utils': 8.0.0(vue-i18n@9.14.1(vue@3.4.8(typescript@5.6.2))) + '@intlify/shared': 9.14.1 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@vue/compiler-sfc': 3.5.11 debug: 4.3.7 fast-glob: 3.3.2 js-yaml: 4.1.0 @@ -6988,9 +6987,9 @@ snapshots: pathe: 1.1.2 picocolors: 1.1.0 source-map-js: 1.2.1 - unplugin: 1.13.1(webpack-sources@3.2.3) + unplugin: 1.14.1(webpack-sources@3.2.3) optionalDependencies: - vue-i18n: 9.14.0(vue@3.4.8(typescript@5.5.4)) + vue-i18n: 9.14.1(vue@3.4.8(typescript@5.6.2)) transitivePeerDependencies: - rollup - supports-color @@ -7040,13 +7039,13 @@ snapshots: string-argv: 0.3.2 type-detect: 4.1.0 - '@koa/router@12.0.1': + '@koa/router@12.0.2': dependencies: debug: 4.3.7 http-errors: 2.0.0 koa-compose: 4.1.0 methods: 1.1.2 - path-to-regexp: 6.2.2 + path-to-regexp: 6.3.0 transitivePeerDependencies: - supports-color @@ -7065,13 +7064,13 @@ snapshots: - encoding - supports-color - '@netlify/functions@2.8.1': + '@netlify/functions@2.8.2': dependencies: - '@netlify/serverless-functions-api': 1.19.1 + '@netlify/serverless-functions-api': 1.26.1 '@netlify/node-cookies@0.1.0': {} - '@netlify/serverless-functions-api@1.19.1': + '@netlify/serverless-functions-api@1.26.1': dependencies: '@netlify/node-cookies': 0.1.0 urlpattern-polyfill: 8.0.2 @@ -7092,10 +7091,10 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@nuxt/kit@3.13.1(rollup@4.21.2)(webpack-sources@3.2.3)': + '@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)': dependencies: - '@nuxt/schema': 3.13.1(rollup@4.21.2)(webpack-sources@3.2.3) - c12: 1.11.2 + '@nuxt/schema': 3.13.2(rollup@4.24.0)(webpack-sources@3.2.3) + c12: 1.11.2(magicast@0.3.5) consola: 3.2.3 defu: 6.1.4 destr: 2.0.3 @@ -7112,18 +7111,18 @@ snapshots: semver: 7.6.3 ufo: 1.5.4 unctx: 2.3.1(webpack-sources@3.2.3) - unimport: 3.11.1(rollup@4.21.2)(webpack-sources@3.2.3) - untyped: 1.4.2 + unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3) + untyped: 1.5.0 transitivePeerDependencies: - magicast - rollup - supports-color - webpack-sources - '@nuxt/kit@3.6.5(rollup@4.21.2)(webpack-sources@3.2.3)': + '@nuxt/kit@3.7.4(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)': dependencies: - '@nuxt/schema': 3.6.5(rollup@4.21.2)(webpack-sources@3.2.3) - c12: 1.11.2 + '@nuxt/schema': 3.7.4(rollup@4.24.0)(webpack-sources@3.2.3) + c12: 1.11.2(magicast@0.3.5) consola: 3.2.3 defu: 6.1.4 globby: 13.2.2 @@ -7136,16 +7135,17 @@ snapshots: pkg-types: 1.2.0 scule: 1.3.0 semver: 7.6.3 + ufo: 1.5.4 unctx: 2.3.1(webpack-sources@3.2.3) - unimport: 3.11.1(rollup@4.21.2)(webpack-sources@3.2.3) - untyped: 1.4.2 + unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3) + untyped: 1.5.0 transitivePeerDependencies: - magicast - rollup - supports-color - webpack-sources - '@nuxt/schema@3.13.1(rollup@4.21.2)(webpack-sources@3.2.3)': + '@nuxt/schema@3.13.2(rollup@4.24.0)(webpack-sources@3.2.3)': dependencies: compatx: 0.1.8 consola: 3.2.3 @@ -7157,15 +7157,17 @@ snapshots: std-env: 3.7.0 ufo: 1.5.4 uncrypto: 0.1.3 - unimport: 3.11.1(rollup@4.21.2)(webpack-sources@3.2.3) - untyped: 1.4.2 + unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3) + untyped: 1.5.0 transitivePeerDependencies: - rollup - supports-color - webpack-sources - '@nuxt/schema@3.6.5(rollup@4.21.2)(webpack-sources@3.2.3)': + '@nuxt/schema@3.7.4(rollup@4.24.0)(webpack-sources@3.2.3)': dependencies: + '@nuxt/ui-templates': 1.3.4 + consola: 3.2.3 defu: 6.1.4 hookable: 5.5.3 pathe: 1.1.2 @@ -7173,28 +7175,29 @@ snapshots: postcss-import-resolver: 2.0.0 std-env: 3.7.0 ufo: 1.5.4 - unimport: 3.11.1(rollup@4.21.2)(webpack-sources@3.2.3) - untyped: 1.4.2 + unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3) + untyped: 1.5.0 transitivePeerDependencies: - rollup - supports-color - webpack-sources - '@nuxt/telemetry@2.5.4(rollup@4.21.2)(webpack-sources@3.2.3)': + '@nuxt/telemetry@2.6.0(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)': dependencies: - '@nuxt/kit': 3.13.1(rollup@4.21.2)(webpack-sources@3.2.3) + '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) ci-info: 4.0.0 consola: 3.2.3 create-require: 1.1.1 defu: 6.1.4 destr: 2.0.3 dotenv: 16.4.5 - git-url-parse: 14.1.0 + git-url-parse: 15.0.0 is-docker: 3.0.0 jiti: 1.21.6 mri: 1.2.0 nanoid: 5.0.7 - ofetch: 1.3.4 + ofetch: 1.4.0 + package-manager-detector: 0.2.0 parse-git-config: 3.0.0 pathe: 1.1.2 rc9: 2.1.2 @@ -7207,48 +7210,49 @@ snapshots: '@nuxt/ui-templates@1.3.4': {} - '@nuxt/vite-builder@3.6.5(@types/node@22.5.4)(eslint@8.57.0)(optionator@0.9.4)(rollup@4.21.2)(terser@5.31.6)(typescript@5.5.4)(vue@3.4.8(typescript@5.5.4))(webpack-sources@3.2.3)': + '@nuxt/vite-builder@3.7.4(@types/node@22.7.4)(eslint@8.57.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.2)(vue@3.4.8(typescript@5.6.2))(webpack-sources@3.2.3)': dependencies: - '@nuxt/kit': 3.6.5(rollup@4.21.2)(webpack-sources@3.2.3) - '@rollup/plugin-replace': 5.0.7(rollup@4.21.2) - '@vitejs/plugin-vue': 4.6.2(vite@4.3.9(@types/node@22.5.4)(terser@5.31.6))(vue@3.4.8(typescript@5.5.4)) - '@vitejs/plugin-vue-jsx': 3.1.0(vite@4.3.9(@types/node@22.5.4)(terser@5.31.6))(vue@3.4.8(typescript@5.5.4)) - autoprefixer: 10.4.20(postcss@8.4.45) + '@nuxt/kit': 3.7.4(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) + '@rollup/plugin-replace': 5.0.7(rollup@4.24.0) + '@vitejs/plugin-vue': 4.6.2(vite@4.5.5(@types/node@22.7.4)(terser@5.34.1))(vue@3.4.8(typescript@5.6.2)) + '@vitejs/plugin-vue-jsx': 3.1.0(vite@4.5.5(@types/node@22.7.4)(terser@5.34.1))(vue@3.4.8(typescript@5.6.2)) + autoprefixer: 10.4.20(postcss@8.4.47) clear: 0.1.0 consola: 3.2.3 - cssnano: 6.1.2(postcss@8.4.45) + cssnano: 6.1.2(postcss@8.4.47) defu: 6.1.4 - esbuild: 0.18.20 + esbuild: 0.19.12 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 externality: 1.0.2 fs-extra: 11.2.0 get-port-please: 3.1.2 - h3: 1.12.0 + h3: 1.13.0 knitwork: 1.1.0 magic-string: 0.30.11 mlly: 1.7.1 - ohash: 1.1.3 + ohash: 1.1.4 pathe: 1.1.2 perfect-debounce: 1.0.0 pkg-types: 1.2.0 - postcss: 8.4.45 - postcss-import: 15.1.0(postcss@8.4.45) - postcss-url: 10.1.3(postcss@8.4.45) - rollup-plugin-visualizer: 5.12.0(rollup@4.21.2) + postcss: 8.4.47 + postcss-import: 15.1.0(postcss@8.4.47) + postcss-url: 10.1.3(postcss@8.4.47) + rollup-plugin-visualizer: 5.12.0(rollup@4.24.0) std-env: 3.7.0 strip-literal: 1.3.0 ufo: 1.5.4 - unplugin: 1.13.1(webpack-sources@3.2.3) - vite: 4.3.9(@types/node@22.5.4)(terser@5.31.6) - vite-node: 0.33.0(@types/node@22.5.4)(terser@5.31.6) - vite-plugin-checker: 0.6.4(eslint@8.57.0)(optionator@0.9.4)(typescript@5.5.4)(vite@4.3.9(@types/node@22.5.4)(terser@5.31.6)) - vue: 3.4.8(typescript@5.5.4) - vue-bundle-renderer: 1.0.3 + unplugin: 1.14.1(webpack-sources@3.2.3) + vite: 4.5.5(@types/node@22.7.4)(terser@5.34.1) + vite-node: 0.33.0(@types/node@22.7.4)(terser@5.34.1) + vite-plugin-checker: 0.6.4(eslint@8.57.1)(optionator@0.9.4)(typescript@5.6.2)(vite@4.5.5(@types/node@22.7.4)(terser@5.34.1)) + vue: 3.4.8(typescript@5.6.2) + vue-bundle-renderer: 2.1.1 transitivePeerDependencies: - '@types/node' - eslint - less + - lightningcss - magicast - meow - optionator @@ -7260,21 +7264,20 @@ snapshots: - supports-color - terser - typescript - - uWebSockets.js - vls - vti - vue-tsc - webpack-sources - '@nuxtjs/eslint-config-typescript@12.1.0(eslint@8.57.0)(typescript@5.5.4)': + '@nuxtjs/eslint-config-typescript@12.1.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: - '@nuxtjs/eslint-config': 12.0.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0) - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0) - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) - eslint-plugin-vue: 9.28.0(eslint@8.57.0) + '@nuxtjs/eslint-config': 12.0.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-vue: 9.28.0(eslint@8.57.1) transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -7282,16 +7285,16 @@ snapshots: - supports-color - typescript - '@nuxtjs/eslint-config@12.0.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)': + '@nuxtjs/eslint-config@12.0.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1)': dependencies: - eslint: 8.57.0 - eslint-config-standard: 17.1.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint-plugin-n@15.7.0(eslint@8.57.0))(eslint-plugin-promise@6.6.0(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) - eslint-plugin-n: 15.7.0(eslint@8.57.0) - eslint-plugin-node: 11.1.0(eslint@8.57.0) - eslint-plugin-promise: 6.6.0(eslint@8.57.0) - eslint-plugin-unicorn: 44.0.2(eslint@8.57.0) - eslint-plugin-vue: 9.28.0(eslint@8.57.0) + eslint: 8.57.1 + eslint-config-standard: 17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-n: 15.7.0(eslint@8.57.1) + eslint-plugin-node: 11.1.0(eslint@8.57.1) + eslint-plugin-promise: 6.6.0(eslint@8.57.1) + eslint-plugin-unicorn: 44.0.2(eslint@8.57.1) + eslint-plugin-vue: 9.28.0(eslint@8.57.1) local-pkg: 0.4.3 transitivePeerDependencies: - '@typescript-eslint/parser' @@ -7299,18 +7302,18 @@ snapshots: - eslint-import-resolver-webpack - supports-color - '@nuxtjs/tailwindcss@6.12.1(rollup@4.21.2)(webpack-sources@3.2.3)': + '@nuxtjs/tailwindcss@6.12.1(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)': dependencies: - '@nuxt/kit': 3.13.1(rollup@4.21.2)(webpack-sources@3.2.3) - autoprefixer: 10.4.20(postcss@8.4.45) + '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) + autoprefixer: 10.4.20(postcss@8.4.47) consola: 3.2.3 defu: 6.1.4 - h3: 1.12.0 + h3: 1.13.0 pathe: 1.1.2 - postcss: 8.4.45 - postcss-nesting: 12.1.5(postcss@8.4.45) - tailwind-config-viewer: 2.0.4(tailwindcss@3.4.10) - tailwindcss: 3.4.10 + postcss: 8.4.47 + postcss-nesting: 12.1.5(postcss@8.4.47) + tailwind-config-viewer: 2.0.4(tailwindcss@3.4.13) + tailwindcss: 3.4.13 ufo: 1.5.4 unctx: 2.3.1(webpack-sources@3.2.3) transitivePeerDependencies: @@ -7318,7 +7321,6 @@ snapshots: - rollup - supports-color - ts-node - - uWebSockets.js - webpack-sources '@parcel/watcher-android-arm64@2.4.1': @@ -7382,10 +7384,10 @@ snapshots: '@parcel/watcher-win32-ia32': 2.4.1 '@parcel/watcher-win32-x64': 2.4.1 - '@pinia/nuxt@0.5.4(rollup@4.21.2)(typescript@5.5.4)(vue@3.4.8(typescript@5.5.4))(webpack-sources@3.2.3)': + '@pinia/nuxt@0.5.5(magicast@0.3.5)(rollup@4.24.0)(typescript@5.6.2)(vue@3.4.8(typescript@5.6.2))(webpack-sources@3.2.3)': dependencies: - '@nuxt/kit': 3.13.1(rollup@4.21.2)(webpack-sources@3.2.3) - pinia: 2.2.2(typescript@5.5.4)(vue@3.4.8(typescript@5.5.4)) + '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) + pinia: 2.2.4(typescript@5.6.2)(vue@3.4.8(typescript@5.6.2)) transitivePeerDependencies: - '@vue/composition-api' - magicast @@ -7400,171 +7402,167 @@ snapshots: '@pkgr/core@0.1.1': {} - '@rollup/plugin-alias@5.1.0(rollup@4.21.2)': - dependencies: - slash: 4.0.0 + '@rollup/plugin-alias@5.1.1(rollup@4.24.0)': optionalDependencies: - rollup: 4.21.2 + rollup: 4.24.0 - '@rollup/plugin-babel@5.3.1(@babel/core@7.25.2)(rollup@2.79.1)': + '@rollup/plugin-babel@5.3.1(@babel/core@7.25.7)(rollup@2.79.2)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - rollup: 2.79.1 + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + rollup: 2.79.2 transitivePeerDependencies: - supports-color - '@rollup/plugin-commonjs@25.0.8(rollup@4.21.2)': + '@rollup/plugin-commonjs@25.0.8(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.2) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.11 optionalDependencies: - rollup: 4.21.2 + rollup: 4.24.0 - '@rollup/plugin-inject@5.0.5(rollup@4.21.2)': + '@rollup/plugin-inject@5.0.5(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.2) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) estree-walker: 2.0.2 magic-string: 0.30.11 optionalDependencies: - rollup: 4.21.2 + rollup: 4.24.0 - '@rollup/plugin-json@6.1.0(rollup@4.21.2)': + '@rollup/plugin-json@6.1.0(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.2) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) optionalDependencies: - rollup: 4.21.2 + rollup: 4.24.0 - '@rollup/plugin-node-resolve@15.2.3(rollup@2.79.1)': + '@rollup/plugin-node-resolve@15.3.0(rollup@2.79.2)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + '@rollup/pluginutils': 5.1.2(rollup@2.79.2) '@types/resolve': 1.20.2 deepmerge: 4.3.1 - is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 optionalDependencies: - rollup: 2.79.1 + rollup: 2.79.2 - '@rollup/plugin-node-resolve@15.2.3(rollup@4.21.2)': + '@rollup/plugin-node-resolve@15.3.0(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.2) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 - is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 optionalDependencies: - rollup: 4.21.2 + rollup: 4.24.0 - '@rollup/plugin-replace@2.4.2(rollup@2.79.1)': + '@rollup/plugin-replace@2.4.2(rollup@2.79.2)': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) magic-string: 0.25.9 - rollup: 2.79.1 + rollup: 2.79.2 - '@rollup/plugin-replace@5.0.7(rollup@4.21.2)': + '@rollup/plugin-replace@5.0.7(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.2) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) magic-string: 0.30.11 optionalDependencies: - rollup: 4.21.2 + rollup: 4.24.0 - '@rollup/plugin-terser@0.4.4(rollup@2.79.1)': + '@rollup/plugin-terser@0.4.4(rollup@2.79.2)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 - terser: 5.31.6 + terser: 5.34.1 optionalDependencies: - rollup: 2.79.1 + rollup: 2.79.2 - '@rollup/plugin-terser@0.4.4(rollup@4.21.2)': + '@rollup/plugin-terser@0.4.4(rollup@4.24.0)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 - terser: 5.31.6 + terser: 5.34.1 optionalDependencies: - rollup: 4.21.2 + rollup: 4.24.0 - '@rollup/pluginutils@3.1.0(rollup@2.79.1)': + '@rollup/pluginutils@3.1.0(rollup@2.79.2)': dependencies: '@types/estree': 0.0.39 estree-walker: 1.0.1 picomatch: 2.3.1 - rollup: 2.79.1 + rollup: 2.79.2 '@rollup/pluginutils@4.2.1': dependencies: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/pluginutils@5.1.0(rollup@2.79.1)': + '@rollup/pluginutils@5.1.2(rollup@2.79.2)': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 2.79.1 + rollup: 2.79.2 - '@rollup/pluginutils@5.1.0(rollup@4.21.2)': + '@rollup/pluginutils@5.1.2(rollup@4.24.0)': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.21.2 + rollup: 4.24.0 - '@rollup/rollup-android-arm-eabi@4.21.2': + '@rollup/rollup-android-arm-eabi@4.24.0': optional: true - '@rollup/rollup-android-arm64@4.21.2': + '@rollup/rollup-android-arm64@4.24.0': optional: true - '@rollup/rollup-darwin-arm64@4.21.2': + '@rollup/rollup-darwin-arm64@4.24.0': optional: true - '@rollup/rollup-darwin-x64@4.21.2': + '@rollup/rollup-darwin-x64@4.24.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.21.2': + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.21.2': + '@rollup/rollup-linux-arm-musleabihf@4.24.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.21.2': + '@rollup/rollup-linux-arm64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.21.2': + '@rollup/rollup-linux-arm64-musl@4.24.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.21.2': + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.21.2': + '@rollup/rollup-linux-riscv64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.21.2': + '@rollup/rollup-linux-s390x-gnu@4.24.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.21.2': + '@rollup/rollup-linux-x64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-x64-musl@4.21.2': + '@rollup/rollup-linux-x64-musl@4.24.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.21.2': + '@rollup/rollup-win32-arm64-msvc@4.24.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.21.2': + '@rollup/rollup-win32-ia32-msvc@4.24.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.21.2': + '@rollup/rollup-win32-x64-msvc@4.24.0': optional: true '@rtsao/scc@1.1.0': {} @@ -7580,29 +7578,29 @@ snapshots: magic-string: 0.25.9 string.prototype.matchall: 4.0.11 - '@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.4.10)': + '@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.4.13)': dependencies: - tailwindcss: 3.4.10 + tailwindcss: 3.4.13 - '@tailwindcss/forms@0.5.9(tailwindcss@3.4.10)': + '@tailwindcss/forms@0.5.9(tailwindcss@3.4.13)': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.10 + tailwindcss: 3.4.13 - '@tailwindcss/typography@0.5.15(tailwindcss@3.4.10)': + '@tailwindcss/typography@0.5.15(tailwindcss@3.4.13)': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.10 + tailwindcss: 3.4.13 - '@tanstack/virtual-core@3.10.7': {} + '@tanstack/virtual-core@3.10.8': {} - '@tanstack/vue-virtual@3.10.7(vue@3.4.8(typescript@5.5.4))': + '@tanstack/vue-virtual@3.10.8(vue@3.4.8(typescript@5.6.2))': dependencies: - '@tanstack/virtual-core': 3.10.7 - vue: 3.4.8(typescript@5.5.4) + '@tanstack/virtual-core': 3.10.8 + vue: 3.4.8(typescript@5.6.2) '@trysound/sax@0.2.0': {} @@ -7612,16 +7610,16 @@ snapshots: '@types/eslint@8.56.12': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 '@types/estree@0.0.39': {} - '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} '@types/http-proxy@1.17.15': dependencies: - '@types/node': 22.5.4 + '@types/node': 22.7.4 '@types/json-schema@7.0.15': {} @@ -7638,7 +7636,7 @@ snapshots: '@types/mdurl@1.0.5': {} - '@types/node@22.5.4': + '@types/node@22.7.4': dependencies: undici-types: 6.19.8 @@ -7652,36 +7650,36 @@ snapshots: '@types/web-bluetooth@0.0.20': {} - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)': dependencies: - '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 - eslint: 8.57.0 + eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 - eslint: 8.57.0 + eslint: 8.57.1 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color @@ -7690,21 +7688,21 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2) debug: 4.3.7 - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.5.4) + eslint: 8.57.1 + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color '@typescript-eslint/types@6.21.0': {} - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.6.2)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 @@ -7713,21 +7711,21 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - eslint: 8.57.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) + eslint: 8.57.1 semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -7740,33 +7738,33 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@unhead/dom@1.11.1': + '@unhead/dom@1.11.7': dependencies: - '@unhead/schema': 1.11.1 - '@unhead/shared': 1.11.1 + '@unhead/schema': 1.11.7 + '@unhead/shared': 1.11.7 - '@unhead/schema@1.11.1': + '@unhead/schema@1.11.7': dependencies: hookable: 5.5.3 zhead: 2.2.4 - '@unhead/shared@1.11.1': + '@unhead/shared@1.11.7': dependencies: - '@unhead/schema': 1.11.1 + '@unhead/schema': 1.11.7 - '@unhead/ssr@1.11.1': + '@unhead/ssr@1.11.7': dependencies: - '@unhead/schema': 1.11.1 - '@unhead/shared': 1.11.1 + '@unhead/schema': 1.11.7 + '@unhead/shared': 1.11.7 - '@unhead/vue@1.11.1(vue@3.4.8(typescript@5.5.4))': + '@unhead/vue@1.11.7(vue@3.4.8(typescript@5.6.2))': dependencies: - '@unhead/schema': 1.11.1 - '@unhead/shared': 1.11.1 + '@unhead/schema': 1.11.7 + '@unhead/shared': 1.11.7 defu: 6.1.4 hookable: 5.5.3 - unhead: 1.11.1 - vue: 3.4.8(typescript@5.5.4) + unhead: 1.11.7 + vue: 3.4.8(typescript@5.6.2) '@vercel/nft@0.26.5': dependencies: @@ -7786,12 +7784,12 @@ snapshots: - encoding - supports-color - '@vite-pwa/nuxt@0.5.0(rollup@4.21.2)(vite@4.3.9(@types/node@22.5.4)(terser@5.31.6))(webpack-sources@3.2.3)(workbox-build@7.1.1)(workbox-window@7.1.0)': + '@vite-pwa/nuxt@0.5.0(magicast@0.3.5)(rollup@4.24.0)(vite@4.5.5(@types/node@22.7.4)(terser@5.34.1))(webpack-sources@3.2.3)(workbox-build@7.1.1)(workbox-window@7.1.0)': dependencies: - '@nuxt/kit': 3.13.1(rollup@4.21.2)(webpack-sources@3.2.3) + '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) pathe: 1.1.2 ufo: 1.5.4 - vite-plugin-pwa: 0.20.5(vite@4.3.9(@types/node@22.5.4)(terser@5.31.6))(workbox-build@7.1.1)(workbox-window@7.1.0) + vite-plugin-pwa: 0.20.5(vite@4.5.5(@types/node@22.7.4)(terser@5.34.1))(workbox-build@7.1.1)(workbox-window@7.1.0) transitivePeerDependencies: - '@vite-pwa/assets-generator' - magicast @@ -7802,20 +7800,20 @@ snapshots: - workbox-build - workbox-window - '@vitejs/plugin-vue-jsx@3.1.0(vite@4.3.9(@types/node@22.5.4)(terser@5.31.6))(vue@3.4.8(typescript@5.5.4))': + '@vitejs/plugin-vue-jsx@3.1.0(vite@4.5.5(@types/node@22.7.4)(terser@5.34.1))(vue@3.4.8(typescript@5.6.2))': dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) - '@vue/babel-plugin-jsx': 1.2.4(@babel/core@7.25.2) - vite: 4.3.9(@types/node@22.5.4)(terser@5.31.6) - vue: 3.4.8(typescript@5.5.4) + '@babel/core': 7.25.7 + '@babel/plugin-transform-typescript': 7.25.7(@babel/core@7.25.7) + '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.25.7) + vite: 4.5.5(@types/node@22.7.4)(terser@5.34.1) + vue: 3.4.8(typescript@5.6.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@4.6.2(vite@4.3.9(@types/node@22.5.4)(terser@5.31.6))(vue@3.4.8(typescript@5.5.4))': + '@vitejs/plugin-vue@4.6.2(vite@4.5.5(@types/node@22.7.4)(terser@5.34.1))(vue@3.4.8(typescript@5.6.2))': dependencies: - vite: 4.3.9(@types/node@22.5.4)(terser@5.31.6) - vue: 3.4.8(typescript@5.5.4) + vite: 4.5.5(@types/node@22.7.4)(terser@5.34.1) + vue: 3.4.8(typescript@5.6.2) '@vitest/expect@1.6.0': dependencies: @@ -7846,61 +7844,61 @@ snapshots: loupe: 2.3.7 pretty-format: 29.7.0 - '@vue-macros/common@1.12.3(rollup@4.21.2)(vue@3.4.8(typescript@5.5.4))': + '@vue-macros/common@1.14.0(rollup@4.24.0)(vue@3.4.8(typescript@5.6.2))': dependencies: - '@babel/types': 7.25.6 - '@rollup/pluginutils': 5.1.0(rollup@4.21.2) - '@vue/compiler-sfc': 3.5.3 - ast-kit: 1.1.0 + '@babel/types': 7.25.7 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@vue/compiler-sfc': 3.5.11 + ast-kit: 1.2.1 local-pkg: 0.5.0 magic-string-ast: 0.6.2 optionalDependencies: - vue: 3.4.8(typescript@5.5.4) + vue: 3.4.8(typescript@5.6.2) transitivePeerDependencies: - rollup - '@vue/babel-helper-vue-transform-on@1.2.4': {} + '@vue/babel-helper-vue-transform-on@1.2.5': {} - '@vue/babel-plugin-jsx@1.2.4(@babel/core@7.25.2)': + '@vue/babel-plugin-jsx@1.2.5(@babel/core@7.25.7)': dependencies: - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 - '@vue/babel-helper-vue-transform-on': 1.2.4 - '@vue/babel-plugin-resolve-type': 1.2.4(@babel/core@7.25.2) + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + '@vue/babel-helper-vue-transform-on': 1.2.5 + '@vue/babel-plugin-resolve-type': 1.2.5(@babel/core@7.25.7) html-tags: 3.3.1 svg-tags: 1.0.0 optionalDependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.25.7 transitivePeerDependencies: - supports-color - '@vue/babel-plugin-resolve-type@1.2.4(@babel/core@7.25.2)': + '@vue/babel-plugin-resolve-type@1.2.5(@babel/core@7.25.7)': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/parser': 7.25.6 - '@vue/compiler-sfc': 3.5.3 + '@babel/code-frame': 7.25.7 + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/parser': 7.25.7 + '@vue/compiler-sfc': 3.5.11 transitivePeerDependencies: - supports-color '@vue/compiler-core@3.4.8': dependencies: - '@babel/parser': 7.25.6 + '@babel/parser': 7.25.7 '@vue/shared': 3.4.8 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-core@3.5.3': + '@vue/compiler-core@3.5.11': dependencies: - '@babel/parser': 7.25.6 - '@vue/shared': 3.5.3 + '@babel/parser': 7.25.7 + '@vue/shared': 3.5.11 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 @@ -7910,33 +7908,33 @@ snapshots: '@vue/compiler-core': 3.4.8 '@vue/shared': 3.4.8 - '@vue/compiler-dom@3.5.3': + '@vue/compiler-dom@3.5.11': dependencies: - '@vue/compiler-core': 3.5.3 - '@vue/shared': 3.5.3 + '@vue/compiler-core': 3.5.11 + '@vue/shared': 3.5.11 '@vue/compiler-sfc@3.4.8': dependencies: - '@babel/parser': 7.25.6 + '@babel/parser': 7.25.7 '@vue/compiler-core': 3.4.8 '@vue/compiler-dom': 3.4.8 '@vue/compiler-ssr': 3.4.8 '@vue/shared': 3.4.8 estree-walker: 2.0.2 magic-string: 0.30.11 - postcss: 8.4.45 + postcss: 8.4.47 source-map-js: 1.2.1 - '@vue/compiler-sfc@3.5.3': + '@vue/compiler-sfc@3.5.11': dependencies: - '@babel/parser': 7.25.6 - '@vue/compiler-core': 3.5.3 - '@vue/compiler-dom': 3.5.3 - '@vue/compiler-ssr': 3.5.3 - '@vue/shared': 3.5.3 + '@babel/parser': 7.25.7 + '@vue/compiler-core': 3.5.11 + '@vue/compiler-dom': 3.5.11 + '@vue/compiler-ssr': 3.5.11 + '@vue/shared': 3.5.11 estree-walker: 2.0.2 magic-string: 0.30.11 - postcss: 8.4.45 + postcss: 8.4.47 source-map-js: 1.2.1 '@vue/compiler-ssr@3.4.8': @@ -7944,12 +7942,12 @@ snapshots: '@vue/compiler-dom': 3.4.8 '@vue/shared': 3.4.8 - '@vue/compiler-ssr@3.5.3': + '@vue/compiler-ssr@3.5.11': dependencies: - '@vue/compiler-dom': 3.5.3 - '@vue/shared': 3.5.3 + '@vue/compiler-dom': 3.5.11 + '@vue/shared': 3.5.11 - '@vue/devtools-api@6.6.3': {} + '@vue/devtools-api@6.6.4': {} '@vue/reactivity@3.4.8': dependencies: @@ -7966,41 +7964,41 @@ snapshots: '@vue/shared': 3.4.8 csstype: 3.1.3 - '@vue/server-renderer@3.4.8(vue@3.4.8(typescript@5.5.4))': + '@vue/server-renderer@3.4.8(vue@3.4.8(typescript@5.6.2))': dependencies: '@vue/compiler-ssr': 3.4.8 '@vue/shared': 3.4.8 - vue: 3.4.8(typescript@5.5.4) + vue: 3.4.8(typescript@5.6.2) '@vue/shared@3.4.8': {} - '@vue/shared@3.5.3': {} + '@vue/shared@3.5.11': {} - '@vuepic/vue-datepicker@8.8.1(vue@3.4.8(typescript@5.5.4))': + '@vuepic/vue-datepicker@8.8.1(vue@3.4.8(typescript@5.6.2))': dependencies: date-fns: 3.6.0 - vue: 3.4.8(typescript@5.5.4) + vue: 3.4.8(typescript@5.6.2) - '@vueuse/core@10.11.1(vue@3.4.8(typescript@5.5.4))': + '@vueuse/core@10.11.1(vue@3.4.8(typescript@5.6.2))': dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.11.1 - '@vueuse/shared': 10.11.1(vue@3.4.8(typescript@5.5.4)) - vue-demi: 0.14.10(vue@3.4.8(typescript@5.5.4)) + '@vueuse/shared': 10.11.1(vue@3.4.8(typescript@5.6.2)) + vue-demi: 0.14.10(vue@3.4.8(typescript@5.6.2)) transitivePeerDependencies: - '@vue/composition-api' - vue '@vueuse/metadata@10.11.1': {} - '@vueuse/nuxt@10.11.1(nuxt@3.6.5(@parcel/watcher@2.4.1)(@types/node@22.5.4)(eslint@8.57.0)(optionator@0.9.4)(rollup@4.21.2)(terser@5.31.6)(typescript@5.5.4)(webpack-sources@3.2.3))(rollup@4.21.2)(vue@3.4.8(typescript@5.5.4))(webpack-sources@3.2.3)': + '@vueuse/nuxt@10.11.1(magicast@0.3.5)(nuxt@3.7.4(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@8.57.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.2)(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.4.8(typescript@5.6.2))(webpack-sources@3.2.3)': dependencies: - '@nuxt/kit': 3.13.1(rollup@4.21.2)(webpack-sources@3.2.3) - '@vueuse/core': 10.11.1(vue@3.4.8(typescript@5.5.4)) + '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) + '@vueuse/core': 10.11.1(vue@3.4.8(typescript@5.6.2)) '@vueuse/metadata': 10.11.1 local-pkg: 0.5.0 - nuxt: 3.6.5(@parcel/watcher@2.4.1)(@types/node@22.5.4)(eslint@8.57.0)(optionator@0.9.4)(rollup@4.21.2)(terser@5.31.6)(typescript@5.5.4)(webpack-sources@3.2.3) - vue-demi: 0.14.10(vue@3.4.8(typescript@5.5.4)) + nuxt: 3.7.4(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@8.57.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.2)(webpack-sources@3.2.3) + vue-demi: 0.14.10(vue@3.4.8(typescript@5.6.2)) transitivePeerDependencies: - '@vue/composition-api' - magicast @@ -8009,18 +8007,18 @@ snapshots: - vue - webpack-sources - '@vueuse/router@10.11.1(vue-router@4.4.3(vue@3.4.8(typescript@5.5.4)))(vue@3.4.8(typescript@5.5.4))': + '@vueuse/router@10.11.1(vue-router@4.4.5(vue@3.4.8(typescript@5.6.2)))(vue@3.4.8(typescript@5.6.2))': dependencies: - '@vueuse/shared': 10.11.1(vue@3.4.8(typescript@5.5.4)) - vue-demi: 0.14.10(vue@3.4.8(typescript@5.5.4)) - vue-router: 4.4.3(vue@3.4.8(typescript@5.5.4)) + '@vueuse/shared': 10.11.1(vue@3.4.8(typescript@5.6.2)) + vue-demi: 0.14.10(vue@3.4.8(typescript@5.6.2)) + vue-router: 4.4.5(vue@3.4.8(typescript@5.6.2)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/shared@10.11.1(vue@3.4.8(typescript@5.5.4))': + '@vueuse/shared@10.11.1(vue@3.4.8(typescript@5.6.2))': dependencies: - vue-demi: 0.14.10(vue@3.4.8(typescript@5.5.4)) + vue-demi: 0.14.10(vue@3.4.8(typescript@5.6.2)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -8044,7 +8042,7 @@ snapshots: dependencies: acorn: 8.12.1 - acorn-walk@8.3.3: + acorn-walk@8.3.4: dependencies: acorn: 8.12.1 @@ -8068,7 +8066,7 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.1 + fast-uri: 3.0.2 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -8080,7 +8078,7 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.0.1: {} + ansi-regex@6.1.0: {} ansi-styles@3.2.1: dependencies: @@ -8184,15 +8182,25 @@ snapshots: assertion-error@1.1.0: {} - ast-kit@1.1.0: + ast-kit@0.9.5(rollup@4.24.0): + dependencies: + '@babel/parser': 7.25.7 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + pathe: 1.1.2 + transitivePeerDependencies: + - rollup + + ast-kit@1.2.1: dependencies: - '@babel/parser': 7.25.6 + '@babel/parser': 7.25.7 pathe: 1.1.2 - ast-walker-scope@0.4.2: + ast-walker-scope@0.5.0(rollup@4.24.0): dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.25.7 + ast-kit: 0.9.5(rollup@4.24.0) + transitivePeerDependencies: + - rollup async-sema@3.1.1: {} @@ -8204,49 +8212,49 @@ snapshots: at-least-node@1.0.0: {} - autoprefixer@10.4.20(postcss@8.4.45): + autoprefixer@10.4.20(postcss@8.4.47): dependencies: - browserslist: 4.23.3 - caniuse-lite: 1.0.30001658 + browserslist: 4.24.0 + caniuse-lite: 1.0.30001667 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.0 - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 - b4a@1.6.6: {} + b4a@1.6.7: {} - babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.2): + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.7): dependencies: - '@babel/compat-data': 7.25.4 - '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) + '@babel/compat-data': 7.25.7 + '@babel/core': 7.25.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.2): + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.7): dependencies: - '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) core-js-compat: 3.38.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.2): + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.7): dependencies: - '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) + '@babel/core': 7.25.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) transitivePeerDependencies: - supports-color balanced-match@1.0.2: {} - bare-events@2.4.2: + bare-events@2.5.0: optional: true base64-js@1.5.1: {} @@ -8272,12 +8280,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.23.3: + browserslist@4.24.0: dependencies: - caniuse-lite: 1.0.30001658 - electron-to-chromium: 1.5.18 + caniuse-lite: 1.0.30001667 + electron-to-chromium: 1.5.32 node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.3) + update-browserslist-db: 1.1.1(browserslist@4.24.0) buffer-crc32@1.0.0: {} @@ -8294,7 +8302,7 @@ snapshots: dependencies: semver: 7.6.3 - c12@1.11.2: + c12@1.11.2(magicast@0.3.5): dependencies: chokidar: 3.6.0 confbox: 0.1.7 @@ -8303,11 +8311,13 @@ snapshots: giget: 1.2.3 jiti: 1.21.6 mlly: 1.7.1 - ohash: 1.1.3 + ohash: 1.1.4 pathe: 1.1.2 perfect-debounce: 1.0.0 pkg-types: 1.2.0 rc9: 2.1.2 + optionalDependencies: + magicast: 0.3.5 cac@6.7.14: {} @@ -8332,12 +8342,12 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.23.3 - caniuse-lite: 1.0.30001658 + browserslist: 4.24.0 + caniuse-lite: 1.0.30001667 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001658: {} + caniuse-lite@1.0.30001667: {} chai@4.5.0: dependencies: @@ -8485,7 +8495,7 @@ snapshots: core-js-compat@3.38.1: dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 core-util-is@1.0.3: {} @@ -8498,7 +8508,7 @@ snapshots: create-require@1.1.1: {} - croner@8.1.1: {} + croner@8.1.2: {} cross-spawn@7.0.3: dependencies: @@ -8508,11 +8518,15 @@ snapshots: crossws@0.2.4: {} + crossws@0.3.1: + dependencies: + uncrypto: 0.1.3 + crypto-random-string@2.0.0: {} - css-declaration-sorter@7.2.0(postcss@8.4.45): + css-declaration-sorter@7.2.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 css-select@5.1.0: dependencies: @@ -8541,49 +8555,49 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-default@6.1.2(postcss@8.4.45): - dependencies: - browserslist: 4.23.3 - css-declaration-sorter: 7.2.0(postcss@8.4.45) - cssnano-utils: 4.0.2(postcss@8.4.45) - postcss: 8.4.45 - postcss-calc: 9.0.1(postcss@8.4.45) - postcss-colormin: 6.1.0(postcss@8.4.45) - postcss-convert-values: 6.1.0(postcss@8.4.45) - postcss-discard-comments: 6.0.2(postcss@8.4.45) - postcss-discard-duplicates: 6.0.3(postcss@8.4.45) - postcss-discard-empty: 6.0.3(postcss@8.4.45) - postcss-discard-overridden: 6.0.2(postcss@8.4.45) - postcss-merge-longhand: 6.0.5(postcss@8.4.45) - postcss-merge-rules: 6.1.1(postcss@8.4.45) - postcss-minify-font-values: 6.1.0(postcss@8.4.45) - postcss-minify-gradients: 6.0.3(postcss@8.4.45) - postcss-minify-params: 6.1.0(postcss@8.4.45) - postcss-minify-selectors: 6.0.4(postcss@8.4.45) - postcss-normalize-charset: 6.0.2(postcss@8.4.45) - postcss-normalize-display-values: 6.0.2(postcss@8.4.45) - postcss-normalize-positions: 6.0.2(postcss@8.4.45) - postcss-normalize-repeat-style: 6.0.2(postcss@8.4.45) - postcss-normalize-string: 6.0.2(postcss@8.4.45) - postcss-normalize-timing-functions: 6.0.2(postcss@8.4.45) - postcss-normalize-unicode: 6.1.0(postcss@8.4.45) - postcss-normalize-url: 6.0.2(postcss@8.4.45) - postcss-normalize-whitespace: 6.0.2(postcss@8.4.45) - postcss-ordered-values: 6.0.2(postcss@8.4.45) - postcss-reduce-initial: 6.1.0(postcss@8.4.45) - postcss-reduce-transforms: 6.0.2(postcss@8.4.45) - postcss-svgo: 6.0.3(postcss@8.4.45) - postcss-unique-selectors: 6.0.4(postcss@8.4.45) - - cssnano-utils@4.0.2(postcss@8.4.45): - dependencies: - postcss: 8.4.45 - - cssnano@6.1.2(postcss@8.4.45): - dependencies: - cssnano-preset-default: 6.1.2(postcss@8.4.45) + cssnano-preset-default@6.1.2(postcss@8.4.47): + dependencies: + browserslist: 4.24.0 + css-declaration-sorter: 7.2.0(postcss@8.4.47) + cssnano-utils: 4.0.2(postcss@8.4.47) + postcss: 8.4.47 + postcss-calc: 9.0.1(postcss@8.4.47) + postcss-colormin: 6.1.0(postcss@8.4.47) + postcss-convert-values: 6.1.0(postcss@8.4.47) + postcss-discard-comments: 6.0.2(postcss@8.4.47) + postcss-discard-duplicates: 6.0.3(postcss@8.4.47) + postcss-discard-empty: 6.0.3(postcss@8.4.47) + postcss-discard-overridden: 6.0.2(postcss@8.4.47) + postcss-merge-longhand: 6.0.5(postcss@8.4.47) + postcss-merge-rules: 6.1.1(postcss@8.4.47) + postcss-minify-font-values: 6.1.0(postcss@8.4.47) + postcss-minify-gradients: 6.0.3(postcss@8.4.47) + postcss-minify-params: 6.1.0(postcss@8.4.47) + postcss-minify-selectors: 6.0.4(postcss@8.4.47) + postcss-normalize-charset: 6.0.2(postcss@8.4.47) + postcss-normalize-display-values: 6.0.2(postcss@8.4.47) + postcss-normalize-positions: 6.0.2(postcss@8.4.47) + postcss-normalize-repeat-style: 6.0.2(postcss@8.4.47) + postcss-normalize-string: 6.0.2(postcss@8.4.47) + postcss-normalize-timing-functions: 6.0.2(postcss@8.4.47) + postcss-normalize-unicode: 6.1.0(postcss@8.4.47) + postcss-normalize-url: 6.0.2(postcss@8.4.47) + postcss-normalize-whitespace: 6.0.2(postcss@8.4.47) + postcss-ordered-values: 6.0.2(postcss@8.4.47) + postcss-reduce-initial: 6.1.0(postcss@8.4.47) + postcss-reduce-transforms: 6.0.2(postcss@8.4.47) + postcss-svgo: 6.0.3(postcss@8.4.47) + postcss-unique-selectors: 6.0.4(postcss@8.4.47) + + cssnano-utils@4.0.2(postcss@8.4.47): + dependencies: + postcss: 8.4.47 + + cssnano@6.1.2(postcss@8.4.47): + dependencies: + cssnano-preset-default: 6.1.2(postcss@8.4.47) lilconfig: 3.1.2 - postcss: 8.4.45 + postcss: 8.4.47 csso@5.0.5: dependencies: @@ -8593,14 +8607,14 @@ snapshots: cuint@0.2.2: {} - daisyui@2.52.0(autoprefixer@10.4.20(postcss@8.4.45))(postcss@8.4.45): + daisyui@2.52.0(autoprefixer@10.4.20(postcss@8.4.47))(postcss@8.4.47): dependencies: - autoprefixer: 10.4.20(postcss@8.4.45) + autoprefixer: 10.4.20(postcss@8.4.47) color: 4.2.3 css-selector-tokenizer: 0.8.0 - postcss: 8.4.45 - postcss-js: 4.0.1(postcss@8.4.45) - tailwindcss: 3.4.10 + postcss: 8.4.47 + postcss-js: 4.0.1(postcss@8.4.47) + tailwindcss: 3.4.13 transitivePeerDependencies: - ts-node @@ -8712,7 +8726,7 @@ snapshots: dependencies: domelementtype: 2.3.0 - dompurify@3.1.6: {} + dompurify@3.1.7: {} domutils@3.1.0: dependencies: @@ -8736,7 +8750,7 @@ snapshots: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.18: {} + electron-to-chromium@1.5.32: {} emoji-regex@8.0.0: {} @@ -8744,6 +8758,8 @@ snapshots: encodeurl@1.0.2: {} + encodeurl@2.0.0: {} + enhanced-resolve@4.5.0: dependencies: graceful-fs: 4.2.11 @@ -8801,7 +8817,7 @@ snapshots: object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 + regexp.prototype.flags: 1.5.3 safe-array-concat: 1.1.2 safe-regex-test: 1.0.3 string.prototype.trim: 1.2.9 @@ -8840,31 +8856,6 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 - esbuild@0.17.19: - optionalDependencies: - '@esbuild/android-arm': 0.17.19 - '@esbuild/android-arm64': 0.17.19 - '@esbuild/android-x64': 0.17.19 - '@esbuild/darwin-arm64': 0.17.19 - '@esbuild/darwin-x64': 0.17.19 - '@esbuild/freebsd-arm64': 0.17.19 - '@esbuild/freebsd-x64': 0.17.19 - '@esbuild/linux-arm': 0.17.19 - '@esbuild/linux-arm64': 0.17.19 - '@esbuild/linux-ia32': 0.17.19 - '@esbuild/linux-loong64': 0.17.19 - '@esbuild/linux-mips64el': 0.17.19 - '@esbuild/linux-ppc64': 0.17.19 - '@esbuild/linux-riscv64': 0.17.19 - '@esbuild/linux-s390x': 0.17.19 - '@esbuild/linux-x64': 0.17.19 - '@esbuild/netbsd-x64': 0.17.19 - '@esbuild/openbsd-x64': 0.17.19 - '@esbuild/sunos-x64': 0.17.19 - '@esbuild/win32-arm64': 0.17.19 - '@esbuild/win32-ia32': 0.17.19 - '@esbuild/win32-x64': 0.17.19 - esbuild@0.18.20: optionalDependencies: '@esbuild/android-arm': 0.18.20 @@ -8890,6 +8881,32 @@ snapshots: '@esbuild/win32-ia32': 0.18.20 '@esbuild/win32-x64': 0.18.20 + esbuild@0.19.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + esbuild@0.20.2: optionalDependencies: '@esbuild/aix-ppc64': 0.20.2 @@ -8960,16 +8977,16 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@9.1.0(eslint@8.57.0): + eslint-config-prettier@9.1.0(eslint@8.57.1): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 - eslint-config-standard@17.1.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint-plugin-n@15.7.0(eslint@8.57.0))(eslint-plugin-promise@6.6.0(eslint@8.57.0))(eslint@8.57.0): + eslint-config-standard@17.1.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1): dependencies: - eslint: 8.57.0 - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) - eslint-plugin-n: 15.7.0(eslint@8.57.0) - eslint-plugin-promise: 6.6.0(eslint@8.57.0) + eslint: 8.57.1 + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-n: 15.7.0(eslint@8.57.1) + eslint-plugin-promise: 6.6.0(eslint@8.57.1) eslint-import-resolver-node@0.3.9: dependencies: @@ -8979,49 +8996,49 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.7 enhanced-resolve: 5.17.1 - eslint: 8.57.0 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0) + eslint: 8.57.1 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1) fast-glob: 3.3.2 - get-tsconfig: 4.8.0 + get-tsconfig: 4.8.1 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-plugin-es@3.0.1(eslint@8.57.0): + eslint-plugin-es@3.0.1(eslint@8.57.1): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-es@4.1.0(eslint@8.57.0): + eslint-plugin-es@4.1.0(eslint@8.57.1): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -9030,9 +9047,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -9041,63 +9058,64 @@ snapshots: object.groupby: 1.0.3 object.values: 1.2.0 semver: 6.3.1 + string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-n@15.7.0(eslint@8.57.0): + eslint-plugin-n@15.7.0(eslint@8.57.1): dependencies: builtins: 5.1.0 - eslint: 8.57.0 - eslint-plugin-es: 4.1.0(eslint@8.57.0) - eslint-utils: 3.0.0(eslint@8.57.0) + eslint: 8.57.1 + eslint-plugin-es: 4.1.0(eslint@8.57.1) + eslint-utils: 3.0.0(eslint@8.57.1) ignore: 5.3.2 is-core-module: 2.15.1 minimatch: 3.1.2 resolve: 1.22.8 semver: 7.6.3 - eslint-plugin-node@11.1.0(eslint@8.57.0): + eslint-plugin-node@11.1.0(eslint@8.57.1): dependencies: - eslint: 8.57.0 - eslint-plugin-es: 3.0.1(eslint@8.57.0) + eslint: 8.57.1 + eslint-plugin-es: 3.0.1(eslint@8.57.1) eslint-utils: 2.1.0 ignore: 5.3.2 minimatch: 3.1.2 resolve: 1.22.8 semver: 6.3.1 - eslint-plugin-prettier@5.2.1(@types/eslint@8.56.12)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3): + eslint-plugin-prettier@5.2.1(@types/eslint@8.56.12)(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 prettier: 3.3.3 prettier-linter-helpers: 1.0.0 synckit: 0.9.1 optionalDependencies: '@types/eslint': 8.56.12 - eslint-config-prettier: 9.1.0(eslint@8.57.0) + eslint-config-prettier: 9.1.0(eslint@8.57.1) - eslint-plugin-promise@6.6.0(eslint@8.57.0): + eslint-plugin-promise@6.6.0(eslint@8.57.1): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 - eslint-plugin-tailwindcss@3.17.4(tailwindcss@3.4.10): + eslint-plugin-tailwindcss@3.17.4(tailwindcss@3.4.13): dependencies: fast-glob: 3.3.2 - postcss: 8.4.45 - tailwindcss: 3.4.10 + postcss: 8.4.47 + tailwindcss: 3.4.13 - eslint-plugin-unicorn@44.0.2(eslint@8.57.0): + eslint-plugin-unicorn@44.0.2(eslint@8.57.1): dependencies: - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.25.7 ci-info: 3.9.0 clean-regexp: 1.0.0 - eslint: 8.57.0 - eslint-utils: 3.0.0(eslint@8.57.0) + eslint: 8.57.1 + eslint-utils: 3.0.0(eslint@8.57.1) esquery: 1.6.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -9109,16 +9127,16 @@ snapshots: semver: 7.6.3 strip-indent: 3.0.0 - eslint-plugin-vue@9.28.0(eslint@8.57.0): + eslint-plugin-vue@9.28.0(eslint@8.57.1): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - eslint: 8.57.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + eslint: 8.57.1 globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.6.3 - vue-eslint-parser: 9.4.3(eslint@8.57.0) + vue-eslint-parser: 9.4.3(eslint@8.57.1) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -9132,9 +9150,9 @@ snapshots: dependencies: eslint-visitor-keys: 1.3.0 - eslint-utils@3.0.0(eslint@8.57.0): + eslint-utils@3.0.0(eslint@8.57.1): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-visitor-keys: 2.1.0 eslint-visitor-keys@1.3.0: {} @@ -9143,13 +9161,13 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint@8.57.0: + eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.11.1 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 @@ -9210,7 +9228,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 esutils@2.0.3: {} @@ -9222,18 +9240,6 @@ snapshots: events@3.3.0: {} - execa@7.2.0: - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - execa@8.0.1: dependencies: cross-spawn: 7.0.3 @@ -9271,7 +9277,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.0.1: {} + fast-uri@3.0.2: {} fastparse@1.1.2: {} @@ -9279,7 +9285,7 @@ snapshots: dependencies: reusify: 1.0.4 - fdir@6.3.0(picomatch@4.0.2): + fdir@6.4.0(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -9393,8 +9399,6 @@ snapshots: get-port-please@3.1.2: {} - get-stream@6.0.1: {} - get-stream@8.0.1: {} get-symbol-description@1.0.2: @@ -9403,7 +9407,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 - get-tsconfig@4.8.0: + get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -9413,8 +9417,8 @@ snapshots: consola: 3.2.3 defu: 6.1.4 node-fetch-native: 1.6.4 - nypm: 0.3.11 - ohash: 1.1.3 + nypm: 0.3.12 + ohash: 1.1.4 pathe: 1.1.2 tar: 6.2.1 @@ -9425,7 +9429,7 @@ snapshots: is-ssh: 1.4.0 parse-url: 8.1.0 - git-url-parse@14.1.0: + git-url-parse@15.0.0: dependencies: git-up: 7.0.0 @@ -9443,7 +9447,7 @@ snapshots: jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 - package-json-from-dist: 1.0.0 + package-json-from-dist: 1.0.1 path-scurry: 1.11.1 glob@7.2.3: @@ -9512,20 +9516,18 @@ snapshots: dependencies: duplexer: 0.1.2 - h3@1.12.0: + h3@1.13.0: dependencies: cookie-es: 1.2.2 - crossws: 0.2.4 + crossws: 0.3.1 defu: 6.1.4 destr: 2.0.3 iron-webcrypto: 1.2.1 - ohash: 1.1.3 + ohash: 1.1.4 radix3: 1.1.2 ufo: 1.5.4 uncrypto: 0.1.3 unenv: 1.10.0 - transitivePeerDependencies: - - uWebSockets.js has-bigints@1.0.2: {} @@ -9606,8 +9608,6 @@ snapshots: httpxy@0.1.5: {} - human-signals@4.3.1: {} - human-signals@5.0.0: {} idb@7.1.1: {} @@ -9745,7 +9745,7 @@ snapshots: is-reference@1.2.1: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 is-regex@1.1.4: dependencies: @@ -9822,6 +9822,8 @@ snapshots: jiti@1.21.6: {} + jiti@2.2.1: {} + js-tokens@4.0.0: {} js-tokens@9.0.0: {} @@ -9830,9 +9832,7 @@ snapshots: dependencies: argparse: 2.0.1 - jsesc@0.5.0: {} - - jsesc@2.5.2: {} + jsesc@3.0.2: {} json-buffer@3.0.1: {} @@ -9875,8 +9875,6 @@ snapshots: dependencies: json-buffer: 3.0.1 - kleur@3.0.3: {} - klona@2.0.6: {} knitwork@1.1.0: {} @@ -9954,7 +9952,7 @@ snapshots: dependencies: uc.micro: 2.1.0 - listhen@1.7.2: + listhen@1.9.0: dependencies: '@parcel/watcher': 2.4.1 '@parcel/watcher-wasm': 2.4.1 @@ -9964,9 +9962,9 @@ snapshots: crossws: 0.2.4 defu: 6.1.4 get-port-please: 3.1.2 - h3: 1.12.0 + h3: 1.13.0 http-shutdown: 1.2.2 - jiti: 1.21.6 + jiti: 2.2.1 mlly: 1.7.1 node-forge: 1.3.1 pathe: 1.1.2 @@ -10036,6 +10034,13 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magicast@0.3.5: + dependencies: + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 + source-map-js: 1.2.1 + optional: true + make-dir@3.1.0: dependencies: semver: 6.3.1 @@ -10161,28 +10166,28 @@ snapshots: negotiator@0.6.3: {} - nitropack@2.9.7(webpack-sources@3.2.3): + nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 - '@netlify/functions': 2.8.1 - '@rollup/plugin-alias': 5.1.0(rollup@4.21.2) - '@rollup/plugin-commonjs': 25.0.8(rollup@4.21.2) - '@rollup/plugin-inject': 5.0.5(rollup@4.21.2) - '@rollup/plugin-json': 6.1.0(rollup@4.21.2) - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.21.2) - '@rollup/plugin-replace': 5.0.7(rollup@4.21.2) - '@rollup/plugin-terser': 0.4.4(rollup@4.21.2) - '@rollup/pluginutils': 5.1.0(rollup@4.21.2) + '@netlify/functions': 2.8.2 + '@rollup/plugin-alias': 5.1.1(rollup@4.24.0) + '@rollup/plugin-commonjs': 25.0.8(rollup@4.24.0) + '@rollup/plugin-inject': 5.0.5(rollup@4.24.0) + '@rollup/plugin-json': 6.1.0(rollup@4.24.0) + '@rollup/plugin-node-resolve': 15.3.0(rollup@4.24.0) + '@rollup/plugin-replace': 5.0.7(rollup@4.24.0) + '@rollup/plugin-terser': 0.4.4(rollup@4.24.0) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) '@types/http-proxy': 1.17.15 '@vercel/nft': 0.26.5 archiver: 7.0.1 - c12: 1.11.2 + c12: 1.11.2(magicast@0.3.5) chalk: 5.3.0 chokidar: 3.6.0 citty: 0.1.6 consola: 3.2.3 cookie-es: 1.2.2 - croner: 8.1.1 + croner: 8.1.2 crossws: 0.2.4 db0: 0.1.4 defu: 6.1.4 @@ -10194,39 +10199,39 @@ snapshots: fs-extra: 11.2.0 globby: 14.0.2 gzip-size: 7.0.0 - h3: 1.12.0 + h3: 1.13.0 hookable: 5.5.3 httpxy: 0.1.5 ioredis: 5.4.1 jiti: 1.21.6 klona: 2.0.6 knitwork: 1.1.0 - listhen: 1.7.2 + listhen: 1.9.0 magic-string: 0.30.11 mime: 4.0.4 mlly: 1.7.1 mri: 1.2.0 node-fetch-native: 1.6.4 - ofetch: 1.3.4 - ohash: 1.1.3 + ofetch: 1.4.0 + ohash: 1.1.4 openapi-typescript: 6.7.6 pathe: 1.1.2 perfect-debounce: 1.0.0 pkg-types: 1.2.0 pretty-bytes: 6.1.1 radix3: 1.1.2 - rollup: 4.21.2 - rollup-plugin-visualizer: 5.12.0(rollup@4.21.2) + rollup: 4.24.0 + rollup-plugin-visualizer: 5.12.0(rollup@4.24.0) scule: 1.3.0 semver: 7.6.3 serve-placeholder: 2.0.2 - serve-static: 1.15.0 + serve-static: 1.16.2 std-env: 3.7.0 ufo: 1.5.4 uncrypto: 0.1.3 unctx: 2.3.1(webpack-sources@3.2.3) unenv: 1.10.0 - unimport: 3.11.1(rollup@4.21.2)(webpack-sources@3.2.3) + unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3) unstorage: 1.12.0(ioredis@5.4.1) unwasm: 0.3.9(webpack-sources@3.2.3) transitivePeerDependencies: @@ -10299,67 +10304,67 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxi@3.6.5: - optionalDependencies: - fsevents: 2.3.3 + nuxi@3.14.0: {} - nuxt@3.6.5(@parcel/watcher@2.4.1)(@types/node@22.5.4)(eslint@8.57.0)(optionator@0.9.4)(rollup@4.21.2)(terser@5.31.6)(typescript@5.5.4)(webpack-sources@3.2.3): + nuxt@3.7.4(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@8.57.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.2)(webpack-sources@3.2.3): dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/kit': 3.6.5(rollup@4.21.2)(webpack-sources@3.2.3) - '@nuxt/schema': 3.6.5(rollup@4.21.2)(webpack-sources@3.2.3) - '@nuxt/telemetry': 2.5.4(rollup@4.21.2)(webpack-sources@3.2.3) + '@nuxt/kit': 3.7.4(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) + '@nuxt/schema': 3.7.4(rollup@4.24.0)(webpack-sources@3.2.3) + '@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) '@nuxt/ui-templates': 1.3.4 - '@nuxt/vite-builder': 3.6.5(@types/node@22.5.4)(eslint@8.57.0)(optionator@0.9.4)(rollup@4.21.2)(terser@5.31.6)(typescript@5.5.4)(vue@3.4.8(typescript@5.5.4))(webpack-sources@3.2.3) - '@types/node': 22.5.4 - '@unhead/ssr': 1.11.1 - '@unhead/vue': 1.11.1(vue@3.4.8(typescript@5.5.4)) - '@vue/shared': 3.5.3 + '@nuxt/vite-builder': 3.7.4(@types/node@22.7.4)(eslint@8.57.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.2)(vue@3.4.8(typescript@5.6.2))(webpack-sources@3.2.3) + '@unhead/dom': 1.11.7 + '@unhead/ssr': 1.11.7 + '@unhead/vue': 1.11.7(vue@3.4.8(typescript@5.6.2)) + '@vue/shared': 3.5.11 acorn: 8.10.0 - c12: 1.11.2 + c12: 1.11.2(magicast@0.3.5) chokidar: 3.6.0 cookie-es: 1.2.2 defu: 6.1.4 destr: 2.0.3 devalue: 4.3.3 - esbuild: 0.18.20 + esbuild: 0.19.12 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 fs-extra: 11.2.0 globby: 13.2.2 - h3: 1.12.0 + h3: 1.13.0 hookable: 5.5.3 jiti: 1.21.6 klona: 2.0.6 knitwork: 1.1.0 - local-pkg: 0.4.3 magic-string: 0.30.11 mlly: 1.7.1 - nitropack: 2.9.7(webpack-sources@3.2.3) - nuxi: 3.6.5 - nypm: 0.2.2 - ofetch: 1.3.4 - ohash: 1.1.3 + nitropack: 2.9.7(magicast@0.3.5)(webpack-sources@3.2.3) + nuxi: 3.14.0 + nypm: 0.3.12 + ofetch: 1.4.0 + ohash: 1.1.4 pathe: 1.1.2 perfect-debounce: 1.0.0 - prompts: 2.4.2 + pkg-types: 1.2.0 + radix3: 1.1.2 scule: 1.3.0 + std-env: 3.7.0 strip-literal: 1.3.0 ufo: 1.5.4 ultrahtml: 1.5.3 uncrypto: 0.1.3 unctx: 2.3.1(webpack-sources@3.2.3) unenv: 1.10.0 - unimport: 3.11.1(rollup@4.21.2)(webpack-sources@3.2.3) - unplugin: 1.13.1(webpack-sources@3.2.3) - unplugin-vue-router: 0.6.4(rollup@4.21.2)(vue-router@4.4.3(vue@3.4.8(typescript@5.5.4)))(vue@3.4.8(typescript@5.5.4))(webpack-sources@3.2.3) - untyped: 1.4.2 - vue: 3.4.8(typescript@5.5.4) - vue-bundle-renderer: 1.0.3 + unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3) + unplugin: 1.14.1(webpack-sources@3.2.3) + unplugin-vue-router: 0.7.0(rollup@4.24.0)(vue-router@4.4.5(vue@3.4.8(typescript@5.6.2)))(vue@3.4.8(typescript@5.6.2))(webpack-sources@3.2.3) + untyped: 1.5.0 + vue: 3.4.8(typescript@5.6.2) + vue-bundle-renderer: 2.1.1 vue-devtools-stub: 0.1.0 - vue-router: 4.4.3(vue@3.4.8(typescript@5.5.4)) + vue-router: 4.4.5(vue@3.4.8(typescript@5.6.2)) optionalDependencies: '@parcel/watcher': 2.4.1 + '@types/node': 22.7.4 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -10379,6 +10384,7 @@ snapshots: - eslint - idb-keyval - less + - lightningcss - magicast - meow - optionator @@ -10397,11 +10403,7 @@ snapshots: - webpack-sources - xml2js - nypm@0.2.2: - dependencies: - execa: 7.2.0 - - nypm@0.3.11: + nypm@0.3.12: dependencies: citty: 0.1.6 consola: 3.2.3 @@ -10444,13 +10446,13 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 - ofetch@1.3.4: + ofetch@1.4.0: dependencies: destr: 2.0.3 node-fetch-native: 1.6.4 ufo: 1.5.4 - ohash@1.1.3: {} + ohash@1.1.4: {} on-finished@2.4.1: dependencies: @@ -10517,7 +10519,7 @@ snapshots: p-try@2.2.0: {} - package-json-from-dist@1.0.0: {} + package-json-from-dist@1.0.1: {} package-manager-detector@0.2.0: {} @@ -10532,7 +10534,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.25.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -10562,7 +10564,7 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@6.2.2: {} + path-to-regexp@6.3.0: {} path-type@4.0.0: {} @@ -10582,13 +10584,13 @@ snapshots: pify@2.3.0: {} - pinia@2.2.2(typescript@5.5.4)(vue@3.4.8(typescript@5.5.4)): + pinia@2.2.4(typescript@5.6.2)(vue@3.4.8(typescript@5.6.2)): dependencies: - '@vue/devtools-api': 6.6.3 - vue: 3.4.8(typescript@5.5.4) - vue-demi: 0.14.10(vue@3.4.8(typescript@5.5.4)) + '@vue/devtools-api': 6.6.4 + vue: 3.4.8(typescript@5.6.2) + vue-demi: 0.14.10(vue@3.4.8(typescript@5.6.2)) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 pirates@4.0.6: {} @@ -10610,175 +10612,175 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-calc@9.0.1(postcss@8.4.45): + postcss-calc@9.0.1(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-colormin@6.1.0(postcss@8.4.45): + postcss-colormin@6.1.0(postcss@8.4.47): dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-convert-values@6.1.0(postcss@8.4.45): + postcss-convert-values@6.1.0(postcss@8.4.47): dependencies: - browserslist: 4.23.3 - postcss: 8.4.45 + browserslist: 4.24.0 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-discard-comments@6.0.2(postcss@8.4.45): + postcss-discard-comments@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 - postcss-discard-duplicates@6.0.3(postcss@8.4.45): + postcss-discard-duplicates@6.0.3(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 - postcss-discard-empty@6.0.3(postcss@8.4.45): + postcss-discard-empty@6.0.3(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 - postcss-discard-overridden@6.0.2(postcss@8.4.45): + postcss-discard-overridden@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-import-resolver@2.0.0: dependencies: enhanced-resolve: 4.5.0 - postcss-import@15.1.0(postcss@8.4.45): + postcss-import@15.1.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.45): + postcss-js@4.0.1(postcss@8.4.47): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.45 + postcss: 8.4.47 - postcss-load-config@4.0.2(postcss@8.4.45): + postcss-load-config@4.0.2(postcss@8.4.47): dependencies: lilconfig: 3.1.2 yaml: 2.5.1 optionalDependencies: - postcss: 8.4.45 + postcss: 8.4.47 - postcss-merge-longhand@6.0.5(postcss@8.4.45): + postcss-merge-longhand@6.0.5(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - stylehacks: 6.1.1(postcss@8.4.45) + stylehacks: 6.1.1(postcss@8.4.47) - postcss-merge-rules@6.1.1(postcss@8.4.45): + postcss-merge-rules@6.1.1(postcss@8.4.47): dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 caniuse-api: 3.0.0 - cssnano-utils: 4.0.2(postcss@8.4.45) - postcss: 8.4.45 + cssnano-utils: 4.0.2(postcss@8.4.47) + postcss: 8.4.47 postcss-selector-parser: 6.1.2 - postcss-minify-font-values@6.1.0(postcss@8.4.45): + postcss-minify-font-values@6.1.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-minify-gradients@6.0.3(postcss@8.4.45): + postcss-minify-gradients@6.0.3(postcss@8.4.47): dependencies: colord: 2.9.3 - cssnano-utils: 4.0.2(postcss@8.4.45) - postcss: 8.4.45 + cssnano-utils: 4.0.2(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-minify-params@6.1.0(postcss@8.4.45): + postcss-minify-params@6.1.0(postcss@8.4.47): dependencies: - browserslist: 4.23.3 - cssnano-utils: 4.0.2(postcss@8.4.45) - postcss: 8.4.45 + browserslist: 4.24.0 + cssnano-utils: 4.0.2(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-minify-selectors@6.0.4(postcss@8.4.45): + postcss-minify-selectors@6.0.4(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.2 - postcss-nested@6.2.0(postcss@8.4.45): + postcss-nested@6.2.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.2 - postcss-nesting@12.1.5(postcss@8.4.45): + postcss-nesting@12.1.5(postcss@8.4.47): dependencies: '@csstools/selector-resolve-nested': 1.1.0(postcss-selector-parser@6.1.2) '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2) - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.2 - postcss-normalize-charset@6.0.2(postcss@8.4.45): + postcss-normalize-charset@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 - postcss-normalize-display-values@6.0.2(postcss@8.4.45): + postcss-normalize-display-values@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-normalize-positions@6.0.2(postcss@8.4.45): + postcss-normalize-positions@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@6.0.2(postcss@8.4.45): + postcss-normalize-repeat-style@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-normalize-string@6.0.2(postcss@8.4.45): + postcss-normalize-string@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@6.0.2(postcss@8.4.45): + postcss-normalize-timing-functions@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@6.1.0(postcss@8.4.45): + postcss-normalize-unicode@6.1.0(postcss@8.4.47): dependencies: - browserslist: 4.23.3 - postcss: 8.4.45 + browserslist: 4.24.0 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-normalize-url@6.0.2(postcss@8.4.45): + postcss-normalize-url@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@6.0.2(postcss@8.4.45): + postcss-normalize-whitespace@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-ordered-values@6.0.2(postcss@8.4.45): + postcss-ordered-values@6.0.2(postcss@8.4.47): dependencies: - cssnano-utils: 4.0.2(postcss@8.4.45) - postcss: 8.4.45 + cssnano-utils: 4.0.2(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-reduce-initial@6.1.0(postcss@8.4.45): + postcss-reduce-initial@6.1.0(postcss@8.4.47): dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 caniuse-api: 3.0.0 - postcss: 8.4.45 + postcss: 8.4.47 - postcss-reduce-transforms@6.0.2(postcss@8.4.45): + postcss-reduce-transforms@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 postcss-selector-parser@6.0.10: @@ -10791,28 +10793,28 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@6.0.3(postcss@8.4.45): + postcss-svgo@6.0.3(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 svgo: 3.3.2 - postcss-unique-selectors@6.0.4(postcss@8.4.45): + postcss-unique-selectors@6.0.4(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.2 - postcss-url@10.1.3(postcss@8.4.45): + postcss-url@10.1.3(postcss@8.4.47): dependencies: make-dir: 3.1.0 mime: 2.5.2 minimatch: 3.0.8 - postcss: 8.4.45 + postcss: 8.4.47 xxhashjs: 0.2.2 postcss-value-parser@4.2.0: {} - postcss@8.4.45: + postcss@8.4.47: dependencies: nanoid: 3.3.7 picocolors: 1.1.0 @@ -10840,11 +10842,6 @@ snapshots: process@0.11.10: {} - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - protocols@2.0.1: {} prr@1.0.1: {} @@ -10927,7 +10924,7 @@ snapshots: dependencies: redis-errors: 1.2.0 - regenerate-unicode-properties@10.1.1: + regenerate-unicode-properties@10.2.0: dependencies: regenerate: 1.4.2 @@ -10937,11 +10934,11 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 regexp-tree@0.1.27: {} - regexp.prototype.flags@1.5.2: + regexp.prototype.flags@1.5.3: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -10950,18 +10947,20 @@ snapshots: regexpp@3.2.0: {} - regexpu-core@5.3.2: + regexpu-core@6.1.1: dependencies: - '@babel/regjsgen': 0.8.0 regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.1 - regjsparser: 0.9.1 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.11.0 unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 + unicode-match-property-value-ecmascript: 2.2.0 + + regjsgen@0.8.0: {} - regjsparser@0.9.1: + regjsparser@0.11.0: dependencies: - jsesc: 0.5.0 + jsesc: 3.0.2 replace-in-file@6.3.5: dependencies: @@ -10998,43 +10997,43 @@ snapshots: dependencies: glob: 7.2.3 - rollup-plugin-visualizer@5.12.0(rollup@4.21.2): + rollup-plugin-visualizer@5.12.0(rollup@4.24.0): dependencies: open: 8.4.2 picomatch: 2.3.1 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: - rollup: 4.21.2 + rollup: 4.24.0 - rollup@2.79.1: + rollup@2.79.2: optionalDependencies: fsevents: 2.3.3 - rollup@3.29.4: + rollup@3.29.5: optionalDependencies: fsevents: 2.3.3 - rollup@4.21.2: + rollup@4.24.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.21.2 - '@rollup/rollup-android-arm64': 4.21.2 - '@rollup/rollup-darwin-arm64': 4.21.2 - '@rollup/rollup-darwin-x64': 4.21.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.21.2 - '@rollup/rollup-linux-arm-musleabihf': 4.21.2 - '@rollup/rollup-linux-arm64-gnu': 4.21.2 - '@rollup/rollup-linux-arm64-musl': 4.21.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.21.2 - '@rollup/rollup-linux-riscv64-gnu': 4.21.2 - '@rollup/rollup-linux-s390x-gnu': 4.21.2 - '@rollup/rollup-linux-x64-gnu': 4.21.2 - '@rollup/rollup-linux-x64-musl': 4.21.2 - '@rollup/rollup-win32-arm64-msvc': 4.21.2 - '@rollup/rollup-win32-ia32-msvc': 4.21.2 - '@rollup/rollup-win32-x64-msvc': 4.21.2 + '@rollup/rollup-android-arm-eabi': 4.24.0 + '@rollup/rollup-android-arm64': 4.24.0 + '@rollup/rollup-darwin-arm64': 4.24.0 + '@rollup/rollup-darwin-x64': 4.24.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 + '@rollup/rollup-linux-arm-musleabihf': 4.24.0 + '@rollup/rollup-linux-arm64-gnu': 4.24.0 + '@rollup/rollup-linux-arm64-musl': 4.24.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 + '@rollup/rollup-linux-riscv64-gnu': 4.24.0 + '@rollup/rollup-linux-s390x-gnu': 4.24.0 + '@rollup/rollup-linux-x64-gnu': 4.24.0 + '@rollup/rollup-linux-x64-musl': 4.24.0 + '@rollup/rollup-win32-arm64-msvc': 4.24.0 + '@rollup/rollup-win32-ia32-msvc': 4.24.0 + '@rollup/rollup-win32-x64-msvc': 4.24.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -11070,7 +11069,7 @@ snapshots: semver@7.6.3: {} - send@0.18.0: + send@0.19.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -11096,12 +11095,12 @@ snapshots: dependencies: defu: 6.1.4 - serve-static@1.15.0: + serve-static@1.16.2: dependencies: - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.18.0 + send: 0.19.0 transitivePeerDependencies: - supports-color @@ -11150,8 +11149,6 @@ snapshots: dependencies: is-arrayish: 0.3.2 - sisteransi@1.0.5: {} - slash@3.0.0: {} slash@4.0.0: {} @@ -11201,13 +11198,13 @@ snapshots: std-env@3.7.0: {} - streamx@2.20.0: + streamx@2.20.1: dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 - text-decoder: 1.1.1 + text-decoder: 1.2.0 optionalDependencies: - bare-events: 2.4.2 + bare-events: 2.5.0 string-argv@0.3.2: {} @@ -11234,7 +11231,7 @@ snapshots: gopd: 1.0.1 has-symbols: 1.0.3 internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 + regexp.prototype.flags: 1.5.3 set-function-name: 2.0.2 side-channel: 1.0.6 @@ -11277,7 +11274,7 @@ snapshots: strip-ansi@7.1.0: dependencies: - ansi-regex: 6.0.1 + ansi-regex: 6.1.0 strip-bom@3.0.0: {} @@ -11299,10 +11296,10 @@ snapshots: dependencies: js-tokens: 9.0.0 - stylehacks@6.1.1(postcss@8.4.45): + stylehacks@6.1.1(postcss@8.4.47): dependencies: - browserslist: 4.23.3 - postcss: 8.4.45 + browserslist: 4.24.0 + postcss: 8.4.47 postcss-selector-parser: 6.1.2 sucrase@3.35.0: @@ -11346,9 +11343,9 @@ snapshots: system-architecture@0.1.0: {} - tailwind-config-viewer@2.0.4(tailwindcss@3.4.10): + tailwind-config-viewer@2.0.4(tailwindcss@3.4.13): dependencies: - '@koa/router': 12.0.1 + '@koa/router': 12.0.2 commander: 6.2.1 fs-extra: 9.1.0 koa: 2.15.3 @@ -11356,11 +11353,11 @@ snapshots: open: 7.4.2 portfinder: 1.0.32 replace-in-file: 6.3.5 - tailwindcss: 3.4.10 + tailwindcss: 3.4.13 transitivePeerDependencies: - supports-color - tailwindcss@3.4.10: + tailwindcss@3.4.13: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -11376,11 +11373,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.0 - postcss: 8.4.45 - postcss-import: 15.1.0(postcss@8.4.45) - postcss-js: 4.0.1(postcss@8.4.45) - postcss-load-config: 4.0.2(postcss@8.4.45) - postcss-nested: 6.2.0(postcss@8.4.45) + postcss: 8.4.47 + postcss-import: 15.1.0(postcss@8.4.47) + postcss-js: 4.0.1(postcss@8.4.47) + postcss-load-config: 4.0.2(postcss@8.4.47) + postcss-nested: 6.2.0(postcss@8.4.47) postcss-selector-parser: 6.1.2 resolve: 1.22.8 sucrase: 3.35.0 @@ -11393,9 +11390,9 @@ snapshots: tar-stream@3.1.7: dependencies: - b4a: 1.6.6 + b4a: 1.6.7 fast-fifo: 1.3.2 - streamx: 2.20.0 + streamx: 2.20.1 tar@6.2.1: dependencies: @@ -11415,16 +11412,16 @@ snapshots: type-fest: 0.16.0 unique-string: 2.0.0 - terser@5.31.6: + terser@5.34.1: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.10.0 commander: 2.20.3 source-map-support: 0.5.21 - text-decoder@1.1.1: + text-decoder@1.2.0: dependencies: - b4a: 1.6.6 + b4a: 1.6.7 text-table@0.2.0: {} @@ -11442,9 +11439,9 @@ snapshots: tinyexec@0.3.0: {} - tinyglobby@0.2.5: + tinyglobby@0.2.9: dependencies: - fdir: 6.3.0(picomatch@4.0.2) + fdir: 6.4.0(picomatch@4.0.2) picomatch: 4.0.2 tinypool@0.8.4: {} @@ -11465,9 +11462,9 @@ snapshots: dependencies: punycode: 2.3.1 - ts-api-utils@1.3.0(typescript@5.5.4): + ts-api-utils@1.3.0(typescript@5.6.2): dependencies: - typescript: 5.5.4 + typescript: 5.6.2 ts-interface-checker@0.1.13: {} @@ -11537,7 +11534,7 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typescript@5.5.4: {} + typescript@5.6.2: {} uc.micro@2.1.0: {} @@ -11559,7 +11556,7 @@ snapshots: acorn: 8.10.0 estree-walker: 3.0.3 magic-string: 0.30.11 - unplugin: 1.13.1(webpack-sources@3.2.3) + unplugin: 1.14.1(webpack-sources@3.2.3) transitivePeerDependencies: - webpack-sources @@ -11577,29 +11574,29 @@ snapshots: node-fetch-native: 1.6.4 pathe: 1.1.2 - unhead@1.11.1: + unhead@1.11.7: dependencies: - '@unhead/dom': 1.11.1 - '@unhead/schema': 1.11.1 - '@unhead/shared': 1.11.1 + '@unhead/dom': 1.11.7 + '@unhead/schema': 1.11.7 + '@unhead/shared': 1.11.7 hookable: 5.5.3 - unicode-canonical-property-names-ecmascript@2.0.0: {} + unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-match-property-ecmascript@2.0.0: dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-canonical-property-names-ecmascript: 2.0.1 unicode-property-aliases-ecmascript: 2.1.0 - unicode-match-property-value-ecmascript@2.1.0: {} + unicode-match-property-value-ecmascript@2.2.0: {} unicode-property-aliases-ecmascript@2.1.0: {} unicorn-magic@0.1.0: {} - unimport@3.11.1(rollup@4.21.2)(webpack-sources@3.2.3): + unimport@3.13.1(rollup@4.24.0)(webpack-sources@3.2.3): dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.2) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) acorn: 8.12.1 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 @@ -11611,7 +11608,7 @@ snapshots: pkg-types: 1.2.0 scule: 1.3.0 strip-literal: 2.1.0 - unplugin: 1.13.1(webpack-sources@3.2.3) + unplugin: 1.14.1(webpack-sources@3.2.3) transitivePeerDependencies: - rollup - webpack-sources @@ -11622,27 +11619,27 @@ snapshots: universalify@2.0.1: {} - unplugin-icons@0.18.5(@vue/compiler-sfc@3.5.3)(webpack-sources@3.2.3): + unplugin-icons@0.18.5(@vue/compiler-sfc@3.5.11)(webpack-sources@3.2.3): dependencies: '@antfu/install-pkg': 0.3.5 '@antfu/utils': 0.7.10 - '@iconify/utils': 2.1.32 + '@iconify/utils': 2.1.33 debug: 4.3.7 kolorist: 1.8.0 local-pkg: 0.5.0 - unplugin: 1.13.1(webpack-sources@3.2.3) + unplugin: 1.14.1(webpack-sources@3.2.3) optionalDependencies: - '@vue/compiler-sfc': 3.5.3 + '@vue/compiler-sfc': 3.5.11 transitivePeerDependencies: - supports-color - webpack-sources - unplugin-vue-router@0.6.4(rollup@4.21.2)(vue-router@4.4.3(vue@3.4.8(typescript@5.5.4)))(vue@3.4.8(typescript@5.5.4))(webpack-sources@3.2.3): + unplugin-vue-router@0.7.0(rollup@4.24.0)(vue-router@4.4.5(vue@3.4.8(typescript@5.6.2)))(vue@3.4.8(typescript@5.6.2))(webpack-sources@3.2.3): dependencies: - '@babel/types': 7.25.6 - '@rollup/pluginutils': 5.1.0(rollup@4.21.2) - '@vue-macros/common': 1.12.3(rollup@4.21.2)(vue@3.4.8(typescript@5.5.4)) - ast-walker-scope: 0.4.2 + '@babel/types': 7.25.7 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@vue-macros/common': 1.14.0(rollup@4.24.0)(vue@3.4.8(typescript@5.6.2)) + ast-walker-scope: 0.5.0(rollup@4.24.0) chokidar: 3.6.0 fast-glob: 3.3.2 json5: 2.2.3 @@ -11650,16 +11647,16 @@ snapshots: mlly: 1.7.1 pathe: 1.1.2 scule: 1.3.0 - unplugin: 1.13.1(webpack-sources@3.2.3) + unplugin: 1.14.1(webpack-sources@3.2.3) yaml: 2.5.1 optionalDependencies: - vue-router: 4.4.3(vue@3.4.8(typescript@5.5.4)) + vue-router: 4.4.5(vue@3.4.8(typescript@5.6.2)) transitivePeerDependencies: - rollup - vue - webpack-sources - unplugin@1.13.1(webpack-sources@3.2.3): + unplugin@1.14.1(webpack-sources@3.2.3): dependencies: acorn: 8.12.1 webpack-virtual-modules: 0.6.2 @@ -11671,12 +11668,12 @@ snapshots: anymatch: 3.1.3 chokidar: 3.6.0 destr: 2.0.3 - h3: 1.12.0 - listhen: 1.7.2 + h3: 1.13.0 + listhen: 1.9.0 lru-cache: 10.4.3 mri: 1.2.0 node-fetch-native: 1.6.4 - ofetch: 1.3.4 + ofetch: 1.4.0 ufo: 1.5.4 optionalDependencies: ioredis: 5.4.1 @@ -11689,13 +11686,13 @@ snapshots: consola: 3.2.3 pathe: 1.1.2 - untyped@1.4.2: + untyped@1.5.0: dependencies: - '@babel/core': 7.25.2 - '@babel/standalone': 7.25.6 - '@babel/types': 7.25.6 + '@babel/core': 7.25.7 + '@babel/standalone': 7.25.7 + '@babel/types': 7.25.7 defu: 6.1.4 - jiti: 1.21.6 + jiti: 2.2.1 mri: 1.2.0 scule: 1.3.0 transitivePeerDependencies: @@ -11708,15 +11705,15 @@ snapshots: mlly: 1.7.1 pathe: 1.1.2 pkg-types: 1.2.0 - unplugin: 1.13.1(webpack-sources@3.2.3) + unplugin: 1.14.1(webpack-sources@3.2.3) transitivePeerDependencies: - webpack-sources upath@1.2.0: {} - update-browserslist-db@1.1.0(browserslist@4.23.3): + update-browserslist-db@1.1.1(browserslist@4.24.0): dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 escalade: 3.2.0 picocolors: 1.1.0 @@ -11737,30 +11734,31 @@ snapshots: vary@1.1.2: {} - vite-node@0.33.0(@types/node@22.5.4)(terser@5.31.6): + vite-node@0.33.0(@types/node@22.7.4)(terser@5.34.1): dependencies: cac: 6.7.14 debug: 4.3.7 mlly: 1.7.1 pathe: 1.1.2 picocolors: 1.1.0 - vite: 4.3.9(@types/node@22.5.4)(terser@5.31.6) + vite: 4.5.5(@types/node@22.7.4)(terser@5.34.1) transitivePeerDependencies: - '@types/node' - less + - lightningcss - sass - stylus - sugarss - supports-color - terser - vite-node@1.6.0(@types/node@22.5.4)(terser@5.31.6): + vite-node@1.6.0(@types/node@22.7.4)(terser@5.34.1): dependencies: cac: 6.7.14 debug: 4.3.7 pathe: 1.1.2 picocolors: 1.1.0 - vite: 5.4.3(@types/node@22.5.4)(terser@5.31.6) + vite: 5.4.8(@types/node@22.7.4)(terser@5.34.1) transitivePeerDependencies: - '@types/node' - less @@ -11772,9 +11770,9 @@ snapshots: - supports-color - terser - vite-plugin-checker@0.6.4(eslint@8.57.0)(optionator@0.9.4)(typescript@5.5.4)(vite@4.3.9(@types/node@22.5.4)(terser@5.31.6)): + vite-plugin-checker@0.6.4(eslint@8.57.1)(optionator@0.9.4)(typescript@5.6.2)(vite@4.5.5(@types/node@22.7.4)(terser@5.34.1)): dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.25.7 ansi-escapes: 4.3.2 chalk: 4.1.2 chokidar: 3.6.0 @@ -11785,63 +11783,63 @@ snapshots: semver: 7.6.3 strip-ansi: 6.0.1 tiny-invariant: 1.3.3 - vite: 4.3.9(@types/node@22.5.4)(terser@5.31.6) + vite: 4.5.5(@types/node@22.7.4)(terser@5.34.1) vscode-languageclient: 7.0.0 vscode-languageserver: 7.0.0 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.0.8 optionalDependencies: - eslint: 8.57.0 + eslint: 8.57.1 optionator: 0.9.4 - typescript: 5.5.4 + typescript: 5.6.2 - vite-plugin-eslint@1.8.1(eslint@8.57.0)(vite@4.3.9(@types/node@22.5.4)(terser@5.31.6)): + vite-plugin-eslint@1.8.1(eslint@8.57.1)(vite@4.5.5(@types/node@22.7.4)(terser@5.34.1)): dependencies: '@rollup/pluginutils': 4.2.1 '@types/eslint': 8.56.12 - eslint: 8.57.0 - rollup: 2.79.1 - vite: 4.3.9(@types/node@22.5.4)(terser@5.31.6) + eslint: 8.57.1 + rollup: 2.79.2 + vite: 4.5.5(@types/node@22.7.4)(terser@5.34.1) - vite-plugin-pwa@0.20.5(vite@4.3.9(@types/node@22.5.4)(terser@5.31.6))(workbox-build@7.1.1)(workbox-window@7.1.0): + vite-plugin-pwa@0.20.5(vite@4.5.5(@types/node@22.7.4)(terser@5.34.1))(workbox-build@7.1.1)(workbox-window@7.1.0): dependencies: debug: 4.3.7 pretty-bytes: 6.1.1 - tinyglobby: 0.2.5 - vite: 4.3.9(@types/node@22.5.4)(terser@5.31.6) + tinyglobby: 0.2.9 + vite: 4.5.5(@types/node@22.7.4)(terser@5.34.1) workbox-build: 7.1.1 workbox-window: 7.1.0 transitivePeerDependencies: - supports-color - vite@4.3.9(@types/node@22.5.4)(terser@5.31.6): + vite@4.5.5(@types/node@22.7.4)(terser@5.34.1): dependencies: - esbuild: 0.17.19 - postcss: 8.4.45 - rollup: 3.29.4 + esbuild: 0.18.20 + postcss: 8.4.47 + rollup: 3.29.5 optionalDependencies: - '@types/node': 22.5.4 + '@types/node': 22.7.4 fsevents: 2.3.3 - terser: 5.31.6 + terser: 5.34.1 - vite@5.4.3(@types/node@22.5.4)(terser@5.31.6): + vite@5.4.8(@types/node@22.7.4)(terser@5.34.1): dependencies: esbuild: 0.21.5 - postcss: 8.4.45 - rollup: 4.21.2 + postcss: 8.4.47 + rollup: 4.24.0 optionalDependencies: - '@types/node': 22.5.4 + '@types/node': 22.7.4 fsevents: 2.3.3 - terser: 5.31.6 + terser: 5.34.1 - vitest@1.6.0(@types/node@22.5.4)(terser@5.31.6): + vitest@1.6.0(@types/node@22.7.4)(terser@5.34.1): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 '@vitest/snapshot': 1.6.0 '@vitest/spy': 1.6.0 '@vitest/utils': 1.6.0 - acorn-walk: 8.3.3 + acorn-walk: 8.3.4 chai: 4.5.0 debug: 4.3.7 execa: 8.0.1 @@ -11853,11 +11851,11 @@ snapshots: strip-literal: 2.1.0 tinybench: 2.9.0 tinypool: 0.8.4 - vite: 5.4.3(@types/node@22.5.4)(terser@5.31.6) - vite-node: 1.6.0(@types/node@22.5.4)(terser@5.31.6) + vite: 5.4.8(@types/node@22.7.4)(terser@5.34.1) + vite-node: 1.6.0(@types/node@22.7.4)(terser@5.34.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.5.4 + '@types/node': 22.7.4 transitivePeerDependencies: - less - lightningcss @@ -11891,20 +11889,20 @@ snapshots: vscode-uri@3.0.8: {} - vue-bundle-renderer@1.0.3: + vue-bundle-renderer@2.1.1: dependencies: ufo: 1.5.4 - vue-demi@0.14.10(vue@3.4.8(typescript@5.5.4)): + vue-demi@0.14.10(vue@3.4.8(typescript@5.6.2)): dependencies: - vue: 3.4.8(typescript@5.5.4) + vue: 3.4.8(typescript@5.6.2) vue-devtools-stub@0.1.0: {} - vue-eslint-parser@9.4.3(eslint@8.57.0): + vue-eslint-parser@9.4.3(eslint@8.57.1): dependencies: debug: 4.3.7 - eslint: 8.57.0 + eslint: 8.57.1 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 @@ -11914,27 +11912,27 @@ snapshots: transitivePeerDependencies: - supports-color - vue-i18n@9.14.0(vue@3.4.8(typescript@5.5.4)): + vue-i18n@9.14.1(vue@3.4.8(typescript@5.6.2)): dependencies: - '@intlify/core-base': 9.14.0 - '@intlify/shared': 9.14.0 - '@vue/devtools-api': 6.6.3 - vue: 3.4.8(typescript@5.5.4) + '@intlify/core-base': 9.14.1 + '@intlify/shared': 9.14.1 + '@vue/devtools-api': 6.6.4 + vue: 3.4.8(typescript@5.6.2) - vue-router@4.4.3(vue@3.4.8(typescript@5.5.4)): + vue-router@4.4.5(vue@3.4.8(typescript@5.6.2)): dependencies: - '@vue/devtools-api': 6.6.3 - vue: 3.4.8(typescript@5.5.4) + '@vue/devtools-api': 6.6.4 + vue: 3.4.8(typescript@5.6.2) - vue@3.4.8(typescript@5.5.4): + vue@3.4.8(typescript@5.6.2): dependencies: '@vue/compiler-dom': 3.4.8 '@vue/compiler-sfc': 3.4.8 '@vue/runtime-dom': 3.4.8 - '@vue/server-renderer': 3.4.8(vue@3.4.8(typescript@5.5.4)) + '@vue/server-renderer': 3.4.8(vue@3.4.8(typescript@5.6.2)) '@vue/shared': 3.4.8 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 webidl-conversions@3.0.1: {} @@ -12001,13 +11999,13 @@ snapshots: workbox-build@7.1.1: dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) - '@babel/core': 7.25.2 - '@babel/preset-env': 7.25.4(@babel/core@7.25.2) - '@babel/runtime': 7.25.6 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.25.2)(rollup@2.79.1) - '@rollup/plugin-node-resolve': 15.2.3(rollup@2.79.1) - '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) - '@rollup/plugin-terser': 0.4.4(rollup@2.79.1) + '@babel/core': 7.25.7 + '@babel/preset-env': 7.25.7(@babel/core@7.25.7) + '@babel/runtime': 7.25.7 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.25.7)(rollup@2.79.2) + '@rollup/plugin-node-resolve': 15.3.0(rollup@2.79.2) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) + '@rollup/plugin-terser': 0.4.4(rollup@2.79.2) '@surma/rollup-plugin-off-main-thread': 2.2.3 ajv: 8.17.1 common-tags: 1.8.2 @@ -12016,7 +12014,7 @@ snapshots: glob: 7.2.3 lodash: 4.17.21 pretty-bytes: 5.6.0 - rollup: 2.79.1 + rollup: 2.79.2 source-map: 0.8.0-beta.0 stringify-object: 3.3.0 strip-comments: 2.0.1