diff --git a/apiserver/controllers/agent.go b/apiserver/controllers/agent.go new file mode 100644 index 00000000..85c09fdf --- /dev/null +++ b/apiserver/controllers/agent.go @@ -0,0 +1,116 @@ +package controllers + +import ( + "encoding/json" + "fmt" + "log/slog" + "net/http" + + "github.com/google/uuid" + "github.com/gorilla/mux" + + gErrors "github.com/cloudbase/garm-provider-common/errors" + "github.com/cloudbase/garm/apiserver/params" + "github.com/cloudbase/garm/auth" + "github.com/cloudbase/garm/workers/websocket/agent" +) + +func (a *APIController) AgentHandler(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + instance, err := auth.InstanceParams(ctx) + if err != nil { + w.WriteHeader(http.StatusForbidden) + slog.ErrorContext(ctx, "failed to authenticate instance") + return + } + + conn, err := a.upgrader.Upgrade(w, r, nil) + if err != nil { + slog.With(slog.Any("error", err)).ErrorContext(ctx, "error upgrading to websockets") + return + } + + slog.DebugContext(ctx, "new agent connected", "agent_name", instance.Name) + agent, err := agent.NewAgent(ctx, conn, instance, a.r) + if err != nil { + slog.With(slog.Any("error", err)).ErrorContext(ctx, "failed to create agent") + return + } + defer func() { + slog.DebugContext(ctx, "stopping agent", "agent_name", instance.Name) + agent.Stop() + }() + + if err := agent.Start(); err != nil { + slog.ErrorContext(ctx, "failed to start agent loop", "error", err, "agent_name", instance.Name) + handleError(ctx, w, err) + return + } + + if err := a.agentHub.RegisterAgent(agent); err != nil { + handleError(ctx, w, err) + return + } + defer a.agentHub.UnregisterAgent(instance.Name) + + select { + case <-agent.Done(): + case <-ctx.Done(): + } + slog.InfoContext(ctx, "connection closed", "agent_name", instance.Name) +} + +func (a *APIController) AgentShellHandler(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + if !auth.IsAdmin(ctx) { + handleError(ctx, w, gErrors.ErrUnauthorized) + return + } + + vars := mux.Vars(r) + agentName, ok := vars["agentName"] + if !ok { + w.WriteHeader(http.StatusBadRequest) + if err := json.NewEncoder(w).Encode(params.APIErrorResponse{ + Error: "Bad Request", + Details: "No agent name specified", + }); err != nil { + slog.With(slog.Any("error", err)).ErrorContext(ctx, "failed to encode response") + } + return + } + + sessionID, err := uuid.NewRandom() + if err != nil { + handleError(ctx, w, fmt.Errorf("failed to generate UUID: %w", err)) + return + } + + agent, err := a.agentHub.GetAgent(agentName) + if err != nil { + slog.InfoContext(ctx, "session for agent not found", "agent_name", agentName) + handleError(ctx, w, err) + return + } + + conn, err := a.upgrader.Upgrade(w, r, nil) + if err != nil { + slog.With(slog.Any("error", err)).ErrorContext(ctx, "error upgrading to websockets") + return + } + + sess, err := agent.CreateShellSession(ctx, sessionID, conn) + if err != nil { + slog.ErrorContext(ctx, "failed to create client session", "error", err) + return + } + slog.InfoContext(ctx, "shell session created", "session_id", sessionID, "agent_name", agentName) + defer agent.RemoveClientSession(sessionID, false) + + select { + case <-sess.Done(): + case <-agent.Done(): + case <-ctx.Done(): + } + slog.InfoContext(ctx, "connection closed", "session_id", sessionID, "agent_name", agentName) +} diff --git a/apiserver/controllers/controllers.go b/apiserver/controllers/controllers.go index 8c091443..f79817fb 100644 --- a/apiserver/controllers/controllers.go +++ b/apiserver/controllers/controllers.go @@ -38,10 +38,11 @@ import ( "github.com/cloudbase/garm/runner" //nolint:typecheck garmUtil "github.com/cloudbase/garm/util" wsWriter "github.com/cloudbase/garm/websocket" + "github.com/cloudbase/garm/workers/websocket/agent" "github.com/cloudbase/garm/workers/websocket/events" ) -func NewAPIController(r *runner.Runner, authenticator *auth.Authenticator, hub *wsWriter.Hub, apiCfg config.APIServer) (*APIController, error) { +func NewAPIController(r *runner.Runner, authenticator *auth.Authenticator, hub *wsWriter.Hub, agentHub *agent.Hub, apiCfg config.APIServer) (*APIController, error) { controllerInfo, err := r.GetControllerInfo(auth.GetAdminContext(context.Background())) if err != nil { return nil, fmt.Errorf("failed to get controller info: %w", err) @@ -74,9 +75,10 @@ func NewAPIController(r *runner.Runner, authenticator *auth.Authenticator, hub * } } return &APIController{ - r: r, - auth: authenticator, - hub: hub, + r: r, + auth: authenticator, + hub: hub, + agentHub: agentHub, upgrader: websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 16384, @@ -90,6 +92,7 @@ type APIController struct { r *runner.Runner auth *auth.Authenticator hub *wsWriter.Hub + agentHub *agent.Hub upgrader websocket.Upgrader controllerID string } diff --git a/apiserver/controllers/metadata.go b/apiserver/controllers/metadata.go index 23817acc..b6f9dfa0 100644 --- a/apiserver/controllers/metadata.go +++ b/apiserver/controllers/metadata.go @@ -17,12 +17,14 @@ package controllers import ( "encoding/json" "fmt" + "io" "log/slog" "net/http" "strconv" "github.com/gorilla/mux" + gErrors "github.com/cloudbase/garm-provider-common/errors" "github.com/cloudbase/garm/apiserver/params" ) @@ -41,6 +43,25 @@ func (a *APIController) InstanceMetadataHandler(w http.ResponseWriter, r *http.R } } +// swagger:route GET /tools/garm-agent tools GarmAgentList +// +// List GARM agent tools. +// +// Parameters: +// + name: page +// description: The page at which to list. +// type: integer +// in: query +// required: false +// + name: pageSize +// description: Number of items per page. +// type: integer +// in: query +// required: false +// +// Responses: +// 200: GARMAgentToolsPaginatedResponse +// 400: APIErrorResponse func (a *APIController) InstanceGARMToolsHandler(w http.ResponseWriter, r *http.Request) { ctx := r.Context() @@ -74,6 +95,50 @@ func (a *APIController) InstanceGARMToolsHandler(w http.ResponseWriter, r *http. } } +func (a *APIController) InstanceShowGARMToolHandler(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + + vars := mux.Vars(r) + objectID, err := getObjectIDFromVars(vars) + if err != nil { + slog.ErrorContext(ctx, "failed to get object ID", "error", err) + handleError(ctx, w, gErrors.NewBadRequestError("invalid objectID: %s", err)) + return + } + tools, err := a.r.ShowGARMTools(ctx, objectID) + if err != nil { + slog.ErrorContext(ctx, "failed to get garm tools", "error", err) + handleError(ctx, w, err) + return + } + + w.Header().Set("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(tools); err != nil { + slog.With(slog.Any("error", err)).ErrorContext(ctx, "failed to encode response") + } +} + +func (a *APIController) InstanceGARMToolDownloadHandler(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + vars := mux.Vars(r) + objectID, err := getObjectIDFromVars(vars) + if err != nil { + slog.ErrorContext(ctx, "failed to get object ID", "error", err) + handleError(ctx, w, gErrors.NewBadRequestError("invalid objectID: %s", err)) + return + } + + reader, err := a.r.GetGARMToolsReadHandler(ctx, objectID) + if err != nil { + handleError(ctx, w, err) + return + } + defer reader.Close() + if _, err := io.Copy(w, reader); err != nil { + slog.ErrorContext(ctx, "failed to stream data", "error", err) + } +} + func (a *APIController) InstanceGithubRegistrationTokenHandler(w http.ResponseWriter, r *http.Request) { ctx := r.Context() diff --git a/apiserver/controllers/templates.go b/apiserver/controllers/templates.go index 091e97f7..2469a1d1 100644 --- a/apiserver/controllers/templates.go +++ b/apiserver/controllers/templates.go @@ -193,6 +193,38 @@ func (a *APIController) CreateTemplateHandler(w http.ResponseWriter, r *http.Req } } +// swagger:route POST /templates/restore templates RestoreTemplates +// +// Create template with the parameters given. +// +// Parameters: +// + name: Body +// description: Parameters used when restoring the templates. +// type: RestoreTemplateRequest +// in: body +// required: true +// +// Responses: +// default: APIErrorResponse +func (a *APIController) RestoreTemplatesHandler(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + + var templateData runnerParams.RestoreTemplateRequest + if err := json.NewDecoder(r.Body).Decode(&templateData); err != nil { + handleError(ctx, w, gErrors.ErrBadRequest) + return + } + + if err := a.r.RestoreTemplate(ctx, templateData); err != nil { + slog.ErrorContext(ctx, "failed to restore system templates", "error", err) + handleError(ctx, w, err) + return + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) +} + // swagger:route PUT /templates/{templateID} templates UpdateTemplate // // Update template with the parameters given. diff --git a/apiserver/routers/routers.go b/apiserver/routers/routers.go index 4866c156..c2f2587b 100644 --- a/apiserver/routers/routers.go +++ b/apiserver/routers/routers.go @@ -75,6 +75,18 @@ func WithMetricsRouter(parentRouter *mux.Router, disableAuth bool, metricsMiddle return parentRouter } +func WithAgentRouter(parentRouter *mux.Router, han *controllers.APIController, middleware auth.Middleware) *mux.Router { + if parentRouter == nil { + return nil + } + + agentRouter := parentRouter.PathPrefix("/agent").Subrouter() + agentRouter.Use(middleware.Middleware) + agentRouter.Handle("/", http.HandlerFunc(han.AgentHandler)).Methods("GET") + agentRouter.Handle("", http.HandlerFunc(han.AgentHandler)).Methods("GET") + return parentRouter +} + func WithDebugServer(parentRouter *mux.Router) *mux.Router { if parentRouter == nil { return nil @@ -139,7 +151,6 @@ func NewAPIRouter(han *controllers.APIController, authMiddleware, initMiddleware // Handles API calls apiSubRouter := router.PathPrefix("/api/v1").Subrouter() - // FirstRunHandler firstRunRouter := apiSubRouter.PathPrefix("/first-run").Subrouter() firstRunRouter.Handle("/", http.HandlerFunc(han.FirstRunHandler)).Methods("POST", "OPTIONS") @@ -175,9 +186,15 @@ func NewAPIRouter(han *controllers.APIController, authMiddleware, initMiddleware metadataRouter.Handle("/systemd/unit-file", http.HandlerFunc(han.SystemdUnitFileHandler)).Methods("GET", "OPTIONS") metadataRouter.Handle("/system/cert-bundle/", http.HandlerFunc(han.RootCertificateBundleHandler)).Methods("GET", "OPTIONS") metadataRouter.Handle("/system/cert-bundle", http.HandlerFunc(han.RootCertificateBundleHandler)).Methods("GET", "OPTIONS") - // Tools - metadataRouter.Handle("/tools/garm/", http.HandlerFunc(han.InstanceGARMToolsHandler)).Methods("GET", "OPTIONS") - metadataRouter.Handle("/tools/garm", http.HandlerFunc(han.InstanceGARMToolsHandler)).Methods("GET", "OPTIONS") + // List garm agent downloads + metadataRouter.Handle("/tools/garm-agent/", http.HandlerFunc(han.InstanceGARMToolsHandler)).Methods("GET", "OPTIONS") + metadataRouter.Handle("/tools/garm-agent", http.HandlerFunc(han.InstanceGARMToolsHandler)).Methods("GET", "OPTIONS") + // Show details of a particular garm agent + metadataRouter.Handle("/tools/garm-agent/{objectID}/", http.HandlerFunc(han.InstanceShowGARMToolHandler)).Methods("GET", "OPTIONS") + metadataRouter.Handle("/tools/garm-agent/{objectID}", http.HandlerFunc(han.InstanceShowGARMToolHandler)).Methods("GET", "OPTIONS") + // Download garm agent + metadataRouter.Handle("/tools/garm-agent/{objectID}/download/", http.HandlerFunc(han.InstanceGARMToolDownloadHandler)).Methods("GET", "OPTIONS") + metadataRouter.Handle("/tools/garm-agent/{objectID}/download", http.HandlerFunc(han.InstanceGARMToolDownloadHandler)).Methods("GET", "OPTIONS") // install script metadataRouter.Handle("/install-script/", http.HandlerFunc(han.RunnerInstallScriptHandler)).Methods("GET", "OPTIONS") metadataRouter.Handle("/install-script", http.HandlerFunc(han.RunnerInstallScriptHandler)).Methods("GET", "OPTIONS") @@ -249,6 +266,9 @@ func NewAPIRouter(han *controllers.APIController, authMiddleware, initMiddleware /////////////////////////////////////////////////////// apiRouter.Handle("/tools/garm-agent/", http.HandlerFunc(han.InstanceGARMToolsHandler)).Methods("GET", "OPTIONS") apiRouter.Handle("/tools/garm-agent", http.HandlerFunc(han.InstanceGARMToolsHandler)).Methods("GET", "OPTIONS") + // Download garm agent + apiRouter.Handle("/tools/garm-agent/{objectID}/download/", http.HandlerFunc(han.InstanceGARMToolDownloadHandler)).Methods("GET", "OPTIONS") + apiRouter.Handle("/tools/garm-agent/{objectID}/download", http.HandlerFunc(han.InstanceGARMToolDownloadHandler)).Methods("GET", "OPTIONS") ////////// // Jobs // @@ -571,7 +591,9 @@ func NewAPIRouter(han *controllers.APIController, authMiddleware, initMiddleware // Update template apiRouter.Handle("/templates/{templateID}/", http.HandlerFunc(han.UpdateTemplateHandler)).Methods("PUT", "OPTIONS") apiRouter.Handle("/templates/{templateID}", http.HandlerFunc(han.UpdateTemplateHandler)).Methods("PUT", "OPTIONS") - + // Restore templates + apiRouter.Handle("/templates/restore/", http.HandlerFunc(han.RestoreTemplatesHandler)).Methods("POST", "OPTIONS") + apiRouter.Handle("/templates/restore", http.HandlerFunc(han.RestoreTemplatesHandler)).Methods("POST", "OPTIONS") ///////////////////////// // Websocket endpoints // ///////////////////////// @@ -584,6 +606,7 @@ func NewAPIRouter(han *controllers.APIController, authMiddleware, initMiddleware // DB watcher websocket endpoint apiRouter.Handle("/ws/events/", http.HandlerFunc(han.EventsHandler)).Methods("GET") apiRouter.Handle("/ws/events", http.HandlerFunc(han.EventsHandler)).Methods("GET") + apiRouter.Handle("/ws/agent/{agentName}/shell", http.HandlerFunc(han.AgentShellHandler)).Methods("GET") // NotFound handler - this should be last apiRouter.PathPrefix("/").HandlerFunc(han.NotFoundHandler).Methods("GET", "POST", "PUT", "DELETE", "OPTIONS") diff --git a/apiserver/swagger-models.yaml b/apiserver/swagger-models.yaml index ba012289..5f0e5428 100644 --- a/apiserver/swagger-models.yaml +++ b/apiserver/swagger-models.yaml @@ -401,3 +401,24 @@ definitions: alias: garm_params items: $ref: '#/definitions/Template' + RestoreTemplateRequest: + type: object + x-go-type: + type: RestoreTemplateRequest + import: + package: github.com/cloudbase/garm/params + alias: garm_params + GARMAgentToolsPaginatedResponse: + type: object + x-go-type: + type: GARMAgentToolsPaginatedResponse + import: + package: github.com/cloudbase/garm/params + alias: garm_params + GARMAgentTool: + type: object + x-go-type: + type: GARMAgentTool + import: + package: github.com/cloudbase/garm/params + alias: garm_params \ No newline at end of file diff --git a/apiserver/swagger.yaml b/apiserver/swagger.yaml index ed127234..4dc362e7 100644 --- a/apiserver/swagger.yaml +++ b/apiserver/swagger.yaml @@ -162,6 +162,20 @@ definitions: alias: garm_params package: github.com/cloudbase/garm/params type: ForgeEndpoints + GARMAgentTool: + type: object + x-go-type: + import: + alias: garm_params + package: github.com/cloudbase/garm/params + type: GARMAgentTool + GARMAgentToolsPaginatedResponse: + type: object + x-go-type: + import: + alias: garm_params + package: github.com/cloudbase/garm/params + type: GARMAgentToolsPaginatedResponse HookInfo: type: object x-go-type: @@ -293,6 +307,13 @@ definitions: alias: garm_params package: github.com/cloudbase/garm/params type: Repository + RestoreTemplateRequest: + type: object + x-go-type: + import: + alias: garm_params + package: github.com/cloudbase/garm/params + type: RestoreTemplateRequest ScaleSet: type: object x-go-type: @@ -2534,6 +2555,50 @@ paths: summary: Update template with the parameters given. tags: - templates + /templates/restore: + post: + operationId: RestoreTemplates + parameters: + - description: Parameters used when restoring the templates. + in: body + name: Body + required: true + schema: + $ref: '#/definitions/RestoreTemplateRequest' + description: Parameters used when restoring the templates. + type: object + responses: + default: + description: APIErrorResponse + schema: + $ref: '#/definitions/APIErrorResponse' + summary: Create template with the parameters given. + tags: + - templates + /tools/garm-agent: + get: + operationId: GarmAgentList + parameters: + - description: The page at which to list. + in: query + name: page + type: integer + - description: Number of items per page. + in: query + name: pageSize + type: integer + responses: + "200": + description: GARMAgentToolsPaginatedResponse + schema: + $ref: '#/definitions/GARMAgentToolsPaginatedResponse' + "400": + description: APIErrorResponse + schema: + $ref: '#/definitions/APIErrorResponse' + summary: List GARM agent tools. + tags: + - tools produces: - application/json security: diff --git a/auth/agent_middleware.go b/auth/agent_middleware.go new file mode 100644 index 00000000..8f0584a8 --- /dev/null +++ b/auth/agent_middleware.go @@ -0,0 +1,190 @@ +// Copyright 2022 Cloudbase Solutions SRL +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +package auth + +import ( + "context" + "fmt" + "log/slog" + "net/http" + "strings" + + jwt "github.com/golang-jwt/jwt/v5" + + runnerErrors "github.com/cloudbase/garm-provider-common/errors" + commonParams "github.com/cloudbase/garm-provider-common/params" + "github.com/cloudbase/garm/config" + dbCommon "github.com/cloudbase/garm/database/common" + "github.com/cloudbase/garm/params" +) + +func (i *instanceToken) NewAgentJWTToken(instance params.Instance, entity params.ForgeEntity) (string, error) { + claims := InstanceJWTClaims{ + RegisteredClaims: jwt.RegisteredClaims{ + Issuer: "garm", + }, + ID: instance.ID, + Name: instance.Name, + PoolID: instance.PoolID, + Scope: entity.EntityType, + Entity: entity.ID, + IsAgent: true, + ForgeType: string(entity.Credentials.ForgeType), + CreateAttempt: instance.CreateAttempt, + } + token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + tokenString, err := token.SignedString([]byte(i.jwtSecret)) + if err != nil { + return "", fmt.Errorf("error signing token: %w", err) + } + + return tokenString, nil +} + +// agentMiddleware is the authentication middleware +// used with gorilla +type agentMiddleware struct { + store dbCommon.Store + cfg config.JWTAuth +} + +// NewjwtMiddleware returns a populated jwtMiddleware +func AgentMiddleware(store dbCommon.Store, cfg config.JWTAuth) (Middleware, error) { + return &agentMiddleware{ + store: store, + cfg: cfg, + }, nil +} + +func (amw *agentMiddleware) claimsToContext(ctx context.Context, claims *InstanceJWTClaims) (context.Context, error) { + if claims == nil { + return ctx, runnerErrors.ErrUnauthorized + } + + if claims.Name == "" { + return nil, runnerErrors.ErrUnauthorized + } + + instanceInfo, err := amw.store.GetInstance(ctx, claims.Name) + if err != nil { + return ctx, runnerErrors.ErrUnauthorized + } + + entity, err := getForgeEntityFromInstance(ctx, amw.store, instanceInfo) + if err != nil { + slog.ErrorContext(ctx, "failed to get entity from instance", "error", err) + return ctx, runnerErrors.ErrUnauthorized + } + + ctx = PopulateInstanceContext(ctx, instanceInfo, entity, claims) + return ctx, nil +} + +// Middleware implements the middleware interface +func (amw *agentMiddleware) Middleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + authorizationHeader := r.Header.Get("authorization") + if authorizationHeader == "" { + slog.InfoContext(ctx, "authorization header was empty") + invalidAuthResponse(ctx, w) + return + } + + bearerToken := strings.Split(authorizationHeader, " ") + if len(bearerToken) != 2 { + slog.InfoContext(ctx, "invalid authorization header") + invalidAuthResponse(ctx, w) + return + } + + claims := &InstanceJWTClaims{} + token, err := jwt.ParseWithClaims(bearerToken[1], claims, func(token *jwt.Token) (interface{}, error) { + if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { + return nil, fmt.Errorf("invalid signing method") + } + return []byte(amw.cfg.Secret), nil + }) + if err != nil { + slog.InfoContext(ctx, "failed to validate JWT token", "error", err) + invalidAuthResponse(ctx, w) + return + } + + if !claims.IsAgent { + invalidAuthResponse(ctx, w) + return + } + + if !token.Valid { + slog.InfoContext(ctx, "JWT token is invalid") + invalidAuthResponse(ctx, w) + return + } + + ctx, err = amw.claimsToContext(ctx, claims) + if err != nil { + slog.InfoContext(ctx, "failed to populate context", "error", err) + invalidAuthResponse(ctx, w) + return + } + + if InstanceID(ctx) == "" { + slog.InfoContext(ctx, "failed to find instance ID in context") + invalidAuthResponse(ctx, w) + return + } + + runnerStatus := InstanceRunnerStatus(ctx) + switch runnerStatus { + case params.RunnerActive, params.RunnerTerminated, params.RunnerFailed: + // Once a job starts to run, we can no longer trust that the JWT token was not compromised. + // Any new auth requests using that token are not to be allowed. + slog.InfoContext(ctx, "invalid runner status", "status", runnerStatus) + invalidAuthResponse(ctx, w) + return + } + + instanceParams, err := InstanceParams(ctx) + if err != nil { + slog.InfoContext( + ctx, "could not find instance params", + "runner_name", InstanceName(ctx)) + invalidAuthResponse(ctx, w) + return + } + + // Token was generated for a previous attempt at creating this instance. + if claims.CreateAttempt != instanceParams.CreateAttempt { + slog.InfoContext( + ctx, "invalid token create attempt", + "runner_name", InstanceName(ctx), + "token_create_attempt", claims.CreateAttempt, + "instance_create_attempt", instanceParams.CreateAttempt) + invalidAuthResponse(ctx, w) + return + } + + // instance must be running. Anything else is either still creating or in the process + // of being deleted and shouldn't be trying to authenticate. + if instanceParams.Status != commonParams.InstanceRunning { + slog.InfoContext(ctx, "invalid instance status", "status", instanceParams.Status) + invalidAuthResponse(ctx, w) + return + } + + next.ServeHTTP(w, r.WithContext(ctx)) + }) +} diff --git a/auth/context.go b/auth/context.go index 81bb7564..d983c62f 100644 --- a/auth/context.go +++ b/auth/context.go @@ -45,8 +45,21 @@ const ( instanceHasJITConfig contextFlags = "hasJITConfig" instanceParams contextFlags = "instanceParams" instanceForgeTypeKey contextFlags = "forge_type" + instanceIsAgent contextFlags = "is_agent" ) +func SetInstanceIsAgent(ctx context.Context, val bool) context.Context { + return context.WithValue(ctx, instanceIsAgent, val) +} + +func InstanceIsAgent(ctx context.Context) bool { + elem := ctx.Value(instanceIsAgent) + if elem == nil { + return false + } + return elem.(bool) +} + func SetInstanceForgeType(ctx context.Context, val string) context.Context { return context.WithValue(ctx, instanceForgeTypeKey, val) } @@ -194,6 +207,7 @@ func PopulateInstanceContext(ctx context.Context, instance params.Instance, enti ctx = SetInstanceParams(ctx, instance) ctx = SetInstanceForgeType(ctx, claims.ForgeType) ctx = SetInstanceEntity(ctx, entity) + ctx = SetInstanceIsAgent(ctx, claims.IsAgent) return ctx } diff --git a/auth/init_required.go b/auth/init_required.go index 3ef31d70..ca44b0e3 100644 --- a/auth/init_required.go +++ b/auth/init_required.go @@ -66,7 +66,7 @@ func (u *urlsRequired) Middleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ctx := r.Context() ctrlInfo, err := u.store.ControllerInfo() - if err != nil || ctrlInfo.MetadataURL == "" || ctrlInfo.CallbackURL == "" { + if err != nil || ctrlInfo.MetadataURL == "" || ctrlInfo.CallbackURL == "" || ctrlInfo.AgentURL == "" { w.Header().Add("Content-Type", "application/json") w.WriteHeader(http.StatusConflict) if err := json.NewEncoder(w).Encode(params.URLsRequired); err != nil { diff --git a/auth/instance_middleware.go b/auth/instance_middleware.go index 887e3e39..24c1349c 100644 --- a/auth/instance_middleware.go +++ b/auth/instance_middleware.go @@ -45,6 +45,7 @@ type InstanceJWTClaims struct { Entity string `json:"entity"` CreateAttempt int `json:"create_attempt"` ForgeType string `json:"forge_type"` + IsAgent bool `json:"is_agent"` jwt.RegisteredClaims } @@ -86,6 +87,7 @@ func (i *instanceToken) NewInstanceJWTToken(instance params.Instance, entity par Scope: entity.EntityType, Entity: entity.String(), ForgeType: string(entity.Credentials.ForgeType), + IsAgent: false, CreateAttempt: instance.CreateAttempt, } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) @@ -112,14 +114,14 @@ func NewInstanceMiddleware(store dbCommon.Store, cfg config.JWTAuth) (Middleware }, nil } -func (amw *instanceMiddleware) getForgeEntityFromInstance(ctx context.Context, instance params.Instance) (params.ForgeEntity, error) { +func getForgeEntityFromInstance(ctx context.Context, store dbCommon.Store, instance params.Instance) (params.ForgeEntity, error) { var entityGetter params.EntityGetter var err error switch { case instance.PoolID != "": - entityGetter, err = amw.store.GetPoolByID(ctx, instance.PoolID) + entityGetter, err = store.GetPoolByID(ctx, instance.PoolID) case instance.ScaleSetID != 0: - entityGetter, err = amw.store.GetScaleSetByID(ctx, instance.ScaleSetID) + entityGetter, err = store.GetScaleSetByID(ctx, instance.ScaleSetID) default: return params.ForgeEntity{}, errors.New("instance not associated with a pool or scale set") } @@ -139,7 +141,7 @@ func (amw *instanceMiddleware) getForgeEntityFromInstance(ctx context.Context, i return params.ForgeEntity{}, fmt.Errorf("error fetching entity: %w", err) } - entity, err := amw.store.GetForgeEntity(ctx, poolEntity.EntityType, poolEntity.ID) + entity, err := store.GetForgeEntity(ctx, poolEntity.EntityType, poolEntity.ID) if err != nil { slog.With(slog.Any("error", err)).ErrorContext( ctx, "failed to get entity", @@ -166,7 +168,7 @@ func (amw *instanceMiddleware) claimsToContext(ctx context.Context, claims *Inst return ctx, runnerErrors.ErrUnauthorized } - entity, err := amw.getForgeEntityFromInstance(ctx, instanceInfo) + entity, err := getForgeEntityFromInstance(ctx, amw.store, instanceInfo) if err != nil { slog.ErrorContext(ctx, "failed to get entity from instance", "error", err) return ctx, runnerErrors.ErrUnauthorized @@ -210,6 +212,10 @@ func (amw *instanceMiddleware) Middleware(next http.Handler) http.Handler { invalidAuthResponse(ctx, w) return } + if claims.IsAgent { + invalidAuthResponse(ctx, w) + return + } ctx, err = amw.claimsToContext(ctx, claims) if err != nil { diff --git a/auth/interfaces.go b/auth/interfaces.go index 49337352..2b25f421 100644 --- a/auth/interfaces.go +++ b/auth/interfaces.go @@ -27,4 +27,5 @@ type Middleware interface { type InstanceTokenGetter interface { NewInstanceJWTToken(instance params.Instance, entity params.ForgeEntity, ttlMinutes uint) (string, error) + NewAgentJWTToken(instance params.Instance, entity params.ForgeEntity) (string, error) } diff --git a/auth/jwt.go b/auth/jwt.go index 52fce0c9..6468b6d4 100644 --- a/auth/jwt.go +++ b/auth/jwt.go @@ -73,7 +73,7 @@ func (amw *jwtMiddleware) claimsToContext(ctx context.Context, claims *JWTClaims var expiresAt *time.Time if claims.ExpiresAt != nil { - expires := claims.ExpiresAt.Time.UTC() + expires := claims.ExpiresAt.UTC() expiresAt = &expires } diff --git a/client/garm_api_client.go b/client/garm_api_client.go index 983ad0f0..d8c88f13 100644 --- a/client/garm_api_client.go +++ b/client/garm_api_client.go @@ -27,6 +27,7 @@ import ( "github.com/cloudbase/garm/client/repositories" "github.com/cloudbase/garm/client/scalesets" "github.com/cloudbase/garm/client/templates" + "github.com/cloudbase/garm/client/tools" ) // Default garm API HTTP client. @@ -88,6 +89,7 @@ func New(transport runtime.ClientTransport, formats strfmt.Registry) *GarmAPI { cli.Repositories = repositories.New(transport, formats) cli.Scalesets = scalesets.New(transport, formats) cli.Templates = templates.New(transport, formats) + cli.Tools = tools.New(transport, formats) return cli } @@ -166,6 +168,8 @@ type GarmAPI struct { Templates templates.ClientService + Tools tools.ClientService + Transport runtime.ClientTransport } @@ -189,4 +193,5 @@ func (c *GarmAPI) SetTransport(transport runtime.ClientTransport) { c.Repositories.SetTransport(transport) c.Scalesets.SetTransport(transport) c.Templates.SetTransport(transport) + c.Tools.SetTransport(transport) } diff --git a/client/templates/restore_templates_parameters.go b/client/templates/restore_templates_parameters.go new file mode 100644 index 00000000..92f88829 --- /dev/null +++ b/client/templates/restore_templates_parameters.go @@ -0,0 +1,151 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package templates + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "net/http" + "time" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + cr "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" + + garm_params "github.com/cloudbase/garm/params" +) + +// NewRestoreTemplatesParams creates a new RestoreTemplatesParams object, +// with the default timeout for this client. +// +// Default values are not hydrated, since defaults are normally applied by the API server side. +// +// To enforce default values in parameter, use SetDefaults or WithDefaults. +func NewRestoreTemplatesParams() *RestoreTemplatesParams { + return &RestoreTemplatesParams{ + timeout: cr.DefaultTimeout, + } +} + +// NewRestoreTemplatesParamsWithTimeout creates a new RestoreTemplatesParams object +// with the ability to set a timeout on a request. +func NewRestoreTemplatesParamsWithTimeout(timeout time.Duration) *RestoreTemplatesParams { + return &RestoreTemplatesParams{ + timeout: timeout, + } +} + +// NewRestoreTemplatesParamsWithContext creates a new RestoreTemplatesParams object +// with the ability to set a context for a request. +func NewRestoreTemplatesParamsWithContext(ctx context.Context) *RestoreTemplatesParams { + return &RestoreTemplatesParams{ + Context: ctx, + } +} + +// NewRestoreTemplatesParamsWithHTTPClient creates a new RestoreTemplatesParams object +// with the ability to set a custom HTTPClient for a request. +func NewRestoreTemplatesParamsWithHTTPClient(client *http.Client) *RestoreTemplatesParams { + return &RestoreTemplatesParams{ + HTTPClient: client, + } +} + +/* +RestoreTemplatesParams contains all the parameters to send to the API endpoint + + for the restore templates operation. + + Typically these are written to a http.Request. +*/ +type RestoreTemplatesParams struct { + + /* Body. + + Parameters used when restoring the templates. + */ + Body garm_params.RestoreTemplateRequest + + timeout time.Duration + Context context.Context + HTTPClient *http.Client +} + +// WithDefaults hydrates default values in the restore templates params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *RestoreTemplatesParams) WithDefaults() *RestoreTemplatesParams { + o.SetDefaults() + return o +} + +// SetDefaults hydrates default values in the restore templates params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *RestoreTemplatesParams) SetDefaults() { + // no default values defined for this parameter +} + +// WithTimeout adds the timeout to the restore templates params +func (o *RestoreTemplatesParams) WithTimeout(timeout time.Duration) *RestoreTemplatesParams { + o.SetTimeout(timeout) + return o +} + +// SetTimeout adds the timeout to the restore templates params +func (o *RestoreTemplatesParams) SetTimeout(timeout time.Duration) { + o.timeout = timeout +} + +// WithContext adds the context to the restore templates params +func (o *RestoreTemplatesParams) WithContext(ctx context.Context) *RestoreTemplatesParams { + o.SetContext(ctx) + return o +} + +// SetContext adds the context to the restore templates params +func (o *RestoreTemplatesParams) SetContext(ctx context.Context) { + o.Context = ctx +} + +// WithHTTPClient adds the HTTPClient to the restore templates params +func (o *RestoreTemplatesParams) WithHTTPClient(client *http.Client) *RestoreTemplatesParams { + o.SetHTTPClient(client) + return o +} + +// SetHTTPClient adds the HTTPClient to the restore templates params +func (o *RestoreTemplatesParams) SetHTTPClient(client *http.Client) { + o.HTTPClient = client +} + +// WithBody adds the body to the restore templates params +func (o *RestoreTemplatesParams) WithBody(body garm_params.RestoreTemplateRequest) *RestoreTemplatesParams { + o.SetBody(body) + return o +} + +// SetBody adds the body to the restore templates params +func (o *RestoreTemplatesParams) SetBody(body garm_params.RestoreTemplateRequest) { + o.Body = body +} + +// WriteToRequest writes these params to a swagger request +func (o *RestoreTemplatesParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + if err := r.SetTimeout(o.timeout); err != nil { + return err + } + var res []error + if err := r.SetBodyParam(o.Body); err != nil { + return err + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/client/templates/restore_templates_responses.go b/client/templates/restore_templates_responses.go new file mode 100644 index 00000000..a5e21ba4 --- /dev/null +++ b/client/templates/restore_templates_responses.go @@ -0,0 +1,106 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package templates + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "encoding/json" + "fmt" + "io" + + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + + apiserver_params "github.com/cloudbase/garm/apiserver/params" +) + +// RestoreTemplatesReader is a Reader for the RestoreTemplates structure. +type RestoreTemplatesReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *RestoreTemplatesReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + result := NewRestoreTemplatesDefault(response.Code()) + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + if response.Code()/100 == 2 { + return result, nil + } + return nil, result +} + +// NewRestoreTemplatesDefault creates a RestoreTemplatesDefault with default headers values +func NewRestoreTemplatesDefault(code int) *RestoreTemplatesDefault { + return &RestoreTemplatesDefault{ + _statusCode: code, + } +} + +/* +RestoreTemplatesDefault describes a response with status code -1, with default header values. + +APIErrorResponse +*/ +type RestoreTemplatesDefault struct { + _statusCode int + + Payload apiserver_params.APIErrorResponse +} + +// IsSuccess returns true when this restore templates default response has a 2xx status code +func (o *RestoreTemplatesDefault) IsSuccess() bool { + return o._statusCode/100 == 2 +} + +// IsRedirect returns true when this restore templates default response has a 3xx status code +func (o *RestoreTemplatesDefault) IsRedirect() bool { + return o._statusCode/100 == 3 +} + +// IsClientError returns true when this restore templates default response has a 4xx status code +func (o *RestoreTemplatesDefault) IsClientError() bool { + return o._statusCode/100 == 4 +} + +// IsServerError returns true when this restore templates default response has a 5xx status code +func (o *RestoreTemplatesDefault) IsServerError() bool { + return o._statusCode/100 == 5 +} + +// IsCode returns true when this restore templates default response a status code equal to that given +func (o *RestoreTemplatesDefault) IsCode(code int) bool { + return o._statusCode == code +} + +// Code gets the status code for the restore templates default response +func (o *RestoreTemplatesDefault) Code() int { + return o._statusCode +} + +func (o *RestoreTemplatesDefault) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[POST /templates/restore][%d] RestoreTemplates default %s", o._statusCode, payload) +} + +func (o *RestoreTemplatesDefault) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[POST /templates/restore][%d] RestoreTemplates default %s", o._statusCode, payload) +} + +func (o *RestoreTemplatesDefault) GetPayload() apiserver_params.APIErrorResponse { + return o.Payload +} + +func (o *RestoreTemplatesDefault) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + // response payload + if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} diff --git a/client/templates/templates_client.go b/client/templates/templates_client.go index 63151afd..1d84c3c7 100644 --- a/client/templates/templates_client.go +++ b/client/templates/templates_client.go @@ -62,6 +62,8 @@ type ClientService interface { ListTemplates(params *ListTemplatesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*ListTemplatesOK, error) + RestoreTemplates(params *RestoreTemplatesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) error + UpdateTemplate(params *UpdateTemplateParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*UpdateTemplateOK, error) SetTransport(transport runtime.ClientTransport) @@ -213,6 +215,38 @@ func (a *Client) ListTemplates(params *ListTemplatesParams, authInfo runtime.Cli return nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code()) } +/* +RestoreTemplates creates template with the parameters given +*/ +func (a *Client) RestoreTemplates(params *RestoreTemplatesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) error { + // TODO: Validate the params before sending + if params == nil { + params = NewRestoreTemplatesParams() + } + op := &runtime.ClientOperation{ + ID: "RestoreTemplates", + Method: "POST", + PathPattern: "/templates/restore", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"http"}, + Params: params, + Reader: &RestoreTemplatesReader{formats: a.formats}, + AuthInfo: authInfo, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + _, err := a.transport.Submit(op) + if err != nil { + return err + } + return nil +} + /* UpdateTemplate updates template with the parameters given */ diff --git a/client/tools/garm_agent_list_parameters.go b/client/tools/garm_agent_list_parameters.go new file mode 100644 index 00000000..dcb65bad --- /dev/null +++ b/client/tools/garm_agent_list_parameters.go @@ -0,0 +1,198 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package tools + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "net/http" + "time" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + cr "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// NewGarmAgentListParams creates a new GarmAgentListParams object, +// with the default timeout for this client. +// +// Default values are not hydrated, since defaults are normally applied by the API server side. +// +// To enforce default values in parameter, use SetDefaults or WithDefaults. +func NewGarmAgentListParams() *GarmAgentListParams { + return &GarmAgentListParams{ + timeout: cr.DefaultTimeout, + } +} + +// NewGarmAgentListParamsWithTimeout creates a new GarmAgentListParams object +// with the ability to set a timeout on a request. +func NewGarmAgentListParamsWithTimeout(timeout time.Duration) *GarmAgentListParams { + return &GarmAgentListParams{ + timeout: timeout, + } +} + +// NewGarmAgentListParamsWithContext creates a new GarmAgentListParams object +// with the ability to set a context for a request. +func NewGarmAgentListParamsWithContext(ctx context.Context) *GarmAgentListParams { + return &GarmAgentListParams{ + Context: ctx, + } +} + +// NewGarmAgentListParamsWithHTTPClient creates a new GarmAgentListParams object +// with the ability to set a custom HTTPClient for a request. +func NewGarmAgentListParamsWithHTTPClient(client *http.Client) *GarmAgentListParams { + return &GarmAgentListParams{ + HTTPClient: client, + } +} + +/* +GarmAgentListParams contains all the parameters to send to the API endpoint + + for the garm agent list operation. + + Typically these are written to a http.Request. +*/ +type GarmAgentListParams struct { + + /* Page. + + The page at which to list. + */ + Page *int64 + + /* PageSize. + + Number of items per page. + */ + PageSize *int64 + + timeout time.Duration + Context context.Context + HTTPClient *http.Client +} + +// WithDefaults hydrates default values in the garm agent list params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *GarmAgentListParams) WithDefaults() *GarmAgentListParams { + o.SetDefaults() + return o +} + +// SetDefaults hydrates default values in the garm agent list params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *GarmAgentListParams) SetDefaults() { + // no default values defined for this parameter +} + +// WithTimeout adds the timeout to the garm agent list params +func (o *GarmAgentListParams) WithTimeout(timeout time.Duration) *GarmAgentListParams { + o.SetTimeout(timeout) + return o +} + +// SetTimeout adds the timeout to the garm agent list params +func (o *GarmAgentListParams) SetTimeout(timeout time.Duration) { + o.timeout = timeout +} + +// WithContext adds the context to the garm agent list params +func (o *GarmAgentListParams) WithContext(ctx context.Context) *GarmAgentListParams { + o.SetContext(ctx) + return o +} + +// SetContext adds the context to the garm agent list params +func (o *GarmAgentListParams) SetContext(ctx context.Context) { + o.Context = ctx +} + +// WithHTTPClient adds the HTTPClient to the garm agent list params +func (o *GarmAgentListParams) WithHTTPClient(client *http.Client) *GarmAgentListParams { + o.SetHTTPClient(client) + return o +} + +// SetHTTPClient adds the HTTPClient to the garm agent list params +func (o *GarmAgentListParams) SetHTTPClient(client *http.Client) { + o.HTTPClient = client +} + +// WithPage adds the page to the garm agent list params +func (o *GarmAgentListParams) WithPage(page *int64) *GarmAgentListParams { + o.SetPage(page) + return o +} + +// SetPage adds the page to the garm agent list params +func (o *GarmAgentListParams) SetPage(page *int64) { + o.Page = page +} + +// WithPageSize adds the pageSize to the garm agent list params +func (o *GarmAgentListParams) WithPageSize(pageSize *int64) *GarmAgentListParams { + o.SetPageSize(pageSize) + return o +} + +// SetPageSize adds the pageSize to the garm agent list params +func (o *GarmAgentListParams) SetPageSize(pageSize *int64) { + o.PageSize = pageSize +} + +// WriteToRequest writes these params to a swagger request +func (o *GarmAgentListParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + if err := r.SetTimeout(o.timeout); err != nil { + return err + } + var res []error + + if o.Page != nil { + + // query param page + var qrPage int64 + + if o.Page != nil { + qrPage = *o.Page + } + qPage := swag.FormatInt64(qrPage) + if qPage != "" { + + if err := r.SetQueryParam("page", qPage); err != nil { + return err + } + } + } + + if o.PageSize != nil { + + // query param pageSize + var qrPageSize int64 + + if o.PageSize != nil { + qrPageSize = *o.PageSize + } + qPageSize := swag.FormatInt64(qrPageSize) + if qPageSize != "" { + + if err := r.SetQueryParam("pageSize", qPageSize); err != nil { + return err + } + } + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/client/tools/garm_agent_list_responses.go b/client/tools/garm_agent_list_responses.go new file mode 100644 index 00000000..5b0d8994 --- /dev/null +++ b/client/tools/garm_agent_list_responses.go @@ -0,0 +1,179 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package tools + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "encoding/json" + "fmt" + "io" + + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + + apiserver_params "github.com/cloudbase/garm/apiserver/params" + garm_params "github.com/cloudbase/garm/params" +) + +// GarmAgentListReader is a Reader for the GarmAgentList structure. +type GarmAgentListReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *GarmAgentListReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + case 200: + result := NewGarmAgentListOK() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + case 400: + result := NewGarmAgentListBadRequest() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return nil, result + default: + return nil, runtime.NewAPIError("[GET /tools/garm-agent] GarmAgentList", response, response.Code()) + } +} + +// NewGarmAgentListOK creates a GarmAgentListOK with default headers values +func NewGarmAgentListOK() *GarmAgentListOK { + return &GarmAgentListOK{} +} + +/* +GarmAgentListOK describes a response with status code 200, with default header values. + +GARMAgentToolsPaginatedResponse +*/ +type GarmAgentListOK struct { + Payload garm_params.GARMAgentToolsPaginatedResponse +} + +// IsSuccess returns true when this garm agent list o k response has a 2xx status code +func (o *GarmAgentListOK) IsSuccess() bool { + return true +} + +// IsRedirect returns true when this garm agent list o k response has a 3xx status code +func (o *GarmAgentListOK) IsRedirect() bool { + return false +} + +// IsClientError returns true when this garm agent list o k response has a 4xx status code +func (o *GarmAgentListOK) IsClientError() bool { + return false +} + +// IsServerError returns true when this garm agent list o k response has a 5xx status code +func (o *GarmAgentListOK) IsServerError() bool { + return false +} + +// IsCode returns true when this garm agent list o k response a status code equal to that given +func (o *GarmAgentListOK) IsCode(code int) bool { + return code == 200 +} + +// Code gets the status code for the garm agent list o k response +func (o *GarmAgentListOK) Code() int { + return 200 +} + +func (o *GarmAgentListOK) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /tools/garm-agent][%d] garmAgentListOK %s", 200, payload) +} + +func (o *GarmAgentListOK) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /tools/garm-agent][%d] garmAgentListOK %s", 200, payload) +} + +func (o *GarmAgentListOK) GetPayload() garm_params.GARMAgentToolsPaginatedResponse { + return o.Payload +} + +func (o *GarmAgentListOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + // response payload + if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +// NewGarmAgentListBadRequest creates a GarmAgentListBadRequest with default headers values +func NewGarmAgentListBadRequest() *GarmAgentListBadRequest { + return &GarmAgentListBadRequest{} +} + +/* +GarmAgentListBadRequest describes a response with status code 400, with default header values. + +APIErrorResponse +*/ +type GarmAgentListBadRequest struct { + Payload apiserver_params.APIErrorResponse +} + +// IsSuccess returns true when this garm agent list bad request response has a 2xx status code +func (o *GarmAgentListBadRequest) IsSuccess() bool { + return false +} + +// IsRedirect returns true when this garm agent list bad request response has a 3xx status code +func (o *GarmAgentListBadRequest) IsRedirect() bool { + return false +} + +// IsClientError returns true when this garm agent list bad request response has a 4xx status code +func (o *GarmAgentListBadRequest) IsClientError() bool { + return true +} + +// IsServerError returns true when this garm agent list bad request response has a 5xx status code +func (o *GarmAgentListBadRequest) IsServerError() bool { + return false +} + +// IsCode returns true when this garm agent list bad request response a status code equal to that given +func (o *GarmAgentListBadRequest) IsCode(code int) bool { + return code == 400 +} + +// Code gets the status code for the garm agent list bad request response +func (o *GarmAgentListBadRequest) Code() int { + return 400 +} + +func (o *GarmAgentListBadRequest) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /tools/garm-agent][%d] garmAgentListBadRequest %s", 400, payload) +} + +func (o *GarmAgentListBadRequest) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /tools/garm-agent][%d] garmAgentListBadRequest %s", 400, payload) +} + +func (o *GarmAgentListBadRequest) GetPayload() apiserver_params.APIErrorResponse { + return o.Payload +} + +func (o *GarmAgentListBadRequest) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + // response payload + if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} diff --git a/client/tools/tools_client.go b/client/tools/tools_client.go new file mode 100644 index 00000000..36bd1d6e --- /dev/null +++ b/client/tools/tools_client.go @@ -0,0 +1,106 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package tools + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "fmt" + + "github.com/go-openapi/runtime" + httptransport "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" +) + +// New creates a new tools API client. +func New(transport runtime.ClientTransport, formats strfmt.Registry) ClientService { + return &Client{transport: transport, formats: formats} +} + +// New creates a new tools API client with basic auth credentials. +// It takes the following parameters: +// - host: http host (github.com). +// - basePath: any base path for the API client ("/v1", "/v3"). +// - scheme: http scheme ("http", "https"). +// - user: user for basic authentication header. +// - password: password for basic authentication header. +func NewClientWithBasicAuth(host, basePath, scheme, user, password string) ClientService { + transport := httptransport.New(host, basePath, []string{scheme}) + transport.DefaultAuthentication = httptransport.BasicAuth(user, password) + return &Client{transport: transport, formats: strfmt.Default} +} + +// New creates a new tools API client with a bearer token for authentication. +// It takes the following parameters: +// - host: http host (github.com). +// - basePath: any base path for the API client ("/v1", "/v3"). +// - scheme: http scheme ("http", "https"). +// - bearerToken: bearer token for Bearer authentication header. +func NewClientWithBearerToken(host, basePath, scheme, bearerToken string) ClientService { + transport := httptransport.New(host, basePath, []string{scheme}) + transport.DefaultAuthentication = httptransport.BearerToken(bearerToken) + return &Client{transport: transport, formats: strfmt.Default} +} + +/* +Client for tools API +*/ +type Client struct { + transport runtime.ClientTransport + formats strfmt.Registry +} + +// ClientOption may be used to customize the behavior of Client methods. +type ClientOption func(*runtime.ClientOperation) + +// ClientService is the interface for Client methods +type ClientService interface { + GarmAgentList(params *GarmAgentListParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GarmAgentListOK, error) + + SetTransport(transport runtime.ClientTransport) +} + +/* +GarmAgentList lists g a r m agent tools +*/ +func (a *Client) GarmAgentList(params *GarmAgentListParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GarmAgentListOK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewGarmAgentListParams() + } + op := &runtime.ClientOperation{ + ID: "GarmAgentList", + Method: "GET", + PathPattern: "/tools/garm-agent", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"http"}, + Params: params, + Reader: &GarmAgentListReader{formats: a.formats}, + AuthInfo: authInfo, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + result, err := a.transport.Submit(op) + if err != nil { + return nil, err + } + success, ok := result.(*GarmAgentListOK) + if ok { + return success, nil + } + // unexpected success response + // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue + msg := fmt.Sprintf("unexpected success response for GarmAgentList: API contract not enforced by server. Client expected to get an error, but got: %T", result) + panic(msg) +} + +// SetTransport changes the transport on the client +func (a *Client) SetTransport(transport runtime.ClientTransport) { + a.transport = transport +} diff --git a/cmd/garm-cli/cmd/agent_nix.go b/cmd/garm-cli/cmd/agent_nix.go new file mode 100644 index 00000000..6203381a --- /dev/null +++ b/cmd/garm-cli/cmd/agent_nix.go @@ -0,0 +1,32 @@ +//go:build !windows +// +build !windows + +package cmd + +import ( + "context" + "os" + "os/signal" + "syscall" + + "github.com/google/uuid" + "golang.org/x/term" +) + +var sigs = make(chan os.Signal, 1) + +func watchTermResize(ctx context.Context, resizeCh chan [2]int, sessionID uuid.UUID) { + signal.Notify(sigs, syscall.SIGWINCH) + + for { + select { + case <-sigs: + w, h, err := term.GetSize(int(os.Stdin.Fd())) + if err == nil && sessionID != uuid.Nil { + resizeCh <- [2]int{w, h} + } + case <-ctx.Done(): + return + } + } +} diff --git a/cmd/garm-cli/cmd/agent_windows.go b/cmd/garm-cli/cmd/agent_windows.go new file mode 100644 index 00000000..eb23e69b --- /dev/null +++ b/cmd/garm-cli/cmd/agent_windows.go @@ -0,0 +1,27 @@ +package cmd + +import ( + "context" + "os" + "time" + + "github.com/google/uuid" + "golang.org/x/term" +) + +func watchTermResize(ctx context.Context, resizeCh chan [2]int, sessionID uuid.UUID) { + var lastW, lastH int + for { + select { + case <-ctx.Done(): + return + default: + w, h, err := term.GetSize(int(os.Stdin.Fd())) + if err == nil && (w != lastW || h != lastH) && sessionID != uuid.Nil { + lastW, lastH = w, h + resizeCh <- [2]int{w, h} + } + time.Sleep(500 * time.Millisecond) + } + } +} diff --git a/cmd/garm-cli/cmd/controller.go b/cmd/garm-cli/cmd/controller.go index c1326943..e1d4b5c8 100644 --- a/cmd/garm-cli/cmd/controller.go +++ b/cmd/garm-cli/cmd/controller.go @@ -18,10 +18,12 @@ import ( "fmt" "github.com/jedib0t/go-pretty/v6/table" + "github.com/jedib0t/go-pretty/v6/text" "github.com/spf13/cobra" apiClientController "github.com/cloudbase/garm/client/controller" apiClientControllerInfo "github.com/cloudbase/garm/client/controller_info" + apiClientTools "github.com/cloudbase/garm/client/tools" "github.com/cloudbase/garm/cmd/garm-cli/common" "github.com/cloudbase/garm/params" ) @@ -72,6 +74,7 @@ as follows: * /webhooks - the base URL for the webhooks. Github needs to reach this URL. * /api/v1/metadata - the metadata URL. Your runners need to be able to reach this URL. * /api/v1/callbacks - the callback URL. Your runners need to be able to reach this URL. + * /agent - the agent URL. Your runners need to be able to reach this URL, when agent mode is used. You need to expose these endpoints to the interested parties (github or your runners), then you need to update the controller with the URLs you set up. @@ -95,7 +98,15 @@ up the GARM controller URLs as: garm-cli controller update \ --webhook-url=https://garm.example.com/webhooks \ --metadata-url=https://garm.example.com/api/v1/metadata \ - --callback-url=https://garm.example.com/api/v1/callbacks + --callback-url=https://garm.example.com/api/v1/callbacks \ + --agent-url=https://garm.example.com/agent + +Additionally, there is one URL that is not meant to expose any service on the GARM server, +but is needed if you wish GARM to automatically sync the garm-agent tooling needed for agent +mode. This url is called garm-tools-url: + +garm-cli controller update \ + --garm-tools-url=https://api.github.com/repos/cloudbase/garm-agent/releases `, SilenceUsage: true, RunE: func(cmd *cobra.Command, _ []string) error { @@ -113,14 +124,23 @@ up the GARM controller URLs as: if cmd.Flags().Changed("webhook-url") { params.WebhookURL = &webhookURL } + if cmd.Flags().Changed("agent-url") { + params.AgentURL = &agentURL + } + if cmd.Flags().Changed("garm-tools-url") { + params.GARMAgentReleasesURL = &garmToolsReleasesURL + } + if cmd.Flags().Changed("enable-tools-sync") { + params.SyncGARMAgentTools = &enableToolsSync + } if cmd.Flags().Changed("minimum-job-age-backoff") { params.MinimumJobAgeBackoff = &minimumJobAgeBackoff } - if params.WebhookURL == nil && params.MetadataURL == nil && params.CallbackURL == nil && params.MinimumJobAgeBackoff == nil { + if params.WebhookURL == nil && params.MetadataURL == nil && params.CallbackURL == nil && params.MinimumJobAgeBackoff == nil && params.GARMAgentReleasesURL == nil && params.SyncGARMAgentTools == nil { cmd.Help() - return fmt.Errorf("at least one of minimum-job-age-backoff, metadata-url, callback-url or webhook-url must be provided") + return fmt.Errorf("at least one of minimum-job-age-backoff, metadata-url, callback-url, enable-tools-sync, garm-tools-url or webhook-url must be provided") } updateUrlsReq := apiClientController.NewUpdateControllerParams() @@ -135,6 +155,55 @@ up the GARM controller URLs as: }, } +var controllerToolsCmd = &cobra.Command{ + Use: "tools", + Short: "Show information about garm tools", + Long: `Show information about GARM tools available in this controller. + +GARM has two modes by which we deploy runners: + + * Black box mode + * Agent mode + +In black box mode, we are completely agentless on the runners. The only software we really +have to install besides standrd tools like jq, curl, etc is the runner software (github/gitea). +We rely on information we get from the API of GitHub/Gitea and the APIs of the various providers +to understand the state of our runner. We care both about the lifecycle of the VM/container/Bare metal +and the lifecycle state of the runner itself (idle, active, terminated, etc). In black box mode, +we do not get any status update from the instance. + +In Agent mode, we install the garm-agent on the runner, which in turn starts the actual runner. The agent +also connects back to the garm server over websockets and sends back periodic heartbeats as well as the +current state of the runner. We are able to immediately know when a job is picked up, when the job is done +and whether or not the user forcefully deleted the BM/VM/container the runner was running on or the +runner registered in github/gitea. At that point we can clean up the runner without having to thech the +github/gitea API or the API of the provider in which the runner was spawned. + +This command lists the available tools in the controller. Tools can either sync automatically or be +manually uploaded. As long as the controller has access to the tools, agent mode can be enabled. +`, + SilenceUsage: true, + RunE: func(cmd *cobra.Command, _ []string) error { + if needsInit { + return errNeedsInitError + } + + showTools := apiClientTools.NewGarmAgentListParams() + if cmd.Flags().Changed("page") { + showTools.Page = &fileObjPage + } + if cmd.Flags().Changed("page-size") { + showTools.PageSize = &fileObjPageSize + } + response, err := apiCli.Tools.GarmAgentList(showTools, authToken) + if err != nil { + return err + } + formatGARMToolsList(response.Payload) + return nil + }, +} + func renderControllerInfoTable(info params.ControllerInfo) string { t := table.NewWriter() header := table.Row{"Field", "Value"} @@ -159,6 +228,9 @@ func renderControllerInfoTable(info params.ControllerInfo) string { t.AppendRow(table.Row{"Callback URL", info.CallbackURL}) t.AppendRow(table.Row{"Webhook Base URL", info.WebhookURL}) t.AppendRow(table.Row{"Controller Webhook URL", info.ControllerWebhookURL}) + t.AppendRow(table.Row{"Agent URL", info.AgentURL}) + t.AppendRow(table.Row{"GARM agent tools sync URL", info.GARMAgentReleasesURL}) + t.AppendRow(table.Row{"Tools sync enabled", info.SyncGARMAgentTools}) t.AppendRow(table.Row{"Minimum Job Age Backoff", info.MinimumJobAgeBackoff}) t.AppendRow(table.Row{"Version", serverVersion}) return t.Render() @@ -177,12 +249,55 @@ func init() { controllerUpdateCmd.Flags().StringVarP(&metadataURL, "metadata-url", "m", "", "The metadata URL for the controller (ie. https://garm.example.com/api/v1/metadata)") controllerUpdateCmd.Flags().StringVarP(&callbackURL, "callback-url", "c", "", "The callback URL for the controller (ie. https://garm.example.com/api/v1/callbacks)") controllerUpdateCmd.Flags().StringVarP(&webhookURL, "webhook-url", "w", "", "The webhook URL for the controller (ie. https://garm.example.com/webhooks)") + controllerUpdateCmd.Flags().StringVarP(&agentURL, "agent-url", "g", "", "The agent URL for the controller (ie. https://garm.example.com/agent)") + controllerUpdateCmd.Flags().StringVarP(&garmToolsReleasesURL, "garm-tools-url", "t", "", "The URL for the garm-agent releases page (ie. https://api.github.com/repos/cloudbase/garm-agent/releases)") + controllerUpdateCmd.Flags().BoolVarP(&enableToolsSync, "enable-tools-sync", "s", false, "Enable or disable automatic garm tools sync.") controllerUpdateCmd.Flags().UintVarP(&minimumJobAgeBackoff, "minimum-job-age-backoff", "b", 0, "The minimum job age backoff for the controller") + controllerToolsCmd.Flags().Int64Var(&fileObjPage, "page", 0, "The tools page to display") + controllerToolsCmd.Flags().Int64Var(&fileObjPageSize, "page-size", 25, "Total number of results per page") controllerCmd.AddCommand( controllerShowCmd, controllerUpdateCmd, + controllerToolsCmd, ) rootCmd.AddCommand(controllerCmd) } + +func formatGARMToolsList(files params.GARMAgentToolsPaginatedResponse) { + if outputFormat == common.OutputFormatJSON { + printAsJSON(files) + return + } + t := table.NewWriter() + // Define column count + numCols := 8 + t.Style().Options.SeparateHeader = true + t.Style().Options.SeparateRows = true + + // Page header - fill all columns with the same text + pageHeaderText := fmt.Sprintf("Page %d of %d", files.CurrentPage, files.Pages) + pageHeader := make(table.Row, numCols) + for i := range pageHeader { + pageHeader[i] = pageHeaderText + } + t.AppendHeader(pageHeader, table.RowConfig{ + AutoMerge: true, + AutoMergeAlign: text.AlignCenter, + }) + // Column headers + header := table.Row{"ID", "Name", "Size", "Version", "OS Type", "OS Architecture", "Created", "Updated"} + t.AppendHeader(header) + // Right-align numeric columns + t.SetColumnConfigs([]table.ColumnConfig{ + {Number: 1, Align: text.AlignRight}, + {Number: 3, Align: text.AlignRight}, + }) + + for _, val := range files.Results { + row := table.Row{val.ID, val.Name, formatSize(val.Size), val.Version, val.OSType, val.OSArch, val.CreatedAt.Format("2006-01-02 15:04:05"), val.UpdatedAt.Format("2006-01-02 15:04:05")} + t.AppendRow(row) + } + fmt.Println(t.Render()) +} diff --git a/cmd/garm-cli/cmd/enterprise.go b/cmd/garm-cli/cmd/enterprise.go index 5c937b81..5ea4a4cb 100644 --- a/cmd/garm-cli/cmd/enterprise.go +++ b/cmd/garm-cli/cmd/enterprise.go @@ -31,6 +31,7 @@ var ( enterpriseEndpoint string enterpriseWebhookSecret string enterpriseCreds string + enterpriseAgentMode bool ) // enterpriseCmd represents the enterprise command @@ -64,6 +65,7 @@ var enterpriseAddCmd = &cobra.Command{ WebhookSecret: enterpriseWebhookSecret, CredentialsName: enterpriseCreds, PoolBalancerType: params.PoolBalancerType(poolBalancerType), + AgentMode: enterpriseAgentMode, } response, err := apiCli.Enterprises.CreateEnterprise(newEnterpriseReq, authToken) if err != nil { @@ -165,7 +167,7 @@ var enterpriseUpdateCmd = &cobra.Command{ Short: "Update enterprise", Long: `Update enterprise credentials or webhook secret.`, SilenceUsage: true, - RunE: func(_ *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, args []string) error { if needsInit { return errNeedsInitError } @@ -184,10 +186,13 @@ var enterpriseUpdateCmd = &cobra.Command{ updateEnterpriseReq := apiClientEnterprises.NewUpdateEnterpriseParams() updateEnterpriseReq.Body = params.UpdateEntityParams{ - WebhookSecret: repoWebhookSecret, - CredentialsName: repoCreds, + WebhookSecret: enterpriseWebhookSecret, + CredentialsName: enterpriseCreds, PoolBalancerType: params.PoolBalancerType(poolBalancerType), } + if cmd.Flags().Changed("agent-mode") { + updateEnterpriseReq.Body.AgentMode = &enterpriseAgentMode + } updateEnterpriseReq.EnterpriseID = enterpriseID response, err := apiCli.Enterprises.UpdateEnterprise(updateEnterpriseReq, authToken) if err != nil { @@ -203,6 +208,7 @@ func init() { enterpriseAddCmd.Flags().StringVar(&enterpriseWebhookSecret, "webhook-secret", "", "The webhook secret for this enterprise") enterpriseAddCmd.Flags().StringVar(&enterpriseCreds, "credentials", "", "Credentials name. See credentials list.") enterpriseAddCmd.Flags().StringVar(&poolBalancerType, "pool-balancer-type", string(params.PoolBalancerTypeRoundRobin), "The balancing strategy to use when creating runners in pools matching requested labels.") + enterpriseAddCmd.Flags().BoolVar(&enterpriseAgentMode, "agent-mode", false, "Enable agent mode for runners in this enterprise.") enterpriseListCmd.Flags().BoolVarP(&long, "long", "l", false, "Include additional info.") enterpriseListCmd.Flags().StringVarP(&enterpriseName, "name", "n", "", "Exact enterprise name to filter by.") @@ -213,6 +219,7 @@ func init() { enterpriseUpdateCmd.Flags().StringVar(&enterpriseWebhookSecret, "webhook-secret", "", "The webhook secret for this enterprise") enterpriseUpdateCmd.Flags().StringVar(&enterpriseCreds, "credentials", "", "Credentials name. See credentials list.") enterpriseUpdateCmd.Flags().StringVar(&poolBalancerType, "pool-balancer-type", "", "The balancing strategy to use when creating runners in pools matching requested labels.") + enterpriseUpdateCmd.Flags().BoolVar(&enterpriseAgentMode, "agent-mode", false, "Enable agent mode for runners in this enterprise.") enterpriseUpdateCmd.Flags().StringVar(&enterpriseEndpoint, "endpoint", "", "When using the name of the enterprise, the endpoint must be specified when multiple enterprises with the same name exist.") enterpriseDeleteCmd.Flags().StringVar(&enterpriseEndpoint, "endpoint", "", "When using the name of the enterprise, the endpoint must be specified when multiple enterprises with the same name exist.") diff --git a/cmd/garm-cli/cmd/init.go b/cmd/garm-cli/cmd/init.go index c544699e..4c5d49e7 100644 --- a/cmd/garm-cli/cmd/init.go +++ b/cmd/garm-cli/cmd/init.go @@ -35,6 +35,9 @@ var ( callbackURL string metadataURL string webhookURL string + agentURL string + garmToolsReleasesURL string + enableToolsSync bool minimumJobAgeBackoff uint ) @@ -140,6 +143,13 @@ func ensureDefaultEndpoints(loginURL string) (err error) { return err } } + + if agentURL == "" { + agentURL, err = url.JoinPath(loginURL, "agent") + if err != nil { + return err + } + } return nil } @@ -185,6 +195,7 @@ func init() { initCmd.Flags().StringVarP(&metadataURL, "metadata-url", "m", "", "The metadata URL for the controller (ie. https://garm.example.com/api/v1/metadata)") initCmd.Flags().StringVarP(&callbackURL, "callback-url", "c", "", "The callback URL for the controller (ie. https://garm.example.com/api/v1/callbacks)") initCmd.Flags().StringVarP(&webhookURL, "webhook-url", "w", "", "The webhook URL for the controller (ie. https://garm.example.com/webhooks)") + initCmd.Flags().StringVarP(&agentURL, "agent-url", "g", "", "The agent URL for the controller (ie. https://garm.example.com/agent)") initCmd.Flags().StringVarP(&loginFullName, "full-name", "f", "", "Full name of the user") initCmd.Flags().StringVarP(&loginPassword, "password", "p", "", "The admin password") initCmd.MarkFlagRequired("name") //nolint @@ -220,7 +231,7 @@ Admin user information: Make sure that the URLs in the table above are reachable by the relevant parties. The metadata and callback URLs *must* be accessible by the runners that GARM spins up. -The base webhook and the controller webhook URLs must be accessible by GitHub or GHES. +The base webhook and the controller webhook URLs must be accessible by GitHub or GHES. ` controllerErrorMsg := `WARNING: Failed to set the required controller URLs with error: %q @@ -228,7 +239,7 @@ The base webhook and the controller webhook URLs must be accessible by GitHub or Please run: garm-cli controller show - + To make sure that the callback, metadata and webhook URLs are set correctly. If not, you must set them up by running: diff --git a/cmd/garm-cli/cmd/organization.go b/cmd/garm-cli/cmd/organization.go index b16812fa..b9f5f5c5 100644 --- a/cmd/garm-cli/cmd/organization.go +++ b/cmd/garm-cli/cmd/organization.go @@ -36,6 +36,7 @@ var ( insecureOrgWebhook bool keepOrgWebhook bool installOrgWebhook bool + orgAgentMode bool ) // organizationCmd represents the organization command @@ -184,6 +185,7 @@ var orgAddCmd = &cobra.Command{ CredentialsName: orgCreds, ForgeType: params.EndpointType(forgeType), PoolBalancerType: params.PoolBalancerType(poolBalancerType), + AgentMode: orgAgentMode, } response, err := apiCli.Organizations.CreateOrg(newOrgReq, authToken) if err != nil { @@ -217,7 +219,7 @@ var orgUpdateCmd = &cobra.Command{ Short: "Update organization", Long: `Update organization credentials or webhook secret.`, SilenceUsage: true, - RunE: func(_ *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, args []string) error { if needsInit { return errNeedsInitError } @@ -241,6 +243,9 @@ var orgUpdateCmd = &cobra.Command{ CredentialsName: orgCreds, PoolBalancerType: params.PoolBalancerType(poolBalancerType), } + if cmd.Flags().Changed("agent-mode") { + updateOrgReq.Body.AgentMode = &orgAgentMode + } updateOrgReq.OrgID = orgID response, err := apiCli.Organizations.UpdateOrg(updateOrgReq, authToken) if err != nil { @@ -346,6 +351,7 @@ func init() { orgAddCmd.Flags().StringVar(&orgCreds, "credentials", "", "Credentials name. See credentials list.") orgAddCmd.Flags().BoolVar(&orgRandomWebhookSecret, "random-webhook-secret", false, "Generate a random webhook secret for this organization.") orgAddCmd.Flags().BoolVar(&installOrgWebhook, "install-webhook", false, "Install the webhook as part of the add operation.") + orgAddCmd.Flags().BoolVar(&orgAgentMode, "agent-mode", false, "Enable agent mode for runners in this organization.") orgAddCmd.MarkFlagsMutuallyExclusive("webhook-secret", "random-webhook-secret") orgAddCmd.MarkFlagsOneRequired("webhook-secret", "random-webhook-secret") @@ -364,6 +370,7 @@ func init() { orgUpdateCmd.Flags().StringVar(&orgWebhookSecret, "webhook-secret", "", "The webhook secret for this organization") orgUpdateCmd.Flags().StringVar(&orgCreds, "credentials", "", "Credentials name. See credentials list.") orgUpdateCmd.Flags().StringVar(&poolBalancerType, "pool-balancer-type", "", "The balancing strategy to use when creating runners in pools matching requested labels.") + orgUpdateCmd.Flags().BoolVar(&orgAgentMode, "agent-mode", false, "Enable agent mode for runners in this organization.") orgUpdateCmd.Flags().StringVar(&orgEndpoint, "endpoint", "", "When using the name of the org, the endpoint must be specified when multiple organizations with the same name exist.") orgWebhookInstallCmd.Flags().BoolVar(&insecureOrgWebhook, "insecure", false, "Ignore self signed certificate errors.") diff --git a/cmd/garm-cli/cmd/pool.go b/cmd/garm-cli/cmd/pool.go index 458b17a6..2dc73d17 100644 --- a/cmd/garm-cli/cmd/pool.go +++ b/cmd/garm-cli/cmd/pool.go @@ -53,6 +53,7 @@ var ( poolGitHubRunnerGroup string priority uint poolTemplateNameOrID string + poolEnableShell bool ) type poolsPayloadGetter interface { @@ -234,6 +235,7 @@ var poolAddCmd = &cobra.Command{ RunnerBootstrapTimeout: poolRunnerBootstrapTimeout, GitHubRunnerGroup: poolGitHubRunnerGroup, Priority: priority, + EnableShell: poolEnableShell, } if cmd.Flags().Changed("extra-specs") { @@ -390,6 +392,10 @@ explicitly remove them using the runner delete command. poolUpdateParams.RunnerBootstrapTimeout = &poolRunnerBootstrapTimeout } + if cmd.Flags().Changed("enable-shell") { + poolUpdateParams.EnableShell = &poolEnableShell + } + if cmd.Flags().Changed("extra-specs") { data, err := asRawMessage([]byte(poolExtraSpecs)) if err != nil { @@ -443,6 +449,7 @@ func init() { poolUpdateCmd.Flags().UintVar(&poolRunnerBootstrapTimeout, "runner-bootstrap-timeout", 20, "Duration in minutes after which a runner is considered failed if it does not join Github.") poolUpdateCmd.Flags().StringVar(&poolExtraSpecsFile, "extra-specs-file", "", "A file containing a valid json which will be passed to the IaaS provider managing the pool.") poolUpdateCmd.Flags().StringVar(&poolExtraSpecs, "extra-specs", "", "A valid json which will be passed to the IaaS provider managing the pool.") + poolUpdateCmd.Flags().BoolVar(&poolEnableShell, "enable-shell", false, "Enable shell access for runners in this pool.") poolUpdateCmd.MarkFlagsMutuallyExclusive("extra-specs-file", "extra-specs") poolUpdateCmd.Flags().StringVar(&poolTemplateNameOrID, "runner-install-template", "", "The runner install template name or ID to use for this pool.") @@ -461,6 +468,7 @@ func init() { poolAddCmd.Flags().UintVar(&poolRunnerBootstrapTimeout, "runner-bootstrap-timeout", 20, "Duration in minutes after which a runner is considered failed if it does not join Github.") poolAddCmd.Flags().UintVar(&poolMinIdleRunners, "min-idle-runners", 1, "Attempt to maintain a minimum of idle self-hosted runners of this type.") poolAddCmd.Flags().BoolVar(&poolEnabled, "enabled", false, "Enable this pool.") + poolAddCmd.Flags().BoolVar(&poolEnableShell, "enable-shell", false, "Enable shell access for runners in this pool.") poolAddCmd.Flags().StringVar(&poolTemplateNameOrID, "runner-install-template", "", "The runner install template name or ID to use for this pool.") poolAddCmd.Flags().StringVar(&endpointName, "endpoint", "", "When using the name of an entity, the endpoint must be specified when multiple entities with the same name exist.") diff --git a/cmd/garm-cli/cmd/repository.go b/cmd/garm-cli/cmd/repository.go index cca1a7fe..e5567f48 100644 --- a/cmd/garm-cli/cmd/repository.go +++ b/cmd/garm-cli/cmd/repository.go @@ -38,6 +38,7 @@ var ( insecureRepoWebhook bool keepRepoWebhook bool installRepoWebhook bool + repoAgentMode bool ) // repositoryCmd represents the repository command @@ -189,6 +190,7 @@ var repoAddCmd = &cobra.Command{ CredentialsName: repoCreds, ForgeType: params.EndpointType(forgeType), PoolBalancerType: params.PoolBalancerType(poolBalancerType), + AgentMode: repoAgentMode, } response, err := apiCli.Repositories.CreateRepo(newRepoReq, authToken) if err != nil { @@ -246,7 +248,7 @@ var repoUpdateCmd = &cobra.Command{ Short: "Update repository", Long: `Update repository credentials or webhook secret.`, SilenceUsage: true, - RunE: func(_ *cobra.Command, args []string) error { + RunE: func(cmd *cobra.Command, args []string) error { if needsInit { return errNeedsInitError } @@ -270,6 +272,9 @@ var repoUpdateCmd = &cobra.Command{ CredentialsName: repoCreds, PoolBalancerType: params.PoolBalancerType(poolBalancerType), } + if cmd.Flags().Changed("agent-mode") { + updateReposReq.Body.AgentMode = &repoAgentMode + } updateReposReq.RepoID = repoID response, err := apiCli.Repositories.UpdateRepo(updateReposReq, authToken) @@ -354,6 +359,7 @@ func init() { repoAddCmd.Flags().StringVar(&repoCreds, "credentials", "", "Credentials name. See credentials list.") repoAddCmd.Flags().BoolVar(&randomWebhookSecret, "random-webhook-secret", false, "Generate a random webhook secret for this repository.") repoAddCmd.Flags().BoolVar(&installRepoWebhook, "install-webhook", false, "Install the webhook as part of the add operation.") + repoAddCmd.Flags().BoolVar(&repoAgentMode, "agent-mode", false, "Enable agent mode for runners in this repository.") repoAddCmd.MarkFlagsMutuallyExclusive("webhook-secret", "random-webhook-secret") repoAddCmd.MarkFlagsOneRequired("webhook-secret", "random-webhook-secret") @@ -374,6 +380,7 @@ func init() { repoUpdateCmd.Flags().StringVar(&repoWebhookSecret, "webhook-secret", "", "The webhook secret for this repository. If you update this secret, you will have to manually update the secret in GitHub as well.") repoUpdateCmd.Flags().StringVar(&repoCreds, "credentials", "", "Credentials name. See credentials list.") repoUpdateCmd.Flags().StringVar(&poolBalancerType, "pool-balancer-type", "", "The balancing strategy to use when creating runners in pools matching requested labels.") + repoUpdateCmd.Flags().BoolVar(&repoAgentMode, "agent-mode", false, "Enable agent mode for runners in this repository.") repoUpdateCmd.Flags().StringVar(&repoEndpoint, "endpoint", "", "When using the name of the repo, the endpoint must be specified when multiple repositories with the same name exist.") repoWebhookInstallCmd.Flags().BoolVar(&insecureRepoWebhook, "insecure", false, "Ignore self signed certificate errors.") diff --git a/cmd/garm-cli/cmd/runner.go b/cmd/garm-cli/cmd/runner.go index 44a7b8df..aa885adf 100644 --- a/cmd/garm-cli/cmd/runner.go +++ b/cmd/garm-cli/cmd/runner.go @@ -15,18 +15,27 @@ package cmd import ( + "context" "fmt" "os" + "os/signal" + "sync" + "syscall" + "github.com/google/uuid" + "github.com/gorilla/websocket" "github.com/jedib0t/go-pretty/v6/table" "github.com/spf13/cobra" + "golang.org/x/term" + garmWs "github.com/cloudbase/garm-provider-common/util/websocket" apiClientEnterprises "github.com/cloudbase/garm/client/enterprises" apiClientInstances "github.com/cloudbase/garm/client/instances" apiClientOrgs "github.com/cloudbase/garm/client/organizations" apiClientRepos "github.com/cloudbase/garm/client/repositories" "github.com/cloudbase/garm/cmd/garm-cli/common" "github.com/cloudbase/garm/params" + "github.com/cloudbase/garm/workers/websocket/agent/messaging" ) var ( @@ -50,6 +59,165 @@ list all instances.`, Run: nil, } +type handlerErr struct { + done chan struct{} + once sync.Once +} + +func (h *handlerErr) Close() { + h.once.Do(func() { close(h.done) }) +} + +var agentShellCmd = &cobra.Command{ + Use: "shell", + Short: "Execute an interactive shell", + Long: `Execute an interactive shell on the runner.`, + SilenceUsage: true, + RunE: func(_ *cobra.Command, args []string) error { + if needsInit { + return errNeedsInitError + } + + if len(args) != 1 { + return fmt.Errorf("requires a runner name") + } + + var sessionID uuid.UUID + + handlerErr := handlerErr{ + done: make(chan struct{}), + } + resizeCh := make(chan [2]int, 1) + defer close(resizeCh) + handler := func(msgType int, msg []byte) error { + switch msgType { + case websocket.CloseAbnormalClosure, websocket.CloseGoingAway, websocket.CloseMessage: + os.Stderr.Write([]byte("remote server closed the connection")) + handlerErr.Close() + case websocket.BinaryMessage, websocket.TextMessage: + agentMsg, err := messaging.UnmarshalAgentMessage(msg) + if err != nil { + os.Stderr.Write([]byte("failed to unmarshal message")) + handlerErr.Close() + } + switch agentMsg.Type { + case messaging.MessageTypeShellReady: + shellReady, err := messaging.Unmarshal[messaging.ShellReadyMessage](agentMsg) + if err != nil { + os.Stderr.Write(fmt.Appendf(nil, "failed to unmarshal shell ready: %q", err)) + handlerErr.Close() + } + sessionID = shellReady.SessionID + if shellReady.IsError == 1 { + if len(shellReady.Message) > 0 { + os.Stderr.Write(fmt.Appendf(shellReady.Message, "\r\n")) + } + handlerErr.Close() + return nil + } + if w, h, err := term.GetSize(int(os.Stdin.Fd())); err == nil { + resizeCh <- [2]int{w, h} + } + case messaging.MessageTypeShellExit: + handlerErr.Close() + case messaging.MessageTypeShellData: + shellData, err := messaging.Unmarshal[messaging.ShellDataMessage](agentMsg) + if err != nil { + os.Stderr.Write([]byte("failed to unmarshal shell data message")) + handlerErr.Close() + } + os.Stdout.Write(shellData.Data) + default: + os.Stdout.Write(fmt.Appendf(nil, "invalid agentMsg.Type: %v", agentMsg.Type)) + } + default: + os.Stdout.Write(fmt.Appendf(nil, "invalid message type: %v", msgType)) + } + return nil + } + + // Put terminal in raw mode + oldState, err := term.MakeRaw(int(os.Stdin.Fd())) + if err != nil { + return err + } + defer term.Restore(int(os.Stdin.Fd()), oldState) + // Channel to stop on Ctrl+C + sigch := make(chan os.Signal, 1) + signal.Notify(sigch, os.Interrupt, syscall.SIGTERM) + + ctx, stop := signal.NotifyContext(context.Background(), signals...) + defer stop() + + reader, err := garmWs.NewReader(ctx, mgr.BaseURL, fmt.Sprintf("/api/v1/ws/agent/%s/shell", args[0]), mgr.Token, handler) + if err != nil { + return err + } + + if err := reader.Start(); err != nil { + return err + } + + go func() { + buf := make([]byte, 1024) + for { + n, err := os.Stdin.Read(buf) + if err != nil { + os.Stderr.Write(fmt.Appendf(nil, "failed to write message: %q", err)) + handlerErr.Close() + return + } + + if n > 0 && sessionID != uuid.Nil { + msg := messaging.ShellDataMessage{ + SessionID: sessionID, + Data: buf[:n], + } + if err := reader.WriteMessage(websocket.BinaryMessage, msg.Marshal()); err != nil { + os.Stderr.Write(fmt.Appendf(nil, "failed to write message: %q", err)) + handlerErr.Close() + return + } + } + } + }() + + // ---- Watch terminal resize ---- + go watchTermResize(ctx, resizeCh, sessionID) + + // ---- Send resize messages ---- + go func() { + for { + select { + case size := <-resizeCh: + if sessionID == uuid.Nil { + continue + } + msg := messaging.ShellResizeMessage{ + SessionID: sessionID, + Cols: uint16(size[0]), + Rows: uint16(size[1]), + } + reader.WriteMessage(websocket.BinaryMessage, msg.Marshal()) + case <-ctx.Done(): + return + case <-reader.Done(): + return + case <-handlerErr.done: + return + } + } + }() + + select { + case <-ctx.Done(): + case <-reader.Done(): + case <-handlerErr.done: + } + return nil + }, +} + type instancesPayloadGetter interface { GetPayload() params.Instances } @@ -59,7 +227,7 @@ var runnerListCmd = &cobra.Command{ Aliases: []string{"ls"}, Short: "List runners", Long: `List runners of pools, repositories, orgs or all of the above. - + This command expects to get either a pool ID as a positional parameter, or it expects that one of the supported switches be used to fetch runners of --repo, --org or --all @@ -229,6 +397,7 @@ func init() { runnerListCmd, runnerShowCmd, runnerDeleteCmd, + agentShellCmd, ) rootCmd.AddCommand(runnerCmd) @@ -282,6 +451,8 @@ func formatSingleInstance(instance params.Instance) { t.AppendRow(table.Row{"OS Version", instance.OSVersion}, table.RowConfig{AutoMerge: false}) t.AppendRow(table.Row{"Status", instance.Status}, table.RowConfig{AutoMerge: false}) t.AppendRow(table.Row{"Runner Status", instance.RunnerStatus}, table.RowConfig{AutoMerge: false}) + t.AppendRow(table.Row{"Capabilities", fmt.Sprintf("Shell: %v", instance.Capabilities.Shell)}, table.RowConfig{AutoMerge: true}) + if instance.PoolID != "" { t.AppendRow(table.Row{"Pool ID", instance.PoolID}, table.RowConfig{AutoMerge: false}) } else if instance.ScaleSetID != 0 { diff --git a/cmd/garm-cli/cmd/scalesets.go b/cmd/garm-cli/cmd/scalesets.go index cf643dd6..ca45ab90 100644 --- a/cmd/garm-cli/cmd/scalesets.go +++ b/cmd/garm-cli/cmd/scalesets.go @@ -49,6 +49,7 @@ var ( scalesetExtraSpecs string scalesetGitHubRunnerGroup string scaleSetTemplateNameOrID string + scalesetEnableShell bool ) type scalesetPayloadGetter interface { @@ -228,6 +229,7 @@ var scaleSetAddCmd = &cobra.Command{ Enabled: scalesetEnabled, RunnerBootstrapTimeout: scalesetRunnerBootstrapTimeout, GitHubRunnerGroup: scalesetGitHubRunnerGroup, + EnableShell: scalesetEnableShell, } if cmd.Flags().Changed("extra-specs") { @@ -381,6 +383,10 @@ explicitly remove them using the runner delete command. scaleSetUpdateParams.RunnerBootstrapTimeout = &scalesetRunnerBootstrapTimeout } + if cmd.Flags().Changed("enable-shell") { + scaleSetUpdateParams.EnableShell = &scalesetEnableShell + } + if cmd.Flags().Changed("extra-specs") { data, err := asRawMessage([]byte(scalesetExtraSpecs)) if err != nil { @@ -429,6 +435,7 @@ func init() { scaleSetUpdateCmd.Flags().UintVar(&scalesetRunnerBootstrapTimeout, "runner-bootstrap-timeout", 20, "Duration in minutes after which a runner is considered failed if it does not join Github.") scaleSetUpdateCmd.Flags().StringVar(&scalesetExtraSpecsFile, "extra-specs-file", "", "A file containing a valid json which will be passed to the IaaS provider managing the scale set.") scaleSetUpdateCmd.Flags().StringVar(&scalesetExtraSpecs, "extra-specs", "", "A valid json which will be passed to the IaaS provider managing the scale set.") + scaleSetUpdateCmd.Flags().BoolVar(&scalesetEnableShell, "enable-shell", false, "Enable shell access for runners in this scale set.") scaleSetUpdateCmd.Flags().StringVar(&scaleSetTemplateNameOrID, "runner-install-template", "", "The runner install template name or ID to use for this scale set.") scaleSetUpdateCmd.MarkFlagsMutuallyExclusive("extra-specs-file", "extra-specs") @@ -446,6 +453,7 @@ func init() { scaleSetAddCmd.Flags().UintVar(&scalesetRunnerBootstrapTimeout, "runner-bootstrap-timeout", 20, "Duration in minutes after which a runner is considered failed if it does not join Github.") scaleSetAddCmd.Flags().UintVar(&scalesetMinIdleRunners, "min-idle-runners", 1, "Attempt to maintain a minimum of idle self-hosted runners of this type.") scaleSetAddCmd.Flags().BoolVar(&scalesetEnabled, "enabled", false, "Enable this scale set.") + scaleSetAddCmd.Flags().BoolVar(&scalesetEnableShell, "enable-shell", false, "Enable shell access for runners in this scale set.") scaleSetAddCmd.Flags().StringVar(&endpointName, "endpoint", "", "When using the name of an entity, the endpoint must be specified when multiple entities with the same name exist.") scaleSetAddCmd.Flags().StringVar(&scaleSetTemplateNameOrID, "runner-install-template", "", "The runner install template name or ID to use for this scale set.") scaleSetAddCmd.MarkFlagRequired("provider-name") //nolint diff --git a/cmd/garm/main.go b/cmd/garm/main.go index 5ab4f18b..91826309 100644 --- a/cmd/garm/main.go +++ b/cmd/garm/main.go @@ -52,6 +52,7 @@ import ( "github.com/cloudbase/garm/workers/cache" "github.com/cloudbase/garm/workers/entity" "github.com/cloudbase/garm/workers/provider" + "github.com/cloudbase/garm/workers/websocket/agent" ) var ( @@ -220,6 +221,15 @@ func main() { log.Fatal(err) } + agentHub, err := agent.NewHub(ctx) + if err != nil { + log.Fatalf("failed to create agent hub: %q", err) + } + + if err := agentHub.Start(); err != nil { + log.Fatalf("failed to start agent hub: %q", err) + } + // Local locker for now. Will be configurable in the future, // as we add scale-out capability to GARM. lock, err := locking.NewLocalLocker(ctx, db) @@ -277,7 +287,7 @@ func main() { } authenticator := auth.NewAuthenticator(cfg.JWTAuth, db) - controller, err := controllers.NewAPIController(runner, authenticator, hub, cfg.APIServer) + controller, err := controllers.NewAPIController(runner, authenticator, hub, agentHub, cfg.APIServer) if err != nil { log.Fatalf("failed to create controller: %+v", err) } @@ -306,11 +316,16 @@ func main() { if err != nil { log.Fatal(err) } + agentMiddleware, err := auth.AgentMiddleware(db, cfg.JWTAuth) + if err != nil { + log.Fatal(err) + } router := routers.NewAPIRouter(controller, jwtMiddleware, initMiddleware, urlsRequiredMiddleware, instanceMiddleware, cfg.Default.EnableWebhookManagement) // Add WebUI routes router = routers.WithWebUI(router, cfg.APIServer) + router = routers.WithAgentRouter(router, controller, agentMiddleware) // start the metrics collector if cfg.Metrics.Enable { diff --git a/database/common/mocks/Store.go b/database/common/mocks/Store.go index ead6cda5..3af8fd18 100644 --- a/database/common/mocks/Store.go +++ b/database/common/mocks/Store.go @@ -229,9 +229,9 @@ func (_c *Store_ControllerInfo_Call) RunAndReturn(run func() (params.ControllerI return _c } -// CreateEnterprise provides a mock function with given fields: ctx, name, credentialsName, webhookSecret, poolBalancerType -func (_m *Store) CreateEnterprise(ctx context.Context, name string, credentialsName params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType) (params.Enterprise, error) { - ret := _m.Called(ctx, name, credentialsName, webhookSecret, poolBalancerType) +// CreateEnterprise provides a mock function with given fields: ctx, name, credentialsName, webhookSecret, poolBalancerType, agentMode +func (_m *Store) CreateEnterprise(ctx context.Context, name string, credentialsName params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType, agentMode bool) (params.Enterprise, error) { + ret := _m.Called(ctx, name, credentialsName, webhookSecret, poolBalancerType, agentMode) if len(ret) == 0 { panic("no return value specified for CreateEnterprise") @@ -239,17 +239,17 @@ func (_m *Store) CreateEnterprise(ctx context.Context, name string, credentialsN var r0 params.Enterprise var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType) (params.Enterprise, error)); ok { - return rf(ctx, name, credentialsName, webhookSecret, poolBalancerType) + if rf, ok := ret.Get(0).(func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType, bool) (params.Enterprise, error)); ok { + return rf(ctx, name, credentialsName, webhookSecret, poolBalancerType, agentMode) } - if rf, ok := ret.Get(0).(func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType) params.Enterprise); ok { - r0 = rf(ctx, name, credentialsName, webhookSecret, poolBalancerType) + if rf, ok := ret.Get(0).(func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType, bool) params.Enterprise); ok { + r0 = rf(ctx, name, credentialsName, webhookSecret, poolBalancerType, agentMode) } else { r0 = ret.Get(0).(params.Enterprise) } - if rf, ok := ret.Get(1).(func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType) error); ok { - r1 = rf(ctx, name, credentialsName, webhookSecret, poolBalancerType) + if rf, ok := ret.Get(1).(func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType, bool) error); ok { + r1 = rf(ctx, name, credentialsName, webhookSecret, poolBalancerType, agentMode) } else { r1 = ret.Error(1) } @@ -268,13 +268,14 @@ type Store_CreateEnterprise_Call struct { // - credentialsName params.ForgeCredentials // - webhookSecret string // - poolBalancerType params.PoolBalancerType -func (_e *Store_Expecter) CreateEnterprise(ctx interface{}, name interface{}, credentialsName interface{}, webhookSecret interface{}, poolBalancerType interface{}) *Store_CreateEnterprise_Call { - return &Store_CreateEnterprise_Call{Call: _e.mock.On("CreateEnterprise", ctx, name, credentialsName, webhookSecret, poolBalancerType)} +// - agentMode bool +func (_e *Store_Expecter) CreateEnterprise(ctx interface{}, name interface{}, credentialsName interface{}, webhookSecret interface{}, poolBalancerType interface{}, agentMode interface{}) *Store_CreateEnterprise_Call { + return &Store_CreateEnterprise_Call{Call: _e.mock.On("CreateEnterprise", ctx, name, credentialsName, webhookSecret, poolBalancerType, agentMode)} } -func (_c *Store_CreateEnterprise_Call) Run(run func(ctx context.Context, name string, credentialsName params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType)) *Store_CreateEnterprise_Call { +func (_c *Store_CreateEnterprise_Call) Run(run func(ctx context.Context, name string, credentialsName params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType, agentMode bool)) *Store_CreateEnterprise_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(string), args[2].(params.ForgeCredentials), args[3].(string), args[4].(params.PoolBalancerType)) + run(args[0].(context.Context), args[1].(string), args[2].(params.ForgeCredentials), args[3].(string), args[4].(params.PoolBalancerType), args[5].(bool)) }) return _c } @@ -284,7 +285,7 @@ func (_c *Store_CreateEnterprise_Call) Return(_a0 params.Enterprise, _a1 error) return _c } -func (_c *Store_CreateEnterprise_Call) RunAndReturn(run func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType) (params.Enterprise, error)) *Store_CreateEnterprise_Call { +func (_c *Store_CreateEnterprise_Call) RunAndReturn(run func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType, bool) (params.Enterprise, error)) *Store_CreateEnterprise_Call { _c.Call.Return(run) return _c } @@ -806,9 +807,9 @@ func (_c *Store_CreateOrUpdateJob_Call) RunAndReturn(run func(context.Context, p return _c } -// CreateOrganization provides a mock function with given fields: ctx, name, credentials, webhookSecret, poolBalancerType -func (_m *Store) CreateOrganization(ctx context.Context, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType) (params.Organization, error) { - ret := _m.Called(ctx, name, credentials, webhookSecret, poolBalancerType) +// CreateOrganization provides a mock function with given fields: ctx, name, credentials, webhookSecret, poolBalancerType, agentMode +func (_m *Store) CreateOrganization(ctx context.Context, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType, agentMode bool) (params.Organization, error) { + ret := _m.Called(ctx, name, credentials, webhookSecret, poolBalancerType, agentMode) if len(ret) == 0 { panic("no return value specified for CreateOrganization") @@ -816,17 +817,17 @@ func (_m *Store) CreateOrganization(ctx context.Context, name string, credential var r0 params.Organization var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType) (params.Organization, error)); ok { - return rf(ctx, name, credentials, webhookSecret, poolBalancerType) + if rf, ok := ret.Get(0).(func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType, bool) (params.Organization, error)); ok { + return rf(ctx, name, credentials, webhookSecret, poolBalancerType, agentMode) } - if rf, ok := ret.Get(0).(func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType) params.Organization); ok { - r0 = rf(ctx, name, credentials, webhookSecret, poolBalancerType) + if rf, ok := ret.Get(0).(func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType, bool) params.Organization); ok { + r0 = rf(ctx, name, credentials, webhookSecret, poolBalancerType, agentMode) } else { r0 = ret.Get(0).(params.Organization) } - if rf, ok := ret.Get(1).(func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType) error); ok { - r1 = rf(ctx, name, credentials, webhookSecret, poolBalancerType) + if rf, ok := ret.Get(1).(func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType, bool) error); ok { + r1 = rf(ctx, name, credentials, webhookSecret, poolBalancerType, agentMode) } else { r1 = ret.Error(1) } @@ -845,13 +846,14 @@ type Store_CreateOrganization_Call struct { // - credentials params.ForgeCredentials // - webhookSecret string // - poolBalancerType params.PoolBalancerType -func (_e *Store_Expecter) CreateOrganization(ctx interface{}, name interface{}, credentials interface{}, webhookSecret interface{}, poolBalancerType interface{}) *Store_CreateOrganization_Call { - return &Store_CreateOrganization_Call{Call: _e.mock.On("CreateOrganization", ctx, name, credentials, webhookSecret, poolBalancerType)} +// - agentMode bool +func (_e *Store_Expecter) CreateOrganization(ctx interface{}, name interface{}, credentials interface{}, webhookSecret interface{}, poolBalancerType interface{}, agentMode interface{}) *Store_CreateOrganization_Call { + return &Store_CreateOrganization_Call{Call: _e.mock.On("CreateOrganization", ctx, name, credentials, webhookSecret, poolBalancerType, agentMode)} } -func (_c *Store_CreateOrganization_Call) Run(run func(ctx context.Context, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType)) *Store_CreateOrganization_Call { +func (_c *Store_CreateOrganization_Call) Run(run func(ctx context.Context, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType, agentMode bool)) *Store_CreateOrganization_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(string), args[2].(params.ForgeCredentials), args[3].(string), args[4].(params.PoolBalancerType)) + run(args[0].(context.Context), args[1].(string), args[2].(params.ForgeCredentials), args[3].(string), args[4].(params.PoolBalancerType), args[5].(bool)) }) return _c } @@ -861,14 +863,14 @@ func (_c *Store_CreateOrganization_Call) Return(org params.Organization, err err return _c } -func (_c *Store_CreateOrganization_Call) RunAndReturn(run func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType) (params.Organization, error)) *Store_CreateOrganization_Call { +func (_c *Store_CreateOrganization_Call) RunAndReturn(run func(context.Context, string, params.ForgeCredentials, string, params.PoolBalancerType, bool) (params.Organization, error)) *Store_CreateOrganization_Call { _c.Call.Return(run) return _c } -// CreateRepository provides a mock function with given fields: ctx, owner, name, credentials, webhookSecret, poolBalancerType -func (_m *Store) CreateRepository(ctx context.Context, owner string, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType) (params.Repository, error) { - ret := _m.Called(ctx, owner, name, credentials, webhookSecret, poolBalancerType) +// CreateRepository provides a mock function with given fields: ctx, owner, name, credentials, webhookSecret, poolBalancerType, agentMode +func (_m *Store) CreateRepository(ctx context.Context, owner string, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType, agentMode bool) (params.Repository, error) { + ret := _m.Called(ctx, owner, name, credentials, webhookSecret, poolBalancerType, agentMode) if len(ret) == 0 { panic("no return value specified for CreateRepository") @@ -876,17 +878,17 @@ func (_m *Store) CreateRepository(ctx context.Context, owner string, name string var r0 params.Repository var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, string, params.ForgeCredentials, string, params.PoolBalancerType) (params.Repository, error)); ok { - return rf(ctx, owner, name, credentials, webhookSecret, poolBalancerType) + if rf, ok := ret.Get(0).(func(context.Context, string, string, params.ForgeCredentials, string, params.PoolBalancerType, bool) (params.Repository, error)); ok { + return rf(ctx, owner, name, credentials, webhookSecret, poolBalancerType, agentMode) } - if rf, ok := ret.Get(0).(func(context.Context, string, string, params.ForgeCredentials, string, params.PoolBalancerType) params.Repository); ok { - r0 = rf(ctx, owner, name, credentials, webhookSecret, poolBalancerType) + if rf, ok := ret.Get(0).(func(context.Context, string, string, params.ForgeCredentials, string, params.PoolBalancerType, bool) params.Repository); ok { + r0 = rf(ctx, owner, name, credentials, webhookSecret, poolBalancerType, agentMode) } else { r0 = ret.Get(0).(params.Repository) } - if rf, ok := ret.Get(1).(func(context.Context, string, string, params.ForgeCredentials, string, params.PoolBalancerType) error); ok { - r1 = rf(ctx, owner, name, credentials, webhookSecret, poolBalancerType) + if rf, ok := ret.Get(1).(func(context.Context, string, string, params.ForgeCredentials, string, params.PoolBalancerType, bool) error); ok { + r1 = rf(ctx, owner, name, credentials, webhookSecret, poolBalancerType, agentMode) } else { r1 = ret.Error(1) } @@ -906,13 +908,14 @@ type Store_CreateRepository_Call struct { // - credentials params.ForgeCredentials // - webhookSecret string // - poolBalancerType params.PoolBalancerType -func (_e *Store_Expecter) CreateRepository(ctx interface{}, owner interface{}, name interface{}, credentials interface{}, webhookSecret interface{}, poolBalancerType interface{}) *Store_CreateRepository_Call { - return &Store_CreateRepository_Call{Call: _e.mock.On("CreateRepository", ctx, owner, name, credentials, webhookSecret, poolBalancerType)} +// - agentMode bool +func (_e *Store_Expecter) CreateRepository(ctx interface{}, owner interface{}, name interface{}, credentials interface{}, webhookSecret interface{}, poolBalancerType interface{}, agentMode interface{}) *Store_CreateRepository_Call { + return &Store_CreateRepository_Call{Call: _e.mock.On("CreateRepository", ctx, owner, name, credentials, webhookSecret, poolBalancerType, agentMode)} } -func (_c *Store_CreateRepository_Call) Run(run func(ctx context.Context, owner string, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType)) *Store_CreateRepository_Call { +func (_c *Store_CreateRepository_Call) Run(run func(ctx context.Context, owner string, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType, agentMode bool)) *Store_CreateRepository_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(string), args[2].(string), args[3].(params.ForgeCredentials), args[4].(string), args[5].(params.PoolBalancerType)) + run(args[0].(context.Context), args[1].(string), args[2].(string), args[3].(params.ForgeCredentials), args[4].(string), args[5].(params.PoolBalancerType), args[6].(bool)) }) return _c } @@ -922,7 +925,7 @@ func (_c *Store_CreateRepository_Call) Return(param params.Repository, err error return _c } -func (_c *Store_CreateRepository_Call) RunAndReturn(run func(context.Context, string, string, params.ForgeCredentials, string, params.PoolBalancerType) (params.Repository, error)) *Store_CreateRepository_Call { +func (_c *Store_CreateRepository_Call) RunAndReturn(run func(context.Context, string, string, params.ForgeCredentials, string, params.PoolBalancerType, bool) (params.Repository, error)) *Store_CreateRepository_Call { _c.Call.Return(run) return _c } diff --git a/database/common/store.go b/database/common/store.go index d54cab12..633e532d 100644 --- a/database/common/store.go +++ b/database/common/store.go @@ -40,7 +40,7 @@ type GithubCredentialsStore interface { } type RepoStore interface { - CreateRepository(ctx context.Context, owner, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType) (param params.Repository, err error) + CreateRepository(ctx context.Context, owner, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType, agentMode bool) (param params.Repository, err error) GetRepository(ctx context.Context, owner, name, endpointName string) (params.Repository, error) GetRepositoryByID(ctx context.Context, repoID string) (params.Repository, error) ListRepositories(ctx context.Context, filter params.RepositoryFilter) ([]params.Repository, error) @@ -49,7 +49,7 @@ type RepoStore interface { } type OrgStore interface { - CreateOrganization(ctx context.Context, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType) (org params.Organization, err error) + CreateOrganization(ctx context.Context, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType, agentMode bool) (org params.Organization, err error) GetOrganization(ctx context.Context, name, endpointName string) (params.Organization, error) GetOrganizationByID(ctx context.Context, orgID string) (params.Organization, error) ListOrganizations(ctx context.Context, filter params.OrganizationFilter) ([]params.Organization, error) @@ -58,7 +58,7 @@ type OrgStore interface { } type EnterpriseStore interface { - CreateEnterprise(ctx context.Context, name string, credentialsName params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType) (params.Enterprise, error) + CreateEnterprise(ctx context.Context, name string, credentialsName params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType, agentMode bool) (params.Enterprise, error) GetEnterprise(ctx context.Context, name, endpointName string) (params.Enterprise, error) GetEnterpriseByID(ctx context.Context, enterpriseID string) (params.Enterprise, error) ListEnterprises(ctx context.Context, filter params.EnterpriseFilter) ([]params.Enterprise, error) @@ -135,6 +135,7 @@ type ControllerStore interface { ControllerInfo() (params.ControllerInfo, error) InitController() (params.ControllerInfo, error) UpdateController(info params.UpdateControllerParams) (params.ControllerInfo, error) + HasEntitiesWithAgentModeEnabled() (bool, error) } type ScaleSetsStore interface { @@ -186,6 +187,7 @@ type FileObjectStore interface { CreateFileObject(ctx context.Context, param params.CreateFileObjectParams, reader io.Reader) (fileObjParam params.FileObject, err error) UpdateFileObject(ctx context.Context, objID uint, param params.UpdateFileObjectParams) (params.FileObject, error) DeleteFileObject(ctx context.Context, objID uint) error + DeleteFileObjectsByTags(ctx context.Context, tags []string) (int64, error) OpenFileObjectContent(ctx context.Context, objID uint) (io.ReadCloser, error) } diff --git a/database/sql/controller.go b/database/sql/controller.go index 5bf60763..a1224b8b 100644 --- a/database/sql/controller.go +++ b/database/sql/controller.go @@ -34,15 +34,23 @@ func dbControllerToCommonController(dbInfo ControllerInfo) (params.ControllerInf return params.ControllerInfo{}, fmt.Errorf("error joining webhook URL: %w", err) } - return params.ControllerInfo{ + if dbInfo.GARMAgentReleasesURL == "" { + dbInfo.GARMAgentReleasesURL = appdefaults.GARMAgentDefaultReleasesURL + } + + ret := params.ControllerInfo{ ControllerID: dbInfo.ControllerID, MetadataURL: dbInfo.MetadataURL, WebhookURL: dbInfo.WebhookBaseURL, ControllerWebhookURL: url, CallbackURL: dbInfo.CallbackURL, + AgentURL: dbInfo.AgentURL, MinimumJobAgeBackoff: dbInfo.MinimumJobAgeBackoff, Version: appdefaults.GetVersion(), - }, nil + GARMAgentReleasesURL: dbInfo.GARMAgentReleasesURL, + SyncGARMAgentTools: dbInfo.SyncGARMAgentTools, + } + return ret, nil } func (s *sqlDatabase) ControllerInfo() (params.ControllerInfo, error) { @@ -63,6 +71,24 @@ func (s *sqlDatabase) ControllerInfo() (params.ControllerInfo, error) { return paramInfo, nil } +func (s *sqlDatabase) HasEntitiesWithAgentModeEnabled() (bool, error) { + var reposCnt int64 + if err := s.conn.Model(&Repository{}).Where("agent_mode = ?", true).Count(&reposCnt).Error; err != nil { + return false, fmt.Errorf("error fetching repo count: %w", err) + } + + var orgCount int64 + if err := s.conn.Model(&Organization{}).Where("agent_mode = ?", true).Count(&orgCount).Error; err != nil { + return false, fmt.Errorf("error fetching repo count: %w", err) + } + + var enterpriseCount int64 + if err := s.conn.Model(&Enterprise{}).Where("agent_mode = ?", true).Count(&enterpriseCount).Error; err != nil { + return false, fmt.Errorf("error fetching repo count: %w", err) + } + return reposCnt+orgCount+enterpriseCount > 0, nil +} + func (s *sqlDatabase) InitController() (params.ControllerInfo, error) { if _, err := s.ControllerInfo(); err == nil { return params.ControllerInfo{}, runnerErrors.NewConflictError("controller already initialized") @@ -76,6 +102,7 @@ func (s *sqlDatabase) InitController() (params.ControllerInfo, error) { newInfo := ControllerInfo{ ControllerID: newID, MinimumJobAgeBackoff: 30, + GARMAgentReleasesURL: appdefaults.GARMAgentDefaultReleasesURL, } q := s.conn.Save(&newInfo) @@ -120,6 +147,22 @@ func (s *sqlDatabase) UpdateController(info params.UpdateControllerParams) (para dbInfo.WebhookBaseURL = *info.WebhookURL } + if info.AgentURL != nil { + dbInfo.AgentURL = *info.AgentURL + } + + if info.GARMAgentReleasesURL != nil { + agentToolsURL := *info.GARMAgentReleasesURL + if agentToolsURL == "" { + agentToolsURL = appdefaults.GARMAgentDefaultReleasesURL + } + dbInfo.GARMAgentReleasesURL = agentToolsURL + } + + if info.SyncGARMAgentTools != nil { + dbInfo.SyncGARMAgentTools = *info.SyncGARMAgentTools + } + if info.MinimumJobAgeBackoff != nil { dbInfo.MinimumJobAgeBackoff = *info.MinimumJobAgeBackoff } diff --git a/database/sql/enterprise.go b/database/sql/enterprise.go index d201cd21..5ff7ee0d 100644 --- a/database/sql/enterprise.go +++ b/database/sql/enterprise.go @@ -29,7 +29,7 @@ import ( "github.com/cloudbase/garm/params" ) -func (s *sqlDatabase) CreateEnterprise(ctx context.Context, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType) (paramEnt params.Enterprise, err error) { +func (s *sqlDatabase) CreateEnterprise(ctx context.Context, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType, agentMode bool) (paramEnt params.Enterprise, err error) { if webhookSecret == "" { return params.Enterprise{}, errors.New("creating enterprise: missing secret") } @@ -51,6 +51,7 @@ func (s *sqlDatabase) CreateEnterprise(ctx context.Context, name string, credent Name: name, WebhookSecret: secret, PoolBalancerType: poolBalancerType, + AgentMode: agentMode, } err = s.conn.Transaction(func(tx *gorm.DB) error { newEnterprise.CredentialsID = &credentials.ID @@ -211,6 +212,10 @@ func (s *sqlDatabase) UpdateEnterprise(ctx context.Context, enterpriseID string, enterprise.PoolBalancerType = param.PoolBalancerType } + if param.AgentMode != nil { + enterprise.AgentMode = *param.AgentMode + } + q := tx.Save(&enterprise) if q.Error != nil { return fmt.Errorf("error saving enterprise: %w", q.Error) diff --git a/database/sql/enterprise_test.go b/database/sql/enterprise_test.go index f3dbe921..fc8692ee 100644 --- a/database/sql/enterprise_test.go +++ b/database/sql/enterprise_test.go @@ -113,6 +113,7 @@ func (s *EnterpriseTestSuite) SetupTest() { s.testCreds, fmt.Sprintf("test-webhook-secret-%d", i), params.PoolBalancerTypeRoundRobin, + false, ) if err != nil { s.FailNow(fmt.Sprintf("failed to create database object (test-enterprise-%d): %q", i, err)) @@ -191,7 +192,9 @@ func (s *EnterpriseTestSuite) TestCreateEnterprise() { s.Fixtures.CreateEnterpriseParams.Name, s.testCreds, s.Fixtures.CreateEnterpriseParams.WebhookSecret, - params.PoolBalancerTypeRoundRobin) + params.PoolBalancerTypeRoundRobin, + false, + ) // assertions s.Require().Nil(err) @@ -222,7 +225,9 @@ func (s *EnterpriseTestSuite) TestCreateEnterpriseInvalidDBPassphrase() { s.Fixtures.CreateEnterpriseParams.Name, s.testCreds, s.Fixtures.CreateEnterpriseParams.WebhookSecret, - params.PoolBalancerTypeRoundRobin) + params.PoolBalancerTypeRoundRobin, + false, + ) s.Require().NotNil(err) s.Require().Equal("error encoding secret: invalid passphrase length (expected length 32 characters)", err.Error()) @@ -240,7 +245,9 @@ func (s *EnterpriseTestSuite) TestCreateEnterpriseDBCreateErr() { s.Fixtures.CreateEnterpriseParams.Name, s.testCreds, s.Fixtures.CreateEnterpriseParams.WebhookSecret, - params.PoolBalancerTypeRoundRobin) + params.PoolBalancerTypeRoundRobin, + false, + ) s.Require().NotNil(err) s.Require().Equal("error creating enterprise: error creating enterprise: creating enterprise mock error", err.Error()) @@ -296,6 +303,7 @@ func (s *EnterpriseTestSuite) TestListEnterprisesWithFilter() { s.ghesCreds, "test-secret", params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NoError(err) @@ -305,6 +313,7 @@ func (s *EnterpriseTestSuite) TestListEnterprisesWithFilter() { s.testCreds, "test-secret", params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NoError(err) @@ -314,6 +323,7 @@ func (s *EnterpriseTestSuite) TestListEnterprisesWithFilter() { s.testCreds, "test-secret", params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NoError(err) enterprises, err := s.Store.ListEnterprises(s.adminCtx, params.EnterpriseFilter{ @@ -844,7 +854,9 @@ func (s *EnterpriseTestSuite) TestAddRepoEntityEvent() { s.Fixtures.CreateEnterpriseParams.Name, s.testCreds, s.Fixtures.CreateEnterpriseParams.WebhookSecret, - params.PoolBalancerTypeRoundRobin) + params.PoolBalancerTypeRoundRobin, + false, + ) s.Require().Nil(err) entity, err := enterprise.GetEntity() diff --git a/database/sql/file_store.go b/database/sql/file_store.go index 0afdcf26..e3371f39 100644 --- a/database/sql/file_store.go +++ b/database/sql/file_store.go @@ -253,6 +253,63 @@ func (s *sqlDatabase) DeleteFileObject(_ context.Context, objID uint) (err error return nil } +func (s *sqlDatabase) DeleteFileObjectsByTags(_ context.Context, tags []string) (int64, error) { + if len(tags) == 0 { + return 0, fmt.Errorf("no tags provided") + } + + var deletedCount int64 + + err := s.objectsConn.Transaction(func(tx *gorm.DB) error { + // Build query to find all file objects matching ALL tags + query := tx.Model(&FileObject{}).Preload("TagsList").Omit("content") + for _, tag := range tags { + query = query.Where("EXISTS (SELECT 1 FROM file_object_tags WHERE file_object_tags.file_object_id = file_objects.id AND file_object_tags.tag = ?)", tag) + } + + // Get matching objects with their full details (except content blob) + var fileObjects []FileObject + if err := query.Find(&fileObjects).Error; err != nil { + return fmt.Errorf("failed to find matching objects: %w", err) + } + + if len(fileObjects) == 0 { + // No objects match - not an error, just nothing to delete + return nil + } + + // Extract IDs for deletion + fileObjIDs := make([]uint, len(fileObjects)) + for i, obj := range fileObjects { + fileObjIDs[i] = obj.ID + } + + // Delete all matching objects (hard delete with Unscoped) + result := tx.Unscoped().Where("id IN ?", fileObjIDs).Delete(&FileObject{}) + if result.Error != nil { + return fmt.Errorf("failed to delete objects: %w", result.Error) + } + + deletedCount = result.RowsAffected + + // Send notifications with full object details for each deleted object + for _, obj := range fileObjects { + s.sendNotify(common.FileObjectEntityType, common.DeleteOperation, s.sqlFileObjectToCommonParams(obj)) + } + + return nil + }) + if err != nil { + return 0, err + } + + // NOTE: Same as DeleteFileObject - deleted file objects leave empty space + // in the database. Users should run VACUUM manually to reclaim space. + // See DeleteFileObject for performance details. + + return deletedCount, nil +} + func (s *sqlDatabase) GetFileObject(_ context.Context, objID uint) (params.FileObject, error) { var fileObj FileObject if err := s.objectsConn.Preload("TagsList").Where("id = ?", objID).Omit("content").First(&fileObj).Error; err != nil { @@ -304,7 +361,7 @@ func (s *sqlDatabase) SearchFileObjectByTags(_ context.Context, tags []string, p if err := query. Limit(queryPageSize). Offset(queryOffset). - Order("created_at DESC"). + Order("id DESC"). Omit("content"). Find(&fileObjectRes).Error; err != nil { return params.FileObjectPaginatedResponse{}, fmt.Errorf("failed to query database: %w", err) @@ -426,7 +483,7 @@ func (s *sqlDatabase) ListFileObjects(_ context.Context, page, pageSize uint64) if err := s.objectsConn.Preload("TagsList").Omit("content"). Limit(queryPageSize). Offset(queryOffset). - Order("created_at DESC"). + Order("id DESC"). Find(&fileObjs).Error; err != nil { return params.FileObjectPaginatedResponse{}, fmt.Errorf("failed to list file objects: %w", err) } diff --git a/database/sql/gitea_test.go b/database/sql/gitea_test.go index be306a13..7530d376 100644 --- a/database/sql/gitea_test.go +++ b/database/sql/gitea_test.go @@ -529,7 +529,7 @@ func (s *GiteaTestSuite) TestDeleteCredentialsFailsIfReposOrgsOrEntitiesUseIt() s.Require().NoError(err) s.Require().NotNil(creds) - repo, err := s.db.CreateRepository(ctx, "test-owner", "test-repo", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin) + repo, err := s.db.CreateRepository(ctx, "test-owner", "test-repo", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotNil(repo) @@ -540,7 +540,7 @@ func (s *GiteaTestSuite) TestDeleteCredentialsFailsIfReposOrgsOrEntitiesUseIt() err = s.db.DeleteRepository(ctx, repo.ID) s.Require().NoError(err) - org, err := s.db.CreateOrganization(ctx, "test-org", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin) + org, err := s.db.CreateOrganization(ctx, "test-org", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotNil(org) @@ -551,7 +551,7 @@ func (s *GiteaTestSuite) TestDeleteCredentialsFailsIfReposOrgsOrEntitiesUseIt() err = s.db.DeleteOrganization(ctx, org.ID) s.Require().NoError(err) - enterprise, err := s.db.CreateEnterprise(ctx, "test-enterprise", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin) + enterprise, err := s.db.CreateEnterprise(ctx, "test-enterprise", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin, false) s.Require().ErrorIs(err, runnerErrors.ErrBadRequest) s.Require().Equal(params.Enterprise{}, enterprise) @@ -685,7 +685,7 @@ func (s *GiteaTestSuite) TestDeleteCredentialsWithOrgsOrReposFails() { s.Require().NoError(err) s.Require().NotNil(creds) - repo, err := s.db.CreateRepository(ctx, "test-owner", "test-repo", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin) + repo, err := s.db.CreateRepository(ctx, "test-owner", "test-repo", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotNil(repo) @@ -696,7 +696,7 @@ func (s *GiteaTestSuite) TestDeleteCredentialsWithOrgsOrReposFails() { err = s.db.DeleteRepository(ctx, repo.ID) s.Require().NoError(err) - org, err := s.db.CreateOrganization(ctx, "test-org", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin) + org, err := s.db.CreateOrganization(ctx, "test-org", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotNil(org) @@ -743,7 +743,7 @@ func (s *GiteaTestSuite) TestDeleteGiteaEndpointFailsWithOrgsReposOrCredentials( s.Require().NoError(err) s.Require().NotNil(creds) - repo, err := s.db.CreateRepository(ctx, "test-owner", "test-repo", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin) + repo, err := s.db.CreateRepository(ctx, "test-owner", "test-repo", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotNil(repo) @@ -755,7 +755,7 @@ func (s *GiteaTestSuite) TestDeleteGiteaEndpointFailsWithOrgsReposOrCredentials( err = s.db.DeleteRepository(ctx, repo.ID) s.Require().NoError(err) - org, err := s.db.CreateOrganization(ctx, "test-org", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin) + org, err := s.db.CreateOrganization(ctx, "test-org", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotNil(org) diff --git a/database/sql/github_test.go b/database/sql/github_test.go index 24a1e187..592b6bc9 100644 --- a/database/sql/github_test.go +++ b/database/sql/github_test.go @@ -640,7 +640,7 @@ func (s *GithubTestSuite) TestDeleteCredentialsFailsIfReposOrgsOrEntitiesUseIt() s.Require().NoError(err) s.Require().NotNil(creds) - repo, err := s.db.CreateRepository(ctx, "test-owner", "test-repo", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin) + repo, err := s.db.CreateRepository(ctx, "test-owner", "test-repo", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotNil(repo) @@ -651,7 +651,7 @@ func (s *GithubTestSuite) TestDeleteCredentialsFailsIfReposOrgsOrEntitiesUseIt() err = s.db.DeleteRepository(ctx, repo.ID) s.Require().NoError(err) - org, err := s.db.CreateOrganization(ctx, "test-org", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin) + org, err := s.db.CreateOrganization(ctx, "test-org", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotNil(org) @@ -662,7 +662,7 @@ func (s *GithubTestSuite) TestDeleteCredentialsFailsIfReposOrgsOrEntitiesUseIt() err = s.db.DeleteOrganization(ctx, org.ID) s.Require().NoError(err) - enterprise, err := s.db.CreateEnterprise(ctx, "test-enterprise", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin) + enterprise, err := s.db.CreateEnterprise(ctx, "test-enterprise", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotNil(enterprise) @@ -872,7 +872,7 @@ func (s *GithubTestSuite) TestDeleteGithubEndpointFailsWithOrgsReposOrCredential s.Require().NoError(err) s.Require().NotNil(creds) - repo, err := s.db.CreateRepository(ctx, "test-owner", "test-repo", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin) + repo, err := s.db.CreateRepository(ctx, "test-owner", "test-repo", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotNil(repo) @@ -884,7 +884,7 @@ func (s *GithubTestSuite) TestDeleteGithubEndpointFailsWithOrgsReposOrCredential err = s.db.DeleteRepository(ctx, repo.ID) s.Require().NoError(err) - org, err := s.db.CreateOrganization(ctx, "test-org", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin) + org, err := s.db.CreateOrganization(ctx, "test-org", creds, "superSecret@123BlaBla", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotNil(org) diff --git a/database/sql/instances.go b/database/sql/instances.go index 6a3d18c0..a5e9949e 100644 --- a/database/sql/instances.go +++ b/database/sql/instances.go @@ -21,6 +21,7 @@ import ( "fmt" "log/slog" "math" + "slices" "github.com/google/uuid" "gorm.io/datatypes" @@ -28,6 +29,7 @@ import ( "gorm.io/gorm/clause" runnerErrors "github.com/cloudbase/garm-provider-common/errors" + commonParams "github.com/cloudbase/garm-provider-common/params" "github.com/cloudbase/garm/database/common" "github.com/cloudbase/garm/params" ) @@ -124,7 +126,7 @@ func (s *sqlDatabase) getPoolInstanceByName(poolID string, instanceName string) return instance, nil } -func (s *sqlDatabase) getInstance(_ context.Context, instanceNameOrID string, preload ...string) (Instance, error) { +func (s *sqlDatabase) getInstance(_ context.Context, tx *gorm.DB, instanceNameOrID string, preload ...string) (Instance, error) { var instance Instance var whereArg any = instanceNameOrID @@ -134,7 +136,7 @@ func (s *sqlDatabase) getInstance(_ context.Context, instanceNameOrID string, pr whereArg = id whereClause = "id = ?" } - q := s.conn + q := tx if len(preload) > 0 { for _, item := range preload { @@ -156,7 +158,7 @@ func (s *sqlDatabase) getInstance(_ context.Context, instanceNameOrID string, pr } func (s *sqlDatabase) GetInstance(ctx context.Context, instanceName string) (params.Instance, error) { - instance, err := s.getInstance(ctx, instanceName, "StatusMessages", "Pool", "ScaleSet") + instance, err := s.getInstance(ctx, s.conn, instanceName, "StatusMessages", "Pool", "ScaleSet") if err != nil { return params.Instance{}, fmt.Errorf("error fetching instance: %w", err) } @@ -208,7 +210,7 @@ func (s *sqlDatabase) DeleteInstance(_ context.Context, poolID string, instanceN } func (s *sqlDatabase) DeleteInstanceByName(ctx context.Context, instanceName string) error { - instance, err := s.getInstance(ctx, instanceName, "Pool", "ScaleSet") + instance, err := s.getInstance(ctx, s.conn, instanceName, "Pool", "ScaleSet") if err != nil { if errors.Is(err, runnerErrors.ErrNotFound) { return nil @@ -250,7 +252,7 @@ func (s *sqlDatabase) DeleteInstanceByName(ctx context.Context, instanceName str } func (s *sqlDatabase) AddInstanceEvent(ctx context.Context, instanceName string, event params.EventType, eventLevel params.EventLevel, statusMessage string) error { - instance, err := s.getInstance(ctx, instanceName) + instance, err := s.getInstance(ctx, s.conn, instanceName) if err != nil { return fmt.Errorf("error updating instance: %w", err) } @@ -261,81 +263,199 @@ func (s *sqlDatabase) AddInstanceEvent(ctx context.Context, instanceName string, EventLevel: eventLevel, } - if err := s.conn.Model(&instance).Association("StatusMessages").Append(&msg); err != nil { + // Use Create instead of Association.Append to avoid loading all existing messages + msg.InstanceID = instance.ID + if err := s.conn.Create(&msg).Error; err != nil { return fmt.Errorf("error adding status message: %w", err) } + + // Keep only the latest 30 status messages to prevent database bloat + const maxStatusMessages = 30 + var count int64 + if err := s.conn.Model(&InstanceStatusUpdate{}).Where("instance_id = ?", instance.ID).Count(&count).Error; err != nil { + return fmt.Errorf("error counting status messages: %w", err) + } + + if count > maxStatusMessages { + // Get the ID of the 30th most recent message + var cutoffMsg InstanceStatusUpdate + if err := s.conn.Model(&InstanceStatusUpdate{}). + Select("id"). + Where("instance_id = ?", instance.ID). + Order("id desc"). + Offset(maxStatusMessages - 1). + Limit(1). + First(&cutoffMsg).Error; err != nil { + return fmt.Errorf("error finding cutoff message: %w", err) + } + + // Delete all messages older than the cutoff + if err := s.conn.Where("instance_id = ? and id < ?", instance.ID, cutoffMsg.ID).Unscoped().Delete(&InstanceStatusUpdate{}).Error; err != nil { + return fmt.Errorf("error deleting old status messages: %w", err) + } + } + + return nil +} + +// validateAgentID checks agent ID consistency +func (s *sqlDatabase) validateAgentID(currentAgentID, newAgentID int64) error { + if currentAgentID != 0 && newAgentID != 0 && currentAgentID != newAgentID { + return runnerErrors.NewBadRequestError("agent ID mismatch") + } return nil } -func (s *sqlDatabase) UpdateInstance(ctx context.Context, instanceName string, param params.UpdateInstanceParams) (params.Instance, error) { - instance, err := s.getInstance(ctx, instanceName, "Pool", "ScaleSet") - if err != nil { - return params.Instance{}, fmt.Errorf("error updating instance: %w", err) +// validateRunnerStatusTransition validates runner status state transition +func (s *sqlDatabase) validateRunnerStatusTransition(current, newStatus params.RunnerStatus) error { + if newStatus == "" || newStatus == current { + return nil } + allowedTransitions, ok := params.RunnerStatusTransitions[current] + if !ok { + return fmt.Errorf("Instance is in invalid state: %s", current) + } + + if !slices.Contains(allowedTransitions, newStatus) { + return runnerErrors.NewBadRequestError("invalid runner status transition from %s to %s", current, newStatus) + } + return nil +} + +// validateInstanceStatusTransition validates instance status state transition +func (s *sqlDatabase) validateInstanceStatusTransition(current, newStatus commonParams.InstanceStatus) error { + if newStatus == "" || newStatus == current { + return nil + } + + allowedTransitions, ok := params.InstanceStatusTransitions[current] + if !ok { + // we need a better way to handle this. Because if we err out here, we cannot recover + // unless the user manually updates the instance. + return fmt.Errorf("Instance is in invalid state: %s", current) + } + + if !slices.Contains(allowedTransitions, newStatus) { + return runnerErrors.NewBadRequestError("invalid instance status transition from %s to %s", current, newStatus) + } + return nil +} + +// applyInstanceUpdates applies parameter updates to the instance +func (s *sqlDatabase) applyInstanceUpdates(instance *Instance, param params.UpdateInstanceParams) error { + // Simple field updates if param.AgentID != 0 { instance.AgentID = param.AgentID } - if param.ProviderID != "" { instance.ProviderID = ¶m.ProviderID } - if param.OSName != "" { instance.OSName = param.OSName } - if param.OSVersion != "" { instance.OSVersion = param.OSVersion } - if string(param.RunnerStatus) != "" { instance.RunnerStatus = param.RunnerStatus } - - if string(param.Status) != "" { + if param.Heartbeat != nil { + instance.Heartbeat = *param.Heartbeat + } + if param.Status != "" { instance.Status = param.Status } if param.CreateAttempt != 0 { instance.CreateAttempt = param.CreateAttempt } - if param.TokenFetched != nil { instance.TokenFetched = *param.TokenFetched } + // Complex field updates + if param.Capabilities != nil { + asJs, err := json.Marshal(*param.Capabilities) + if err != nil { + return runnerErrors.NewBadRequestError("invalid capabilities: %s", err) + } + instance.Capabilities = asJs + } + if param.JitConfiguration != nil { secret, err := s.marshalAndSeal(param.JitConfiguration) if err != nil { - return params.Instance{}, fmt.Errorf("error marshalling jit config: %w", err) + return fmt.Errorf("error marshalling jit config: %w", err) } instance.JitConfiguration = secret } instance.ProviderFault = param.ProviderFault + return nil +} - q := s.conn.Save(&instance) - if q.Error != nil { - return params.Instance{}, fmt.Errorf("error updating instance: %w", q.Error) +func (s *sqlDatabase) UpdateInstance(ctx context.Context, instanceName string, param params.UpdateInstanceParams) (params.Instance, error) { + var rowsAffected int64 + err := s.conn.Transaction(func(tx *gorm.DB) error { + instance, err := s.getInstance(ctx, tx, instanceName, "Pool", "ScaleSet") + if err != nil { + return fmt.Errorf("error updating instance: %w", err) + } + + // Validate transitions + if err := s.validateAgentID(instance.AgentID, param.AgentID); err != nil { + return err + } + if err := s.validateRunnerStatusTransition(instance.RunnerStatus, param.RunnerStatus); err != nil { + return err + } + if err := s.validateInstanceStatusTransition(instance.Status, param.Status); err != nil { + return err + } + + // Apply updates + if err := s.applyInstanceUpdates(&instance, param); err != nil { + return err + } + + // Save instance + result := tx.Save(&instance) + if result.Error != nil { + return fmt.Errorf("error updating instance: %w", result.Error) + } + rowsAffected = result.RowsAffected + + // Update addresses if provided + if len(param.Addresses) > 0 { + addrs := make([]Address, 0, len(param.Addresses)) + for _, addr := range param.Addresses { + addrs = append(addrs, Address{ + Address: addr.Address, + Type: string(addr.Type), + }) + } + if err := tx.Model(&instance).Association("Addresses").Replace(addrs); err != nil { + return fmt.Errorf("error updating addresses: %w", err) + } + } + return nil + }) + if err != nil { + return params.Instance{}, fmt.Errorf("error updating instance: %w", err) } - if len(param.Addresses) > 0 { - addrs := []Address{} - for _, addr := range param.Addresses { - addrs = append(addrs, Address{ - Address: addr.Address, - Type: string(addr.Type), - }) - } - if err := s.conn.Model(&instance).Association("Addresses").Replace(addrs); err != nil { - return params.Instance{}, fmt.Errorf("error updating addresses: %w", err) - } + instance, err := s.getInstance(ctx, s.conn, instanceName, "Pool", "ScaleSet") + if err != nil { + return params.Instance{}, fmt.Errorf("error updating instance: %w", err) } + inst, err := s.sqlToParamsInstance(instance) if err != nil { return params.Instance{}, fmt.Errorf("error converting instance: %w", err) } - s.sendNotify(common.InstanceEntityType, common.UpdateOperation, inst) + if rowsAffected > 0 { + s.sendNotify(common.InstanceEntityType, common.UpdateOperation, inst) + } return inst, nil } diff --git a/database/sql/instances_test.go b/database/sql/instances_test.go index 9538d97c..8c29fe9b 100644 --- a/database/sql/instances_test.go +++ b/database/sql/instances_test.go @@ -92,7 +92,7 @@ func (s *InstancesTestSuite) SetupTest() { creds := garmTesting.CreateTestGithubCredentials(adminCtx, "new-creds", db, s.T(), githubEndpoint) // create an organization for testing purposes - org, err := s.Store.CreateOrganization(s.adminCtx, "test-org", creds, "test-webhookSecret", params.PoolBalancerTypeRoundRobin) + org, err := s.Store.CreateOrganization(s.adminCtx, "test-org", creds, "test-webhookSecret", params.PoolBalancerTypeRoundRobin, false) if err != nil { s.FailNow(fmt.Sprintf("failed to create org: %s", err)) } @@ -573,10 +573,6 @@ func (s *InstancesTestSuite) TestAddInstanceEventDBUpdateErr() { WithArgs(instance.ID). WillReturnRows(sqlmock.NewRows([]string{"message", "instance_id"}).AddRow("instance sample message", instance.ID)) s.Fixtures.SQLMock.ExpectBegin() - s.Fixtures.SQLMock. - ExpectExec(regexp.QuoteMeta("UPDATE `instances` SET `updated_at`=? WHERE `instances`.`deleted_at` IS NULL AND `id` = ?")). - WithArgs(sqlmock.AnyArg(), instance.ID). - WillReturnResult(sqlmock.NewResult(1, 1)) s.Fixtures.SQLMock. ExpectExec(regexp.QuoteMeta("INSERT INTO `instance_status_updates`")). WillReturnError(fmt.Errorf("mocked add status message error")) @@ -605,10 +601,12 @@ func (s *InstancesTestSuite) TestUpdateInstance() { func (s *InstancesTestSuite) TestUpdateInstanceDBUpdateInstanceErr() { instance := s.Fixtures.Instances[0] + s.Fixtures.SQLMock.ExpectBegin() s.Fixtures.SQLMock. ExpectQuery(regexp.QuoteMeta("SELECT * FROM `instances` WHERE name = ? AND `instances`.`deleted_at` IS NULL ORDER BY `instances`.`id` LIMIT ?")). WithArgs(instance.Name, 1). - WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(instance.ID)) + WillReturnRows(sqlmock.NewRows([]string{"id", "created_at", "updated_at", "deleted_at", "provider_id", "name", "agent_id", "os_type", "os_arch", "os_name", "os_version", "status", "runner_status", "heartbeat", "callback_url", "metadata_url", "provider_fault", "create_attempt", "token_fetched", "jit_configuration", "git_hub_runner_group", "aditional_labels", "capabilities", "pool_id", "scale_set_fk_id"}). + AddRow(instance.ID, instance.CreatedAt, instance.UpdatedAt, nil, nil, instance.Name, 0, "linux", "amd64", "", "", "running", "idle", instance.Heartbeat, "", "", nil, 0, false, nil, "", nil, nil, nil, nil)) s.Fixtures.SQLMock. ExpectQuery(regexp.QuoteMeta("SELECT * FROM `addresses` WHERE `addresses`.`instance_id` = ? AND `addresses`.`deleted_at` IS NULL")). WithArgs(instance.ID). @@ -621,7 +619,6 @@ func (s *InstancesTestSuite) TestUpdateInstanceDBUpdateInstanceErr() { ExpectQuery(regexp.QuoteMeta("SELECT * FROM `instance_status_updates` WHERE `instance_status_updates`.`instance_id` = ? AND `instance_status_updates`.`deleted_at` IS NULL")). WithArgs(instance.ID). WillReturnRows(sqlmock.NewRows([]string{"message", "instance_id"}).AddRow("instance sample message", instance.ID)) - s.Fixtures.SQLMock.ExpectBegin() s.Fixtures.SQLMock. ExpectExec(("UPDATE `instances`")). WillReturnError(fmt.Errorf("mocked update instance error")) @@ -630,17 +627,19 @@ func (s *InstancesTestSuite) TestUpdateInstanceDBUpdateInstanceErr() { _, err := s.StoreSQLMocked.UpdateInstance(s.adminCtx, instance.Name, s.Fixtures.UpdateInstanceParams) s.Require().NotNil(err) - s.Require().Equal("error updating instance: mocked update instance error", err.Error()) + s.Require().Equal("error updating instance: error updating instance: mocked update instance error", err.Error()) s.assertSQLMockExpectations() } func (s *InstancesTestSuite) TestUpdateInstanceDBUpdateAddressErr() { instance := s.Fixtures.Instances[0] + s.Fixtures.SQLMock.ExpectBegin() s.Fixtures.SQLMock. ExpectQuery(regexp.QuoteMeta("SELECT * FROM `instances` WHERE name = ? AND `instances`.`deleted_at` IS NULL ORDER BY `instances`.`id` LIMIT ?")). WithArgs(instance.Name, 1). - WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(instance.ID)) + WillReturnRows(sqlmock.NewRows([]string{"id", "created_at", "updated_at", "deleted_at", "provider_id", "name", "agent_id", "os_type", "os_arch", "os_name", "os_version", "status", "runner_status", "heartbeat", "callback_url", "metadata_url", "provider_fault", "create_attempt", "token_fetched", "jit_configuration", "git_hub_runner_group", "aditional_labels", "capabilities", "pool_id", "scale_set_fk_id"}). + AddRow(instance.ID, instance.CreatedAt, instance.UpdatedAt, nil, nil, instance.Name, 0, "linux", "amd64", "", "", "running", "idle", instance.Heartbeat, "", "", nil, 0, false, nil, "", nil, nil, nil, nil)) s.Fixtures.SQLMock. ExpectQuery(regexp.QuoteMeta("SELECT * FROM `addresses` WHERE `addresses`.`instance_id` = ? AND `addresses`.`deleted_at` IS NULL")). WithArgs(instance.ID). @@ -653,18 +652,6 @@ func (s *InstancesTestSuite) TestUpdateInstanceDBUpdateAddressErr() { ExpectQuery(regexp.QuoteMeta("SELECT * FROM `instance_status_updates` WHERE `instance_status_updates`.`instance_id` = ? AND `instance_status_updates`.`deleted_at` IS NULL")). WithArgs(instance.ID). WillReturnRows(sqlmock.NewRows([]string{"message", "instance_id"}).AddRow("instance sample message", instance.ID)) - s.Fixtures.SQLMock.ExpectBegin() - s.Fixtures.SQLMock. - ExpectExec(regexp.QuoteMeta("UPDATE `instances` SET")). - WillReturnResult(sqlmock.NewResult(1, 1)) - s.Fixtures.SQLMock. - ExpectExec(regexp.QuoteMeta("INSERT INTO `addresses`")). - WillReturnResult(sqlmock.NewResult(1, 1)) - s.Fixtures.SQLMock. - ExpectExec(regexp.QuoteMeta("INSERT INTO `instance_status_updates`")). - WillReturnResult(sqlmock.NewResult(1, 1)) - s.Fixtures.SQLMock.ExpectCommit() - s.Fixtures.SQLMock.ExpectBegin() s.Fixtures.SQLMock. ExpectExec(regexp.QuoteMeta("UPDATE `instances` SET")). WillReturnResult(sqlmock.NewResult(1, 1)) @@ -676,7 +663,7 @@ func (s *InstancesTestSuite) TestUpdateInstanceDBUpdateAddressErr() { _, err := s.StoreSQLMocked.UpdateInstance(s.adminCtx, instance.Name, s.Fixtures.UpdateInstanceParams) s.Require().NotNil(err) - s.Require().Equal("error updating addresses: update addresses mock error", err.Error()) + s.Require().Equal("error updating instance: error updating instance: update addresses mock error; update addresses mock error", err.Error()) s.assertSQLMockExpectations() } diff --git a/database/sql/jobs.go b/database/sql/jobs.go index ffa3a7b5..edb82831 100644 --- a/database/sql/jobs.go +++ b/database/sql/jobs.go @@ -100,7 +100,7 @@ func (s *sqlDatabase) paramsJobToWorkflowJob(ctx context.Context, job params.Job } if job.RunnerName != "" { - instance, err := s.getInstance(s.ctx, job.RunnerName) + instance, err := s.getInstance(s.ctx, s.conn, job.RunnerName) if err != nil { // This usually is very normal as not all jobs run on our runners. slog.DebugContext(ctx, "failed to get instance by name", "instance_name", job.RunnerName) @@ -282,7 +282,7 @@ func (s *sqlDatabase) CreateOrUpdateJob(ctx context.Context, job params.Job) (pa } if job.RunnerName != "" { - instance, err := s.getInstance(ctx, job.RunnerName) + instance, err := s.getInstance(ctx, s.conn, job.RunnerName) if err == nil { workflowJob.InstanceID = &instance.ID } else { diff --git a/database/sql/models.go b/database/sql/models.go index c1f8b71c..e4cc02f1 100644 --- a/database/sql/models.go +++ b/database/sql/models.go @@ -51,9 +51,20 @@ type ControllerInfo struct { ControllerID uuid.UUID - CallbackURL string - MetadataURL string + // CallbackURL is the URL where userdata scripts call back into, to send status updates + // and installation progress. + CallbackURL string + // MetadataURL is the base URL from which runners can get their installation metadata. + MetadataURL string + // WebhookBaseURL is the base URL used to construct the controller webhook URL. WebhookBaseURL string + // AgentURL is the websocket enabled URL whenre garm agents connect to. + AgentURL string + // GARMAgentReleasesURL is the URL from which GARM can sync garm-agent binaries. Alternatively + // the user can manually upload binaries. + GARMAgentReleasesURL string + // SyncGARMAgentTools enables or disables automatic sync of garm-agent tools. + SyncGARMAgentTools bool // MinimumJobAgeBackoff is the minimum time that a job must be in the queue // before GARM will attempt to allocate a runner to service it. This backoff // is useful if you have idle runners in various pools that could potentially @@ -104,6 +115,7 @@ type Pool struct { // any kind of data needed by providers. ExtraSpecs datatypes.JSON GitHubRunnerGroup string + EnableShell bool RepoID *uuid.UUID `gorm:"index"` Repository Repository `gorm:"foreignKey:RepoID;"` @@ -159,7 +171,8 @@ type ScaleSet struct { // ExtraSpecs is an opaque json that gets sent to the provider // as part of the bootstrap params for instances. It can contain // any kind of data needed by providers. - ExtraSpecs datatypes.JSON + ExtraSpecs datatypes.JSON + EnableShell bool RepoID *uuid.UUID `gorm:"index"` Repository Repository `gorm:"foreignKey:RepoID;"` @@ -203,6 +216,7 @@ type Repository struct { ScaleSets []ScaleSet `gorm:"foreignKey:RepoID"` Jobs []WorkflowJob `gorm:"foreignKey:RepoID;constraint:OnDelete:SET NULL"` PoolBalancerType params.PoolBalancerType `gorm:"type:varchar(64)"` + AgentMode bool `gorm:"index:repo_agent_idx"` EndpointName *string `gorm:"index:idx_owner_nocase,unique,collate:nocase"` Endpoint GithubEndpoint `gorm:"foreignKey:EndpointName;constraint:OnDelete:SET NULL"` @@ -235,6 +249,7 @@ type Organization struct { ScaleSet []ScaleSet `gorm:"foreignKey:OrgID"` Jobs []WorkflowJob `gorm:"foreignKey:OrgID;constraint:OnDelete:SET NULL"` PoolBalancerType params.PoolBalancerType `gorm:"type:varchar(64)"` + AgentMode bool `gorm:"index:org_agent_idx"` EndpointName *string `gorm:"index:idx_org_name_nocase,collate:nocase"` Endpoint GithubEndpoint `gorm:"foreignKey:EndpointName;constraint:OnDelete:SET NULL"` @@ -265,6 +280,7 @@ type Enterprise struct { ScaleSet []ScaleSet `gorm:"foreignKey:EnterpriseID"` Jobs []WorkflowJob `gorm:"foreignKey:EnterpriseID;constraint:OnDelete:SET NULL"` PoolBalancerType params.PoolBalancerType `gorm:"type:varchar(64)"` + AgentMode bool `gorm:"index:enterprise_agent_idx"` EndpointName *string `gorm:"index:idx_ent_name_nocase,collate:nocase"` Endpoint GithubEndpoint `gorm:"foreignKey:EndpointName;constraint:OnDelete:SET NULL"` @@ -306,6 +322,7 @@ type Instance struct { Addresses []Address `gorm:"foreignKey:InstanceID;constraint:OnDelete:CASCADE,OnUpdate:CASCADE;"` Status commonParams.InstanceStatus RunnerStatus params.RunnerStatus + Heartbeat time.Time CallbackURL string MetadataURL string ProviderFault []byte `gorm:"type:longblob"` @@ -314,6 +331,7 @@ type Instance struct { JitConfiguration []byte `gorm:"type:longblob"` GitHubRunnerGroup string AditionalLabels datatypes.JSON + Capabilities datatypes.JSON PoolID *uuid.UUID Pool Pool `gorm:"foreignKey:PoolID"` diff --git a/database/sql/organizations.go b/database/sql/organizations.go index 22be6272..2f49c63b 100644 --- a/database/sql/organizations.go +++ b/database/sql/organizations.go @@ -29,7 +29,7 @@ import ( "github.com/cloudbase/garm/params" ) -func (s *sqlDatabase) CreateOrganization(ctx context.Context, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType) (param params.Organization, err error) { +func (s *sqlDatabase) CreateOrganization(ctx context.Context, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType, agentMode bool) (param params.Organization, err error) { if webhookSecret == "" { return params.Organization{}, errors.New("creating org: missing secret") } @@ -47,6 +47,7 @@ func (s *sqlDatabase) CreateOrganization(ctx context.Context, name string, crede Name: name, WebhookSecret: secret, PoolBalancerType: poolBalancerType, + AgentMode: agentMode, } err = s.conn.Transaction(func(tx *gorm.DB) error { @@ -195,6 +196,10 @@ func (s *sqlDatabase) UpdateOrganization(ctx context.Context, orgID string, para org.PoolBalancerType = param.PoolBalancerType } + if param.AgentMode != nil { + org.AgentMode = *param.AgentMode + } + q := tx.Save(&org) if q.Error != nil { return fmt.Errorf("error saving org: %w", q.Error) diff --git a/database/sql/organizations_test.go b/database/sql/organizations_test.go index 28064094..896a6cfd 100644 --- a/database/sql/organizations_test.go +++ b/database/sql/organizations_test.go @@ -114,6 +114,7 @@ func (s *OrgTestSuite) SetupTest() { s.testCreds, fmt.Sprintf("test-webhook-secret-%d", i), params.PoolBalancerTypeRoundRobin, + false, ) if err != nil { s.FailNow(fmt.Sprintf("failed to create database object (test-org-%d): %q", i, err)) @@ -192,7 +193,9 @@ func (s *OrgTestSuite) TestCreateOrganization() { s.Fixtures.CreateOrgParams.Name, s.testCreds, s.Fixtures.CreateOrgParams.WebhookSecret, - params.PoolBalancerTypeRoundRobin) + params.PoolBalancerTypeRoundRobin, + false, + ) // assertions s.Require().Nil(err) @@ -221,7 +224,9 @@ func (s *OrgTestSuite) TestCreateOrgForGitea() { s.Fixtures.CreateOrgParams.Name, s.testCredsGitea, s.Fixtures.CreateOrgParams.WebhookSecret, - params.PoolBalancerTypeRoundRobin) + params.PoolBalancerTypeRoundRobin, + false, + ) // assertions s.Require().Nil(err) @@ -256,7 +261,9 @@ func (s *OrgTestSuite) TestCreateOrganizationInvalidForgeType() { s.Fixtures.CreateOrgParams.Name, credentials, s.Fixtures.CreateOrgParams.WebhookSecret, - params.PoolBalancerTypeRoundRobin) + params.PoolBalancerTypeRoundRobin, + false, + ) s.Require().NotNil(err) s.Require().Equal("error creating org: unsupported credentials type: invalid request", err.Error()) } @@ -279,7 +286,9 @@ func (s *OrgTestSuite) TestCreateOrganizationInvalidDBPassphrase() { s.Fixtures.CreateOrgParams.Name, s.testCreds, s.Fixtures.CreateOrgParams.WebhookSecret, - params.PoolBalancerTypeRoundRobin) + params.PoolBalancerTypeRoundRobin, + false, + ) s.Require().NotNil(err) s.Require().Equal("error encoding secret: invalid passphrase length (expected length 32 characters)", err.Error()) @@ -297,7 +306,8 @@ func (s *OrgTestSuite) TestCreateOrganizationDBCreateErr() { s.Fixtures.CreateOrgParams.Name, s.testCreds, s.Fixtures.CreateOrgParams.WebhookSecret, - params.PoolBalancerTypeRoundRobin) + params.PoolBalancerTypeRoundRobin, + false) s.Require().NotNil(err) s.Require().Equal("error creating org: error creating org: creating org mock error", err.Error()) @@ -353,6 +363,7 @@ func (s *OrgTestSuite) TestListOrganizationsWithFilters() { s.testCreds, "super secret", params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NoError(err) @@ -362,6 +373,7 @@ func (s *OrgTestSuite) TestListOrganizationsWithFilters() { s.testCredsGitea, "super secret", params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NoError(err) @@ -371,6 +383,7 @@ func (s *OrgTestSuite) TestListOrganizationsWithFilters() { s.testCreds, "super secret", params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NoError(err) orgs, err := s.Store.ListOrganizations( @@ -899,7 +912,8 @@ func (s *OrgTestSuite) TestAddOrgEntityEvent() { s.Fixtures.CreateOrgParams.Name, s.testCreds, s.Fixtures.CreateOrgParams.WebhookSecret, - params.PoolBalancerTypeRoundRobin) + params.PoolBalancerTypeRoundRobin, + false) s.Require().Nil(err) entity, err := org.GetEntity() diff --git a/database/sql/pools.go b/database/sql/pools.go index a01655a4..3b286f84 100644 --- a/database/sql/pools.go +++ b/database/sql/pools.go @@ -293,6 +293,7 @@ func (s *sqlDatabase) CreateEntityPool(ctx context.Context, entity params.ForgeE GitHubRunnerGroup: param.GitHubRunnerGroup, Priority: param.Priority, TemplateID: param.TemplateID, + EnableShell: param.EnableShell, } if len(param.ExtraSpecs) > 0 { newPool.ExtraSpecs = datatypes.JSON(param.ExtraSpecs) @@ -316,13 +317,13 @@ func (s *sqlDatabase) CreateEntityPool(ctx context.Context, entity params.ForgeE return fmt.Errorf("error checking entity existence: %w", err) } - tags := []Tag{} + var tags []*Tag for _, val := range param.Tags { t, err := s.getOrCreateTag(tx, val) if err != nil { return fmt.Errorf("error creating tag: %w", err) } - tags = append(tags, t) + tags = append(tags, &t) } q := tx.Create(&newPool) @@ -330,8 +331,9 @@ func (s *sqlDatabase) CreateEntityPool(ctx context.Context, entity params.ForgeE return fmt.Errorf("error creating pool: %w", q.Error) } - for i := range tags { - if err := tx.Model(&newPool).Association("Tags").Append(&tags[i]); err != nil { + // Append all tags at once instead of one by one for better performance + if len(tags) > 0 { + if err := tx.Model(&newPool).Association("Tags").Append(tags); err != nil { return fmt.Errorf("error associating tags: %w", err) } } diff --git a/database/sql/pools_test.go b/database/sql/pools_test.go index e3b83e8d..9fde1379 100644 --- a/database/sql/pools_test.go +++ b/database/sql/pools_test.go @@ -81,7 +81,7 @@ func (s *PoolsTestSuite) SetupTest() { creds := garmTesting.CreateTestGithubCredentials(adminCtx, "new-creds", db, s.T(), githubEndpoint) // create an organization for testing purposes - org, err := s.Store.CreateOrganization(s.adminCtx, "test-org", creds, "test-webhookSecret", params.PoolBalancerTypeRoundRobin) + org, err := s.Store.CreateOrganization(s.adminCtx, "test-org", creds, "test-webhookSecret", params.PoolBalancerTypeRoundRobin, false) if err != nil { s.FailNow(fmt.Sprintf("failed to create org: %s", err)) } @@ -211,7 +211,7 @@ func (s *PoolsTestSuite) TestEntityPoolOperations() { ep := garmTesting.CreateDefaultGithubEndpoint(s.ctx, s.Store, s.T()) creds := garmTesting.CreateTestGithubCredentials(s.ctx, "test-creds", s.Store, s.T(), ep) s.T().Cleanup(func() { s.Store.DeleteGithubCredentials(s.ctx, creds.ID) }) - repo, err := s.Store.CreateRepository(s.ctx, "test-owner", "test-repo", creds, "test-secret", params.PoolBalancerTypeRoundRobin) + repo, err := s.Store.CreateRepository(s.ctx, "test-owner", "test-repo", creds, "test-secret", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotEmpty(repo.ID) s.T().Cleanup(func() { s.Store.DeleteRepository(s.ctx, repo.ID) }) @@ -261,7 +261,7 @@ func (s *PoolsTestSuite) TestEntityPoolOperations() { s.Require().Equal(*updatePoolParams.Enabled, pool.Enabled) s.Require().Equal(updatePoolParams.Flavor, pool.Flavor) s.Require().Equal(updatePoolParams.Image, pool.Image) - s.Require().Equal(updatePoolParams.RunnerPrefix.Prefix, pool.RunnerPrefix.Prefix) + s.Require().Equal(updatePoolParams.Prefix, pool.Prefix) s.Require().Equal(*updatePoolParams.MaxRunners, pool.MaxRunners) s.Require().Equal(*updatePoolParams.MinIdleRunners, pool.MinIdleRunners) s.Require().Equal(updatePoolParams.OSType, pool.OSType) @@ -292,7 +292,7 @@ func (s *PoolsTestSuite) TestListEntityInstances() { ep := garmTesting.CreateDefaultGithubEndpoint(s.ctx, s.Store, s.T()) creds := garmTesting.CreateTestGithubCredentials(s.ctx, "test-creds", s.Store, s.T(), ep) s.T().Cleanup(func() { s.Store.DeleteGithubCredentials(s.ctx, creds.ID) }) - repo, err := s.Store.CreateRepository(s.ctx, "test-owner", "test-repo", creds, "test-secret", params.PoolBalancerTypeRoundRobin) + repo, err := s.Store.CreateRepository(s.ctx, "test-owner", "test-repo", creds, "test-secret", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotEmpty(repo.ID) s.T().Cleanup(func() { s.Store.DeleteRepository(s.ctx, repo.ID) }) diff --git a/database/sql/repositories.go b/database/sql/repositories.go index 72b535e8..d8f53277 100644 --- a/database/sql/repositories.go +++ b/database/sql/repositories.go @@ -29,7 +29,7 @@ import ( "github.com/cloudbase/garm/params" ) -func (s *sqlDatabase) CreateRepository(ctx context.Context, owner, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType) (param params.Repository, err error) { +func (s *sqlDatabase) CreateRepository(ctx context.Context, owner, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType, agentMode bool) (param params.Repository, err error) { defer func() { if err == nil { s.sendNotify(common.RepositoryEntityType, common.CreateOperation, param) @@ -49,6 +49,7 @@ func (s *sqlDatabase) CreateRepository(ctx context.Context, owner, name string, Owner: owner, WebhookSecret: secret, PoolBalancerType: poolBalancerType, + AgentMode: agentMode, } err = s.conn.Transaction(func(tx *gorm.DB) error { switch credentials.ForgeType { @@ -196,6 +197,9 @@ func (s *sqlDatabase) UpdateRepository(ctx context.Context, repoID string, param if param.PoolBalancerType != "" { repo.PoolBalancerType = param.PoolBalancerType } + if param.AgentMode != nil { + repo.AgentMode = *param.AgentMode + } q := tx.Save(&repo) if q.Error != nil { diff --git a/database/sql/repositories_test.go b/database/sql/repositories_test.go index b3c15eca..b69d1de2 100644 --- a/database/sql/repositories_test.go +++ b/database/sql/repositories_test.go @@ -126,6 +126,7 @@ func (s *RepoTestSuite) SetupTest() { s.testCreds, fmt.Sprintf("test-webhook-secret-%d", i), params.PoolBalancerTypeRoundRobin, + false, ) if err != nil { s.FailNow(fmt.Sprintf("failed to create database object (test-repo-%d): %v", i, err)) @@ -211,6 +212,7 @@ func (s *RepoTestSuite) TestCreateRepository() { s.testCreds, s.Fixtures.CreateRepoParams.WebhookSecret, params.PoolBalancerTypeRoundRobin, + false, ) // assertions @@ -243,6 +245,7 @@ func (s *RepoTestSuite) TestCreateRepositoryGitea() { s.testCredsGitea, s.Fixtures.CreateRepoParams.WebhookSecret, params.PoolBalancerTypeRoundRobin, + false, ) // assertions @@ -281,6 +284,7 @@ func (s *RepoTestSuite) TestCreateRepositoryInvalidForgeType() { }, s.Fixtures.CreateRepoParams.WebhookSecret, params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NotNil(err) @@ -307,6 +311,7 @@ func (s *RepoTestSuite) TestCreateRepositoryInvalidDBPassphrase() { s.testCreds, s.Fixtures.CreateRepoParams.WebhookSecret, params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NotNil(err) @@ -327,6 +332,7 @@ func (s *RepoTestSuite) TestCreateRepositoryInvalidDBCreateErr() { s.testCreds, s.Fixtures.CreateRepoParams.WebhookSecret, params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NotNil(err) @@ -390,6 +396,7 @@ func (s *RepoTestSuite) TestListRepositoriesWithFilters() { s.testCreds, "super secret", params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NoError(err) @@ -400,6 +407,7 @@ func (s *RepoTestSuite) TestListRepositoriesWithFilters() { s.testCredsGitea, "super secret", params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NoError(err) @@ -410,6 +418,7 @@ func (s *RepoTestSuite) TestListRepositoriesWithFilters() { s.testCreds, "super secret", params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NoError(err) @@ -420,6 +429,7 @@ func (s *RepoTestSuite) TestListRepositoriesWithFilters() { s.testCreds, "super secret", params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NoError(err) @@ -986,7 +996,9 @@ func (s *RepoTestSuite) TestAddRepoEntityEvent() { s.Fixtures.CreateRepoParams.Name, s.testCreds, s.Fixtures.CreateRepoParams.WebhookSecret, - params.PoolBalancerTypeRoundRobin) + params.PoolBalancerTypeRoundRobin, + false, + ) s.Require().Nil(err) entity, err := repo.GetEntity() diff --git a/database/sql/scalesets.go b/database/sql/scalesets.go index 404c67ac..19d7c282 100644 --- a/database/sql/scalesets.go +++ b/database/sql/scalesets.go @@ -84,6 +84,7 @@ func (s *sqlDatabase) CreateEntityScaleSet(ctx context.Context, entity params.Fo GitHubRunnerGroup: param.GitHubRunnerGroup, State: params.ScaleSetPendingCreate, TemplateID: param.TemplateID, + EnableShell: param.EnableShell, } if len(param.ExtraSpecs) > 0 { @@ -303,6 +304,10 @@ func (s *sqlDatabase) updateScaleSet(tx *gorm.DB, scaleSet ScaleSet, param param scaleSet.TemplateID = param.TemplateID } + if param.EnableShell != nil { + scaleSet.EnableShell = *param.EnableShell + } + if param.Name != "" { scaleSet.Name = param.Name } diff --git a/database/sql/scalesets_test.go b/database/sql/scalesets_test.go index f1f9fbba..527cd89a 100644 --- a/database/sql/scalesets_test.go +++ b/database/sql/scalesets_test.go @@ -62,17 +62,17 @@ func (s *ScaleSetsTestSuite) SetupTest() { s.creds = garmTesting.CreateTestGithubCredentials(adminCtx, "new-creds", db, s.T(), githubEndpoint) // create an organization for testing purposes - s.org, err = s.Store.CreateOrganization(s.adminCtx, "test-org", s.creds, "test-webhookSecret", params.PoolBalancerTypeRoundRobin) + s.org, err = s.Store.CreateOrganization(s.adminCtx, "test-org", s.creds, "test-webhookSecret", params.PoolBalancerTypeRoundRobin, false) if err != nil { s.FailNow(fmt.Sprintf("failed to create org: %s", err)) } - s.repo, err = s.Store.CreateRepository(s.adminCtx, "test-org", "test-repo", s.creds, "test-webhookSecret", params.PoolBalancerTypeRoundRobin) + s.repo, err = s.Store.CreateRepository(s.adminCtx, "test-org", "test-repo", s.creds, "test-webhookSecret", params.PoolBalancerTypeRoundRobin, false) if err != nil { s.FailNow(fmt.Sprintf("failed to create repo: %s", err)) } - s.enterprise, err = s.Store.CreateEnterprise(s.adminCtx, "test-enterprise", s.creds, "test-webhookSecret", params.PoolBalancerTypeRoundRobin) + s.enterprise, err = s.Store.CreateEnterprise(s.adminCtx, "test-enterprise", s.creds, "test-webhookSecret", params.PoolBalancerTypeRoundRobin, false) if err != nil { s.FailNow(fmt.Sprintf("failed to create enterprise: %s", err)) } @@ -131,8 +131,8 @@ func (s *ScaleSetsTestSuite) callback(old, newSet params.ScaleSet) error { s.Require().Equal(newSet.Flavor, "new-test-flavor") s.Require().Equal(old.GitHubRunnerGroup, "test-group") s.Require().Equal(newSet.GitHubRunnerGroup, "new-test-group") - s.Require().Equal(old.RunnerPrefix.Prefix, "garm") - s.Require().Equal(newSet.RunnerPrefix.Prefix, "test-prefix2") + s.Require().Equal(old.Prefix, "garm") + s.Require().Equal(newSet.Prefix, "test-prefix2") s.Require().Equal(old.Enabled, false) s.Require().Equal(newSet.Enabled, true) return nil diff --git a/database/sql/sql.go b/database/sql/sql.go index 8954953f..ea7a05e7 100644 --- a/database/sql/sql.go +++ b/database/sql/sql.go @@ -21,6 +21,7 @@ import ( "fmt" "log/slog" "net/url" + "regexp" "strings" "gorm.io/driver/mysql" @@ -470,6 +471,11 @@ func (s *sqlDatabase) ensureTemplates(migrateTemplates bool) error { return fmt.Errorf("failed to get linux template for gitea: %w", err) } + giteaWindowsData, err := templates.GetTemplateContent(commonParams.Windows, params.GiteaEndpointType) + if err != nil { + return fmt.Errorf("failed to get windows template for gitea: %w", err) + } + adminCtx := auth.GetAdminContext(s.ctx) githubWindowsParams := params.CreateTemplateParams{ @@ -478,8 +484,9 @@ func (s *sqlDatabase) ensureTemplates(migrateTemplates bool) error { OSType: commonParams.Windows, ForgeType: params.GithubEndpointType, Data: githubWindowsData, + IsSystem: true, } - githubWindowsSystemTemplate, err := s.createSystemTemplate(adminCtx, githubWindowsParams) + githubWindowsSystemTemplate, err := s.CreateTemplate(adminCtx, githubWindowsParams) if err != nil { return fmt.Errorf("failed to create github windows template: %w", err) } @@ -490,8 +497,9 @@ func (s *sqlDatabase) ensureTemplates(migrateTemplates bool) error { OSType: commonParams.Linux, ForgeType: params.GithubEndpointType, Data: githubLinuxData, + IsSystem: true, } - githubLinuxSystemTemplate, err := s.createSystemTemplate(adminCtx, githubLinuxParams) + githubLinuxSystemTemplate, err := s.CreateTemplate(adminCtx, githubLinuxParams) if err != nil { return fmt.Errorf("failed to create github linux template: %w", err) } @@ -502,12 +510,26 @@ func (s *sqlDatabase) ensureTemplates(migrateTemplates bool) error { OSType: commonParams.Linux, ForgeType: params.GiteaEndpointType, Data: giteaLinuxData, + IsSystem: true, } - giteaLinuxSystemTemplate, err := s.createSystemTemplate(adminCtx, giteaLinuxParams) + giteaLinuxSystemTemplate, err := s.CreateTemplate(adminCtx, giteaLinuxParams) if err != nil { return fmt.Errorf("failed to create gitea linux template: %w", err) } + giteaWindowsParams := params.CreateTemplateParams{ + Name: "gitea_windows", + Description: "Default Windows runner install template for Gitea", + OSType: commonParams.Windows, + ForgeType: params.GiteaEndpointType, + Data: giteaWindowsData, + IsSystem: true, + } + giteaWindowsSystemTemplate, err := s.CreateTemplate(adminCtx, giteaWindowsParams) + if err != nil { + return fmt.Errorf("failed to create gitea windows template: %w", err) + } + getTplID := func(forgeType params.EndpointType, osType commonParams.OSType) uint { var templateID uint switch forgeType { @@ -515,6 +537,8 @@ func (s *sqlDatabase) ensureTemplates(migrateTemplates bool) error { switch osType { case commonParams.Linux: templateID = giteaLinuxSystemTemplate.ID + case commonParams.Windows: + templateID = giteaWindowsSystemTemplate.ID default: return 0 } @@ -582,64 +606,142 @@ func (s *sqlDatabase) ensureTemplates(migrateTemplates bool) error { return nil } +// dropIndexIfExists drops an index if it exists +func (s *sqlDatabase) dropIndexIfExists(model interface{}, indexName string) { + if s.conn.Migrator().HasIndex(model, indexName) { + if err := s.conn.Migrator().DropIndex(model, indexName); err != nil { + slog.With(slog.Any("error", err)). + Error(fmt.Sprintf("failed to drop index %s", indexName)) + } + } +} + +// migratePoolNullIDs updates pools to set null IDs instead of zero UUIDs +func (s *sqlDatabase) migratePoolNullIDs() error { + if !s.conn.Migrator().HasTable(&Pool{}) { + return nil + } + + zeroUUID := "00000000-0000-0000-0000-000000000000" + updates := []struct { + column string + query string + }{ + {"repo_id", fmt.Sprintf("update pools set repo_id=NULL where repo_id='%s'", zeroUUID)}, + {"org_id", fmt.Sprintf("update pools set org_id=NULL where org_id='%s'", zeroUUID)}, + {"enterprise_id", fmt.Sprintf("update pools set enterprise_id=NULL where enterprise_id='%s'", zeroUUID)}, + } + + for _, update := range updates { + if err := s.conn.Exec(update.query).Error; err != nil { + return fmt.Errorf("error updating pools %s: %w", update.column, err) + } + } + return nil +} + +// migrateGithubEndpointType adds and initializes endpoint_type column +func (s *sqlDatabase) migrateGithubEndpointType() error { + if !s.conn.Migrator().HasTable(&GithubEndpoint{}) { + return nil + } + + if s.conn.Migrator().HasColumn(&GithubEndpoint{}, "endpoint_type") { + return nil + } + + if err := s.conn.Migrator().AutoMigrate(&GithubEndpoint{}); err != nil { + return fmt.Errorf("error migrating github endpoints: %w", err) + } + + if err := s.conn.Exec("update github_endpoints set endpoint_type = 'github' where endpoint_type is null").Error; err != nil { + return fmt.Errorf("error updating github endpoints: %w", err) + } + + return nil +} + +// migrateControllerInfo updates controller info with new fields +func (s *sqlDatabase) migrateControllerInfo(hasMinAgeField, hasAgentURL bool) error { + if hasMinAgeField && hasAgentURL { + return nil + } + + var controller ControllerInfo + if err := s.conn.First(&controller).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil + } + return fmt.Errorf("error fetching controller info: %w", err) + } + + if !hasMinAgeField { + controller.MinimumJobAgeBackoff = 30 + } + + if controller.GARMAgentReleasesURL == "" { + controller.GARMAgentReleasesURL = appdefaults.GARMAgentDefaultReleasesURL + } + + if !hasAgentURL && controller.WebhookBaseURL != "" { + matchWebhooksPath := regexp.MustCompile(`/webhooks(/)?$`) + controller.AgentURL = matchWebhooksPath.ReplaceAllLiteralString(controller.WebhookBaseURL, `/agent`) + } + + if err := s.conn.Save(&controller).Error; err != nil { + return fmt.Errorf("error updating controller info: %w", err) + } + + return nil +} + +// preMigrationChecks performs checks before running migrations +func (s *sqlDatabase) preMigrationChecks() (needsCredentialMigration, migrateTemplates, hasMinAgeField, hasAgentURL bool) { + // Check if credentials need migration + needsCredentialMigration = !s.conn.Migrator().HasTable(&GithubCredentials{}) || + !s.conn.Migrator().HasTable(&GithubEndpoint{}) + + // Check if templates need migration + migrateTemplates = !s.conn.Migrator().HasTable(&Template{}) + + // Check for controller info fields + if s.conn.Migrator().HasTable(&ControllerInfo{}) { + hasMinAgeField = s.conn.Migrator().HasColumn(&ControllerInfo{}, "minimum_job_age_backoff") + hasAgentURL = s.conn.Migrator().HasColumn(&ControllerInfo{}, "agent_url") + } + + return +} + func (s *sqlDatabase) migrateDB() error { - if s.conn.Migrator().HasIndex(&Organization{}, "idx_organizations_name") { - if err := s.conn.Migrator().DropIndex(&Organization{}, "idx_organizations_name"); err != nil { - slog.With(slog.Any("error", err)).Error("failed to drop index idx_organizations_name") - } - } - - if s.conn.Migrator().HasIndex(&Repository{}, "idx_owner") { - if err := s.conn.Migrator().DropIndex(&Repository{}, "idx_owner"); err != nil { - slog.With(slog.Any("error", err)).Error("failed to drop index idx_owner") - } - } + // Drop obsolete indexes + s.dropIndexIfExists(&Organization{}, "idx_organizations_name") + s.dropIndexIfExists(&Repository{}, "idx_owner") + // Run cascade migration if err := s.cascadeMigration(); err != nil { return fmt.Errorf("error running cascade migration: %w", err) } - if s.conn.Migrator().HasTable(&Pool{}) { - if err := s.conn.Exec("update pools set repo_id=NULL where repo_id='00000000-0000-0000-0000-000000000000'").Error; err != nil { - return fmt.Errorf("error updating pools %w", err) - } - - if err := s.conn.Exec("update pools set org_id=NULL where org_id='00000000-0000-0000-0000-000000000000'").Error; err != nil { - return fmt.Errorf("error updating pools: %w", err) - } - - if err := s.conn.Exec("update pools set enterprise_id=NULL where enterprise_id='00000000-0000-0000-0000-000000000000'").Error; err != nil { - return fmt.Errorf("error updating pools: %w", err) - } + // Migrate pool null IDs + if err := s.migratePoolNullIDs(); err != nil { + return err } + // Migrate workflows if err := s.migrateWorkflow(); err != nil { return fmt.Errorf("error migrating workflows: %w", err) } - if s.conn.Migrator().HasTable(&GithubEndpoint{}) { - if !s.conn.Migrator().HasColumn(&GithubEndpoint{}, "endpoint_type") { - if err := s.conn.Migrator().AutoMigrate(&GithubEndpoint{}); err != nil { - return fmt.Errorf("error migrating github endpoints: %w", err) - } - if err := s.conn.Exec("update github_endpoints set endpoint_type = 'github' where endpoint_type is null").Error; err != nil { - return fmt.Errorf("error updating github endpoints: %w", err) - } - } + // Migrate GitHub endpoint type + if err := s.migrateGithubEndpointType(); err != nil { + return err } - var needsCredentialMigration bool - if !s.conn.Migrator().HasTable(&GithubCredentials{}) || !s.conn.Migrator().HasTable(&GithubEndpoint{}) { - needsCredentialMigration = true - } - - var hasMinAgeField bool - if s.conn.Migrator().HasTable(&ControllerInfo{}) && s.conn.Migrator().HasColumn(&ControllerInfo{}, "minimum_job_age_backoff") { - hasMinAgeField = true - } - - migrateTemplates := !s.conn.Migrator().HasTable(&Template{}) + // Check if we need to migrate credentials and templates + needsCredentialMigration, migrateTemplates, hasMinAgeField, hasAgentURL := s.preMigrationChecks() + // Run main schema migration s.conn.Exec("PRAGMA foreign_keys = OFF") if err := s.conn.AutoMigrate( &User{}, @@ -672,30 +774,24 @@ func (s *sqlDatabase) migrateDB() error { s.conn.Exec("PRAGMA foreign_keys = ON") - if !hasMinAgeField { - var controller ControllerInfo - if err := s.conn.First(&controller).Error; err != nil { - if !errors.Is(err, gorm.ErrRecordNotFound) { - return fmt.Errorf("error updating controller info: %w", err) - } - } else { - controller.MinimumJobAgeBackoff = 30 - if err := s.conn.Save(&controller).Error; err != nil { - return fmt.Errorf("error updating controller info: %w", err) - } - } + // Migrate controller info if needed + if err := s.migrateControllerInfo(hasMinAgeField, hasAgentURL); err != nil { + return err } + // Ensure github endpoint exists if err := s.ensureGithubEndpoint(); err != nil { return fmt.Errorf("error ensuring github endpoint: %w", err) } + // Migrate credentials if needed if needsCredentialMigration { if err := s.migrateCredentialsToDB(); err != nil { return fmt.Errorf("error migrating credentials: %w", err) } } + // Ensure templates exist if err := s.ensureTemplates(migrateTemplates); err != nil { return fmt.Errorf("failed to create default templates: %w", err) } diff --git a/database/sql/templates.go b/database/sql/templates.go index 3414185b..7d58a70a 100644 --- a/database/sql/templates.go +++ b/database/sql/templates.go @@ -19,6 +19,7 @@ import ( "errors" "fmt" + "github.com/google/uuid" "gorm.io/gorm" runnerErrors "github.com/cloudbase/garm-provider-common/errors" @@ -142,70 +143,40 @@ func (s *sqlDatabase) GetTemplateByName(ctx context.Context, name string) (param return ret, nil } -func (s *sqlDatabase) createSystemTemplate(ctx context.Context, param params.CreateTemplateParams) (template params.Template, err error) { - if !auth.IsAdmin(ctx) { +func (s *sqlDatabase) CreateTemplate(ctx context.Context, param params.CreateTemplateParams) (template params.Template, err error) { + if param.IsSystem && !auth.IsAdmin(ctx) { return params.Template{}, runnerErrors.ErrUnauthorized } - defer func() { - if err == nil { - s.sendNotify(common.TemplateEntityType, common.CreateOperation, template) + var userID *uuid.UUID + if !param.IsSystem { + parsedID, err := getUIDFromContext(ctx) + if err != nil { + return params.Template{}, fmt.Errorf("error creating template: %w", err) } - }() - sealed, err := s.marshalAndSeal(param.Data) - if err != nil { - return params.Template{}, fmt.Errorf("failed to seal data: %w", err) - } - tpl := Template{ - UserID: nil, - Name: param.Name, - Description: param.Description, - OSType: param.OSType, - Data: sealed, - ForgeType: param.ForgeType, - } - - if err := s.conn.Create(&tpl).Error; err != nil { - if errors.Is(err, gorm.ErrDuplicatedKey) { - return params.Template{}, runnerErrors.NewConflictError("a template name already exists with the specified name") - } - return params.Template{}, fmt.Errorf("error creating template: %w", err) - } - - template, err = s.sqlToParamTemplate(tpl) - if err != nil { - return params.Template{}, fmt.Errorf("failed to convert template: %w", err) - } - - return template, nil -} - -func (s *sqlDatabase) CreateTemplate(ctx context.Context, param params.CreateTemplateParams) (template params.Template, err error) { - userID, err := getUIDFromContext(ctx) - if err != nil { - return params.Template{}, fmt.Errorf("error creating template: %w", err) + userID = &parsedID } defer func() { if err == nil { s.sendNotify(common.TemplateEntityType, common.CreateOperation, template) } }() - - sealed, err := s.marshalAndSeal(param.Data) - if err != nil { - return params.Template{}, fmt.Errorf("failed to seal data: %w", err) - } - tpl := Template{ - UserID: &userID, - Name: param.Name, - Description: param.Description, - OSType: param.OSType, - Data: sealed, - ForgeType: param.ForgeType, - } if err := param.Validate(); err != nil { return params.Template{}, fmt.Errorf("failed to validate create params: %w", err) } + sealed, err := s.marshalAndSeal(param.Data) + if err != nil { + return params.Template{}, fmt.Errorf("failed to seal data: %w", err) + } + tpl := Template{ + UserID: userID, + Name: param.Name, + Description: param.Description, + OSType: param.OSType, + Data: sealed, + ForgeType: param.ForgeType, + } + if err := s.conn.Create(&tpl).Error; err != nil { if errors.Is(err, gorm.ErrDuplicatedKey) { return params.Template{}, runnerErrors.NewConflictError("a template name already exists with the specified name") diff --git a/database/sql/templates_test.go b/database/sql/templates_test.go index 1acf6c12..a8a12a43 100644 --- a/database/sql/templates_test.go +++ b/database/sql/templates_test.go @@ -192,7 +192,7 @@ func (s *TemplatesTestSuite) TestListTemplatesWithForgeTypeFilter() { } func (s *TemplatesTestSuite) TestListTemplatesWithNameFilter() { - partialName := "system" + partialName := params.SystemUser templates, err := s.Store.ListTemplates(s.adminCtx, nil, nil, &partialName) s.Require().Nil(err) s.Require().Len(templates, 1) @@ -201,7 +201,7 @@ func (s *TemplatesTestSuite) TestListTemplatesWithNameFilter() { func (s *TemplatesTestSuite) TestListTemplatesDBFetchErr() { s.Fixtures.SQLMock. - ExpectQuery(regexp.QuoteMeta("SELECT `templates`.`id`,`templates`.`created_at`,`templates`.`updated_at`,`templates`.`deleted_at`,`templates`.`name`,`templates`.`user_id`,`templates`.`description`,`templates`.`os_type`,`templates`.`forge_type` FROM `templates` WHERE `templates`.`deleted_at` IS NULL")). + ExpectQuery(regexp.QuoteMeta("SELECT `templates`.`id`,`templates`.`created_at`,`templates`.`updated_at`,`templates`.`deleted_at`,`templates`.`name`,`templates`.`user_id`,`templates`.`description`,`templates`.`os_type`,`templates`.`forge_type`,`templates`.`agent_mode` FROM `templates` WHERE `templates`.`deleted_at` IS NULL")). WillReturnError(fmt.Errorf("mocked fetching templates error")) _, err := s.StoreSQLMocked.ListTemplates(s.adminCtx, nil, nil, nil) @@ -320,12 +320,13 @@ func (s *TemplatesTestSuite) TestCreateTemplateSystemAndUserConflict() { // Now try to create a system template with the same name using direct access to createSystemTemplate // This should succeed since the unique constraint is on (name, user_id) and system templates have user_id = NULL sqlDB := s.Store.(*sqlDatabase) - _, err = sqlDB.createSystemTemplate(s.adminCtx, params.CreateTemplateParams{ + _, err = sqlDB.CreateTemplate(s.adminCtx, params.CreateTemplateParams{ Name: templateName, Description: "System template with same name", OSType: commonParams.Windows, ForgeType: params.GithubEndpointType, Data: []byte(`{"provider": "azure", "image": "windows-2022"}`), + IsSystem: true, }) // This should succeed because system templates (user_id = NULL) and user templates diff --git a/database/sql/util.go b/database/sql/util.go index 5f8d4e2b..3220d844 100644 --- a/database/sql/util.go +++ b/database/sql/util.go @@ -19,6 +19,7 @@ import ( "encoding/json" "errors" "fmt" + "log/slog" "github.com/google/uuid" "gorm.io/datatypes" @@ -73,6 +74,16 @@ func (s *sqlDatabase) sqlToParamsInstance(instance Instance) (params.Instance, e JitConfiguration: jitConfig, GitHubRunnerGroup: instance.GitHubRunnerGroup, AditionalLabels: labels, + Heartbeat: instance.Heartbeat, + } + + if len(instance.Capabilities) > 0 { + var caps params.AgentCapabilities + if err := json.Unmarshal(instance.Capabilities, &caps); err == nil { + ret.Capabilities = caps + } else { + slog.ErrorContext(s.ctx, "failed to unmarshal capabilities", "instance_name", instance.Name, "error", err) + } } if instance.ScaleSetFkID != nil { @@ -150,6 +161,7 @@ func (s *sqlDatabase) sqlToCommonOrganization(org Organization, detailed bool) ( Endpoint: endpoint, CreatedAt: org.CreatedAt, UpdatedAt: org.UpdatedAt, + AgentMode: org.AgentMode, } var forgeCreds params.ForgeCredentials @@ -222,6 +234,7 @@ func (s *sqlDatabase) sqlToCommonEnterprise(enterprise Enterprise, detailed bool CreatedAt: enterprise.CreatedAt, UpdatedAt: enterprise.UpdatedAt, Endpoint: endpoint, + AgentMode: enterprise.AgentMode, } if enterprise.CredentialsID != nil { @@ -285,6 +298,7 @@ func (s *sqlDatabase) sqlToCommonPool(pool Pool) (params.Pool, error) { Priority: pool.Priority, CreatedAt: pool.CreatedAt, UpdatedAt: pool.UpdatedAt, + EnableShell: pool.EnableShell, } if pool.TemplateID != nil && *pool.TemplateID != 0 { @@ -361,6 +375,7 @@ func (s *sqlDatabase) sqlToCommonScaleSet(scaleSet ScaleSet) (params.ScaleSet, e ExtendedState: scaleSet.ExtendedState, LastMessageID: scaleSet.LastMessageID, DesiredRunnerCount: scaleSet.DesiredRunnerCount, + EnableShell: scaleSet.EnableShell, } if scaleSet.TemplateID != nil && *scaleSet.TemplateID != 0 { @@ -435,6 +450,7 @@ func (s *sqlDatabase) sqlToCommonRepository(repo Repository, detailed bool) (par CreatedAt: repo.CreatedAt, UpdatedAt: repo.UpdatedAt, Endpoint: endpoint, + AgentMode: repo.AgentMode, } if repo.CredentialsID != nil && repo.GiteaCredentialsID != nil { @@ -531,6 +547,10 @@ func (s *sqlDatabase) updatePool(tx *gorm.DB, pool Pool, param params.UpdatePool pool.Flavor = param.Flavor } + if param.EnableShell != nil { + pool.EnableShell = *param.EnableShell + } + if param.Image != "" { pool.Image = param.Image } @@ -737,23 +757,35 @@ func (s *sqlDatabase) addRepositoryEvent(ctx context.Context, repoID string, eve Message: statusMessage, EventType: event, EventLevel: eventLevel, + RepoID: repo.ID, } - if err := s.conn.Model(&repo).Association("Events").Append(&msg); err != nil { + // Use Create instead of Association.Append to avoid loading all existing events + if err := s.conn.Create(&msg).Error; err != nil { return fmt.Errorf("error adding status message: %w", err) } if maxEvents > 0 { - var latestEvents []RepositoryEvent - q := s.conn.Model(&RepositoryEvent{}). - Limit(maxEvents).Order("id desc"). - Where("repo_id = ?", repo.ID).Find(&latestEvents) - if q.Error != nil { - return fmt.Errorf("error fetching latest events: %w", q.Error) + var count int64 + if err := s.conn.Model(&RepositoryEvent{}).Where("repo_id = ?", repo.ID).Count(&count).Error; err != nil { + return fmt.Errorf("error counting events: %w", err) } - if len(latestEvents) == maxEvents { - lastInList := latestEvents[len(latestEvents)-1] - if err := s.conn.Where("repo_id = ? and id < ?", repo.ID, lastInList.ID).Unscoped().Delete(&RepositoryEvent{}).Error; err != nil { + + if count > int64(maxEvents) { + // Get the ID of the Nth most recent event + var cutoffEvent RepositoryEvent + if err := s.conn.Model(&RepositoryEvent{}). + Select("id"). + Where("repo_id = ?", repo.ID). + Order("id desc"). + Offset(maxEvents - 1). + Limit(1). + First(&cutoffEvent).Error; err != nil { + return fmt.Errorf("error finding cutoff event: %w", err) + } + + // Delete all events older than the cutoff + if err := s.conn.Where("repo_id = ? and id < ?", repo.ID, cutoffEvent.ID).Unscoped().Delete(&RepositoryEvent{}).Error; err != nil { return fmt.Errorf("error deleting old events: %w", err) } } @@ -771,23 +803,35 @@ func (s *sqlDatabase) addOrgEvent(ctx context.Context, orgID string, event param Message: statusMessage, EventType: event, EventLevel: eventLevel, + OrgID: org.ID, } - if err := s.conn.Model(&org).Association("Events").Append(&msg); err != nil { + // Use Create instead of Association.Append to avoid loading all existing events + if err := s.conn.Create(&msg).Error; err != nil { return fmt.Errorf("error adding status message: %w", err) } if maxEvents > 0 { - var latestEvents []OrganizationEvent - q := s.conn.Model(&OrganizationEvent{}). - Limit(maxEvents).Order("id desc"). - Where("org_id = ?", org.ID).Find(&latestEvents) - if q.Error != nil { - return fmt.Errorf("error fetching latest events: %w", q.Error) + var count int64 + if err := s.conn.Model(&OrganizationEvent{}).Where("org_id = ?", org.ID).Count(&count).Error; err != nil { + return fmt.Errorf("error counting events: %w", err) } - if len(latestEvents) == maxEvents { - lastInList := latestEvents[len(latestEvents)-1] - if err := s.conn.Where("org_id = ? and id < ?", org.ID, lastInList.ID).Unscoped().Delete(&OrganizationEvent{}).Error; err != nil { + + if count > int64(maxEvents) { + // Get the ID of the Nth most recent event + var cutoffEvent OrganizationEvent + if err := s.conn.Model(&OrganizationEvent{}). + Select("id"). + Where("org_id = ?", org.ID). + Order("id desc"). + Offset(maxEvents - 1). + Limit(1). + First(&cutoffEvent).Error; err != nil { + return fmt.Errorf("error finding cutoff event: %w", err) + } + + // Delete all events older than the cutoff + if err := s.conn.Where("org_id = ? and id < ?", org.ID, cutoffEvent.ID).Unscoped().Delete(&OrganizationEvent{}).Error; err != nil { return fmt.Errorf("error deleting old events: %w", err) } } @@ -802,26 +846,38 @@ func (s *sqlDatabase) addEnterpriseEvent(ctx context.Context, entID string, even } msg := EnterpriseEvent{ - Message: statusMessage, - EventType: event, - EventLevel: eventLevel, + Message: statusMessage, + EventType: event, + EventLevel: eventLevel, + EnterpriseID: ent.ID, } - if err := s.conn.Model(&ent).Association("Events").Append(&msg); err != nil { + // Use Create instead of Association.Append to avoid loading all existing events + if err := s.conn.Create(&msg).Error; err != nil { return fmt.Errorf("error adding status message: %w", err) } if maxEvents > 0 { - var latestEvents []EnterpriseEvent - q := s.conn.Model(&EnterpriseEvent{}). - Limit(maxEvents).Order("id desc"). - Where("enterprise_id = ?", ent.ID).Find(&latestEvents) - if q.Error != nil { - return fmt.Errorf("error fetching latest events: %w", q.Error) + var count int64 + if err := s.conn.Model(&EnterpriseEvent{}).Where("enterprise_id = ?", ent.ID).Count(&count).Error; err != nil { + return fmt.Errorf("error counting events: %w", err) } - if len(latestEvents) == maxEvents { - lastInList := latestEvents[len(latestEvents)-1] - if err := s.conn.Where("enterprise_id = ? and id < ?", ent.ID, lastInList.ID).Unscoped().Delete(&EnterpriseEvent{}).Error; err != nil { + + if count > int64(maxEvents) { + // Get the ID of the Nth most recent event + var cutoffEvent EnterpriseEvent + if err := s.conn.Model(&EnterpriseEvent{}). + Select("id"). + Where("enterprise_id = ?", ent.ID). + Order("id desc"). + Offset(maxEvents - 1). + Limit(1). + First(&cutoffEvent).Error; err != nil { + return fmt.Errorf("error finding cutoff event: %w", err) + } + + // Delete all events older than the cutoff + if err := s.conn.Where("enterprise_id = ? and id < ?", ent.ID, cutoffEvent.ID).Unscoped().Delete(&EnterpriseEvent{}).Error; err != nil { return fmt.Errorf("error deleting old events: %w", err) } } @@ -996,7 +1052,7 @@ func (s *sqlDatabase) sqlToParamTemplate(template Template) (params.Template, er } } - owner := "system" + owner := params.SystemUser if template.UserID != nil { owner = template.User.Username } diff --git a/database/watcher/filters.go b/database/watcher/filters.go index 6b920ec3..fbfab544 100644 --- a/database/watcher/filters.go +++ b/database/watcher/filters.go @@ -333,3 +333,17 @@ func WithInstanceStatusFilter(statuses ...commonParams.InstanceStatus) dbCommon. return false } } + +func WithInstanceFilter(instance params.Instance) dbCommon.PayloadFilterFunc { + return func(payload dbCommon.ChangePayload) bool { + if payload.EntityType != dbCommon.InstanceEntityType { + return false + } + payloadInstance, ok := payload.Payload.(params.Instance) + if !ok { + return false + } + + return payloadInstance.Name == instance.Name + } +} diff --git a/database/watcher/watcher_store_test.go b/database/watcher/watcher_store_test.go index 2315078d..1fd085d6 100644 --- a/database/watcher/watcher_store_test.go +++ b/database/watcher/watcher_store_test.go @@ -169,7 +169,7 @@ func (s *WatcherStoreTestSuite) TestInstanceWatcher() { creds := garmTesting.CreateTestGithubCredentials(s.ctx, "test-creds", s.store, s.T(), ep) s.T().Cleanup(func() { s.store.DeleteGithubCredentials(s.ctx, creds.ID) }) - repo, err := s.store.CreateRepository(s.ctx, "test-owner", "test-repo", creds, "test-secret", params.PoolBalancerTypeRoundRobin) + repo, err := s.store.CreateRepository(s.ctx, "test-owner", "test-repo", creds, "test-secret", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotEmpty(repo.ID) s.T().Cleanup(func() { s.store.DeleteRepository(s.ctx, repo.ID) }) @@ -193,10 +193,11 @@ func (s *WatcherStoreTestSuite) TestInstanceWatcher() { s.T().Cleanup(func() { s.store.DeleteEntityPool(s.ctx, entity, pool.ID) }) createInstanceParams := params.CreateInstanceParams{ - Name: "test-instance", - OSType: commonParams.Linux, - OSArch: commonParams.Amd64, - Status: commonParams.InstanceCreating, + Name: "test-instance", + OSType: commonParams.Linux, + OSArch: commonParams.Amd64, + Status: commonParams.InstanceCreating, + RunnerStatus: params.RunnerIdle, } instance, err := s.store.CreateInstance(s.ctx, pool.ID, createInstanceParams) s.Require().NoError(err) @@ -274,7 +275,7 @@ func (s *WatcherStoreTestSuite) TestScaleSetInstanceWatcher() { creds := garmTesting.CreateTestGithubCredentials(s.ctx, "test-creds", s.store, s.T(), ep) s.T().Cleanup(func() { s.store.DeleteGithubCredentials(s.ctx, creds.ID) }) - repo, err := s.store.CreateRepository(s.ctx, "test-owner", "test-repo", creds, "test-secret", params.PoolBalancerTypeRoundRobin) + repo, err := s.store.CreateRepository(s.ctx, "test-owner", "test-repo", creds, "test-secret", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotEmpty(repo.ID) s.T().Cleanup(func() { s.store.DeleteRepository(s.ctx, repo.ID) }) @@ -299,10 +300,11 @@ func (s *WatcherStoreTestSuite) TestScaleSetInstanceWatcher() { s.T().Cleanup(func() { s.store.DeleteScaleSetByID(s.ctx, scaleSet.ID) }) createInstanceParams := params.CreateInstanceParams{ - Name: "test-instance", - OSType: commonParams.Linux, - OSArch: commonParams.Amd64, - Status: commonParams.InstanceCreating, + Name: "test-instance", + OSType: commonParams.Linux, + OSArch: commonParams.Amd64, + Status: commonParams.InstanceCreating, + RunnerStatus: params.RunnerIdle, } instance, err := s.store.CreateScaleSetInstance(s.ctx, scaleSet.ID, createInstanceParams) s.Require().NoError(err) @@ -384,7 +386,7 @@ func (s *WatcherStoreTestSuite) TestPoolWatcher() { } }) - repo, err := s.store.CreateRepository(s.ctx, "test-owner", "test-repo", creds, "test-secret", params.PoolBalancerTypeRoundRobin) + repo, err := s.store.CreateRepository(s.ctx, "test-owner", "test-repo", creds, "test-secret", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotEmpty(repo.ID) s.T().Cleanup(func() { s.store.DeleteRepository(s.ctx, repo.ID) }) @@ -506,7 +508,7 @@ func (s *WatcherStoreTestSuite) TestScaleSetWatcher() { } }) - repo, err := s.store.CreateRepository(s.ctx, "test-owner", "test-repo", creds, "test-secret", params.PoolBalancerTypeRoundRobin) + repo, err := s.store.CreateRepository(s.ctx, "test-owner", "test-repo", creds, "test-secret", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotEmpty(repo.ID) s.T().Cleanup(func() { s.store.DeleteRepository(s.ctx, repo.ID) }) @@ -667,7 +669,7 @@ func (s *WatcherStoreTestSuite) TestEnterpriseWatcher() { creds := garmTesting.CreateTestGithubCredentials(s.ctx, "test-creds", s.store, s.T(), ep) s.T().Cleanup(func() { s.store.DeleteGithubCredentials(s.ctx, creds.ID) }) - ent, err := s.store.CreateEnterprise(s.ctx, "test-enterprise", creds, "test-secret", params.PoolBalancerTypeRoundRobin) + ent, err := s.store.CreateEnterprise(s.ctx, "test-enterprise", creds, "test-secret", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotEmpty(ent.ID) @@ -734,7 +736,7 @@ func (s *WatcherStoreTestSuite) TestOrgWatcher() { creds := garmTesting.CreateTestGithubCredentials(s.ctx, "test-creds", s.store, s.T(), ep) s.T().Cleanup(func() { s.store.DeleteGithubCredentials(s.ctx, creds.ID) }) - org, err := s.store.CreateOrganization(s.ctx, "test-org", creds, "test-secret", params.PoolBalancerTypeRoundRobin) + org, err := s.store.CreateOrganization(s.ctx, "test-org", creds, "test-secret", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotEmpty(org.ID) @@ -801,7 +803,7 @@ func (s *WatcherStoreTestSuite) TestRepoWatcher() { creds := garmTesting.CreateTestGithubCredentials(s.ctx, "test-creds", s.store, s.T(), ep) s.T().Cleanup(func() { s.store.DeleteGithubCredentials(s.ctx, creds.ID) }) - repo, err := s.store.CreateRepository(s.ctx, "test-owner", "test-repo", creds, "test-secret", params.PoolBalancerTypeRoundRobin) + repo, err := s.store.CreateRepository(s.ctx, "test-owner", "test-repo", creds, "test-secret", params.PoolBalancerTypeRoundRobin, false) s.Require().NoError(err) s.Require().NotEmpty(repo.ID) diff --git a/go.mod b/go.mod index 20356f8e..9311549d 100644 --- a/go.mod +++ b/go.mod @@ -31,6 +31,7 @@ require ( golang.org/x/mod v0.31.0 golang.org/x/oauth2 v0.34.0 golang.org/x/sync v0.19.0 + golang.org/x/term v0.38.0 gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0 gopkg.in/natefinch/lumberjack.v2 v2.2.1 gorm.io/datatypes v1.2.7 @@ -101,7 +102,6 @@ require ( go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/net v0.48.0 // indirect golang.org/x/sys v0.39.0 // indirect - golang.org/x/term v0.38.0 // indirect golang.org/x/text v0.32.0 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/internal/templates/templates.go b/internal/templates/templates.go index 70ff7326..3962117b 100644 --- a/internal/templates/templates.go +++ b/internal/templates/templates.go @@ -26,15 +26,11 @@ type WrapperContext struct { func GetTemplateContent(osType commonParams.OSType, forge params.EndpointType) ([]byte, error) { switch forge { - case params.GithubEndpointType: + case params.GithubEndpointType, params.GiteaEndpointType: switch osType { case commonParams.Linux, commonParams.Windows: default: - return nil, runnerErrors.NewNotFoundError("could not find template for forge github and OS type: %q", osType) - } - case params.GiteaEndpointType: - if osType != commonParams.Linux { - return nil, runnerErrors.NewNotFoundError("could not find template for gitea with OS type: %q", osType) + return nil, runnerErrors.NewNotFoundError("could not find template for forge %s and OS type: %q", forge, osType) } default: return nil, runnerErrors.NewNotFoundError("could not find template for forge type: %q", forge) diff --git a/internal/templates/userdata/gitea_linux_userdata.tmpl b/internal/templates/userdata/gitea_linux_userdata.tmpl index 4469e90f..93aa5bdc 100644 --- a/internal/templates/userdata/gitea_linux_userdata.tmpl +++ b/internal/templates/userdata/gitea_linux_userdata.tmpl @@ -55,6 +55,80 @@ function fail() { exit 1 } +INSTANCE_METADATA=$(curl \ + --retry 5 \ + --retry-delay 5 \ + --retry-connrefused \ + --fail -s \ + -H 'Accept: application/json' \ + -H "Authorization: Bearer ${BEARER_TOKEN}" \ + "$METADATA_URL/runner-metadata" 2>&1) || fail "failed to get instance metadata: $INSTANCE_METADATA" + +AGENT_MODE=$(echo "$INSTANCE_METADATA" | jq -r '.agent_mode // empty') +if [ "$AGENT_MODE" == "true" ]; then + sendStatus "Agent mode is enabled; setting up agent" + DOWNLOAD_URL=$(echo "$INSTANCE_METADATA" | jq -r '.agent_tools.download_url // empty') + if [ -z "$DOWNLOAD_URL" ]; then + fail "agent mode is enabled, but no agent tools found in metadata" + fi + AGENT_URL=$(echo "$INSTANCE_METADATA" | jq -r '.metadata_access.agent_url // empty') + if [ -z "$AGENT_URL" ]; then + fail "agent mode is enabled, but agent_url was not found in metadata" + fi + AGENT_TOKEN=$(echo "$INSTANCE_METADATA" | jq -r '.agent_token // empty') + if [ -z "$AGENT_TOKEN" ]; then + fail "agent mode is enabled, but agent_token was not found in metadata" + fi + AGENT_SHELL=$(echo "$INSTANCE_METADATA" | jq -r '.agent_shell_enabled // false') + sendStatus "Downloading agent from $DOWNLOAD_URL" + sudo curl --retry 5 \ + --retry-delay 5 \ + --retry-connrefused \ + --fail -L \ + -H "Authorization: Bearer ${BEARER_TOKEN}" \ + -o /usr/local/bin/garm-agent "$DOWNLOAD_URL" || fail "failed to download garm-agent" + sudo chmod +x /usr/local/bin/garm-agent || fail "failed to make garm-agent executable" + sudo mkdir -p /var/log/garm-agent || fail "failed to create /var/log/garm-agent" + sudo chown {{ .RunnerUsername }}:{{ .RunnerUsername }} /var/log/garm-agent || fail "failed to chown /var/log/garm-agent" + sudo mkdir -p /etc/garm-agent || fail "failed to create /etc/garm" + sudo chown {{ .RunnerUsername }}:{{ .RunnerUsername }} /etc/garm-agent || fail "failed to change owner on /etc/garm-agent" + + sendStatus "Creating config and systemd unit" + cat > /etc/garm-agent/garm-agent.toml << EOF +server_url = "$AGENT_URL" +log_file = "/var/log/garm-agent/garm-agent.log" +work_dir = "$RUN_HOME" +enable_shell = $AGENT_SHELL +token = "$AGENT_TOKEN" +runner_cmdline = ["$RUN_HOME/act_runner", "daemon", "--once"] +state_db_path = "/etc/garm-agent/agent-state.db" +EOF + + cat > /tmp/garm-agent.service << EOF +[Unit] +Description=GARM agent +After=multi-user.target + +[Service] +Type=simple +ExecStart=/usr/local/bin/garm-agent daemon --config /etc/garm-agent/garm-agent.toml +ExecReload=/bin/kill -HUP $MAINPID +Restart=always +RestartSec=5s +User={{ .RunnerUsername }} +Environment=TERM=xterm-256color +Environment=LANG=en_US.UTF-8 + +[Install] +WantedBy=multi-user.target +EOF + + sudo mv /tmp/garm-agent.service /etc/systemd/system/garm-agent.service || fail "failed to create /etc/systemd/system/garm-agent.service" + sudo chown root:root /etc/systemd/system/garm-agent.service || fail "failed to change owner on /etc/systemd/system/garm-agent.service" + sendStatus "Reloading systemd unit" + sudo systemctl daemon-reload || fail "failed to reload systemd" +fi + function downloadAndExtractRunner() { sendStatus "downloading tools from {{ .DownloadURL }}" mkdir -p "$RUN_HOME" || fail "failed to create actions-runner folder" @@ -124,7 +198,12 @@ sudo systemctl daemon-reload || fail "failed to reload systemd" AGENT_ID="" sendStatus "starting service" -sudo systemctl enable --now $SVC_NAME +if [ "$AGENT_MODE" == "true" ]; then + sendStatus "Enabling garm-agent service" + sudo systemctl enable --now garm-agent +else + sudo systemctl enable --now $SVC_NAME +fi set +e AGENT_ID=$(grep '"id"' "$RUN_HOME"/.runner | tr -d -c 0-9) diff --git a/internal/templates/userdata/gitea_windows_userdata.tmpl b/internal/templates/userdata/gitea_windows_userdata.tmpl new file mode 100644 index 00000000..61454b30 --- /dev/null +++ b/internal/templates/userdata/gitea_windows_userdata.tmpl @@ -0,0 +1,596 @@ +#ps1_sysnative +Param( + [Parameter(Mandatory=$false)] + [string]$Token="{{.CallbackToken}}" +) + +$ErrorActionPreference="Stop" + +function Start-ExecuteWithRetry { + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [ScriptBlock]$ScriptBlock, + [int]$MaxRetryCount=10, + [int]$RetryInterval=3, + [string]$RetryMessage, + [array]$ArgumentList=@() + ) + PROCESS { + $currentErrorActionPreference = $ErrorActionPreference + $ErrorActionPreference = "Continue" + $retryCount = 0 + while ($true) { + try { + $res = Invoke-Command -ScriptBlock $ScriptBlock -ArgumentList $ArgumentList + $ErrorActionPreference = $currentErrorActionPreference + return $res + } catch [System.Exception] { + $retryCount++ + + if ($_.Exception -is [System.Net.WebException]) { + $webResponse = $_.Exception.Response + # Skip retry on Error: 4XX (e.g. 401 Unauthorized, 404 Not Found etc.) + if ($webResponse -and $webResponse.StatusCode -ge 400 -and $webResponse.StatusCode -lt 500) { + # Skip retry on 4xx errors + Write-Output "Encountered non-retryable error (4xx): $($_.Exception.Message)" + $ErrorActionPreference = $currentErrorActionPreference + throw + } + } + + if ($retryCount -gt $MaxRetryCount) { + $ErrorActionPreference = $currentErrorActionPreference + throw + } else { + if ($RetryMessage) { + Write-Output $RetryMessage + } elseif ($_) { + Write-Output $_ + } + Start-Sleep -Seconds $RetryInterval + } + } + } + } +} + +function Get-RandomString { + [CmdletBinding()] + Param( + [int]$Length=13 + ) + PROCESS { + if($Length -lt 6) { + $Length = 6 + } + $special = @(44, 45, 46, 64) + $numeric = 48..57 + $upper = 65..90 + $lower = 97..122 + + $passwd = [System.Collections.Generic.List[object]](New-object "System.Collections.Generic.List[object]") + for($i=0; $i -lt $Length-4; $i++){ + $c = get-random -input ($special + $numeric + $upper + $lower) + $passwd.Add([char]$c) + } + + $passwd.Add([char](get-random -input $numeric)) + $passwd.Add([char](get-random -input $special)) + $passwd.Add([char](get-random -input $upper)) + $passwd.Add([char](get-random -input $lower)) + + $Random = New-Object Random + return [string]::join("",($passwd|Sort-Object {$Random.Next()})) + } +} + +Add-Type -TypeDefinition @" +using System; +using System.Runtime.InteropServices; +using System.Text; + +public class GrantSysPrivileges +{ + [StructLayout(LayoutKind.Sequential)] + public struct LSA_UNICODE_STRING + { + public ushort Length; + public ushort MaximumLength; + public IntPtr Buffer; + } + + [StructLayout(LayoutKind.Sequential)] + public struct LSA_OBJECT_ATTRIBUTES + { + public int Length; + public IntPtr RootDirectory; + public IntPtr ObjectName; + public uint Attributes; + public IntPtr SecurityDescriptor; + public IntPtr SecurityQualityOfService; + } + + [DllImport("advapi32.dll", SetLastError=true)] + public static extern uint LsaOpenPolicy( + ref LSA_UNICODE_STRING SystemName, + ref LSA_OBJECT_ATTRIBUTES ObjectAttributes, + uint DesiredAccess, + out IntPtr PolicyHandle + ); + + [DllImport("advapi32.dll", SetLastError=true)] + public static extern uint LsaAddAccountRights( + IntPtr PolicyHandle, + IntPtr AccountSid, + LSA_UNICODE_STRING[] UserRights, + uint CountOfRights + ); + + [DllImport("advapi32.dll")] + public static extern uint LsaClose(IntPtr PolicyHandle); + + [DllImport("advapi32.dll")] + public static extern uint LsaNtStatusToWinError(uint status); + + public const uint POLICY_ALL_ACCESS = 0x00F0FFF; + + public static uint GrantPrivilege(byte[] sid, string[] rights) + { + LSA_OBJECT_ATTRIBUTES loa = new LSA_OBJECT_ATTRIBUTES(); + LSA_UNICODE_STRING systemName = new LSA_UNICODE_STRING(); + + IntPtr policyHandle; + uint result = LsaOpenPolicy(ref systemName, ref loa, POLICY_ALL_ACCESS, out policyHandle); + if (result != 0) + { + return LsaNtStatusToWinError(result); + } + + LSA_UNICODE_STRING[] userRights = new LSA_UNICODE_STRING[rights.Length]; + for (int i = 0; i < rights.Length; i++) + { + byte[] bytes = Encoding.Unicode.GetBytes(rights[i]); + IntPtr ptr = Marshal.AllocHGlobal(bytes.Length); + Marshal.Copy(bytes, 0, ptr, bytes.Length); + + userRights[i].Buffer = ptr; + userRights[i].Length = (ushort)bytes.Length; + userRights[i].MaximumLength = (ushort)(bytes.Length); + } + + IntPtr sidPtr = Marshal.AllocHGlobal(sid.Length); + Marshal.Copy(sid, 0, sidPtr, sid.Length); + + result = LsaAddAccountRights(policyHandle, sidPtr, userRights, (uint)rights.Length); + LsaClose(policyHandle); + + foreach (var right in userRights) + { + Marshal.FreeHGlobal(right.Buffer); + } + Marshal.FreeHGlobal(sidPtr); + + return LsaNtStatusToWinError(result); + } +} +"@ -Language CSharp + +function Invoke-FastWebRequest { + [CmdletBinding()] + Param( + [Parameter(Mandatory=$True,ValueFromPipeline=$true,Position=0)] + [System.Uri]$Uri, + [Parameter(Position=1)] + [string]$OutFile, + [Hashtable]$Headers=@{}, + [switch]$SkipIntegrityCheck=$false + ) + PROCESS + { + if(!([System.Management.Automation.PSTypeName]'System.Net.Http.HttpClient').Type) + { + $assembly = [System.Reflection.Assembly]::LoadWithPartialName("System.Net.Http") + } + + if(!$OutFile) { + $OutFile = $Uri.PathAndQuery.Substring($Uri.PathAndQuery.LastIndexOf("/") + 1) + if(!$OutFile) { + throw "The ""OutFile"" parameter needs to be specified" + } + } + + $fragment = $Uri.Fragment.Trim('#') + if ($fragment) { + $details = $fragment.Split("=") + $algorithm = $details[0] + $hash = $details[1] + } + + if (!$SkipIntegrityCheck -and $fragment -and (Test-Path $OutFile)) { + try { + return (Test-FileIntegrity -File $OutFile -Algorithm $algorithm -ExpectedHash $hash) + } catch { + Remove-Item $OutFile + } + } + + $client = new-object System.Net.Http.HttpClient + foreach ($k in $Headers.Keys){ + $client.DefaultRequestHeaders.Add($k, $Headers[$k]) + } + $task = $client.GetStreamAsync($Uri) + $response = $task.Result + if($task.IsFaulted) { + $msg = "Request for URL '{0}' is faulted. Task status: {1}." -f @($Uri, $task.Status) + if($task.Exception) { + $msg += "Exception details: {0}" -f @($task.Exception) + } + Throw $msg + } + $outStream = New-Object IO.FileStream $OutFile, Create, Write, None + + try { + $totRead = 0 + $buffer = New-Object Byte[] 1MB + while (($read = $response.Read($buffer, 0, $buffer.Length)) -gt 0) { + $totRead += $read + $outStream.Write($buffer, 0, $read); + } + } + finally { + $outStream.Close() + } + if(!$SkipIntegrityCheck -and $fragment) { + Test-FileIntegrity -File $OutFile -Algorithm $algorithm -ExpectedHash $hash + } + } +} + +function Import-Certificate() { + [CmdletBinding()] + param ( + [parameter(Mandatory=$true)] + $CertificateData, + [parameter(Mandatory=$false)] + [System.Security.Cryptography.X509Certificates.StoreLocation]$StoreLocation="LocalMachine", + [parameter(Mandatory=$false)] + [System.Security.Cryptography.X509Certificates.StoreName]$StoreName="TrustedPublisher" + ) + PROCESS + { + $store = New-Object System.Security.Cryptography.X509Certificates.X509Store( + $StoreName, $StoreLocation) + $store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite) + $cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($CertificateData) + $store.Add($cert) + } +} + +function Invoke-APICall() { + [CmdletBinding()] + param ( + [parameter(Mandatory=$true)] + [object]$Payload, + [parameter(Mandatory=$true)] + [string]$CallbackURL + ) + PROCESS{ + Invoke-WebRequest -UseBasicParsing -Method Post -Headers @{"Accept"="application/json"; "Authorization"="Bearer $Token"} -Uri $CallbackURL -Body (ConvertTo-Json $Payload) | Out-Null + } +} + +function Update-GarmStatus() { + [CmdletBinding()] + param ( + [parameter(Mandatory=$true)] + [string]$Message, + [parameter(Mandatory=$false)] + [int64]$AgentID=0, + [parameter(Mandatory=$false)] + [string]$Status="installing", + [parameter(Mandatory=$true)] + [string]$CallbackURL + ) + PROCESS{ + $body = @{ + "status"=$Status + "message"=$Message + } + + if ($AgentID -ne 0) { + $body["agent_id"] = $AgentID + } + Invoke-APICall -Payload $body -CallbackURL $CallbackURL | Out-Null + } +} + +function Invoke-GarmSuccess() { + [CmdletBinding()] + param ( + [parameter(Mandatory=$true)] + [string]$Message, + [parameter(Mandatory=$true)] + [int64]$AgentID, + [parameter(Mandatory=$true)] + [string]$CallbackURL + ) + PROCESS{ + Update-GarmStatus -Message $Message -AgentID $AgentID -CallbackURL $CallbackURL -Status "idle" | Out-Null + } +} + +function Invoke-GarmFailure() { + [CmdletBinding()] + param ( + [parameter(Mandatory=$true)] + [string]$Message, + [parameter(Mandatory=$true)] + [string]$CallbackURL + ) + PROCESS{ + Update-GarmStatus -Message $Message -CallbackURL $CallbackURL -Status "failed" | Out-Null + Throw $Message + } +} + +function Set-SystemInfo { + [CmdletBinding()] + param ( + [parameter(Mandatory=$true)] + [string]$CallbackURL, + [parameter(Mandatory=$true)] + [string]$RunnerDir, + [parameter(Mandatory=$true)] + [string]$BearerToken + ) + + # Construct the path to the .runner file + $agentInfoFile = Join-Path $RunnerDir ".runner" + + # Read and parse the JSON content from the .runner file + $agentInfo = ConvertFrom-Json (Get-Content -Raw -Path $agentInfoFile) + $AgentId = $agentInfo.agent_id + + # Retrieve OS information + $osInfo = Get-WmiObject -Class Win32_OperatingSystem + $osName = $osInfo.Caption + $osVersion = $osInfo.Version + + # Strip status from the callback URL + if ($CallbackUrl -match '^(.*)/status(/)?$') { + $CallbackUrl = $matches[1] + } + + $SysInfoUrl = "$CallbackUrl/system-info/" + $Payload = @{ + os_name = $OSName + os_version = $OSVersion + agent_id = $AgentId + } | ConvertTo-Json + + # Send the POST request + try { + Invoke-RestMethod -Uri $SysInfoUrl -Method Post -Body $Payload -ContentType 'application/json' -Headers @{ 'Authorization' = "Bearer $BearerToken" } -ErrorAction Stop + } catch { + Write-Output "Failed to send the system information." + } +} + +$CallbackURL="{{.CallbackURL}}" +if (!($CallbackURL -match "^(.*)/status(/)?$")) { + $CallbackURL = "$CallbackURL/status" +} +$GHRunnerGroup = "{{.GitHubRunnerGroup}}" +try { + $instanceMetadata = (wget -UseBasicParsing -Headers @{"Accept"="application/json"; "Authorization"="Bearer $Token"} -Uri {{.MetadataURL}}/runner-metadata) + $metadata = ConvertFrom-Json $instanceMetadata.Content +} catch { + Invoke-GarmFailure -Message "failed to get runner metadata: $_" -CallbackURL "{{.CallbackURL}}" | Out-Null +} + +function Get-IsAgentMode { + return ($metadata.agent_mode -eq $true) +} + +function Get-AgentURL { + $url = $metadata.metadata_access.agent_url + if (!$url) { + Throw("missing agent URL") + } + return $url +} + +function Get-AgentToken { + $token = $metadata.agent_token + if (!$token) { + Throw("missing agent Token") + } + return $token +} + +function Get-AgentDownloadURL { + $url = $metadata.agent_tools.download_url + if (!$url) { + Throw("missing agent download URL") + } + return $url +} + +function Get-AgentShellEnabled { + $shellEnabled = $metadata.agent_shell_enabled + if ($shellEnabled) {return "true"} + return "false" +} + +function Install-GarmAgent { + [CmdletBinding()] + param ( + [parameter(Mandatory=$true)] + [System.Management.Automation.PSCredential]$pscreds, + [parameter(Mandatory=$true)] + [string]$runnerExecutable + ) + Update-GarmStatus -Message "Agent mode is enabled" -CallbackURL $CallbackURL | Out-Null + $agentDir = "C:\garm-agent" + mkdir -Force $agentDir + $agentURL = Get-AgentURL + $agentDownloadURL = Get-AgentDownloadURL + $agentToken = Get-AgentToken + $agentDownloadHeaders=@{ + "Authorization"="Bearer $Token" + } + $shellEnabled = Get-AgentShellEnabled + $runnerExecutable = $runnerExecutable.Replace('\', '/') + # ' + Set-Content "$agentDir\garm-agent.toml" @" +server_url = "$agentURL" +log_file = "C:/garm-agent/garm-agent.log" +shell = "cmd.exe" +enable_shell = $shellEnabled +work_dir = "C:/actions-runner/" +token = "$agentToken" +runner_cmdline = ["$runnerExecutable", "daemon", "--once"] +state_db_path = "C:/garm-agent/agent-state.db" +"@ + + Update-GarmStatus -Message "Downloading agent from: $agentDownloadURL" -CallbackURL $CallbackURL | Out-Null + Start-ExecuteWithRetry -ScriptBlock { + Invoke-FastWebRequest -Headers $agentDownloadHeaders -Uri "$agentDownloadURL" -OutFile $agentDir\garm-agent.exe + } -MaxRetryCount 5 -RetryInterval 5 -RetryMessage "Retrying download of runner..." + + try { + New-Service -Name garm-agent -BinaryPathName "$agentDir\garm-agent.exe daemon --config $agentDir\garm-agent.toml" -DisplayName "garm-agent" -Description "GARM agent" -StartupType Automatic -Credential $pscreds + } catch { + Invoke-GarmFailure -CallbackURL $CallbackURL -Message "failed to set up garm agent $_" + } + Start-Service garm-agent +} + +function Install-NSSM { + [CmdletBinding()] + param ( + [parameter(Mandatory=$true)] + [string]$username, + [parameter(Mandatory=$true)] + [string]$password, + [parameter(Mandatory=$true)] + [string]$runnerDir + ) + + Start-ExecuteWithRetry -ScriptBlock { + Invoke-FastWebRequest -Uri "https://nssm.cc/ci/nssm-2.24-103-gdee49fc.zip" -OutFile "$runnerDir/nssm.zip" + } -MaxRetryCount 5 -RetryInterval 5 -RetryMessage "Retrying download of nssm..." + Expand-Archive -Path "$runnerDir/nssm.zip" -DestinationPath "$runnerDir/nssm" -Force + mv "$runnerDir\nssm\nssm-2.24-103-gdee49fc\win64\nssm.exe" "$runnerDir/nssm.exe" + rm -Recurse -Force "$runnerDir\nssm" + rm -Force "$runnerDir\nssm.zip" + $nssm="$runnerDir/nssm.exe" + & $nssm install GiteaActRunner "$runnerDir/act_runner.exe" + & $nssm set GiteaActRunner AppParameters daemon + & $nssm set GiteaActRunner AppStdout $runnerDir\stdout.log + & $nssm set GiteaActRunner AppStderr $runnerDir\stderr.log + & $nssm set GiteaActRunner AppStopMethodSkip 6 + & $nssm set GiteaActRunner AppStopMethodConsole 1000 + & $nssm set GiteaActRunner AppThrottle 5000 + & $nssm set GiteaActRunner ObjectName $username $password + & $nssm start GiteaActRunner +} + + + +function Install-Runner() { + $CallbackURL="{{.CallbackURL}}" + if (!($CallbackURL -match "^(.*)/status(/)?$")) { + $CallbackURL = "$CallbackURL/status" + } + + if ($Token.Length -eq 0) { + Throw "missing callback authentication token" + } + try { + $MetadataURL="{{.MetadataURL}}" + $DownloadURL="{{.DownloadURL}}" + if($MetadataURL -eq ""){ + Throw "missing metadata URL" + } + $runnerDir = "C:\actions-runner" + $runnerExecutable = Join-Path $runnerDir "act_runner.exe" + + # Create user with administrator rights to run service as + $userPasswd = Get-RandomString -Length 10 + $secPasswd = ConvertTo-SecureString "$userPasswd" -AsPlainText -Force + $userName = "runner" + $user = Get-LocalUser -Name $userName -ErrorAction SilentlyContinue + if (-not $user) { + New-LocalUser -Name $userName -Password $secPasswd -PasswordNeverExpires -UserMayNotChangePassword + } else { + Set-LocalUser -PasswordNeverExpires $true -Name $userName -Password $secPasswd + } + $pscreds = New-Object System.Management.Automation.PSCredential (".\$userName", $secPasswd) + $hasUser = Get-LocalGroupMember -SID S-1-5-32-544 -Member $userName -ErrorAction SilentlyContinue + if (-not $hasUser){ + Add-LocalGroupMember -SID S-1-5-32-544 -Member $userName + } + $ntAcct = New-Object System.Security.Principal.NTAccount($userName) + $sid = $ntAcct.Translate([System.Security.Principal.SecurityIdentifier]) + $sidBytes = New-Object byte[] ($sid.BinaryLength) + $sid.GetBinaryForm($sidBytes, 0) + + $result = [GrantSysPrivileges]::GrantPrivilege($sidBytes, ("SeBatchLogonRight", "SeServiceLogonRight")) + if ($result -ne 0) { + Throw "Failed to grant privileges" + } + + $bundle = wget -UseBasicParsing -Headers @{"Accept"="application/json"; "Authorization"="Bearer $Token"} -Uri $MetadataURL/system/cert-bundle + $converted = ConvertFrom-Json $bundle + foreach ($i in $converted.root_certificates.psobject.Properties){ + $data = [System.Convert]::FromBase64String($i.Value) + Import-Certificate -CertificateData $data -StoreName Root -StoreLocation LocalMachine + } + + + # Check if a cached runner is available + if (-not (Test-Path $runnerDir)) { + # No cached runner found, proceed to download and extract + Update-GarmStatus -CallbackURL $CallbackURL -Message "downloading tools from {{ .DownloadURL }}" + mkdir $runnerDir + + Start-ExecuteWithRetry -ScriptBlock { + Invoke-FastWebRequest -Uri "{{ .DownloadURL }}" -OutFile $runnerExecutable + } -MaxRetryCount 5 -RetryInterval 5 -RetryMessage "Retrying download of runner..." + } else { + Update-GarmStatus -CallbackURL $CallbackURL -Message "using cached runner found at $runnerDir" + } + + # Ensure runner has full access to actions-runner folder + $runnerACL = Get-Acl $runnerDir + $runnerACL.SetAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule( + $userName, "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow" + ))) + Set-Acl -Path $runnerDir -AclObject $runnerAcl + + Update-GarmStatus -CallbackURL $CallbackURL -Message "configuring runner" + cd $runnerDir + + $GithubRegistrationToken = Start-ExecuteWithRetry -ScriptBlock { + Invoke-WebRequest -UseBasicParsing -Headers @{"Accept"="application/json"; "Authorization"="Bearer $Token"} -Uri $MetadataURL/runner-registration-token/ + } -MaxRetryCount 5 -RetryInterval 5 -RetryMessage "Retrying download of GitHub registration token..." + & $runnerExecutable register --ephemeral --no-interactive --instance "{{ .RepoURL }}" --token $GithubRegistrationToken --name "{{ .RunnerName }}" --labels "{{ .RunnerLabels }}" + if ($LASTEXITCODE) { + Throw "Failed to configure runner. Err code $LASTEXITCODE" + } + $agentInfoFile = Join-Path $runnerDir ".runner" + $agentInfo = ConvertFrom-Json (gc -raw $agentInfoFile) + Set-SystemInfo -CallbackURL $CallbackURL -RunnerDir $runnerDir -BearerToken $Token + if ((Get-IsAgentMode)) { + Install-GarmAgent -pscreds $pscreds -runnerExecutable $runnerExecutable + } else { + Install-NSSM -username $userName -password $userPasswd -runnerDir $runnerDir + } + Invoke-GarmSuccess -CallbackURL $CallbackURL -Message "runner successfully installed" -AgentID $agentInfo.id + } catch { + Invoke-GarmFailure -CallbackURL $CallbackURL -Message $_ + } +} +Install-Runner \ No newline at end of file diff --git a/internal/templates/userdata/github_linux_userdata.tmpl b/internal/templates/userdata/github_linux_userdata.tmpl index 213153a5..567fc5da 100644 --- a/internal/templates/userdata/github_linux_userdata.tmpl +++ b/internal/templates/userdata/github_linux_userdata.tmpl @@ -2,15 +2,24 @@ set -e set -o pipefail +set -x {{- if .EnableBootDebug }} set -x {{- end }} +# Edit the templates directly in the browser. Intellisense is available for golang templates +# {{ .DownloadURL }} + CALLBACK_URL="{{ .CallbackURL }}" METADATA_URL="{{ .MetadataURL }}" BEARER_TOKEN="{{ .CallbackToken }}" +# touch /tmp/hold +# while true;do +# [ -e /tmp/hold ] && sleep 2 || break +# done + RUN_HOME="/home/{{ .RunnerUsername }}/actions-runner" if [ -z "$METADATA_URL" ];then @@ -55,6 +64,80 @@ function fail() { exit 1 } +INSTANCE_METADATA=$(curl \ + --retry 5 \ + --retry-delay 5 \ + --retry-connrefused \ + --fail -s \ + -H 'Accept: application/json' \ + -H "Authorization: Bearer ${BEARER_TOKEN}" \ + "$METADATA_URL/runner-metadata" 2>&1) || fail "failed to get instance metadata: $INSTANCE_METADATA" + +AGENT_MODE=$(echo "$INSTANCE_METADATA" | jq -r '.agent_mode // empty') +if [ "$AGENT_MODE" == "true" ]; then + sendStatus "Agent mode is enabled; setting up agent" + DOWNLOAD_URL=$(echo "$INSTANCE_METADATA" | jq -r '.agent_tools.download_url // empty') + if [ -z "$DOWNLOAD_URL" ]; then + fail "agent mode is enabled, but no agent tools found in metadata" + fi + AGENT_URL=$(echo "$INSTANCE_METADATA" | jq -r '.metadata_access.agent_url // empty') + if [ -z "$AGENT_URL" ]; then + fail "agent mode is enabled, but agent_url was not found in metadata" + fi + AGENT_TOKEN=$(echo "$INSTANCE_METADATA" | jq -r '.agent_token // empty') + if [ -z "$AGENT_TOKEN" ]; then + fail "agent mode is enabled, but agent_token was not found in metadata" + fi + AGENT_SHELL=$(echo "$INSTANCE_METADATA" | jq -r '.agent_shell_enabled // false') + sendStatus "Downloading agent from $DOWNLOAD_URL" + sudo curl --retry 5 \ + --retry-delay 5 \ + --retry-connrefused \ + --fail -L \ + -H "Authorization: Bearer ${BEARER_TOKEN}" \ + -o /usr/local/bin/garm-agent "$DOWNLOAD_URL" || fail "failed to download garm-agent" + sudo chmod +x /usr/local/bin/garm-agent || fail "failed to make garm-agent executable" + sudo mkdir -p /var/log/garm-agent || fail "failed to create /var/log/garm-agent" + sudo chown {{ .RunnerUsername }}:{{ .RunnerUsername }} /var/log/garm-agent || fail "failed to chown /var/log/garm-agent" + sudo mkdir -p /etc/garm-agent || fail "failed to create /etc/garm" + sudo chown {{ .RunnerUsername }}:{{ .RunnerUsername }} /etc/garm-agent || fail "failed to change owner on /etc/garm-agent" + + sendStatus "Creating config and systemd unit" + cat > /etc/garm-agent/garm-agent.toml << EOF +server_url = "$AGENT_URL" +log_file = "/var/log/garm-agent/garm-agent.log" +work_dir = "$RUN_HOME" +enable_shell = $AGENT_SHELL +token = "$AGENT_TOKEN" +runner_cmdline = ["/bin/bash", "-C", "/home/runner/actions-runner/run.sh"] +state_db_path = "/etc/garm-agent/agent-state.db" +EOF + + cat > /tmp/garm-agent.service << EOF +[Unit] +Description=GARM agent +After=multi-user.target + +[Service] +Type=simple +ExecStart=/usr/local/bin/garm-agent daemon --config /etc/garm-agent/garm-agent.toml +ExecReload=/bin/kill -HUP $MAINPID +Restart=always +RestartSec=5s +User={{ .RunnerUsername }} +Environment=TERM=xterm-256color +Environment=LANG=en_US.UTF-8 + +[Install] +WantedBy=multi-user.target +EOF + + sudo mv /tmp/garm-agent.service /etc/systemd/system/garm-agent.service || fail "failed to create /etc/systemd/system/garm-agent.service" + sudo chown root:root /etc/systemd/system/garm-agent.service || fail "failed to change owner on /etc/systemd/system/garm-agent.service" + sendStatus "Reloading systemd unit" + sudo systemctl daemon-reload || fail "failed to reload systemd" +fi + function downloadAndExtractRunner() { sendStatus "downloading tools from {{ .DownloadURL }}" if [ ! -z "{{ .TempDownloadToken }}" ]; then @@ -116,14 +199,13 @@ fi sendStatus "enabling runner service" cp "$RUN_HOME"/bin/runsvc.sh "$RUN_HOME"/ || fail "failed to copy runsvc.sh" -# Chown is not needed for the cached runner -# sudo chown {{ .RunnerUsername }}:{{ .RunnerGroup }} -R /home/{{ .RunnerUsername }} || fail "failed to change owner" sudo systemctl daemon-reload || fail "failed to reload systemd" sudo systemctl enable $SVC_NAME {{- else}} GITHUB_TOKEN=$(curl --retry 5 --retry-delay 5 --retry-connrefused --fail -s -X GET -H 'Accept: application/json' -H "Authorization: Bearer ${BEARER_TOKEN}" "${METADATA_URL}/runner-registration-token/") + set +e attempt=1 while true; do @@ -172,10 +254,14 @@ if [ -f "$RUN_HOME/env.sh" ];then source env.sh popd fi -sudo systemctl start $SVC_NAME || fail "failed to start service" +if [ "$AGENT_MODE" != "true" ]; then + sudo systemctl start $SVC_NAME || fail "failed to start service" +fi {{- else}} -sendStatus "starting service" -sudo ./svc.sh start || fail "failed to start service" +if [ "$AGENT_MODE" != "true" ]; then + sendStatus "starting service" + sudo ./svc.sh start || fail "failed to start service" +fi set +e AGENT_ID=$(grep "agentId" "$RUN_HOME"/.runner | tr -d -c 0-9) @@ -185,4 +271,8 @@ fi set -e {{- end}} systemInfo $AGENT_ID -success "runner successfully installed" $AGENT_ID \ No newline at end of file +if [ "$AGENT_MODE" == "true" ]; then + sendStatus "Starting garm-agent service" + sudo systemctl enable --now garm-agent || sendStatus "failed to start garm-agent" +fi +success "runner successfully installed" $AGENT_ID diff --git a/internal/templates/userdata/github_windows_userdata.tmpl b/internal/templates/userdata/github_windows_userdata.tmpl index 165f9fb5..c31888f8 100644 --- a/internal/templates/userdata/github_windows_userdata.tmpl +++ b/internal/templates/userdata/github_windows_userdata.tmpl @@ -377,14 +377,93 @@ function Set-SystemInfo { } } +$CallbackURL="{{.CallbackURL}}" +if (!($CallbackURL -match "^(.*)/status(/)?$")) { + $CallbackURL = "$CallbackURL/status" +} $GHRunnerGroup = "{{.GitHubRunnerGroup}}" +try { + $instanceMetadata = (wget -UseBasicParsing -Headers @{"Accept"="application/json"; "Authorization"="Bearer $Token"} -Uri {{.MetadataURL}}/runner-metadata) + $metadata = ConvertFrom-Json $instanceMetadata.Content +} catch { + Invoke-GarmFailure -Message "failed to get runner metadata: $_" -CallbackURL "{{.CallbackURL}}" | Out-Null +} + +function Get-IsAgentMode { + return ($metadata.agent_mode -eq $true) +} + +function Get-AgentURL { + $url = $metadata.metadata_access.agent_url + if (!$url) { + Throw("missing agent URL") + } + return $url +} + +function Get-AgentToken { + $token = $metadata.agent_token + if (!$token) { + Throw("missing agent Token") + } + return $token +} + +function Get-AgentDownloadURL { + $url = $metadata.agent_tools.download_url + if (!$url) { + Throw("missing agent download URL") + } + return $url +} + +function Get-AgentShellEnabled { + $shellEnabled = $metadata.agent_shell_enabled + if ($shellEnabled) {return "true"} + return "false" +} + +function Install-GarmAgent { + [CmdletBinding()] + param ( + [parameter(Mandatory=$true)] + [System.Management.Automation.PSCredential]$pscreds + ) + Update-GarmStatus -Message "Agent mode is enabled" -CallbackURL $CallbackURL | Out-Null + $agentDir = "C:\garm-agent" + mkdir -Force $agentDir + $agentURL = Get-AgentURL + $agentDownloadURL = Get-AgentDownloadURL + $agentToken = Get-AgentToken + $agentDownloadHeaders=@{ + "Authorization"="Bearer $Token" + } + $shellEnabled = Get-AgentShellEnabled + Set-Content "$agentDir\garm-agent.toml" @" +server_url = "$agentURL" +log_file = "C:/garm-agent/garm-agent.log" +shell = "cmd.exe" +enable_shell = $shellEnabled +work_dir = "C:/actions-runner/" +token = "$agentToken" +runner_cmdline = ["C:\\Windows\\system32\\cmd.exe", "/C", "C:\\actions-runner\\run.cmd"] +state_db_path = "C:/garm-agent/agent-state.db" +"@ + + Update-GarmStatus -Message "Downloading agent from: $agentDownloadURL" -CallbackURL $CallbackURL | Out-Null + Start-ExecuteWithRetry -ScriptBlock { + Invoke-FastWebRequest -Headers $agentDownloadHeaders -Uri "$agentDownloadURL" -OutFile $agentDir\garm-agent.exe + } -MaxRetryCount 5 -RetryInterval 5 -RetryMessage "Retrying download of runner..." + + try { + New-Service -Name garm-agent -BinaryPathName "$agentDir\garm-agent.exe daemon --config $agentDir\garm-agent.toml" -DisplayName "garm-agent" -Description "GARM agent" -StartupType Automatic -Credential $pscreds + } catch { + Invoke-GarmFailure -CallbackURL $CallbackURL -Message "failed to set up garm agent $_" + } + Start-Service garm-agent +} function Install-Runner() { - $CallbackURL="{{.CallbackURL}}" - if (!($CallbackURL -match "^(.*)/status(/)?$")) { - $CallbackURL = "$CallbackURL/status" - } - if ($Token.Length -eq 0) { Throw "missing callback authentication token" } @@ -480,8 +559,12 @@ function Install-Runner() { Update-GarmStatus -CallbackURL $CallbackURL -Message "Creating system service" $SVC_NAME=(gc -raw $serviceNameFile) - New-Service -Name "$SVC_NAME" -BinaryPathName "C:\actions-runner\bin\RunnerService.exe" -DisplayName "$SVC_NAME" -Description "GitHub Actions Runner ($SVC_NAME)" -StartupType Automatic -Credential $pscreds - Start-Service "$SVC_NAME" + if (!(Get-IsAgentMode)) { + New-Service -Name "$SVC_NAME" -BinaryPathName "C:\actions-runner\bin\RunnerService.exe" -DisplayName "$SVC_NAME" -Description "GitHub Actions Runner ($SVC_NAME)" -StartupType Automatic -Credential $pscreds + Start-Service "$SVC_NAME" + } else { + Install-GarmAgent $pscreds + } Set-SystemInfo -CallbackURL $CallbackURL -RunnerDir $runnerDir -BearerToken $Token Update-GarmStatus -Message "runner successfully installed" -CallbackURL $CallbackURL -Status "idle" | Out-Null @@ -489,17 +572,34 @@ function Install-Runner() { $GithubRegistrationToken = Start-ExecuteWithRetry -ScriptBlock { Invoke-WebRequest -UseBasicParsing -Headers @{"Accept"="application/json"; "Authorization"="Bearer $Token"} -Uri $MetadataURL/runner-registration-token/ } -MaxRetryCount 5 -RetryInterval 5 -RetryMessage "Retrying download of GitHub registration token..." - {{- if .GitHubRunnerGroup }} - ./config.cmd --unattended --url "{{ .RepoURL }}" --token $GithubRegistrationToken --runnergroup {{.GitHubRunnerGroup}} --name "{{ .RunnerName }}" --labels "{{ .RunnerLabels }}" --no-default-labels --ephemeral --runasservice --windowslogonaccount "$userName" --windowslogonpassword "$userPasswd" - {{- else}} - ./config.cmd --unattended --url "{{ .RepoURL }}" --token $GithubRegistrationToken --name "{{ .RunnerName }}" --labels "{{ .RunnerLabels }}" --no-default-labels --ephemeral --runasservice --windowslogonaccount "$userName" --windowslogonpassword "$userPasswd" - {{- end}} + $argList = @{ + "--unattended" = $null; + "--url" = "{{ .RepoURL }}"; + "--token" = $GithubRegistrationToken; + "--name" = "{{ .RunnerName }}"; + "--labels" = "{{ .RunnerLabels }}" + "--no-default-labels" = $null; + "--ephemeral" = $null; + } + {{- if .GitHubRunnerGroup }} + $argList["--runnergroup"] = {{.GitHubRunnerGroup}} + {{- end }} + if (!(Get-IsAgentMode)) { + $argList["--runasservice"] = $null + $argList["--windowslogonaccount"] = "$userName" + $argList["--windowslogonpassword"] = $userPasswd + } + + ./config.cmd @argList if ($LASTEXITCODE) { Throw "Failed to configure runner. Err code $LASTEXITCODE" } $agentInfoFile = Join-Path $runnerDir ".runner" $agentInfo = ConvertFrom-Json (gc -raw $agentInfoFile) Set-SystemInfo -CallbackURL $CallbackURL -RunnerDir $runnerDir -BearerToken $Token + if ((Get-IsAgentMode)) { + Install-GarmAgent $pscreds + } Invoke-GarmSuccess -CallbackURL $CallbackURL -Message "runner successfully installed" -AgentID $agentInfo.agentId {{- end }} } catch { diff --git a/params/params.go b/params/params.go index 9ad0875e..a3a315f3 100644 --- a/params/params.go +++ b/params/params.go @@ -108,6 +108,11 @@ const ( JobStatusCompleted JobStatus = "completed" ) +const ( + // SystemUser is a virtual user that identifies the system itself. + SystemUser = "system" +) + const ( ForgeEntityTypeRepository ForgeEntityType = "repository" ForgeEntityTypeOrganization ForgeEntityType = "organization" @@ -173,6 +178,97 @@ const ( MessageTypeJobAvailable = "JobAvailable" ) +var InstanceStatusTransitions = map[commonParams.InstanceStatus][]commonParams.InstanceStatus{ + commonParams.InstanceRunning: { + commonParams.InstancePendingDelete, + commonParams.InstancePendingForceDelete, + commonParams.InstanceStopped, + commonParams.InstanceStatusUnknown, + }, + commonParams.InstanceStopped: { + commonParams.InstancePendingDelete, + commonParams.InstancePendingForceDelete, + commonParams.InstanceRunning, + commonParams.InstanceStatusUnknown, + }, + commonParams.InstanceError: { + commonParams.InstancePendingDelete, + commonParams.InstancePendingForceDelete, + commonParams.InstanceStatusUnknown, + commonParams.InstanceDeleting, + }, + commonParams.InstancePendingDelete: { + commonParams.InstanceDeleting, + commonParams.InstancePendingForceDelete, + }, + commonParams.InstancePendingForceDelete: { + commonParams.InstanceDeleting, + }, + commonParams.InstanceDeleting: { + commonParams.InstanceError, + commonParams.InstanceDeleted, + }, + commonParams.InstanceDeleted: {}, // no further transitions possible + commonParams.InstancePendingCreate: { + commonParams.InstancePendingDelete, + commonParams.InstanceCreating, + commonParams.InstancePendingForceDelete, + }, + commonParams.InstanceCreating: { + commonParams.InstanceError, + commonParams.InstanceRunning, + }, + commonParams.InstanceStatusUnknown: { + commonParams.InstanceRunning, + commonParams.InstanceStopped, + commonParams.InstanceError, + commonParams.InstancePendingDelete, + commonParams.InstancePendingForceDelete, + commonParams.InstanceDeleting, + commonParams.InstanceDeleted, + commonParams.InstancePendingCreate, + commonParams.InstanceCreating, + }, +} + +var RunnerStatusTransitions = map[RunnerStatus][]RunnerStatus{ + RunnerPending: { + RunnerFailed, + RunnerInstalling, + RunnerTerminated, + RunnerPending, + }, + RunnerInstalling: { + RunnerFailed, + RunnerIdle, + RunnerTerminated, + RunnerInstalling, + }, + RunnerIdle: { + RunnerOffline, + RunnerActive, + RunnerTerminated, + RunnerIdle, + }, + RunnerActive: { + RunnerTerminated, + RunnerActive, + }, + RunnerFailed: { + RunnerTerminated, + RunnerFailed, + }, + RunnerOffline: { + RunnerIdle, + RunnerActive, + RunnerTerminated, + RunnerOffline, + }, + RunnerTerminated: { + RunnerTerminated, + }, +} + // swagger:model StatusMessage type StatusMessage struct { CreatedAt time.Time `json:"created_at,omitempty"` @@ -264,6 +360,10 @@ type Instance struct { // Job is the current job that is being serviced by this runner. Job *Job `json:"job,omitempty"` + // Heartbeat is the last recorded heartbeat from the runner + Heartbeat time.Time `json:"heartbeat"` + Capabilities AgentCapabilities `json:"capabilities"` + // Do not serialize sensitive info. CallbackURL string `json:"-"` MetadataURL string `json:"-"` @@ -372,6 +472,7 @@ type Pool struct { Tags []Tag `json:"tags,omitempty"` Enabled bool `json:"enabled,omitempty"` Instances []Instance `json:"instances,omitempty"` + EnableShell bool `json:"enable_shell"` RepoID string `json:"repo_id,omitempty"` RepoName string `json:"repo_name,omitempty"` @@ -527,6 +628,7 @@ type ScaleSet struct { Enabled bool `json:"enabled,omitempty"` Instances []Instance `json:"instances,omitempty"` DesiredRunnerCount int `json:"desired_runner_count,omitempty"` + EnableShell bool `json:"enable_shell"` Endpoint ForgeEndpoint `json:"endpoint,omitempty"` @@ -630,6 +732,7 @@ type Repository struct { CredentialsID uint `json:"credentials_id,omitempty"` Credentials ForgeCredentials `json:"credentials,omitempty"` + AgentMode bool `json:"agent_mode"` PoolManagerStatus PoolManagerStatus `json:"pool_manager_status,omitempty"` PoolBalancerType PoolBalancerType `json:"pool_balancing_type,omitempty"` @@ -666,6 +769,7 @@ func (r Repository) GetEntity() (ForgeEntity, error) { WebhookSecret: r.WebhookSecret, CreatedAt: r.CreatedAt, UpdatedAt: r.UpdatedAt, + AgentMode: r.AgentMode, }, nil } @@ -709,6 +813,7 @@ type Organization struct { CreatedAt time.Time `json:"created_at,omitempty"` UpdatedAt time.Time `json:"updated_at,omitempty"` Events []EntityEvent `json:"events,omitempty"` + AgentMode bool `json:"agent_mode"` // Do not serialize sensitive info. WebhookSecret string `json:"-"` } @@ -730,6 +835,7 @@ func (o Organization) GetEntity() (ForgeEntity, error) { Credentials: o.Credentials, CreatedAt: o.CreatedAt, UpdatedAt: o.UpdatedAt, + AgentMode: o.AgentMode, }, nil } @@ -769,6 +875,7 @@ type Enterprise struct { CreatedAt time.Time `json:"created_at,omitempty"` UpdatedAt time.Time `json:"updated_at,omitempty"` Events []EntityEvent `json:"events,omitempty"` + AgentMode bool `json:"agent_mode"` // Do not serialize sensitive info. WebhookSecret string `json:"-"` } @@ -790,6 +897,7 @@ func (e Enterprise) GetEntity() (ForgeEntity, error) { Credentials: e.Credentials, CreatedAt: e.CreatedAt, UpdatedAt: e.UpdatedAt, + AgentMode: e.AgentMode, }, nil } @@ -869,6 +977,15 @@ type ControllerInfo struct { // Functionally it is the same as WebhookURL, but it allows us to safely manage webhooks // from GARM without accidentally removing webhooks from other services or GARM controllers. ControllerWebhookURL string `json:"controller_webhook_url,omitempty"` + // AgentURL is the URL where the GARM agent will connect. If set behind a reverse proxy, this + // URL must be configured to allow websocket connections. + AgentURL string `json:"agent_url,omitempty"` + // GARMAgentReleasesURL is the URL from where GARM can fetch garm-agent binaries. This URL must + // have an API response compatible with the github releases API. + // The default value for this field is: https://api.github.com/repos/cloudbase/garm-agent/releases + GARMAgentReleasesURL string `json:"garm_agent_releases_url"` + // SyncGARMAgentTools enables or disables automatic sync of garm-agent tools. + SyncGARMAgentTools bool `json:"enable_agent_tools_sync"` // MinimumJobAgeBackoff is the minimum time in seconds that a job must be in queued state // before GARM will attempt to allocate a runner for it. When set to a non zero value, // GARM will ignore the job until the job's age is greater than this value. When using @@ -1183,6 +1300,7 @@ type ForgeEntity struct { PoolBalancerType PoolBalancerType `json:"pool_balancing_type,omitempty"` CreatedAt time.Time `json:"created_at,omitempty"` UpdatedAt time.Time `json:"updated_at,omitempty"` + AgentMode bool `json:"agent_mode"` WebhookSecret string `json:"-"` } @@ -1349,6 +1467,7 @@ type GARMAgentTool struct { Version string `json:"version"` OSType commonParams.OSType `json:"os_type"` OSArch commonParams.OSArch `json:"os_arch"` + DownloadURL string `json:"download_url"` } // swagger:model GARMAgentToolsPaginatedResponse @@ -1358,6 +1477,7 @@ type GARMAgentToolsPaginatedResponse = PaginatedResponse[GARMAgentTool] type MetadataServiceAccessDetails struct { CallbackURL string `json:"callback_url"` MetadataURL string `json:"metadata_url"` + AgentURL string `json:"agent_url"` } // swagger:model InstanceMetadata @@ -1376,7 +1496,18 @@ type InstanceMetadata struct { // Also, the instance metadata should never be saved to disk, and the metadata URL is only // accessible during setup of the runner. The API returns unauthorized once the runner // transitions to failed/idle. - ExtraSpecs map[string]any `json:"extra_specs,omitempty"` - JITEnabled bool `json:"jit_enabled"` - RunnerTools commonParams.RunnerApplicationDownload `json:"runner_tools"` + ExtraSpecs map[string]any `json:"extra_specs,omitempty"` + // Agent mode indicates whether or not we need to install the GARM agent on the runner. + AgentMode bool `json:"agent_mode"` + // AgentTools represents the garm agent download details. + AgentTools *GARMAgentTool `json:"agent_tools,omitempty"` + AgentToken string `json:"agent_token,omitempty"` + AgentShellEnabled bool `json:"agent_shell_enabled,omitempty"` + JITEnabled bool `json:"jit_enabled"` + RunnerTools commonParams.RunnerApplicationDownload `json:"runner_tools"` +} + +// swagger:model AgentCapabilities +type AgentCapabilities struct { + Shell bool `json:"has_shell"` } diff --git a/params/requests.go b/params/requests.go index 38e4c4a9..efe0905b 100644 --- a/params/requests.go +++ b/params/requests.go @@ -20,6 +20,7 @@ import ( "encoding/pem" "fmt" "net/url" + "time" runnerErrors "github.com/cloudbase/garm-provider-common/errors" commonParams "github.com/cloudbase/garm-provider-common/params" @@ -45,6 +46,7 @@ type CreateRepoParams struct { WebhookSecret string `json:"webhook_secret,omitempty"` PoolBalancerType PoolBalancerType `json:"pool_balancer_type,omitempty"` ForgeType EndpointType `json:"forge_type,omitempty"` + AgentMode bool `json:"agent_mode,omitempty"` } func (c *CreateRepoParams) Validate() error { @@ -86,6 +88,7 @@ type CreateOrgParams struct { WebhookSecret string `json:"webhook_secret,omitempty"` PoolBalancerType PoolBalancerType `json:"pool_balancer_type,omitempty"` ForgeType EndpointType `json:"forge_type,omitempty"` + AgentMode bool `json:"agent_mode,omitempty"` } func (c *CreateOrgParams) Validate() error { @@ -121,6 +124,7 @@ type CreateEnterpriseParams struct { CredentialsName string `json:"credentials_name,omitempty"` WebhookSecret string `json:"webhook_secret,omitempty"` PoolBalancerType PoolBalancerType `json:"pool_balancer_type,omitempty"` + AgentMode bool `json:"agent_mode,omitempty"` } func (c *CreateEnterpriseParams) Validate() error { @@ -168,6 +172,7 @@ type UpdatePoolParams struct { OSType commonParams.OSType `json:"os_type,omitempty"` OSArch commonParams.OSArch `json:"os_arch,omitempty"` ExtraSpecs json.RawMessage `json:"extra_specs,omitempty"` + EnableShell *bool `json:"enable_shell"` // GithubRunnerGroup is the github runner group in which the runners of this // pool will be added to. // The runner group must be created by someone with access to the enterprise. @@ -208,6 +213,7 @@ type CreatePoolParams struct { Enabled bool `json:"enabled,omitempty"` RunnerBootstrapTimeout uint `json:"runner_bootstrap_timeout,omitempty"` ExtraSpecs json.RawMessage `json:"extra_specs,omitempty"` + EnableShell bool `json:"enable_shell"` // GithubRunnerGroup is the github runner group in which the runners of this // pool will be added to. // The runner group must be created by someone with access to the enterprise. @@ -257,10 +263,12 @@ type UpdateInstanceParams struct { Status commonParams.InstanceStatus `json:"status,omitempty"` RunnerStatus RunnerStatus `json:"runner_status,omitempty"` ProviderFault []byte `json:"provider_fault,omitempty"` + Heartbeat *time.Time `json:"heartbeat,omitempty"` AgentID int64 `json:"-"` CreateAttempt int `json:"-"` TokenFetched *bool `json:"-"` JitConfiguration map[string]string `json:"-"` + Capabilities *AgentCapabilities `json:"-"` } type UpdateUserParams struct { @@ -291,6 +299,7 @@ type UpdateEntityParams struct { CredentialsName string `json:"credentials_name,omitempty"` WebhookSecret string `json:"webhook_secret,omitempty"` PoolBalancerType PoolBalancerType `json:"pool_balancer_type,omitempty"` + AgentMode *bool `json:"agent_mode,omitempty"` } type InstanceUpdateMessage struct { @@ -537,6 +546,9 @@ type UpdateControllerParams struct { MetadataURL *string `json:"metadata_url,omitempty"` CallbackURL *string `json:"callback_url,omitempty"` WebhookURL *string `json:"webhook_url,omitempty"` + AgentURL *string `json:"agent_url,omitempty"` + GARMAgentReleasesURL *string `json:"garm_agent_releases_url,omitempty"` + SyncGARMAgentTools *bool `json:"enable_agent_tools_sync,omitempty"` MinimumJobAgeBackoff *uint `json:"minimum_job_age_backoff,omitempty"` } @@ -562,6 +574,13 @@ func (u UpdateControllerParams) Validate() error { } } + if u.AgentURL != nil { + u, err := url.Parse(*u.AgentURL) + if err != nil || u.Scheme == "" || u.Host == "" { + return runnerErrors.NewBadRequestError("invalid agent_url") + } + } + return nil } @@ -584,6 +603,7 @@ type CreateScaleSetParams struct { Enabled bool `json:"enabled,omitempty"` RunnerBootstrapTimeout uint `json:"runner_bootstrap_timeout,omitempty"` ExtraSpecs json.RawMessage `json:"extra_specs,omitempty"` + EnableShell bool `json:"enable_shell"` // GithubRunnerGroup is the github runner group in which the runners of this // pool will be added to. // The runner group must be created by someone with access to the enterprise. @@ -633,6 +653,7 @@ type UpdateScaleSetParams struct { OSType commonParams.OSType `json:"os_type,omitempty"` OSArch commonParams.OSArch `json:"os_arch,omitempty"` ExtraSpecs json.RawMessage `json:"extra_specs,omitempty"` + EnableShell *bool `json:"enable_shell"` // GithubRunnerGroup is the github runner group in which the runners of this // pool will be added to. // The runner group must be created by someone with access to the enterprise. @@ -827,6 +848,7 @@ type CreateTemplateParams struct { Data []byte `json:"data"` OSType commonParams.OSType `json:"os_type"` ForgeType EndpointType `json:"forge_type,omitempty"` + IsSystem bool `json:"-"` } func (c *CreateTemplateParams) Validate() error { @@ -889,3 +911,23 @@ type CreateFileObjectParams struct { Size int64 `json:"size"` Tags []string `json:"tags"` } + +// swagger:model CreateGARMToolParams +type CreateGARMToolParams struct { + Name string `json:"name"` + Description string `json:"description"` + Size int64 `json:"size"` + OSType commonParams.OSType `json:"os_type"` + OSArch commonParams.OSArch `json:"os_arch"` + Version string `json:"version"` +} + +// swagger:model RestoreTemplateRequest +type RestoreTemplateRequest struct { + Forge EndpointType `json:"forge"` + OSType commonParams.OSType `json:"os_type"` + // RestoreAll indicates whether or not to restore all known + // system owned templates. If set, the Forge and OSType params + // are ignored. + RestoreAll bool `json:"restore_all"` +} diff --git a/runner/agent.go b/runner/agent.go new file mode 100644 index 00000000..6e262dfc --- /dev/null +++ b/runner/agent.go @@ -0,0 +1,115 @@ +package runner + +import ( + "context" + "fmt" + "log/slog" + "time" + + runnerErrors "github.com/cloudbase/garm-provider-common/errors" + commonParams "github.com/cloudbase/garm-provider-common/params" + "github.com/cloudbase/garm/auth" + "github.com/cloudbase/garm/params" +) + +func (r *Runner) RecordAgentHeartbeat(ctx context.Context) error { + instance, err := auth.InstanceParams(ctx) + if err != nil { + slog.With(slog.Any("error", err)).ErrorContext( + ctx, "failed to get instance params") + return runnerErrors.ErrUnauthorized + } + now := time.Now().UTC() + updateParams := params.UpdateInstanceParams{ + Heartbeat: &now, + } + + if _, err := r.store.UpdateInstance(ctx, instance.Name, updateParams); err != nil { + return fmt.Errorf("failed to record heartbeat: %w", err) + } + return nil +} + +func (r *Runner) SetInstanceCapabilities(ctx context.Context, caps params.AgentCapabilities) error { + instance, err := auth.InstanceParams(ctx) + if err != nil { + slog.With(slog.Any("error", err)).ErrorContext( + ctx, "failed to get instance params") + return runnerErrors.ErrUnauthorized + } + + updateParams := params.UpdateInstanceParams{ + Capabilities: &caps, + } + + if _, err := r.store.UpdateInstance(ctx, instance.ID, updateParams); err != nil { + return fmt.Errorf("failed to update capabilities: %w", err) + } + return nil +} + +func (r *Runner) SetInstanceToPendingDelete(ctx context.Context) error { + instance, err := auth.InstanceParams(ctx) + if err != nil { + slog.With(slog.Any("error", err)).ErrorContext( + ctx, "failed to get instance params") + return runnerErrors.ErrUnauthorized + } + + updateParams := params.UpdateInstanceParams{ + Status: commonParams.InstancePendingDelete, + } + + if _, err := r.store.UpdateInstance(r.ctx, instance.ID, updateParams); err != nil { + return fmt.Errorf("failed to set instance to pending_delete: %w", err) + } + return nil +} + +func (r *Runner) GetAgentJWTToken(ctx context.Context, runnerName string) (string, error) { + var instance params.Instance + var err error + if !auth.IsAdmin(ctx) { + instance, err = auth.InstanceParams(ctx) + if err != nil { + return "", runnerErrors.ErrUnauthorized + } + + // A runner bootstrap token can get an agent token for itself. + if instance.Name != runnerName || auth.InstanceIsAgent(ctx) { + return "", runnerErrors.ErrUnauthorized + } + } else { + instance, err = r.GetInstance(ctx, runnerName) + if err != nil { + return "", fmt.Errorf("failed to get runner: %w", err) + } + } + + var entityGetter params.EntityGetter + switch { + case instance.PoolID != "": + entityGetter, err = r.GetPoolByID(ctx, instance.PoolID) + case instance.ScaleSetID != 0: + entityGetter, err = r.GetScaleSetByID(ctx, instance.ScaleSetID) + } + if err != nil { + return "", fmt.Errorf("failed to get entity: %w", err) + } + + entity, err := entityGetter.GetEntity() + if err != nil { + return "", fmt.Errorf("failed to get entity: %w", err) + } + + dbEntity, err := r.store.GetForgeEntity(ctx, entity.EntityType, entity.ID) + if err != nil { + return "", fmt.Errorf("failed to get entity from DB: %w", err) + } + + agentToken, err := r.tokenGetter.NewAgentJWTToken(instance, dbEntity) + if err != nil { + return "", fmt.Errorf("failed to get agent token: %w", err) + } + return agentToken, nil +} diff --git a/runner/enterprises.go b/runner/enterprises.go index 448871cc..ee54aed4 100644 --- a/runner/enterprises.go +++ b/runner/enterprises.go @@ -52,7 +52,7 @@ func (r *Runner) CreateEnterprise(ctx context.Context, param params.CreateEnterp return params.Enterprise{}, runnerErrors.NewConflictError("enterprise %s already exists", param.Name) } - enterprise, err = r.store.CreateEnterprise(ctx, param.Name, creds, param.WebhookSecret, param.PoolBalancerType) + enterprise, err = r.store.CreateEnterprise(ctx, param.Name, creds, param.WebhookSecret, param.PoolBalancerType, param.AgentMode) if err != nil { return params.Enterprise{}, fmt.Errorf("error creating enterprise: %w", err) } diff --git a/runner/enterprises_test.go b/runner/enterprises_test.go index 0724ccf9..e9dde817 100644 --- a/runner/enterprises_test.go +++ b/runner/enterprises_test.go @@ -88,6 +88,7 @@ func (s *EnterpriseTestSuite) SetupTest() { s.testCreds, fmt.Sprintf("test-webhook-secret-%v", i), params.PoolBalancerTypeRoundRobin, + false, ) if err != nil { s.FailNow(fmt.Sprintf("failed to create database object (test-enterprise-%v): %+v", i, err)) @@ -244,6 +245,7 @@ func (s *EnterpriseTestSuite) TestListEnterprisesWithFilters() { s.testCreds, "super secret", params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NoError(err) enterprise2, err := s.Fixtures.Store.CreateEnterprise( @@ -252,6 +254,7 @@ func (s *EnterpriseTestSuite) TestListEnterprisesWithFilters() { s.testCreds, "super secret", params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NoError(err) enterprise3, err := s.Fixtures.Store.CreateEnterprise( @@ -260,6 +263,7 @@ func (s *EnterpriseTestSuite) TestListEnterprisesWithFilters() { s.ghesCreds, "super secret", params.PoolBalancerTypeRoundRobin, + false, ) s.Require().NoError(err) orgs, err := s.Runner.ListEnterprises( diff --git a/runner/garm_tools.go b/runner/garm_tools.go new file mode 100644 index 00000000..e24ad34a --- /dev/null +++ b/runner/garm_tools.go @@ -0,0 +1,223 @@ +// Copyright 2025 Cloudbase Solutions SRL +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +package runner + +import ( + "context" + "fmt" + "io" + "log/slog" + + runnerErrors "github.com/cloudbase/garm-provider-common/errors" + "github.com/cloudbase/garm/auth" + "github.com/cloudbase/garm/params" +) + +var ( + garmAgentFileTag = "category=garm-agent" + garmAgentOSTypeWindowsTag = "os_type=windows" + garmAgentOSTypeLinuxTag = "os_type=linux" + garmAgentOSArchAMD64Tag = "os_arch=amd64" + garmAgentOSArchARM64Tag = "os_arch=arm64" +) + +func (r *Runner) ListGARMTools(ctx context.Context) ([]params.GARMAgentTool, error) { + if !auth.IsAdmin(ctx) { + return nil, runnerErrors.ErrUnauthorized + } + + ret := []params.GARMAgentTool{} + var next uint64 = 1 + for { + allAgentTools, err := r.store.SearchFileObjectByTags(r.ctx, []string{garmAgentFileTag}, next, 100) + if err != nil { + return nil, fmt.Errorf("failed to list files: %w", err) + } + if allAgentTools.TotalCount == 0 { + return nil, nil + } + for _, tool := range allAgentTools.Results { + parsed, err := fileObjectToGARMTool(tool, "") + if err != nil { + return nil, fmt.Errorf("failed to parse object with ID %d", tool.ID) + } + ret = append(ret, parsed) + } + if allAgentTools.NextPage == nil { + break + } + next = *allAgentTools.NextPage + } + return ret, nil +} + +func (r *Runner) CreateGARMTool(ctx context.Context, param params.CreateGARMToolParams, reader io.Reader) (params.FileObject, error) { + if !auth.IsAdmin(ctx) { + return params.FileObject{}, runnerErrors.ErrUnauthorized + } + + // Validate version is provided + if param.Version == "" { + return params.FileObject{}, runnerErrors.NewBadRequestError("version is required") + } + + // Build tags based on OS type and arch + var osTypeTag, osArchTag string + switch param.OSType { + case "windows": + osTypeTag = garmAgentOSTypeWindowsTag + case "linux": + osTypeTag = garmAgentOSTypeLinuxTag + default: + return params.FileObject{}, runnerErrors.NewBadRequestError("invalid os_type: must be 'windows' or 'linux'") + } + + switch param.OSArch { + case "amd64": + osArchTag = garmAgentOSArchAMD64Tag + case "arm64": + osArchTag = garmAgentOSArchARM64Tag + default: + return params.FileObject{}, runnerErrors.NewBadRequestError("invalid os_arch: must be 'amd64' or 'arm64'") + } + + // Build tags: category, os_type, os_arch, version + tags := []string{ + garmAgentFileTag, + osTypeTag, + osArchTag, + fmt.Sprintf("version=%s", param.Version), + } + + // Create the file object params + createParams := params.CreateFileObjectParams{ + Name: param.Name, + Description: param.Description, + Size: param.Size, + Tags: tags, + } + + // Upload the new binary + newTool, err := r.store.CreateFileObject(ctx, createParams, reader) + if err != nil { + return params.FileObject{}, fmt.Errorf("failed to upload garm-agent tool: %w", err) + } + slog.DebugContext(ctx, "uploaded new garm-agent tool", + "tool_id", newTool.ID, + "name", newTool.Name, + "os_type", param.OSType, + "os_arch", param.OSArch, + "version", param.Version, + "size", newTool.Size) + + // Clean up old versions (keep only the newly uploaded one) + // Build tags to find all binaries with same OS/ARCH (excluding version) + cleanupTags := []string{garmAgentFileTag, osTypeTag, osArchTag} + + // Delete all except the one we just uploaded + // Paginate through all results to ensure we delete everything + deletedCount := 0 + page := uint64(1) + pageSize := uint64(100) + + for { + allTools, err := r.store.SearchFileObjectByTags(ctx, cleanupTags, page, pageSize) + if err != nil { + slog.ErrorContext(ctx, "failed to search for old garm-agent versions during cleanup", + "error", err, + "os_type", param.OSType, + "os_arch", param.OSArch, + "new_tool_id", newTool.ID, + "page", page) + // Don't fail - upload succeeded + break + } + + for _, tool := range allTools.Results { + if tool.ID != newTool.ID { + // Delete old version directly via store (bypass API check since this is internal) + if err := r.store.DeleteFileObject(ctx, tool.ID); err != nil { + slog.WarnContext(ctx, "failed to delete old garm-agent version during cleanup", + "error", err, + "tool_id", tool.ID, + "tool_name", tool.Name, + "os_type", param.OSType, + "os_arch", param.OSArch) + continue + } + deletedCount++ + slog.DebugContext(ctx, "deleted old garm-agent version", + "tool_id", tool.ID, + "tool_name", tool.Name, + "tags", tool.Tags) + } + } + + // Check if there's a next page + if allTools.NextPage == nil { + break + } + page = *allTools.NextPage + } + + if deletedCount > 0 { + slog.InfoContext(ctx, "cleaned up old garm-agent versions", + "deleted_count", deletedCount, + "os_type", param.OSType, + "os_arch", param.OSArch, + "kept_version", param.Version) + } + + return newTool, nil +} + +func (r *Runner) DeleteGarmTool(ctx context.Context, osType, osArch string) error { + if !auth.IsAdmin(ctx) { + return runnerErrors.ErrUnauthorized + } + + // Build tags based on OS type and arch + tags := []string{garmAgentFileTag} + + switch osType { + case "windows": + tags = append(tags, garmAgentOSTypeWindowsTag) + case "linux": + tags = append(tags, garmAgentOSTypeLinuxTag) + default: + return runnerErrors.NewBadRequestError("invalid os_type: must be 'windows' or 'linux'") + } + + switch osArch { + case "amd64": + tags = append(tags, garmAgentOSArchAMD64Tag) + case "arm64": + tags = append(tags, garmAgentOSArchARM64Tag) + default: + return runnerErrors.NewBadRequestError("invalid os_arch: must be 'amd64' or 'arm64'") + } + + // Delete all tools matching these tags + deletedCount, err := r.store.DeleteFileObjectsByTags(ctx, tags) + if err != nil { + return fmt.Errorf("failed to delete garm-agent tools: %w", err) + } + + if deletedCount == 0 { + return runnerErrors.NewNotFoundError("no garm-agent tools found for %s/%s", osType, osArch) + } + + return nil +} diff --git a/runner/garm_tools_test.go b/runner/garm_tools_test.go new file mode 100644 index 00000000..f8188f27 --- /dev/null +++ b/runner/garm_tools_test.go @@ -0,0 +1,465 @@ +// Copyright 2025 Cloudbase Solutions SRL +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +//go:build testing +// +build testing + +package runner + +import ( + "bytes" + "context" + "fmt" + "testing" + + "github.com/stretchr/testify/suite" + + runnerErrors "github.com/cloudbase/garm-provider-common/errors" + commonParams "github.com/cloudbase/garm-provider-common/params" + "github.com/cloudbase/garm/database" + dbCommon "github.com/cloudbase/garm/database/common" + garmTesting "github.com/cloudbase/garm/internal/testing" + "github.com/cloudbase/garm/params" +) + +var ( + windowsAMD64ToolsTags = []string{ + garmAgentFileTag, + garmAgentOSTypeWindowsTag, + garmAgentOSArchAMD64Tag, + } + windowsARM64ToolsTags = []string{ + garmAgentFileTag, + garmAgentOSTypeWindowsTag, + garmAgentOSArchARM64Tag, + } + linuxARM64ToolsTags = []string{ + garmAgentFileTag, + garmAgentOSTypeLinuxTag, + garmAgentOSArchARM64Tag, + } +) + +type GARMToolsTestSuite struct { + suite.Suite + AdminContext context.Context + UnauthorizedContext context.Context + Store dbCommon.Store + Runner *Runner +} + +func (s *GARMToolsTestSuite) SetupTest() { + dbCfg := garmTesting.GetTestSqliteDBConfig(s.T()) + db, err := database.NewDatabase(context.Background(), dbCfg) + if err != nil { + s.FailNow(fmt.Sprintf("failed to create db connection: %s", err)) + } + + adminCtx := garmTesting.ImpersonateAdminContext(context.Background(), db, s.T()) + + s.AdminContext = adminCtx + s.UnauthorizedContext = context.Background() + s.Store = db + + runner := &Runner{ + ctx: adminCtx, + store: db, + } + s.Runner = runner +} + +func (s *GARMToolsTestSuite) TestCreateGARMToolUnauthorized() { + param := params.CreateGARMToolParams{ + Name: "garm-agent-linux-amd64", + Description: "GARM agent for Linux AMD64", + Size: 1024, + OSType: "linux", + OSArch: "amd64", + Version: "v1.0.0", + } + + reader := bytes.NewReader([]byte("test binary content")) + _, err := s.Runner.CreateGARMTool(s.UnauthorizedContext, param, reader) + + s.Require().Error(err) + s.Equal(runnerErrors.ErrUnauthorized, err) +} + +func (s *GARMToolsTestSuite) TestCreateGARMToolMissingVersion() { + param := params.CreateGARMToolParams{ + Name: "garm-agent-linux-amd64", + Description: "GARM agent for Linux AMD64", + Size: 1024, + OSType: "linux", + OSArch: "amd64", + Version: "", + } + + reader := bytes.NewReader([]byte("test binary content")) + _, err := s.Runner.CreateGARMTool(s.AdminContext, param, reader) + + s.Require().Error(err) + s.Contains(err.Error(), "version is required") +} + +func (s *GARMToolsTestSuite) TestCreateGARMToolInvalidOSType() { + param := params.CreateGARMToolParams{ + Name: "garm-agent-invalid-amd64", + Description: "Invalid OS type", + Size: 1024, + OSType: "invalid", + OSArch: "amd64", + Version: "v1.0.0", + } + + reader := bytes.NewReader([]byte("test binary content")) + _, err := s.Runner.CreateGARMTool(s.AdminContext, param, reader) + + s.Require().Error(err) + s.Contains(err.Error(), "invalid os_type") +} + +func (s *GARMToolsTestSuite) TestCreateGARMToolInvalidOSArch() { + param := params.CreateGARMToolParams{ + Name: "garm-agent-linux-invalid", + Description: "Invalid arch", + Size: 1024, + OSType: "linux", + OSArch: "invalid", + Version: "v1.0.0", + } + + reader := bytes.NewReader([]byte("test binary content")) + _, err := s.Runner.CreateGARMTool(s.AdminContext, param, reader) + + s.Require().Error(err) + s.Contains(err.Error(), "invalid os_arch") +} + +func (s *GARMToolsTestSuite) TestCreateGARMToolSuccess() { + content := []byte("test binary content for linux amd64") + param := params.CreateGARMToolParams{ + Name: "garm-agent-linux-amd64", + Description: "GARM agent for Linux AMD64", + Size: int64(len(content)), + OSType: commonParams.Linux, + OSArch: commonParams.Amd64, + Version: "v1.0.0", + } + + reader := bytes.NewReader(content) + tool, err := s.Runner.CreateGARMTool(s.AdminContext, param, reader) + + s.Require().NoError(err) + s.Equal(param.Name, tool.Name) + s.Equal(param.Description, tool.Description) + s.Equal(int64(len(content)), tool.Size) + + // Verify tags + expectedTags := []string{ + "category=garm-agent", + "os_type=linux", + "os_arch=amd64", + "version=v1.0.0", + } + s.ElementsMatch(expectedTags, tool.Tags) +} + +func (s *GARMToolsTestSuite) TestCreateGARMToolCleansUpOldVersions() { + // Upload version 1.0.0 + param1 := params.CreateGARMToolParams{ + Name: "garm-agent-linux-arm64", + Description: "GARM agent for Linux ARM64 v1.0.0", + Size: 1024, + OSType: commonParams.Linux, + OSArch: commonParams.Arm64, + Version: "v1.0.0", + } + reader1 := bytes.NewReader([]byte("version 1.0.0 binary")) + tool1, err := s.Runner.CreateGARMTool(s.AdminContext, param1, reader1) + s.Require().NoError(err) + + // Upload version 1.1.0 + param2 := params.CreateGARMToolParams{ + Name: "garm-agent-linux-arm64", + Description: "GARM agent for Linux ARM64 v1.1.0", + Size: 2048, + OSType: commonParams.Linux, + OSArch: commonParams.Arm64, + Version: "v1.1.0", + } + reader2 := bytes.NewReader([]byte("version 1.1.0 binary")) + tool2, err := s.Runner.CreateGARMTool(s.AdminContext, param2, reader2) + s.Require().NoError(err) + + // Verify v1.0.0 was deleted + _, err = s.Store.GetFileObject(s.AdminContext, tool1.ID) + s.Require().Error(err) + s.Contains(err.Error(), "could not find file object") + + // Verify v1.1.0 still exists + existing, err := s.Store.GetFileObject(s.AdminContext, tool2.ID) + s.Require().NoError(err) + s.Equal(tool2.ID, existing.ID) + + // Search for all linux/arm64 tools - should only find v1.1.0 + results, err := s.Store.SearchFileObjectByTags(s.AdminContext, linuxARM64ToolsTags, 1, 10) + s.Require().NoError(err) + s.Equal(uint64(1), results.TotalCount) + s.Len(results.Results, 1) + s.Equal(tool2.ID, results.Results[0].ID) +} + +func (s *GARMToolsTestSuite) TestCreateGARMToolPaginationCleanup() { + // Upload 150 old versions for windows/amd64 + for i := 1; i <= 150; i++ { + param := params.CreateGARMToolParams{ + Name: fmt.Sprintf("garm-agent-windows-amd64-v%d", i), + Description: fmt.Sprintf("Version %d", i), + Size: int64(i * 100), + OSType: commonParams.Windows, + OSArch: commonParams.Amd64, + Version: fmt.Sprintf("v0.0.%d", i), + } + reader := bytes.NewReader([]byte(fmt.Sprintf("version %d binary", i))) + _, err := s.Runner.CreateGARMTool(s.AdminContext, param, reader) + s.Require().NoError(err) + } + + // Upload the latest version + latestParam := params.CreateGARMToolParams{ + Name: "garm-agent-windows-amd64", + Description: "Latest version", + Size: 99999, + OSType: commonParams.Windows, + OSArch: commonParams.Amd64, + Version: "v2.0.0", + } + reader := bytes.NewReader([]byte("latest version binary")) + latestTool, err := s.Runner.CreateGARMTool(s.AdminContext, latestParam, reader) + s.Require().NoError(err) + + // Verify only the latest version exists + results, err := s.Store.SearchFileObjectByTags(s.AdminContext, windowsAMD64ToolsTags, 1, 200) + s.Require().NoError(err) + s.Equal(uint64(1), results.TotalCount) + s.Len(results.Results, 1) + s.Equal(latestTool.ID, results.Results[0].ID) + s.Equal("v2.0.0", getVersionFromTags(results.Results[0].Tags)) +} + +func (s *GARMToolsTestSuite) TestCreateGARMToolDoesNotAffectOtherPlatforms() { + // Upload linux/amd64 v1.0.0 + param1 := params.CreateGARMToolParams{ + Name: "garm-agent-linux-amd64", + Description: "Linux AMD64", + Size: 1024, + OSType: commonParams.Linux, + OSArch: commonParams.Amd64, + Version: "v1.0.0", + } + reader1 := bytes.NewReader([]byte("linux amd64 binary")) + tool1, err := s.Runner.CreateGARMTool(s.AdminContext, param1, reader1) + s.Require().NoError(err) + + // Upload windows/amd64 v1.0.0 + param2 := params.CreateGARMToolParams{ + Name: "garm-agent-windows-amd64", + Description: "Windows AMD64", + Size: 2048, + OSType: commonParams.Windows, + OSArch: commonParams.Amd64, + Version: "v1.0.0", + } + reader2 := bytes.NewReader([]byte("windows amd64 binary")) + tool2, err := s.Runner.CreateGARMTool(s.AdminContext, param2, reader2) + s.Require().NoError(err) + + // Verify both still exist + _, err = s.Store.GetFileObject(s.AdminContext, tool1.ID) + s.Require().NoError(err) + + _, err = s.Store.GetFileObject(s.AdminContext, tool2.ID) + s.Require().NoError(err) +} + +func (s *GARMToolsTestSuite) TestDeleteGarmToolUnauthorized() { + err := s.Runner.DeleteGarmTool(s.UnauthorizedContext, "linux", "amd64") + s.Require().Error(err) + s.Equal(runnerErrors.ErrUnauthorized, err) +} + +func (s *GARMToolsTestSuite) TestDeleteGarmToolInvalidOSType() { + err := s.Runner.DeleteGarmTool(s.AdminContext, "invalid", "amd64") + s.Require().Error(err) + s.Contains(err.Error(), "invalid os_type") +} + +func (s *GARMToolsTestSuite) TestDeleteGarmToolInvalidOSArch() { + err := s.Runner.DeleteGarmTool(s.AdminContext, "linux", "invalid") + s.Require().Error(err) + s.Contains(err.Error(), "invalid os_arch") +} + +func (s *GARMToolsTestSuite) TestDeleteGarmToolNotFound() { + err := s.Runner.DeleteGarmTool(s.AdminContext, "linux", "amd64") + s.Require().Error(err) + s.Contains(err.Error(), "no garm-agent tools found") +} + +func (s *GARMToolsTestSuite) TestDeleteGarmToolSuccess() { + // Create a tool + param := params.CreateGARMToolParams{ + Name: "garm-agent-linux-amd64", + Description: "GARM agent for Linux AMD64", + Size: 1024, + OSType: commonParams.Linux, + OSArch: commonParams.Amd64, + Version: "v1.0.0", + } + reader := bytes.NewReader([]byte("test binary")) + tool, err := s.Runner.CreateGARMTool(s.AdminContext, param, reader) + s.Require().NoError(err) + + // Delete it + err = s.Runner.DeleteGarmTool(s.AdminContext, "linux", "amd64") + s.Require().NoError(err) + + // Verify it's gone + _, err = s.Store.GetFileObject(s.AdminContext, tool.ID) + s.Require().Error(err) + s.Contains(err.Error(), "could not find file object") +} + +func (s *GARMToolsTestSuite) TestDeleteGarmToolDeletesAllVersions() { + // Create multiple versions using windows/arm64 + for i := 1; i <= 5; i++ { + reader := bytes.NewReader([]byte(fmt.Sprintf("version %d", i))) + // CreateGARMTool only keeps the latest, so we need to use the store directly + // to create multiple versions + tags := windowsARM64ToolsTags + tags = append(tags, fmt.Sprintf("version=v1.%d.0", i)) + createParam := params.CreateFileObjectParams{ + Name: fmt.Sprintf("garm-agent-windows-arm64-v%d", i), + Description: fmt.Sprintf("Version %d", i), + Size: int64(i * 100), + Tags: tags, + } + _, err := s.Store.CreateFileObject(s.AdminContext, createParam, reader) + s.Require().NoError(err) + } + + // Verify we have 5 versions + results, err := s.Store.SearchFileObjectByTags(s.AdminContext, windowsARM64ToolsTags, 1, 10) + s.Require().NoError(err) + s.Equal(uint64(5), results.TotalCount) + + // Delete all + err = s.Runner.DeleteGarmTool(s.AdminContext, "windows", "arm64") + s.Require().NoError(err) + + // Verify all are gone + results, err = s.Store.SearchFileObjectByTags(s.AdminContext, windowsARM64ToolsTags, 1, 10) + s.Require().NoError(err) + s.Equal(uint64(0), results.TotalCount) +} + +func (s *GARMToolsTestSuite) TestListGARMToolsUnauthorized() { + _, err := s.Runner.ListGARMTools(s.UnauthorizedContext) + s.Require().Error(err) + s.Equal(runnerErrors.ErrUnauthorized, err) +} + +func (s *GARMToolsTestSuite) TestListGARMToolsEmpty() { + tools, err := s.Runner.ListGARMTools(s.AdminContext) + s.Require().NoError(err) + s.Empty(tools) +} + +func (s *GARMToolsTestSuite) TestListGARMToolsSinglePlatform() { + // Create one tool + param := params.CreateGARMToolParams{ + Name: "garm-agent-linux-amd64", + Description: "GARM agent for Linux AMD64", + Size: 1024, + OSType: commonParams.Linux, + OSArch: commonParams.Amd64, + Version: "v1.0.0", + } + reader := bytes.NewReader([]byte("test binary")) + _, err := s.Runner.CreateGARMTool(s.AdminContext, param, reader) + s.Require().NoError(err) + + tools, err := s.Runner.ListGARMTools(s.AdminContext) + s.Require().NoError(err) + s.Len(tools, 1) + s.Equal("linux", string(tools[0].OSType)) + s.Equal("amd64", string(tools[0].OSArch)) +} + +func (s *GARMToolsTestSuite) TestListGARMToolsMultiplePlatforms() { + // Create tools for all supported platforms + platforms := []struct { + osType commonParams.OSType + osArch commonParams.OSArch + }{ + {commonParams.Linux, commonParams.Amd64}, + {commonParams.Linux, commonParams.Arm64}, + {commonParams.Windows, commonParams.Amd64}, + {commonParams.Windows, commonParams.Arm64}, + } + + for _, p := range platforms { + param := params.CreateGARMToolParams{ + Name: fmt.Sprintf("garm-agent-%s-%s", p.osType, p.osArch), + Description: fmt.Sprintf("GARM agent for %s %s", p.osType, p.osArch), + Size: 1024, + OSType: p.osType, + OSArch: p.osArch, + Version: "v1.0.0", + } + reader := bytes.NewReader([]byte(fmt.Sprintf("%s %s binary", p.osType, p.osArch))) + _, err := s.Runner.CreateGARMTool(s.AdminContext, param, reader) + s.Require().NoError(err) + } + + tools, err := s.Runner.ListGARMTools(s.AdminContext) + s.Require().NoError(err) + s.Len(tools, 4) + + // Verify we have all platforms + foundPlatforms := make(map[string]bool) + for _, tool := range tools { + key := fmt.Sprintf("%s-%s", tool.OSType, tool.OSArch) + foundPlatforms[key] = true + } + s.True(foundPlatforms["linux-amd64"]) + s.True(foundPlatforms["linux-arm64"]) + s.True(foundPlatforms["windows-amd64"]) + s.True(foundPlatforms["windows-arm64"]) +} + +// Helper function to extract version from tags +func getVersionFromTags(tags []string) string { + for _, tag := range tags { + if len(tag) > 8 && tag[:8] == "version=" { + return tag[8:] + } + } + return "" +} + +func TestGARMToolsTestSuite(t *testing.T) { + suite.Run(t, new(GARMToolsTestSuite)) +} diff --git a/runner/interfaces.go b/runner/interfaces.go index 3d4703f7..9a8181dc 100644 --- a/runner/interfaces.go +++ b/runner/interfaces.go @@ -44,9 +44,15 @@ type EnterprisePoolManager interface { } //go:generate go run github.com/vektra/mockery/v2@latest - type PoolManagerController interface { RepoPoolManager OrgPoolManager EnterprisePoolManager } + +type AgentStoreOps interface { + RecordAgentHeartbeat(ctx context.Context) error + AddInstanceStatusMessage(ctx context.Context, param params.InstanceUpdateMessage) error + SetInstanceToPendingDelete(ctx context.Context) error + SetInstanceCapabilities(ctx context.Context, capabilities params.AgentCapabilities) error +} diff --git a/runner/metadata.go b/runner/metadata.go index fa67f53b..b0ce97b1 100644 --- a/runner/metadata.go +++ b/runner/metadata.go @@ -22,7 +22,9 @@ import ( "errors" "fmt" "html/template" + "io" "log/slog" + "net/url" "strings" "github.com/cloudbase/garm-provider-common/cloudconfig" @@ -179,6 +181,7 @@ func (r *Runner) GetInstanceMetadata(ctx context.Context) (params.InstanceMetada var entityGetter params.EntityGetter var extraSpecs json.RawMessage + var enableShell bool switch { case instance.PoolID != "": pool, err := r.store.GetPoolByID(r.ctx, instance.PoolID) @@ -187,6 +190,7 @@ func (r *Runner) GetInstanceMetadata(ctx context.Context) (params.InstanceMetada } entityGetter = pool extraSpecs = pool.ExtraSpecs + enableShell = pool.EnableShell case instance.ScaleSetID != 0: scaleSet, err := r.store.GetScaleSetByID(r.ctx, instance.ScaleSetID) if err != nil { @@ -194,6 +198,7 @@ func (r *Runner) GetInstanceMetadata(ctx context.Context) (params.InstanceMetada } entityGetter = scaleSet extraSpecs = scaleSet.ExtraSpecs + enableShell = scaleSet.EnableShell default: // This is not actually an unauthorized scenario. This case means that an // instance was created but it does not belong to any pool or scale set. @@ -220,9 +225,28 @@ func (r *Runner) GetInstanceMetadata(ctx context.Context) (params.InstanceMetada MetadataAccess: params.MetadataServiceAccessDetails{ CallbackURL: instance.CallbackURL, MetadataURL: instance.MetadataURL, + AgentURL: cache.ControllerInfo().AgentURL, }, - ForgeType: dbEntity.Credentials.ForgeType, - JITEnabled: len(instance.JitConfiguration) > 0, + ForgeType: dbEntity.Credentials.ForgeType, + JITEnabled: len(instance.JitConfiguration) > 0, + AgentMode: dbEntity.AgentMode, + AgentShellEnabled: enableShell, + } + + if dbEntity.AgentMode { + agentTools, err := r.GetGARMTools(ctx, 0, 25) + if err != nil { + return params.InstanceMetadata{}, fmt.Errorf("failed to find garm agent tools: %w", err) + } + if agentTools.TotalCount == 0 { + return params.InstanceMetadata{}, runnerErrors.NewConflictError("agent mode is enabled, but agent tools not available") + } + ret.AgentTools = &agentTools.Results[0] + agentToken, err := r.GetAgentJWTToken(r.ctx, instance.Name) + if err != nil { + return params.InstanceMetadata{}, fmt.Errorf("failed to get agent token: %w", err) + } + ret.AgentToken = agentToken } if len(dbEntity.Credentials.Endpoint.CACertBundle) > 0 { @@ -310,6 +334,9 @@ func (r *Runner) GetRunnerInstallScript(ctx context.Context) ([]byte, error) { return nil, runnerErrors.NewConflictError("pool or scale set has no template associated and no template is defined in extra_specs") } + if specs.ExtraContext == nil { + specs.ExtraContext = map[string]string{} + } installCtx, err := r.getRunnerInstallTemplateContext(instance, entity, token, specs.ExtraContext) if err != nil { return nil, fmt.Errorf("failed to get runner install context: %w", err) @@ -490,9 +517,49 @@ func (r *Runner) GetRootCertificateBundle(ctx context.Context) (params.Certifica return bundle, nil } +func fileObjectToGARMTool(obj params.FileObject, downloadURL string) (params.GARMAgentTool, error) { + var version string + var osType string + var osArch string + for _, val := range obj.Tags { + if strings.HasPrefix(val, "version=") { + version = val[8:] + } + if strings.HasPrefix(val, "os_arch=") { + osArch = val[8:] + } + if strings.HasPrefix(val, "os_type=") { + osType = val[8:] + } + } + switch { + case version == "": + return params.GARMAgentTool{}, runnerErrors.NewConflictError("missing version for tools %d", obj.ID) + case osType == "": + return params.GARMAgentTool{}, runnerErrors.NewConflictError("missing os_type for tools %d", obj.ID) + case osArch == "": + return params.GARMAgentTool{}, runnerErrors.NewConflictError("missing os_arch for tools %d", obj.ID) + } + res := params.GARMAgentTool{ + ID: obj.ID, + Name: obj.Name, + Size: obj.Size, + SHA256SUM: obj.SHA256, + Description: obj.Description, + CreatedAt: obj.CreatedAt, + UpdatedAt: obj.UpdatedAt, + FileType: obj.FileType, + OSType: commonParams.OSType(osType), + OSArch: commonParams.OSArch(osArch), + DownloadURL: downloadURL, + Version: version, + } + return res, nil +} + func (r *Runner) GetGARMTools(ctx context.Context, page, pageSize uint64) (params.GARMAgentToolsPaginatedResponse, error) { tags := []string{ - "category=garm-agent", + garmAgentFileTag, } instance, err := validateInstanceState(ctx) if err != nil { @@ -511,35 +578,14 @@ func (r *Runner) GetGARMTools(ctx context.Context, page, pageSize uint64) (param var tools []params.GARMAgentTool for _, val := range files.Results { - tags := val.Tags - var version string - var osType string - var osArch string - for _, val := range tags { - if strings.HasPrefix(val, "version=") { - version = val[8:] - } - if strings.HasPrefix(val, "os_arch=") { - osArch = val[8:] - } - if strings.HasPrefix(val, "os_type=") { - osType = val[8:] - } + objectIDAsString := fmt.Sprintf("%d", val.ID) + downloadURL, err := url.JoinPath(instance.MetadataURL, "tools/garm-agent", objectIDAsString, "download") + if err != nil { + return params.GARMAgentToolsPaginatedResponse{}, fmt.Errorf("failed to construct agent tools download URL: %w", err) } - res := params.GARMAgentTool{ - ID: val.ID, - Name: val.Name, - Size: val.Size, - SHA256SUM: val.SHA256, - Description: val.Description, - CreatedAt: val.CreatedAt, - UpdatedAt: val.UpdatedAt, - FileType: val.FileType, - OSType: commonParams.OSType(osType), - OSArch: commonParams.OSArch(osArch), - } - if version != "" { - res.Version = version + res, err := fileObjectToGARMTool(val, downloadURL) + if err != nil { + return params.GARMAgentToolsPaginatedResponse{}, fmt.Errorf("failed parse tools object: %w", err) } tools = append(tools, res) } @@ -552,3 +598,81 @@ func (r *Runner) GetGARMTools(ctx context.Context, page, pageSize uint64) (param Results: tools, }, nil } + +func (r *Runner) ShowGARMTools(ctx context.Context, toolsID uint) (params.GARMAgentTool, error) { + instance, err := validateInstanceState(ctx) + if err != nil { + if !auth.IsAdmin(ctx) { + return params.GARMAgentTool{}, runnerErrors.ErrUnauthorized + } + } + + tools, err := r.store.GetFileObject(r.ctx, toolsID) + if err != nil { + return params.GARMAgentTool{}, fmt.Errorf("failed to list files: %w", err) + } + + var version string + var osType string + var osArch string + var category string + for _, val := range tools.Tags { + if strings.HasPrefix(val, "version=") { + version = val[8:] + } + if strings.HasPrefix(val, "os_arch=") { + osArch = val[8:] + } + if strings.HasPrefix(val, "os_type=") { + osType = val[8:] + } + if strings.HasPrefix(val, "category=") { + category = val[9:] + } + } + if category != "garm-agent" { + slog.InfoContext(ctx, "selected object is not marked as garm-agent", "object_id", toolsID, "instance", instance.Name) + return params.GARMAgentTool{}, runnerErrors.ErrUnauthorized + } + if osType != string(instance.OSType) { + return params.GARMAgentTool{}, runnerErrors.NewBadRequestError("requested tools OS type (%s) does not match instance OS type (%s)", osType, instance.OSType) + } + if osArch != string(instance.OSArch) { + return params.GARMAgentTool{}, runnerErrors.NewBadRequestError("requested tools OS arch (%s) does not match instance OS arch (%s)", osArch, instance.OSArch) + } + agentIDAsString := fmt.Sprintf("%d", tools.ID) + downloadURL, err := url.JoinPath(instance.MetadataURL, "tools/garm-agent", agentIDAsString, "download") + if err != nil { + return params.GARMAgentTool{}, fmt.Errorf("failed to construct agent tools download URL: %w", err) + } + res := params.GARMAgentTool{ + ID: tools.ID, + Name: tools.Name, + Size: tools.Size, + SHA256SUM: tools.SHA256, + Description: tools.Description, + CreatedAt: tools.CreatedAt, + UpdatedAt: tools.UpdatedAt, + FileType: tools.FileType, + OSType: commonParams.OSType(osType), + OSArch: commonParams.OSArch(osArch), + DownloadURL: downloadURL, + } + if version != "" { + res.Version = version + } + return res, nil +} + +func (r *Runner) GetGARMToolsReadHandler(ctx context.Context, toolsID uint) (io.ReadCloser, error) { + toolsDetails, err := r.ShowGARMTools(ctx, toolsID) + if err != nil { + return nil, fmt.Errorf("failed to validate tools request: %w", err) + } + + readCloser, err := r.store.OpenFileObjectContent(ctx, toolsDetails.ID) + if err != nil { + return nil, fmt.Errorf("failed to open file object: %w", err) + } + return readCloser, nil +} diff --git a/runner/metadata_test.go b/runner/metadata_test.go index bd090a43..4d54decc 100644 --- a/runner/metadata_test.go +++ b/runner/metadata_test.go @@ -77,7 +77,7 @@ func (s *MetadataTestSuite) SetupTest() { testCreds := garmTesting.CreateTestGithubCredentials(s.adminCtx, "test-creds", db, s.T(), s.githubEndpoint) // Create test organization - org, err := db.CreateOrganization(s.adminCtx, "test-org", testCreds, "test-webhook-secret", params.PoolBalancerTypeRoundRobin) + org, err := db.CreateOrganization(s.adminCtx, "test-org", testCreds, "test-webhook-secret", params.PoolBalancerTypeRoundRobin, false) if err != nil { s.FailNow(fmt.Sprintf("failed to create test org: %s", err)) } diff --git a/runner/object_store.go b/runner/object_store.go index d9b68811..79d23932 100644 --- a/runner/object_store.go +++ b/runner/object_store.go @@ -15,6 +15,7 @@ package runner import ( "context" + "errors" "fmt" "io" @@ -27,7 +28,11 @@ func (r *Runner) CreateFileObject(ctx context.Context, param params.CreateFileOb if !auth.IsAdmin(ctx) { return params.FileObject{}, runnerErrors.ErrUnauthorized } - + for _, val := range param.Tags { + if val == garmAgentFileTag { + return params.FileObject{}, runnerErrors.NewBadRequestError("cannot create garm-agent tools via object storage API") + } + } fileObj, err := r.store.CreateFileObject(ctx, param, reader) if err != nil { return params.FileObject{}, fmt.Errorf("failed to create file object: %w", err) @@ -53,12 +58,43 @@ func (r *Runner) DeleteFileObject(ctx context.Context, objID uint) error { return runnerErrors.ErrUnauthorized } + object, err := r.store.GetFileObject(ctx, objID) + if err != nil { + if errors.Is(err, runnerErrors.ErrNotFound) { + return nil + } + return fmt.Errorf("failed to query object in DB: %w", err) + } + for _, val := range object.Tags { + if val == garmAgentFileTag { + return runnerErrors.NewBadRequestError("cannot delete garm-agent tools via object storage API") + } + } if err := r.store.DeleteFileObject(ctx, objID); err != nil { return fmt.Errorf("failed to delete file object: %w", err) } return nil } +func (r *Runner) DeleteFileObjectsByTags(ctx context.Context, tags []string) (int64, error) { + if !auth.IsAdmin(ctx) { + return 0, runnerErrors.ErrUnauthorized + } + + // Check if any of the tags include garm-agent tag + for _, tag := range tags { + if tag == garmAgentFileTag { + return 0, runnerErrors.NewBadRequestError("cannot delete garm-agent tools via object storage API") + } + } + + deletedCount, err := r.store.DeleteFileObjectsByTags(ctx, tags) + if err != nil { + return 0, fmt.Errorf("failed to delete file objects by tags: %w", err) + } + return deletedCount, nil +} + func (r *Runner) ListFileObjects(ctx context.Context, page, pageSize uint64, tags []string) (params.FileObjectPaginatedResponse, error) { if !auth.IsAdmin(ctx) { return params.FileObjectPaginatedResponse{}, runnerErrors.ErrUnauthorized @@ -82,6 +118,21 @@ func (r *Runner) UpdateFileObject(ctx context.Context, objID uint, param params. return params.FileObject{}, runnerErrors.ErrUnauthorized } + object, err := r.store.GetFileObject(ctx, objID) + if err != nil { + return params.FileObject{}, fmt.Errorf("failed to query object in DB: %w", err) + } + for _, val := range object.Tags { + if val == garmAgentFileTag { + return params.FileObject{}, runnerErrors.NewBadRequestError("cannot update garm-agent tools via object storage API") + } + } + + for _, val := range param.Tags { + if val == garmAgentFileTag { + return params.FileObject{}, runnerErrors.NewBadRequestError("cannot update garm-agent tools via object storage API") + } + } resp, err := r.store.UpdateFileObject(ctx, objID, param) if err != nil { return params.FileObject{}, fmt.Errorf("failed to update object: %w", err) diff --git a/runner/object_store_test.go b/runner/object_store_test.go index 70c013d5..7a9af0bf 100644 --- a/runner/object_store_test.go +++ b/runner/object_store_test.go @@ -129,6 +129,22 @@ func (s *ObjectStoreTestSuite) TestCreateFileObjectUnauthorized() { s.Require().ErrorIs(err, runnerErrors.ErrUnauthorized) } +func (s *ObjectStoreTestSuite) TestCreateFileObjectWithGarmAgentTag() { + content := []byte("garm-agent tool content") + reader := bytes.NewReader(content) + + createParams := params.CreateFileObjectParams{ + Name: "garm-agent-tool.bin", + Size: int64(len(content)), + Tags: []string{garmAgentFileTag, "test"}, + } + + _, err := s.Runner.CreateFileObject(s.Fixtures.AdminContext, createParams, reader) + + s.Require().NotNil(err) + s.Require().Contains(err.Error(), "cannot create garm-agent tools via object storage API") +} + func (s *ObjectStoreTestSuite) TestGetFileObject() { fileObj, err := s.Runner.GetFileObject(s.Fixtures.AdminContext, s.Fixtures.TestFileObject.ID) @@ -187,6 +203,29 @@ func (s *ObjectStoreTestSuite) TestDeleteFileObjectNotFound() { s.Require().Nil(err) } +func (s *ObjectStoreTestSuite) TestDeleteFileObjectWithGarmAgentTag() { + // Create a file with garm-agent tag + content := []byte("garm-agent tool") + param := params.CreateFileObjectParams{ + Name: "garm-agent-delete-test.bin", + Size: int64(len(content)), + Tags: []string{garmAgentFileTag}, + } + // Create directly via store to bypass the API restriction + fileObj, err := s.Fixtures.Store.CreateFileObject(s.Fixtures.AdminContext, param, bytes.NewReader(content)) + s.Require().Nil(err) + + // Try to delete via API + err = s.Runner.DeleteFileObject(s.Fixtures.AdminContext, fileObj.ID) + + s.Require().NotNil(err) + s.Require().Contains(err.Error(), "cannot delete garm-agent tools via object storage API") + + // Verify file still exists + _, err = s.Fixtures.Store.GetFileObject(s.Fixtures.AdminContext, fileObj.ID) + s.Require().Nil(err) +} + func (s *ObjectStoreTestSuite) TestListFileObjects() { // Create additional test files for i := 1; i <= 3; i++ { @@ -318,7 +357,62 @@ func (s *ObjectStoreTestSuite) TestUpdateFileObjectNotFound() { _, err := s.Runner.UpdateFileObject(s.Fixtures.AdminContext, 99999, s.Fixtures.UpdateObjectParams) s.Require().NotNil(err) - s.Require().Contains(err.Error(), "failed to update object") + s.Require().Contains(err.Error(), "failed to query object in DB") +} + +func (s *ObjectStoreTestSuite) TestUpdateFileObjectWithGarmAgentTag() { + // Create a file with garm-agent tag + content := []byte("garm-agent tool") + param := params.CreateFileObjectParams{ + Name: "garm-agent-update-test.bin", + Size: int64(len(content)), + Tags: []string{garmAgentFileTag}, + } + // Create directly via store to bypass the API restriction + fileObj, err := s.Fixtures.Store.CreateFileObject(s.Fixtures.AdminContext, param, bytes.NewReader(content)) + s.Require().Nil(err) + + // Try to update via API + newName := "updated-agent-tool.bin" + updateParams := params.UpdateFileObjectParams{ + Name: &newName, + Tags: []string{"updated"}, + } + _, err = s.Runner.UpdateFileObject(s.Fixtures.AdminContext, fileObj.ID, updateParams) + + s.Require().NotNil(err) + s.Require().Contains(err.Error(), "cannot update garm-agent tools via object storage API") + + // Verify file is unchanged + unchanged, err := s.Fixtures.Store.GetFileObject(s.Fixtures.AdminContext, fileObj.ID) + s.Require().Nil(err) + s.Require().Equal(param.Name, unchanged.Name) +} + +func (s *ObjectStoreTestSuite) TestUpdateFileObjectAddingGarmAgentTag() { + // Create a regular file + content := []byte("regular file") + param := params.CreateFileObjectParams{ + Name: "regular-file.txt", + Size: int64(len(content)), + Tags: []string{"regular"}, + } + fileObj, err := s.Fixtures.Store.CreateFileObject(s.Fixtures.AdminContext, param, bytes.NewReader(content)) + s.Require().Nil(err) + + // Try to add garm-agent tag via update + updateParams := params.UpdateFileObjectParams{ + Tags: []string{garmAgentFileTag, "updated"}, + } + _, err = s.Runner.UpdateFileObject(s.Fixtures.AdminContext, fileObj.ID, updateParams) + + s.Require().NotNil(err) + s.Require().Contains(err.Error(), "cannot update garm-agent tools via object storage API") + + // Verify file tags are unchanged + unchanged, err := s.Fixtures.Store.GetFileObject(s.Fixtures.AdminContext, fileObj.ID) + s.Require().Nil(err) + s.Require().ElementsMatch(param.Tags, unchanged.Tags) } func (s *ObjectStoreTestSuite) TestGetFileObjectReader() { @@ -348,6 +442,98 @@ func (s *ObjectStoreTestSuite) TestGetFileObjectReaderNotFound() { s.Require().Contains(err.Error(), "failed to open file object") } +func (s *ObjectStoreTestSuite) TestDeleteFileObjectsByTags() { + // Create multiple test files with specific tags + for i := 1; i <= 5; i++ { + content := []byte(fmt.Sprintf("test file %d", i)) + var tags []string + if i <= 3 { + // First 3 files have matching tags + tags = []string{"tag1=value1", "tag2=value2", "test"} + } else { + // Last 2 files have different tags + tags = []string{"tag1=value1", "other"} + } + param := params.CreateFileObjectParams{ + Name: fmt.Sprintf("bulk-delete-test-%d.txt", i), + Size: int64(len(content)), + Tags: tags, + } + _, err := s.Fixtures.Store.CreateFileObject(s.Fixtures.AdminContext, param, bytes.NewReader(content)) + s.Require().Nil(err) + } + + // Delete files matching BOTH tags + deletedCount, err := s.Runner.DeleteFileObjectsByTags( + s.Fixtures.AdminContext, + []string{"tag1=value1", "tag2=value2"}, + ) + + s.Require().Nil(err) + s.Require().Equal(int64(3), deletedCount) + + // Verify the right files were deleted + allObjects, err := s.Fixtures.Store.ListFileObjects(s.Fixtures.AdminContext, 0, 100) + s.Require().Nil(err) + + // Count how many bulk-delete-test files remain + remainingCount := 0 + for _, obj := range allObjects.Results { + if bytes.Contains([]byte(obj.Name), []byte("bulk-delete-test")) { + remainingCount++ + // Should only be the last 2 files + s.Require().Contains(obj.Tags, "other") + } + } + s.Require().Equal(2, remainingCount) +} + +func (s *ObjectStoreTestSuite) TestDeleteFileObjectsByTagsUnauthorized() { + deletedCount, err := s.Runner.DeleteFileObjectsByTags( + s.Fixtures.UnauthorizedContext, + []string{"tag1", "tag2"}, + ) + + s.Require().NotNil(err) + s.Require().ErrorIs(err, runnerErrors.ErrUnauthorized) + s.Require().Equal(int64(0), deletedCount) +} + +func (s *ObjectStoreTestSuite) TestDeleteFileObjectsByTagsWithGarmAgentTag() { + // Try to delete with garm-agent tag + deletedCount, err := s.Runner.DeleteFileObjectsByTags( + s.Fixtures.AdminContext, + []string{"category=garm-agent", "test"}, + ) + + s.Require().NotNil(err) + s.Require().Contains(err.Error(), "cannot delete garm-agent tools via object storage API") + s.Require().Equal(int64(0), deletedCount) +} + +func (s *ObjectStoreTestSuite) TestDeleteFileObjectsByTagsNoMatches() { + // Try to delete with tags that don't match anything + deletedCount, err := s.Runner.DeleteFileObjectsByTags( + s.Fixtures.AdminContext, + []string{"nonexistent-tag1", "nonexistent-tag2"}, + ) + + s.Require().Nil(err) + s.Require().Equal(int64(0), deletedCount) +} + +func (s *ObjectStoreTestSuite) TestDeleteFileObjectsByTagsEmptyTags() { + // Try to delete with empty tags list + deletedCount, err := s.Runner.DeleteFileObjectsByTags( + s.Fixtures.AdminContext, + []string{}, + ) + + s.Require().NotNil(err) + s.Require().Contains(err.Error(), "no tags provided") + s.Require().Equal(int64(0), deletedCount) +} + func TestObjectStoreTestSuite(t *testing.T) { suite.Run(t, new(ObjectStoreTestSuite)) } diff --git a/runner/organizations.go b/runner/organizations.go index 04df1fff..f68401e6 100644 --- a/runner/organizations.go +++ b/runner/organizations.go @@ -62,7 +62,7 @@ func (r *Runner) CreateOrganization(ctx context.Context, param params.CreateOrgP return params.Organization{}, runnerErrors.NewConflictError("organization %s already exists", param.Name) } - org, err = r.store.CreateOrganization(ctx, param.Name, creds, param.WebhookSecret, param.PoolBalancerType) + org, err = r.store.CreateOrganization(ctx, param.Name, creds, param.WebhookSecret, param.PoolBalancerType, param.AgentMode) if err != nil { return params.Organization{}, fmt.Errorf("error creating organization: %w", err) } diff --git a/runner/organizations_test.go b/runner/organizations_test.go index 8d2aa3f6..cf5c9577 100644 --- a/runner/organizations_test.go +++ b/runner/organizations_test.go @@ -89,6 +89,7 @@ func (s *OrgTestSuite) SetupTest() { s.testCreds, fmt.Sprintf("test-webhook-secret-%v", i), params.PoolBalancerTypeRoundRobin, + false, ) if err != nil { s.FailNow(fmt.Sprintf("failed to create database object (test-org-%v)", i)) @@ -257,7 +258,9 @@ func (s *OrgTestSuite) TestListOrganizationsWithFilter() { "test-org", s.testCreds, "super-secret", - params.PoolBalancerTypeRoundRobin) + params.PoolBalancerTypeRoundRobin, + false, + ) s.Require().NoError(err) org2, err := s.Fixtures.Store.CreateOrganization( @@ -265,7 +268,9 @@ func (s *OrgTestSuite) TestListOrganizationsWithFilter() { "test-org", s.giteaTestCreds, "super-secret", - params.PoolBalancerTypeRoundRobin) + params.PoolBalancerTypeRoundRobin, + false, + ) s.Require().NoError(err) org3, err := s.Fixtures.Store.CreateOrganization( @@ -273,7 +278,9 @@ func (s *OrgTestSuite) TestListOrganizationsWithFilter() { "test-org2", s.giteaTestCreds, "super-secret", - params.PoolBalancerTypeRoundRobin) + params.PoolBalancerTypeRoundRobin, + false, + ) s.Require().NoError(err) orgs, err := s.Runner.ListOrganizations( diff --git a/runner/pool/pool.go b/runner/pool/pool.go index 446f2afb..6b2a95db 100644 --- a/runner/pool/pool.go +++ b/runner/pool/pool.go @@ -1269,7 +1269,7 @@ func (r *basePoolManager) retryFailedInstancesForOnePool(ctx context.Context, po // TODO(gabriel-samfira): Incrementing CreateAttempt should be done within a transaction. // It's fairly safe to do here (for now), as there should be no other code path that updates // an instance in this state. - var tokenFetched bool = len(instance.JitConfiguration) > 0 + tokenFetched := len(instance.JitConfiguration) > 0 updateParams := params.UpdateInstanceParams{ CreateAttempt: instance.CreateAttempt + 1, TokenFetched: &tokenFetched, diff --git a/runner/pools_test.go b/runner/pools_test.go index 2a2aea5d..87224a9e 100644 --- a/runner/pools_test.go +++ b/runner/pools_test.go @@ -69,7 +69,7 @@ func (s *PoolTestSuite) SetupTest() { s.secondaryTestCreds = garmTesting.CreateTestGithubCredentials(s.adminCtx, "secondary-creds", db, s.T(), s.githubEndpoint) // create an organization for testing purposes - org, err := db.CreateOrganization(s.adminCtx, "test-org", s.testCreds, "test-webhookSecret", params.PoolBalancerTypeRoundRobin) + org, err := db.CreateOrganization(s.adminCtx, "test-org", s.testCreds, "test-webhookSecret", params.PoolBalancerTypeRoundRobin, false) if err != nil { s.FailNow(fmt.Sprintf("failed to create org: %s", err)) } diff --git a/runner/repositories.go b/runner/repositories.go index a117b4d0..1eb7580c 100644 --- a/runner/repositories.go +++ b/runner/repositories.go @@ -61,7 +61,7 @@ func (r *Runner) CreateRepository(ctx context.Context, param params.CreateRepoPa return params.Repository{}, runnerErrors.NewConflictError("repository %s/%s already exists", param.Owner, param.Name) } - repo, err = r.store.CreateRepository(ctx, param.Owner, param.Name, creds, param.WebhookSecret, param.PoolBalancerType) + repo, err = r.store.CreateRepository(ctx, param.Owner, param.Name, creds, param.WebhookSecret, param.PoolBalancerType, param.AgentMode) if err != nil { return params.Repository{}, fmt.Errorf("error creating repository: %w", err) } @@ -248,7 +248,7 @@ func (r *Runner) findTemplate(ctx context.Context, entity params.ForgeEntity, os } for _, val := range tpls { slog.InfoContext(ctx, "considering template", "name", val.Name, "os_type", val.OSType, "pool_os_type", osType, "forge_type", val.ForgeType, "pool_forge_type", entity.Credentials.ForgeType, "owner", val.Owner) - if val.OSType == osType && val.ForgeType == entity.Credentials.ForgeType && val.Owner == "system" { + if val.OSType == osType && val.ForgeType == entity.Credentials.ForgeType && val.Owner == params.SystemUser { template = val break } diff --git a/runner/repositories_test.go b/runner/repositories_test.go index 8f195ae3..05a52b60 100644 --- a/runner/repositories_test.go +++ b/runner/repositories_test.go @@ -93,6 +93,7 @@ func (s *RepoTestSuite) SetupTest() { s.testCreds, fmt.Sprintf("test-webhook-secret-%v", i), params.PoolBalancerTypeRoundRobin, + false, ) if err != nil { s.FailNow(fmt.Sprintf("failed to create database object (test-repo-%v): %q", i, err)) @@ -275,6 +276,7 @@ func (s *RepoTestSuite) TestListRepositoriesWithFilters() { s.testCreds, "test-webhook-secret", params.PoolBalancerTypeRoundRobin, + false, ) if err != nil { s.FailNow(fmt.Sprintf("failed to create database object (example-repo): %q", err)) @@ -287,6 +289,7 @@ func (s *RepoTestSuite) TestListRepositoriesWithFilters() { s.testCreds, "test-webhook-secret", params.PoolBalancerTypeRoundRobin, + false, ) if err != nil { s.FailNow(fmt.Sprintf("failed to create database object (example-repo): %q", err)) @@ -299,6 +302,7 @@ func (s *RepoTestSuite) TestListRepositoriesWithFilters() { s.giteaTestCreds, "test-webhook-secret", params.PoolBalancerTypeRoundRobin, + false, ) if err != nil { s.FailNow(fmt.Sprintf("failed to create database object (example-repo): %q", err)) diff --git a/runner/runner.go b/runner/runner.go index b3c19a7f..26e61d16 100644 --- a/runner/runner.go +++ b/runner/runner.go @@ -76,6 +76,7 @@ func NewRunner(ctx context.Context, cfg config.Config, db dbCommon.Store, token ctx: ctx, config: cfg, store: db, + tokenGetter: token, poolManagerCtrl: poolManagerCtrl, providers: providers, } @@ -228,9 +229,10 @@ func (p *poolManagerCtrl) GetEnterprisePoolManagers() (map[string]common.PoolMan type Runner struct { mux sync.Mutex - config config.Config - ctx context.Context - store dbCommon.Store + config config.Config + ctx context.Context + store dbCommon.Store + tokenGetter auth.InstanceTokenGetter poolManagerCtrl PoolManagerController diff --git a/runner/templates.go b/runner/templates.go index 32505b40..9d2906fe 100644 --- a/runner/templates.go +++ b/runner/templates.go @@ -21,6 +21,7 @@ import ( runnerErrors "github.com/cloudbase/garm-provider-common/errors" commonParams "github.com/cloudbase/garm-provider-common/params" "github.com/cloudbase/garm/auth" + "github.com/cloudbase/garm/internal/templates" "github.com/cloudbase/garm/params" ) @@ -62,6 +63,94 @@ func (r *Runner) GetTemplateByName(ctx context.Context, templateName string) (pa return template, nil } +func (r *Runner) RestoreTemplate(ctx context.Context, param params.RestoreTemplateRequest) error { + if !auth.IsAdmin(ctx) { + return runnerErrors.ErrUnauthorized + } + + // Determine which templates to restore + var templatesConfig []struct { + OS commonParams.OSType + Forge params.EndpointType + } + + if param.RestoreAll { + // Restore all system templates + for _, os := range []commonParams.OSType{commonParams.Linux, commonParams.Windows} { + for _, forge := range []params.EndpointType{params.GiteaEndpointType, params.GithubEndpointType} { + templatesConfig = append(templatesConfig, struct { + OS commonParams.OSType + Forge params.EndpointType + }{OS: os, Forge: forge}) + } + } + } else { + // Restore specific template + templatesConfig = append(templatesConfig, struct { + OS commonParams.OSType + Forge params.EndpointType + }{OS: param.OSType, Forge: param.Forge}) + } + + // Process each template + for _, cfg := range templatesConfig { + // Get the template content from internal/templates + templateContent, err := templates.GetTemplateContent(cfg.OS, cfg.Forge) + if err != nil { + return fmt.Errorf("failed to get template content for %s/%s: %w", cfg.Forge, cfg.OS, err) + } + + // Find existing system template for this OS/Forge combination + existingTemplates, err := r.ListTemplates(ctx, &cfg.OS, &cfg.Forge, nil) + if err != nil { + return fmt.Errorf("failed to list templates for %s/%s: %w", cfg.Forge, cfg.OS, err) + } + + var systemTemplate *params.Template + for _, tpl := range existingTemplates { + if tpl.Owner == params.SystemUser || tpl.Owner == "" { + systemTemplate = &tpl + break + } + } + + // Generate template name + templateName := fmt.Sprintf("%s_%s", cfg.Forge, cfg.OS) + description := fmt.Sprintf("Default template for %s runners on %s", cfg.Forge, cfg.OS) + + if systemTemplate != nil { + // Update existing system template + updateParams := params.UpdateTemplateParams{ + Data: templateContent, + } + // Only update name if it was changed by user (different from expected system name) + if systemTemplate.Name != templateName { + updateParams.Name = &templateName + } + _, err := r.UpdateTemplate(ctx, systemTemplate.ID, updateParams) + if err != nil { + return fmt.Errorf("failed to update system template %d for %s/%s: %w", systemTemplate.ID, cfg.Forge, cfg.OS, err) + } + } else { + // Create new system template + createParams := params.CreateTemplateParams{ + Name: templateName, + Description: description, + Data: templateContent, + OSType: cfg.OS, + ForgeType: cfg.Forge, + IsSystem: true, + } + _, err := r.CreateTemplate(ctx, createParams) + if err != nil { + return fmt.Errorf("failed to create system template for %s/%s: %w", cfg.Forge, cfg.OS, err) + } + } + } + + return nil +} + func (r *Runner) ListTemplates(ctx context.Context, osType *commonParams.OSType, forgeType *params.EndpointType, partialName *string) ([]params.Template, error) { if !auth.IsAdmin(ctx) { return nil, runnerErrors.ErrUnauthorized diff --git a/runner/templates_test.go b/runner/templates_test.go index a37d1d2e..7797c5eb 100644 --- a/runner/templates_test.go +++ b/runner/templates_test.go @@ -321,6 +321,258 @@ func (s *TemplateTestSuite) TestDeleteTemplateNotFound() { s.Require().Nil(err) // Should not error for not found templates } +func (s *TemplateTestSuite) TestRestoreTemplateSpecific() { + osType := commonParams.Linux + forgeType := params.GithubEndpointType + templates, err := s.Runner.ListTemplates(s.adminCtx, &osType, &forgeType, nil) + s.Require().Nil(err) + s.Require().GreaterOrEqual(len(templates), 1, "Expected at least one github_linux template from migration") + + var systemTemplate *params.Template + for _, tpl := range templates { + if tpl.Owner == params.SystemUser { + systemTemplate = &tpl + break + } + } + s.Require().NotNil(systemTemplate, "Expected system template for github_linux") + + modifiedName := "modified_template_name" + modifiedData := []byte("modified template content for testing") + updateParams := params.UpdateTemplateParams{ + Name: &modifiedName, + Data: modifiedData, + } + _, err = s.Runner.UpdateTemplate(s.adminCtx, systemTemplate.ID, updateParams) + s.Require().Nil(err) + + updatedTemplate, err := s.Runner.GetTemplate(s.adminCtx, systemTemplate.ID) + s.Require().Nil(err) + s.Require().Equal(modifiedName, updatedTemplate.Name) + s.Require().Equal(modifiedData, updatedTemplate.Data) + + restoreParams := params.RestoreTemplateRequest{ + Forge: params.GithubEndpointType, + OSType: commonParams.Linux, + RestoreAll: false, + } + err = s.Runner.RestoreTemplate(s.adminCtx, restoreParams) + s.Require().Nil(err) + + // Verify the template was restored + restoredTemplate, err := s.Runner.GetTemplate(s.adminCtx, systemTemplate.ID) + s.Require().Nil(err) + // Name should be restored to the system default + s.Require().Equal("github_linux", restoredTemplate.Name) + // Data should be restored to original template content (not the modified content) + s.Require().NotEqual(modifiedData, restoredTemplate.Data) + // Should match the original template data or be close to it (content from internal/templates) + s.Require().NotEmpty(restoredTemplate.Data) + // Verify it's still a system template + s.Require().Equal(params.SystemUser, restoredTemplate.Owner) + + // Verify the data is different from what we modified (restored back to system template) + s.Require().NotEqual(string(modifiedData), string(restoredTemplate.Data)) +} + +func (s *TemplateTestSuite) TestRestoreTemplateAll() { + // Get all system templates + allTemplates, err := s.Runner.ListTemplates(s.adminCtx, nil, nil, nil) + s.Require().Nil(err) + + // Find all system templates + systemTemplates := []params.Template{} + for _, tpl := range allTemplates { + if tpl.Owner == params.SystemUser { + systemTemplates = append(systemTemplates, tpl) + } + } + // We should have at least 4 system templates (github/gitea x linux/windows) + s.Require().GreaterOrEqual(len(systemTemplates), 4, "Expected at least 4 system templates") + + // Modify all system templates + modifiedTemplateIDs := make(map[uint]struct { + originalName string + originalData []byte + }) + + for _, tpl := range systemTemplates { + modifiedName := "modified_" + tpl.Name + modifiedData := []byte("modified content for " + tpl.Name) + + updateParams := params.UpdateTemplateParams{ + Name: &modifiedName, + Data: modifiedData, + } + _, err := s.Runner.UpdateTemplate(s.adminCtx, tpl.ID, updateParams) + s.Require().Nil(err) + + modifiedTemplateIDs[tpl.ID] = struct { + originalName string + originalData []byte + }{ + originalName: tpl.Name, + originalData: tpl.Data, + } + } + + // Verify all templates were modified + for templateID := range modifiedTemplateIDs { + template, err := s.Runner.GetTemplate(s.adminCtx, templateID) + s.Require().Nil(err) + s.Require().Contains(template.Name, "modified_", "Template name should contain 'modified_'") + } + + // Restore all templates + restoreParams := params.RestoreTemplateRequest{ + RestoreAll: true, + } + err = s.Runner.RestoreTemplate(s.adminCtx, restoreParams) + s.Require().Nil(err) + + // Verify all templates were restored + for templateID := range modifiedTemplateIDs { + template, err := s.Runner.GetTemplate(s.adminCtx, templateID) + s.Require().Nil(err) + + // Name should not contain "modified_" anymore + s.Require().NotContains(template.Name, "modified_", "Template name should be restored") + // Should still be a system template + s.Require().Equal(params.SystemUser, template.Owner) + // Data should be restored from internal/templates + s.Require().NotEmpty(template.Data) + s.Require().NotContains(string(template.Data), "modified content", "Template data should be restored") + } + + // Verify we can still find templates for each OS/Forge combination + combinations := []struct { + os commonParams.OSType + forge params.EndpointType + }{ + {commonParams.Linux, params.GithubEndpointType}, + {commonParams.Windows, params.GithubEndpointType}, + {commonParams.Linux, params.GiteaEndpointType}, + {commonParams.Windows, params.GiteaEndpointType}, + } + + for _, combo := range combinations { + templates, err := s.Runner.ListTemplates(s.adminCtx, &combo.os, &combo.forge, nil) + s.Require().Nil(err) + + foundSystem := false + for _, tpl := range templates { + if tpl.Owner == params.SystemUser { + foundSystem = true + break + } + } + s.Require().True(foundSystem, "Should have system template for %s/%s", combo.forge, combo.os) + } +} + +func (s *TemplateTestSuite) TestRestoreTemplateMissingTemplate() { + // Delete a system template + osType := commonParams.Windows + forgeType := params.GiteaEndpointType + templates, err := s.Runner.ListTemplates(s.adminCtx, &osType, &forgeType, nil) + s.Require().Nil(err) + + var systemTemplate *params.Template + for _, tpl := range templates { + if tpl.Owner == params.SystemUser { + systemTemplate = &tpl + break + } + } + s.Require().NotNil(systemTemplate, "Expected system template for gitea_windows") + + // Delete the template + err = s.Runner.DeleteTemplate(s.adminCtx, systemTemplate.ID) + s.Require().Nil(err) + + // Verify it's deleted + templates, err = s.Runner.ListTemplates(s.adminCtx, &osType, &forgeType, nil) + s.Require().Nil(err) + + foundSystem := false + for _, tpl := range templates { + if tpl.Owner == params.SystemUser { + foundSystem = true + break + } + } + s.Require().False(foundSystem, "System template should be deleted") + + restoreParams := params.RestoreTemplateRequest{ + Forge: params.GiteaEndpointType, + OSType: commonParams.Windows, + RestoreAll: false, + } + err = s.Runner.RestoreTemplate(s.adminCtx, restoreParams) + s.Require().Nil(err) + + templates, err = s.Runner.ListTemplates(s.adminCtx, &osType, &forgeType, nil) + s.Require().Nil(err) + + foundSystem = false + var recreatedTemplateID uint + for _, tpl := range templates { + if tpl.Owner == params.SystemUser { + foundSystem = true + recreatedTemplateID = tpl.ID + break + } + } + s.Require().True(foundSystem, "System template should be recreated") + s.Require().NotZero(recreatedTemplateID) + + // Get the full template with data + recreatedTemplate, err := s.Runner.GetTemplate(s.adminCtx, recreatedTemplateID) + s.Require().Nil(err) + s.Require().Equal("gitea_windows", recreatedTemplate.Name) + s.Require().NotEmpty(recreatedTemplate.Data) +} + +func (s *TemplateTestSuite) TestRestoreTemplateUnauthorized() { + restoreParams := params.RestoreTemplateRequest{ + Forge: params.GithubEndpointType, + OSType: commonParams.Linux, + RestoreAll: false, + } + + err := s.Runner.RestoreTemplate(s.nonAdminCtx, restoreParams) + + s.Require().NotNil(err) + s.Require().ErrorIs(err, runnerErrors.ErrUnauthorized) +} + +func (s *TemplateTestSuite) TestRestoreTemplatePreservesUserTemplates() { + // Create a user template with the same OS/Forge as a system template + userTemplate, err := s.Runner.CreateTemplate(s.adminCtx, params.CreateTemplateParams{ + Name: "user-github-linux-template", + Description: "User's custom template", + OSType: commonParams.Linux, + ForgeType: params.GithubEndpointType, + Data: []byte("user custom template data"), + }) + s.Require().Nil(err) + s.Require().NotEqual(params.SystemUser, userTemplate.Owner, "User template should not be system owned") + + // Restore all templates + restoreParams := params.RestoreTemplateRequest{ + RestoreAll: true, + } + err = s.Runner.RestoreTemplate(s.adminCtx, restoreParams) + s.Require().Nil(err) + + // Verify user template still exists and wasn't modified + userTemplateAfter, err := s.Runner.GetTemplate(s.adminCtx, userTemplate.ID) + s.Require().Nil(err) + s.Require().Equal(userTemplate.Name, userTemplateAfter.Name) + s.Require().Equal(userTemplate.Data, userTemplateAfter.Data) + s.Require().NotEqual(params.SystemUser, userTemplateAfter.Owner) +} + func TestTemplateTestSuite(t *testing.T) { suite.Run(t, new(TemplateTestSuite)) } diff --git a/util/appdefaults/appdefaults.go b/util/appdefaults/appdefaults.go index c1b6f8ae..b803f980 100644 --- a/util/appdefaults/appdefaults.go +++ b/util/appdefaults/appdefaults.go @@ -49,6 +49,9 @@ const ( GiteaRunnerReleasesURL = "https://gitea.com/api/v1/repos/gitea/act_runner/releases" // GiteaRunnerMinimumVersion is the minimum version we need in order to support ephemeral runners. GiteaRunnerMinimumVersion = "v0.2.12" + + // GARM agent releases URL + GARMAgentDefaultReleasesURL = "https://api.github.com/repos/cloudbase/garm-agent/releases" ) var Version string diff --git a/webapp/assets/_app/immutable/assets/0.BR5LdSBX.css b/webapp/assets/_app/immutable/assets/0.BR5LdSBX.css new file mode 100644 index 00000000..73410e32 --- /dev/null +++ b/webapp/assets/_app/immutable/assets/0.BR5LdSBX.css @@ -0,0 +1 @@ +@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-50:oklch(98% .016 73.684);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-900:oklch(35.9% .144 278.697);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-wide:.025em;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-full{right:100%}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-full{left:100%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.container\!{width:100%!important}@media (min-width:640px){.container\!{max-width:640px!important}}@media (min-width:768px){.container\!{max-width:768px!important}}@media (min-width:1024px){.container\!{max-width:1024px!important}}@media (min-width:1280px){.container\!{max-width:1280px!important}}@media (min-width:1536px){.container\!{max-width:1536px!important}}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.-mr-0\.5{margin-right:calc(var(--spacing)*-.5)}.-mr-1{margin-right:calc(var(--spacing)*-1)}.-mr-12{margin-right:calc(var(--spacing)*-12)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-2\.5{margin-right:calc(var(--spacing)*2.5)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-0\.5{margin-left:calc(var(--spacing)*-.5)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.h-0{height:calc(var(--spacing)*0)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-24{height:calc(var(--spacing)*24)}.h-48{height:calc(var(--spacing)*48)}.h-64{height:calc(var(--spacing)*64)}.h-full{height:100%}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[90vh\]{max-height:90vh}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[38px\]{min-height:38px}.min-h-\[42px\]{min-height:42px}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing)*0)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-64{width:calc(var(--spacing)*64)}.w-80{width:calc(var(--spacing)*80)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[120px\]{min-width:120px}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize\!{resize:both!important}.resize-none{resize:none}.resize-y{resize:vertical}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing)*0)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}:where(.-space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(-1px*var(--tw-space-y-reverse));margin-block-end:calc(-1px*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{-moz-column-gap:calc(var(--spacing)*4);column-gap:calc(var(--spacing)*4)}:where(.-space-x-px>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(-1px*var(--tw-space-x-reverse));margin-inline-end:calc(-1px*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-6{row-gap:calc(var(--spacing)*6)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-b-md{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-600{border-color:var(--color-gray-600)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-600{border-color:var(--color-indigo-600)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-yellow-300{border-color:var(--color-yellow-300)}.border-t-gray-900{border-top-color:var(--color-gray-900)}.border-r-gray-900{border-right-color:var(--color-gray-900)}.border-b-gray-900{border-bottom-color:var(--color-gray-900)}.border-l-gray-900{border-left-color:var(--color-gray-900)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-800\/50{background-color:#193cb880}@supports (color:color-mix(in lab,red,red)){.bg-blue-800\/50{background-color:color-mix(in oklab,var(--color-blue-800)50%,transparent)}}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-900{background-color:var(--color-red-900)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-white{--tw-gradient-to:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-20{padding-top:calc(var(--spacing)*20)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-black{color:var(--color-black)}.text-blue-200{color:var(--color-blue-200)}.text-blue-400{color:var(--color-blue-400)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-600{color:var(--color-indigo-600)}.text-orange-700{color:var(--color-orange-700)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-red-200{color:var(--color-red-200)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.underline\!{text-decoration-line:underline!important}.placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.placeholder-gray-500::placeholder{color:var(--color-gray-500)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-600\/20{--tw-ring-color:#155dfc33}@supports (color:color-mix(in lab,red,red)){.ring-blue-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-600)20%,transparent)}}.ring-gray-200{--tw-ring-color:var(--color-gray-200)}.ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.ring-gray-600\/20{--tw-ring-color:#4a556533}@supports (color:color-mix(in lab,red,red)){.ring-gray-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-600)20%,transparent)}}.ring-green-200{--tw-ring-color:var(--color-green-200)}.ring-green-600\/20{--tw-ring-color:#00a54433}@supports (color:color-mix(in lab,red,red)){.ring-green-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-600)20%,transparent)}}.ring-orange-600\/20{--tw-ring-color:#f0510033}@supports (color:color-mix(in lab,red,red)){.ring-orange-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-600)20%,transparent)}}.ring-purple-600\/20{--tw-ring-color:#9810fa33}@supports (color:color-mix(in lab,red,red)){.ring-purple-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-600)20%,transparent)}}.ring-red-200{--tw-ring-color:var(--color-red-200)}.ring-red-600\/20{--tw-ring-color:#e4001433}@supports (color:color-mix(in lab,red,red)){.ring-red-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-600)20%,transparent)}}.ring-yellow-200{--tw-ring-color:var(--color-yellow-200)}.ring-yellow-600\/20{--tw-ring-color:#cd890033}@supports (color:color-mix(in lab,red,red)){.ring-yellow-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-600)20%,transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.ring-inset{--tw-ring-inset:inset}@media (hover:hover){.group-hover\:visible:is(:where(.group):hover *){visibility:visible}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:bg-blue-200:hover{background-color:var(--color-blue-200)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-400:hover{background-color:var(--color-green-400)}.hover\:bg-red-200:hover{background-color:var(--color-red-200)}.hover\:bg-red-400:hover{background-color:var(--color-red-400)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-500:hover{color:var(--color-green-500)}.hover\:text-green-900:hover{color:var(--color-green-900)}.hover\:text-indigo-500:hover{color:var(--color-indigo-500)}.hover\:text-indigo-900:hover{color:var(--color-indigo-900)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-900:hover{color:var(--color-red-900)}.hover\:text-yellow-300:hover{color:var(--color-yellow-300)}.hover\:text-yellow-500:hover{color:var(--color-yellow-500)}.hover\:text-yellow-800:hover{color:var(--color-yellow-800)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:bg-red-200:focus{background-color:var(--color-red-200)}.focus\:placeholder-gray-400:focus::-moz-placeholder{color:var(--color-gray-400)}.focus\:placeholder-gray-400:focus::placeholder{color:var(--color-gray-400)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white:focus{--tw-ring-color:var(--color-white)}.focus\:ring-yellow-500:focus{--tw-ring-color:var(--color-yellow-500)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-400:disabled{background-color:var(--color-gray-400)}.disabled\:opacity-50:disabled{opacity:.5}@media (hover:hover){.disabled\:hover\:bg-gray-400:disabled:hover{background-color:var(--color-gray-400)}}@media (min-width:640px){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:w-full{width:100%}.sm\:max-w-md{max-width:var(--container-md)}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media (min-width:768px){.md\:ml-2{margin-left:calc(var(--spacing)*2)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}:where(.md\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}}@media (min-width:1024px){.lg\:fixed{position:fixed}.lg\:inset-y-0{inset-block:calc(var(--spacing)*0)}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-64{width:calc(var(--spacing)*64)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-col{flex-direction:column}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:pt-6{padding-top:calc(var(--spacing)*6)}.lg\:pl-64{padding-left:calc(var(--spacing)*64)}}.dark .dark\:block{display:block}.dark .dark\:hidden{display:none}:where(.dark .dark\:divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}.dark .dark\:border-blue-700{border-color:var(--color-blue-700)}.dark .dark\:border-blue-800{border-color:var(--color-blue-800)}.dark .dark\:border-gray-600{border-color:var(--color-gray-600)}.dark .dark\:border-gray-700{border-color:var(--color-gray-700)}.dark .dark\:border-green-700{border-color:var(--color-green-700)}.dark .dark\:border-red-500{border-color:var(--color-red-500)}.dark .dark\:border-red-600{border-color:var(--color-red-600)}.dark .dark\:border-red-700{border-color:var(--color-red-700)}.dark .dark\:border-red-800{border-color:var(--color-red-800)}.dark .dark\:border-yellow-600{border-color:var(--color-yellow-600)}.dark .dark\:border-yellow-700{border-color:var(--color-yellow-700)}.dark .dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark .dark\:bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.dark .dark\:bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.dark .dark\:bg-blue-700{background-color:var(--color-blue-700)}.dark .dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark .dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark .dark\:bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark .dark\:bg-blue-900\/50{background-color:#1c398e80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/50{background-color:color-mix(in oklab,var(--color-blue-900)50%,transparent)}}.dark .dark\:bg-gray-500\/10{background-color:#6a72821a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-500\/10{background-color:color-mix(in oklab,var(--color-gray-500)10%,transparent)}}.dark .dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark .dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark .dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark .dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark .dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark .dark\:bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.dark .dark\:bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.dark .dark\:bg-green-900{background-color:var(--color-green-900)}.dark .dark\:bg-green-900\/50{background-color:#0d542b80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-900\/50{background-color:color-mix(in oklab,var(--color-green-900)50%,transparent)}}.dark .dark\:bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500)10%,transparent)}}.dark .dark\:bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-purple-500\/10{background-color:color-mix(in oklab,var(--color-purple-500)10%,transparent)}}.dark .dark\:bg-purple-900{background-color:var(--color-purple-900)}.dark .dark\:bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.dark .dark\:bg-red-700{background-color:var(--color-red-700)}.dark .dark\:bg-red-800{background-color:var(--color-red-800)}.dark .dark\:bg-red-900{background-color:var(--color-red-900)}.dark .dark\:bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark .dark\:bg-red-900\/50{background-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/50{background-color:color-mix(in oklab,var(--color-red-900)50%,transparent)}}.dark .dark\:bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500)10%,transparent)}}.dark .dark\:bg-yellow-900{background-color:var(--color-yellow-900)}.dark .dark\:bg-yellow-900\/20{background-color:#733e0a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}}.dark .dark\:from-gray-800{--tw-gradient-from:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-700{--tw-gradient-to:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:text-blue-100{color:var(--color-blue-100)}.dark .dark\:text-blue-200{color:var(--color-blue-200)}.dark .dark\:text-blue-300{color:var(--color-blue-300)}.dark .dark\:text-blue-400{color:var(--color-blue-400)}.dark .dark\:text-gray-200{color:var(--color-gray-200)}.dark .dark\:text-gray-300{color:var(--color-gray-300)}.dark .dark\:text-gray-400{color:var(--color-gray-400)}.dark .dark\:text-gray-500{color:var(--color-gray-500)}.dark .dark\:text-green-200{color:var(--color-green-200)}.dark .dark\:text-green-300{color:var(--color-green-300)}.dark .dark\:text-green-400{color:var(--color-green-400)}.dark .dark\:text-indigo-400{color:var(--color-indigo-400)}.dark .dark\:text-orange-400{color:var(--color-orange-400)}.dark .dark\:text-purple-200{color:var(--color-purple-200)}.dark .dark\:text-purple-400{color:var(--color-purple-400)}.dark .dark\:text-red-100{color:var(--color-red-100)}.dark .dark\:text-red-200{color:var(--color-red-200)}.dark .dark\:text-red-300{color:var(--color-red-300)}.dark .dark\:text-red-400{color:var(--color-red-400)}.dark .dark\:text-white{color:var(--color-white)}.dark .dark\:text-yellow-200{color:var(--color-yellow-200)}.dark .dark\:text-yellow-300{color:var(--color-yellow-300)}.dark .dark\:text-yellow-400{color:var(--color-yellow-400)}.dark .dark\:placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-400::placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.dark .dark\:placeholder-gray-500::placeholder{color:var(--color-gray-500)}.dark .dark\:ring-blue-400\/20{--tw-ring-color:#54a2ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)20%,transparent)}}.dark .dark\:ring-blue-400\/30{--tw-ring-color:#54a2ff4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)30%,transparent)}}.dark .dark\:ring-blue-500\/20{--tw-ring-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.dark .dark\:ring-gray-400\/20{--tw-ring-color:#99a1af33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)20%,transparent)}}.dark .dark\:ring-gray-400\/30{--tw-ring-color:#99a1af4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)30%,transparent)}}.dark .dark\:ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.dark .dark\:ring-green-400\/20{--tw-ring-color:#05df7233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-400)20%,transparent)}}.dark .dark\:ring-green-400\/30{--tw-ring-color:#05df724d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-green-400)30%,transparent)}}.dark .dark\:ring-green-500\/20{--tw-ring-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.dark .dark\:ring-orange-500\/20{--tw-ring-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-orange-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.dark .dark\:ring-purple-400\/30{--tw-ring-color:#c07eff4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-purple-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-purple-400)30%,transparent)}}.dark .dark\:ring-purple-500\/20{--tw-ring-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-purple-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.dark .dark\:ring-red-400\/20{--tw-ring-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-400)20%,transparent)}}.dark .dark\:ring-red-400\/30{--tw-ring-color:#ff65684d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-red-400)30%,transparent)}}.dark .dark\:ring-red-500\/20{--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.dark .dark\:ring-yellow-400\/30{--tw-ring-color:#fac8004d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-yellow-400)30%,transparent)}}.dark .dark\:ring-yellow-500\/20{--tw-ring-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}@media (hover:hover){.dark .dark\:hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.dark .dark\:hover\:border-gray-500:hover{border-color:var(--color-gray-500)}.dark .dark\:hover\:bg-blue-800:hover{background-color:var(--color-blue-800)}.dark .dark\:hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}.dark .dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.dark .dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark .dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark .dark\:hover\:bg-red-700:hover{background-color:var(--color-red-700)}.dark .dark\:hover\:bg-red-800:hover{background-color:var(--color-red-800)}.dark .dark\:hover\:text-blue-100:hover{color:var(--color-blue-100)}.dark .dark\:hover\:text-blue-300:hover{color:var(--color-blue-300)}.dark .dark\:hover\:text-blue-400:hover{color:var(--color-blue-400)}.dark .dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.dark .dark\:hover\:text-gray-300:hover{color:var(--color-gray-300)}.dark .dark\:hover\:text-green-300:hover{color:var(--color-green-300)}.dark .dark\:hover\:text-indigo-300:hover{color:var(--color-indigo-300)}.dark .dark\:hover\:text-red-300:hover{color:var(--color-red-300)}.dark .dark\:hover\:text-white:hover{color:var(--color-white)}.dark .dark\:hover\:text-yellow-300:hover{color:var(--color-yellow-300)}}.dark .dark\:focus\:bg-red-700:focus{background-color:var(--color-red-700)}.dark .dark\:focus\:ring-offset-gray-900:focus{--tw-ring-offset-color:var(--color-gray-900)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/webapp/assets/_app/immutable/assets/0.BSyLSYks.css b/webapp/assets/_app/immutable/assets/0.BSyLSYks.css deleted file mode 100644 index 0da004ab..00000000 --- a/webapp/assets/_app/immutable/assets/0.BSyLSYks.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-50:oklch(98% .016 73.684);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-900:oklch(35.9% .144 278.697);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-wide:.025em;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-full{right:100%}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-full{left:100%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.container\!{width:100%!important}@media (min-width:640px){.container\!{max-width:640px!important}}@media (min-width:768px){.container\!{max-width:768px!important}}@media (min-width:1024px){.container\!{max-width:1024px!important}}@media (min-width:1280px){.container\!{max-width:1280px!important}}@media (min-width:1536px){.container\!{max-width:1536px!important}}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.-mr-0\.5{margin-right:calc(var(--spacing)*-.5)}.-mr-1{margin-right:calc(var(--spacing)*-1)}.-mr-12{margin-right:calc(var(--spacing)*-12)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-2\.5{margin-right:calc(var(--spacing)*2.5)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-0\.5{margin-left:calc(var(--spacing)*-.5)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.h-0{height:calc(var(--spacing)*0)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-24{height:calc(var(--spacing)*24)}.h-48{height:calc(var(--spacing)*48)}.h-64{height:calc(var(--spacing)*64)}.h-full{height:100%}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[90vh\]{max-height:90vh}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[38px\]{min-height:38px}.min-h-\[42px\]{min-height:42px}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing)*0)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-64{width:calc(var(--spacing)*64)}.w-80{width:calc(var(--spacing)*80)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[120px\]{min-width:120px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize\!{resize:both!important}.resize-none{resize:none}.resize-y{resize:vertical}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing)*0)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}:where(.-space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(-1px*var(--tw-space-y-reverse));margin-block-end:calc(-1px*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{-moz-column-gap:calc(var(--spacing)*4);column-gap:calc(var(--spacing)*4)}:where(.-space-x-px>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(-1px*var(--tw-space-x-reverse));margin-inline-end:calc(-1px*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-6{row-gap:calc(var(--spacing)*6)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-b-md{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-600{border-color:var(--color-gray-600)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-600{border-color:var(--color-indigo-600)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-yellow-300{border-color:var(--color-yellow-300)}.border-t-gray-900{border-top-color:var(--color-gray-900)}.border-r-gray-900{border-right-color:var(--color-gray-900)}.border-b-gray-900{border-bottom-color:var(--color-gray-900)}.border-l-gray-900{border-left-color:var(--color-gray-900)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-800\/50{background-color:#193cb880}@supports (color:color-mix(in lab,red,red)){.bg-blue-800\/50{background-color:color-mix(in oklab,var(--color-blue-800)50%,transparent)}}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-900{background-color:var(--color-red-900)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-white{--tw-gradient-to:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-20{padding-top:calc(var(--spacing)*20)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-black{color:var(--color-black)}.text-blue-200{color:var(--color-blue-200)}.text-blue-400{color:var(--color-blue-400)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-indigo-600{color:var(--color-indigo-600)}.text-orange-700{color:var(--color-orange-700)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.placeholder-gray-500::placeholder{color:var(--color-gray-500)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-600\/20{--tw-ring-color:#155dfc33}@supports (color:color-mix(in lab,red,red)){.ring-blue-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-600)20%,transparent)}}.ring-gray-200{--tw-ring-color:var(--color-gray-200)}.ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.ring-gray-600\/20{--tw-ring-color:#4a556533}@supports (color:color-mix(in lab,red,red)){.ring-gray-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-600)20%,transparent)}}.ring-green-200{--tw-ring-color:var(--color-green-200)}.ring-green-600\/20{--tw-ring-color:#00a54433}@supports (color:color-mix(in lab,red,red)){.ring-green-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-600)20%,transparent)}}.ring-orange-600\/20{--tw-ring-color:#f0510033}@supports (color:color-mix(in lab,red,red)){.ring-orange-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-600)20%,transparent)}}.ring-purple-600\/20{--tw-ring-color:#9810fa33}@supports (color:color-mix(in lab,red,red)){.ring-purple-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-600)20%,transparent)}}.ring-red-200{--tw-ring-color:var(--color-red-200)}.ring-red-600\/20{--tw-ring-color:#e4001433}@supports (color:color-mix(in lab,red,red)){.ring-red-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-600)20%,transparent)}}.ring-yellow-200{--tw-ring-color:var(--color-yellow-200)}.ring-yellow-600\/20{--tw-ring-color:#cd890033}@supports (color:color-mix(in lab,red,red)){.ring-yellow-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-600)20%,transparent)}}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.ring-inset{--tw-ring-inset:inset}@media (hover:hover){.group-hover\:visible:is(:where(.group):hover *){visibility:visible}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:bg-blue-200:hover{background-color:var(--color-blue-200)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-red-200:hover{background-color:var(--color-red-200)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-500:hover{color:var(--color-green-500)}.hover\:text-green-900:hover{color:var(--color-green-900)}.hover\:text-indigo-500:hover{color:var(--color-indigo-500)}.hover\:text-indigo-900:hover{color:var(--color-indigo-900)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-900:hover{color:var(--color-red-900)}.hover\:text-yellow-300:hover{color:var(--color-yellow-300)}.hover\:text-yellow-500:hover{color:var(--color-yellow-500)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:bg-red-200:focus{background-color:var(--color-red-200)}.focus\:placeholder-gray-400:focus::-moz-placeholder{color:var(--color-gray-400)}.focus\:placeholder-gray-400:focus::placeholder{color:var(--color-gray-400)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white:focus{--tw-ring-color:var(--color-white)}.focus\:ring-yellow-500:focus{--tw-ring-color:var(--color-yellow-500)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-400:disabled{background-color:var(--color-gray-400)}.disabled\:opacity-50:disabled{opacity:.5}@media (hover:hover){.disabled\:hover\:bg-gray-400:disabled:hover{background-color:var(--color-gray-400)}}@media (min-width:640px){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:w-full{width:100%}.sm\:max-w-md{max-width:var(--container-md)}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media (min-width:768px){.md\:ml-2{margin-left:calc(var(--spacing)*2)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}:where(.md\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}}@media (min-width:1024px){.lg\:fixed{position:fixed}.lg\:inset-y-0{inset-block:calc(var(--spacing)*0)}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-64{width:calc(var(--spacing)*64)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-col{flex-direction:column}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:pt-6{padding-top:calc(var(--spacing)*6)}.lg\:pl-64{padding-left:calc(var(--spacing)*64)}}.dark .dark\:block{display:block}.dark .dark\:hidden{display:none}:where(.dark .dark\:divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}.dark .dark\:border-blue-700{border-color:var(--color-blue-700)}.dark .dark\:border-blue-800{border-color:var(--color-blue-800)}.dark .dark\:border-gray-600{border-color:var(--color-gray-600)}.dark .dark\:border-gray-700{border-color:var(--color-gray-700)}.dark .dark\:border-green-700{border-color:var(--color-green-700)}.dark .dark\:border-red-500{border-color:var(--color-red-500)}.dark .dark\:border-red-600{border-color:var(--color-red-600)}.dark .dark\:border-red-700{border-color:var(--color-red-700)}.dark .dark\:border-red-800{border-color:var(--color-red-800)}.dark .dark\:border-yellow-600{border-color:var(--color-yellow-600)}.dark .dark\:border-yellow-700{border-color:var(--color-yellow-700)}.dark .dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark .dark\:bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.dark .dark\:bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.dark .dark\:bg-blue-700{background-color:var(--color-blue-700)}.dark .dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark .dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark .dark\:bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark .dark\:bg-blue-900\/50{background-color:#1c398e80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/50{background-color:color-mix(in oklab,var(--color-blue-900)50%,transparent)}}.dark .dark\:bg-gray-500\/10{background-color:#6a72821a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-500\/10{background-color:color-mix(in oklab,var(--color-gray-500)10%,transparent)}}.dark .dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark .dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark .dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark .dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark .dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark .dark\:bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.dark .dark\:bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.dark .dark\:bg-green-900{background-color:var(--color-green-900)}.dark .dark\:bg-green-900\/50{background-color:#0d542b80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-900\/50{background-color:color-mix(in oklab,var(--color-green-900)50%,transparent)}}.dark .dark\:bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500)10%,transparent)}}.dark .dark\:bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-purple-500\/10{background-color:color-mix(in oklab,var(--color-purple-500)10%,transparent)}}.dark .dark\:bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.dark .dark\:bg-red-700{background-color:var(--color-red-700)}.dark .dark\:bg-red-800{background-color:var(--color-red-800)}.dark .dark\:bg-red-900{background-color:var(--color-red-900)}.dark .dark\:bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark .dark\:bg-red-900\/50{background-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/50{background-color:color-mix(in oklab,var(--color-red-900)50%,transparent)}}.dark .dark\:bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500)10%,transparent)}}.dark .dark\:bg-yellow-900{background-color:var(--color-yellow-900)}.dark .dark\:bg-yellow-900\/20{background-color:#733e0a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}}.dark .dark\:from-gray-800{--tw-gradient-from:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-700{--tw-gradient-to:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:text-blue-100{color:var(--color-blue-100)}.dark .dark\:text-blue-200{color:var(--color-blue-200)}.dark .dark\:text-blue-300{color:var(--color-blue-300)}.dark .dark\:text-blue-400{color:var(--color-blue-400)}.dark .dark\:text-gray-200{color:var(--color-gray-200)}.dark .dark\:text-gray-300{color:var(--color-gray-300)}.dark .dark\:text-gray-400{color:var(--color-gray-400)}.dark .dark\:text-gray-500{color:var(--color-gray-500)}.dark .dark\:text-green-200{color:var(--color-green-200)}.dark .dark\:text-green-300{color:var(--color-green-300)}.dark .dark\:text-green-400{color:var(--color-green-400)}.dark .dark\:text-indigo-400{color:var(--color-indigo-400)}.dark .dark\:text-orange-400{color:var(--color-orange-400)}.dark .dark\:text-purple-400{color:var(--color-purple-400)}.dark .dark\:text-red-100{color:var(--color-red-100)}.dark .dark\:text-red-200{color:var(--color-red-200)}.dark .dark\:text-red-300{color:var(--color-red-300)}.dark .dark\:text-red-400{color:var(--color-red-400)}.dark .dark\:text-white{color:var(--color-white)}.dark .dark\:text-yellow-200{color:var(--color-yellow-200)}.dark .dark\:text-yellow-300{color:var(--color-yellow-300)}.dark .dark\:text-yellow-400{color:var(--color-yellow-400)}.dark .dark\:placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-400::placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.dark .dark\:placeholder-gray-500::placeholder{color:var(--color-gray-500)}.dark .dark\:ring-blue-400\/20{--tw-ring-color:#54a2ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)20%,transparent)}}.dark .dark\:ring-blue-400\/30{--tw-ring-color:#54a2ff4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)30%,transparent)}}.dark .dark\:ring-blue-500\/20{--tw-ring-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.dark .dark\:ring-gray-400\/20{--tw-ring-color:#99a1af33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)20%,transparent)}}.dark .dark\:ring-gray-400\/30{--tw-ring-color:#99a1af4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)30%,transparent)}}.dark .dark\:ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.dark .dark\:ring-green-400\/20{--tw-ring-color:#05df7233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-400)20%,transparent)}}.dark .dark\:ring-green-400\/30{--tw-ring-color:#05df724d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-green-400)30%,transparent)}}.dark .dark\:ring-green-500\/20{--tw-ring-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.dark .dark\:ring-orange-500\/20{--tw-ring-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-orange-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.dark .dark\:ring-purple-500\/20{--tw-ring-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-purple-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.dark .dark\:ring-red-400\/20{--tw-ring-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-400)20%,transparent)}}.dark .dark\:ring-red-400\/30{--tw-ring-color:#ff65684d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-red-400)30%,transparent)}}.dark .dark\:ring-red-500\/20{--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.dark .dark\:ring-yellow-400\/30{--tw-ring-color:#fac8004d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-yellow-400)30%,transparent)}}.dark .dark\:ring-yellow-500\/20{--tw-ring-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}@media (hover:hover){.dark .dark\:hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.dark .dark\:hover\:border-gray-500:hover{border-color:var(--color-gray-500)}.dark .dark\:hover\:bg-blue-800:hover{background-color:var(--color-blue-800)}.dark .dark\:hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}.dark .dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.dark .dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark .dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark .dark\:hover\:bg-red-700:hover{background-color:var(--color-red-700)}.dark .dark\:hover\:bg-red-800:hover{background-color:var(--color-red-800)}.dark .dark\:hover\:text-blue-100:hover{color:var(--color-blue-100)}.dark .dark\:hover\:text-blue-300:hover{color:var(--color-blue-300)}.dark .dark\:hover\:text-blue-400:hover{color:var(--color-blue-400)}.dark .dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.dark .dark\:hover\:text-gray-300:hover{color:var(--color-gray-300)}.dark .dark\:hover\:text-green-300:hover{color:var(--color-green-300)}.dark .dark\:hover\:text-indigo-300:hover{color:var(--color-indigo-300)}.dark .dark\:hover\:text-red-300:hover{color:var(--color-red-300)}.dark .dark\:hover\:text-white:hover{color:var(--color-white)}}.dark .dark\:focus\:bg-red-700:focus{background-color:var(--color-red-700)}.dark .dark\:focus\:ring-offset-gray-900:focus{--tw-ring-offset-color:var(--color-gray-900)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/webapp/assets/_app/immutable/assets/ShellTerminal.DCUnEedW.css b/webapp/assets/_app/immutable/assets/ShellTerminal.DCUnEedW.css new file mode 100644 index 00000000..64f38389 --- /dev/null +++ b/webapp/assets/_app/immutable/assets/ShellTerminal.DCUnEedW.css @@ -0,0 +1 @@ +.xterm{cursor:text;position:relative;-moz-user-select:none;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;inset:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;inset:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::-moz-selection{color:transparent}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{-webkit-user-select:text;-moz-user-select:text;user-select:text;white-space:pre}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:double underline;text-decoration:double underline}.xterm-underline-3{-webkit-text-decoration:wavy underline;text-decoration:wavy underline}.xterm-underline-4{-webkit-text-decoration:dotted underline;text-decoration:dotted underline}.xterm-underline-5{-webkit-text-decoration:dashed underline;text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.shell-terminal-container.svelte-oanjs5{background-color:#ffffffd9;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid rgb(229 231 235 / .5);border-radius:.5rem;overflow:hidden;box-shadow:0 25px 50px -12px #00000040;width:800px;min-width:300px;height:500px;min-height:200px;max-height:90vh;max-width:none;display:flex;flex-direction:column;position:relative;resize:none}.tab-bar.svelte-oanjs5{background-color:#e5e7eb99;border-bottom:1px solid rgb(209 213 219 / .7);padding:0;flex-shrink:0}.dark .tab-bar.svelte-oanjs5{background-color:#37415199;border-bottom:1px solid rgb(75 85 99 / .7)}.tabs-container.svelte-oanjs5{display:flex;align-items:center;overflow-x:auto;scrollbar-width:none}.tabs-container.svelte-oanjs5::-webkit-scrollbar{display:none}.tab.svelte-oanjs5{background-color:#f3f4f6b3;border-right:1px solid rgb(209 213 219 / .5);padding:.5rem .75rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;min-width:120px;max-width:200px;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:background-color .15s ease}.tab.svelte-oanjs5:hover{background-color:#f3f4f6}.tab.active.svelte-oanjs5{background-color:#ffffffe6;border-bottom:2px solid rgb(59 130 246)}.dark .tab.svelte-oanjs5{background-color:#1f2937b3;border-right:1px solid rgb(55 65 81 / .5)}.dark .tab.svelte-oanjs5:hover{background-color:#1f2937}.dark .tab.active.svelte-oanjs5{background-color:#1e293be6;border-bottom:2px solid rgb(59 130 246)}.tab-title.svelte-oanjs5{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;color:#4b5563}.dark .tab-title.svelte-oanjs5{color:#d1d5db}.tab.active.svelte-oanjs5 .tab-title:where(.svelte-oanjs5){color:#111827;font-weight:500}.dark .tab.active.svelte-oanjs5 .tab-title:where(.svelte-oanjs5){color:#f3f4f6}.tab-close.svelte-oanjs5{opacity:0;transition:opacity .15s ease;padding:.125rem;border-radius:.25rem;color:#6b7280}.tab.svelte-oanjs5:hover .tab-close:where(.svelte-oanjs5),.tab.active.svelte-oanjs5 .tab-close:where(.svelte-oanjs5){opacity:1}.tab-close.svelte-oanjs5:hover{background-color:#ef44441a;color:#ef4444}.dark .tab-close.svelte-oanjs5{color:#9ca3af}.dark .tab-close.svelte-oanjs5:hover{background-color:#ef444433;color:#f87171}.new-tab-button.svelte-oanjs5{background-color:transparent;border:none;padding:.5rem .75rem;cursor:pointer;color:#6b7280;transition:all .15s ease;display:flex;align-items:center;justify-content:center}.new-tab-button.svelte-oanjs5:hover{background-color:#f3f4f6b3;color:#3b82f6}.dark .new-tab-button.svelte-oanjs5{color:#9ca3af}.dark .new-tab-button.svelte-oanjs5:hover{background-color:#1f2937b3;color:#60a5fa}.new-tab-button.svelte-oanjs5:disabled{opacity:.5;cursor:not-allowed}.new-tab-button.svelte-oanjs5:disabled:hover{background-color:transparent;color:#6b7280}.dark .new-tab-button.svelte-oanjs5:disabled:hover{background-color:transparent;color:#9ca3af}.dark .shell-terminal-container.svelte-oanjs5{background-color:#1e293bd9;border:1px solid rgb(71 85 105 / .3)}.shell-terminal-container.svelte-oanjs5:fullscreen{-webkit-backdrop-filter:none;backdrop-filter:none;border-radius:0;height:100vh;max-height:none;background-color:#fff;border:none}.dark .shell-terminal-container.svelte-oanjs5:fullscreen{background-color:#111827}.shell-header.svelte-oanjs5{background-color:#f3f4f6e6;padding:.5rem 1rem;border-bottom:1px solid rgb(229 231 235 / .7);flex-shrink:0;cursor:move;-webkit-user-select:none;-moz-user-select:none;user-select:none}.shell-header.svelte-oanjs5:hover{background-color:#f3f4f6}.dark .shell-header.svelte-oanjs5{background-color:#1f2937e6;border-bottom:1px solid rgb(55 65 81 / .7)}.dark .shell-header.svelte-oanjs5:hover{background-color:#1f2937}.shell-terminal-container.svelte-oanjs5:fullscreen .shell-header:where(.svelte-oanjs5){background-color:#f3f4f6;border-bottom:1px solid rgb(229 231 235);cursor:default}.dark .shell-terminal-container.svelte-oanjs5:fullscreen .shell-header:where(.svelte-oanjs5){background-color:#1f2937;border-bottom:1px solid rgb(55 65 81)}.shell-terminal-container.svelte-oanjs5:fullscreen .shell-header:where(.svelte-oanjs5):hover{background-color:#f3f4f6}.dark .shell-terminal-container.svelte-oanjs5:fullscreen .shell-header:where(.svelte-oanjs5):hover{background-color:#1f2937}.shell-body.svelte-oanjs5{flex:1;overflow:hidden;display:flex;flex-direction:column;position:relative}.shell-body.svelte-oanjs5::-webkit-scrollbar{display:none!important}.shell-body.svelte-oanjs5{scrollbar-width:none!important;-ms-overflow-style:none!important}.shell-status.svelte-oanjs5{color:#d1d5db;padding:2rem;height:100%;display:flex;align-items:center;justify-content:center;position:relative;z-index:10}.shell-status.connecting.svelte-oanjs5{background-color:#f8fafc;color:#4b5563}.dark .shell-status.connecting.svelte-oanjs5{background-color:#0f172a;color:#d1d5db}.shell-status.error.svelte-oanjs5{color:#fca5a5;background-color:#fef2f2}.dark .shell-status.error.svelte-oanjs5{background-color:#230c0c}.terminal-tab.svelte-oanjs5{flex:1;height:100%;padding:0;overflow:hidden;border:none!important;outline:none!important;position:absolute;width:100%;top:0;left:0;z-index:1;pointer-events:none;visibility:hidden;opacity:0}.terminal-tab.active.svelte-oanjs5{z-index:10;pointer-events:auto;visibility:visible;opacity:1}.terminal-tab.svelte-oanjs5::-webkit-scrollbar{display:none!important}.terminal-tab.svelte-oanjs5{scrollbar-width:none!important;-ms-overflow-style:none!important}.resize-handle.svelte-oanjs5{position:absolute;bottom:0;right:0;width:20px;height:20px;cursor:nw-resize;background:linear-gradient(135deg,transparent 0%,transparent 30%,rgb(156 163 175 / .3) 30%,rgb(156 163 175 / .3) 35%,transparent 35%,transparent 45%,rgb(156 163 175 / .3) 45%,rgb(156 163 175 / .3) 50%,transparent 50%,transparent 60%,rgb(156 163 175 / .3) 60%,rgb(156 163 175 / .3) 65%,transparent 65%);z-index:10;border-bottom-right-radius:.5rem}.resize-handle.svelte-oanjs5:hover{background:linear-gradient(135deg,transparent 0%,transparent 30%,rgb(156 163 175 / .6) 30%,rgb(156 163 175 / .6) 35%,transparent 35%,transparent 45%,rgb(156 163 175 / .6) 45%,rgb(156 163 175 / .6) 50%,transparent 50%,transparent 60%,rgb(156 163 175 / .6) 60%,rgb(156 163 175 / .6) 65%,transparent 65%)}.dark .resize-handle.svelte-oanjs5{background:linear-gradient(135deg,transparent 0%,transparent 30%,rgb(209 213 219 / .3) 30%,rgb(209 213 219 / .3) 35%,transparent 35%,transparent 45%,rgb(209 213 219 / .3) 45%,rgb(209 213 219 / .3) 50%,transparent 50%,transparent 60%,rgb(209 213 219 / .3) 60%,rgb(209 213 219 / .3) 65%,transparent 65%)}.dark .resize-handle.svelte-oanjs5:hover{background:linear-gradient(135deg,transparent 0%,transparent 30%,rgb(209 213 219 / .6) 30%,rgb(209 213 219 / .6) 35%,transparent 35%,transparent 45%,rgb(209 213 219 / .6) 45%,rgb(209 213 219 / .6) 50%,transparent 50%,transparent 60%,rgb(209 213 219 / .6) 60%,rgb(209 213 219 / .6) 65%,transparent 65%)}.shell-terminal-container.svelte-oanjs5:fullscreen .resize-handle:where(.svelte-oanjs5){display:none} diff --git a/webapp/assets/_app/immutable/assets/_layout.BR5LdSBX.css b/webapp/assets/_app/immutable/assets/_layout.BR5LdSBX.css new file mode 100644 index 00000000..73410e32 --- /dev/null +++ b/webapp/assets/_app/immutable/assets/_layout.BR5LdSBX.css @@ -0,0 +1 @@ +@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-50:oklch(98% .016 73.684);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-900:oklch(35.9% .144 278.697);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-wide:.025em;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-full{right:100%}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-full{left:100%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.container\!{width:100%!important}@media (min-width:640px){.container\!{max-width:640px!important}}@media (min-width:768px){.container\!{max-width:768px!important}}@media (min-width:1024px){.container\!{max-width:1024px!important}}@media (min-width:1280px){.container\!{max-width:1280px!important}}@media (min-width:1536px){.container\!{max-width:1536px!important}}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.-mr-0\.5{margin-right:calc(var(--spacing)*-.5)}.-mr-1{margin-right:calc(var(--spacing)*-1)}.-mr-12{margin-right:calc(var(--spacing)*-12)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-2\.5{margin-right:calc(var(--spacing)*2.5)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-0\.5{margin-left:calc(var(--spacing)*-.5)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.h-0{height:calc(var(--spacing)*0)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-24{height:calc(var(--spacing)*24)}.h-48{height:calc(var(--spacing)*48)}.h-64{height:calc(var(--spacing)*64)}.h-full{height:100%}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[90vh\]{max-height:90vh}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[38px\]{min-height:38px}.min-h-\[42px\]{min-height:42px}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing)*0)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-64{width:calc(var(--spacing)*64)}.w-80{width:calc(var(--spacing)*80)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[120px\]{min-width:120px}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize\!{resize:both!important}.resize-none{resize:none}.resize-y{resize:vertical}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing)*0)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}:where(.-space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(-1px*var(--tw-space-y-reverse));margin-block-end:calc(-1px*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{-moz-column-gap:calc(var(--spacing)*4);column-gap:calc(var(--spacing)*4)}:where(.-space-x-px>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(-1px*var(--tw-space-x-reverse));margin-inline-end:calc(-1px*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-6{row-gap:calc(var(--spacing)*6)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-b-md{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-600{border-color:var(--color-gray-600)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-600{border-color:var(--color-indigo-600)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-yellow-300{border-color:var(--color-yellow-300)}.border-t-gray-900{border-top-color:var(--color-gray-900)}.border-r-gray-900{border-right-color:var(--color-gray-900)}.border-b-gray-900{border-bottom-color:var(--color-gray-900)}.border-l-gray-900{border-left-color:var(--color-gray-900)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-800\/50{background-color:#193cb880}@supports (color:color-mix(in lab,red,red)){.bg-blue-800\/50{background-color:color-mix(in oklab,var(--color-blue-800)50%,transparent)}}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-900{background-color:var(--color-red-900)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-white{--tw-gradient-to:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-20{padding-top:calc(var(--spacing)*20)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-black{color:var(--color-black)}.text-blue-200{color:var(--color-blue-200)}.text-blue-400{color:var(--color-blue-400)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-600{color:var(--color-indigo-600)}.text-orange-700{color:var(--color-orange-700)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-red-200{color:var(--color-red-200)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.underline\!{text-decoration-line:underline!important}.placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.placeholder-gray-500::placeholder{color:var(--color-gray-500)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-600\/20{--tw-ring-color:#155dfc33}@supports (color:color-mix(in lab,red,red)){.ring-blue-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-600)20%,transparent)}}.ring-gray-200{--tw-ring-color:var(--color-gray-200)}.ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.ring-gray-600\/20{--tw-ring-color:#4a556533}@supports (color:color-mix(in lab,red,red)){.ring-gray-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-600)20%,transparent)}}.ring-green-200{--tw-ring-color:var(--color-green-200)}.ring-green-600\/20{--tw-ring-color:#00a54433}@supports (color:color-mix(in lab,red,red)){.ring-green-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-600)20%,transparent)}}.ring-orange-600\/20{--tw-ring-color:#f0510033}@supports (color:color-mix(in lab,red,red)){.ring-orange-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-600)20%,transparent)}}.ring-purple-600\/20{--tw-ring-color:#9810fa33}@supports (color:color-mix(in lab,red,red)){.ring-purple-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-600)20%,transparent)}}.ring-red-200{--tw-ring-color:var(--color-red-200)}.ring-red-600\/20{--tw-ring-color:#e4001433}@supports (color:color-mix(in lab,red,red)){.ring-red-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-600)20%,transparent)}}.ring-yellow-200{--tw-ring-color:var(--color-yellow-200)}.ring-yellow-600\/20{--tw-ring-color:#cd890033}@supports (color:color-mix(in lab,red,red)){.ring-yellow-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-600)20%,transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.ring-inset{--tw-ring-inset:inset}@media (hover:hover){.group-hover\:visible:is(:where(.group):hover *){visibility:visible}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:bg-blue-200:hover{background-color:var(--color-blue-200)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-400:hover{background-color:var(--color-green-400)}.hover\:bg-red-200:hover{background-color:var(--color-red-200)}.hover\:bg-red-400:hover{background-color:var(--color-red-400)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-500:hover{color:var(--color-green-500)}.hover\:text-green-900:hover{color:var(--color-green-900)}.hover\:text-indigo-500:hover{color:var(--color-indigo-500)}.hover\:text-indigo-900:hover{color:var(--color-indigo-900)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-900:hover{color:var(--color-red-900)}.hover\:text-yellow-300:hover{color:var(--color-yellow-300)}.hover\:text-yellow-500:hover{color:var(--color-yellow-500)}.hover\:text-yellow-800:hover{color:var(--color-yellow-800)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:bg-red-200:focus{background-color:var(--color-red-200)}.focus\:placeholder-gray-400:focus::-moz-placeholder{color:var(--color-gray-400)}.focus\:placeholder-gray-400:focus::placeholder{color:var(--color-gray-400)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white:focus{--tw-ring-color:var(--color-white)}.focus\:ring-yellow-500:focus{--tw-ring-color:var(--color-yellow-500)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-400:disabled{background-color:var(--color-gray-400)}.disabled\:opacity-50:disabled{opacity:.5}@media (hover:hover){.disabled\:hover\:bg-gray-400:disabled:hover{background-color:var(--color-gray-400)}}@media (min-width:640px){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:w-full{width:100%}.sm\:max-w-md{max-width:var(--container-md)}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media (min-width:768px){.md\:ml-2{margin-left:calc(var(--spacing)*2)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}:where(.md\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}}@media (min-width:1024px){.lg\:fixed{position:fixed}.lg\:inset-y-0{inset-block:calc(var(--spacing)*0)}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-64{width:calc(var(--spacing)*64)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-col{flex-direction:column}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:pt-6{padding-top:calc(var(--spacing)*6)}.lg\:pl-64{padding-left:calc(var(--spacing)*64)}}.dark .dark\:block{display:block}.dark .dark\:hidden{display:none}:where(.dark .dark\:divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}.dark .dark\:border-blue-700{border-color:var(--color-blue-700)}.dark .dark\:border-blue-800{border-color:var(--color-blue-800)}.dark .dark\:border-gray-600{border-color:var(--color-gray-600)}.dark .dark\:border-gray-700{border-color:var(--color-gray-700)}.dark .dark\:border-green-700{border-color:var(--color-green-700)}.dark .dark\:border-red-500{border-color:var(--color-red-500)}.dark .dark\:border-red-600{border-color:var(--color-red-600)}.dark .dark\:border-red-700{border-color:var(--color-red-700)}.dark .dark\:border-red-800{border-color:var(--color-red-800)}.dark .dark\:border-yellow-600{border-color:var(--color-yellow-600)}.dark .dark\:border-yellow-700{border-color:var(--color-yellow-700)}.dark .dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark .dark\:bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.dark .dark\:bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.dark .dark\:bg-blue-700{background-color:var(--color-blue-700)}.dark .dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark .dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark .dark\:bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark .dark\:bg-blue-900\/50{background-color:#1c398e80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/50{background-color:color-mix(in oklab,var(--color-blue-900)50%,transparent)}}.dark .dark\:bg-gray-500\/10{background-color:#6a72821a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-500\/10{background-color:color-mix(in oklab,var(--color-gray-500)10%,transparent)}}.dark .dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark .dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark .dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark .dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark .dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark .dark\:bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.dark .dark\:bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.dark .dark\:bg-green-900{background-color:var(--color-green-900)}.dark .dark\:bg-green-900\/50{background-color:#0d542b80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-900\/50{background-color:color-mix(in oklab,var(--color-green-900)50%,transparent)}}.dark .dark\:bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500)10%,transparent)}}.dark .dark\:bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-purple-500\/10{background-color:color-mix(in oklab,var(--color-purple-500)10%,transparent)}}.dark .dark\:bg-purple-900{background-color:var(--color-purple-900)}.dark .dark\:bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.dark .dark\:bg-red-700{background-color:var(--color-red-700)}.dark .dark\:bg-red-800{background-color:var(--color-red-800)}.dark .dark\:bg-red-900{background-color:var(--color-red-900)}.dark .dark\:bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark .dark\:bg-red-900\/50{background-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/50{background-color:color-mix(in oklab,var(--color-red-900)50%,transparent)}}.dark .dark\:bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500)10%,transparent)}}.dark .dark\:bg-yellow-900{background-color:var(--color-yellow-900)}.dark .dark\:bg-yellow-900\/20{background-color:#733e0a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}}.dark .dark\:from-gray-800{--tw-gradient-from:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-700{--tw-gradient-to:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:text-blue-100{color:var(--color-blue-100)}.dark .dark\:text-blue-200{color:var(--color-blue-200)}.dark .dark\:text-blue-300{color:var(--color-blue-300)}.dark .dark\:text-blue-400{color:var(--color-blue-400)}.dark .dark\:text-gray-200{color:var(--color-gray-200)}.dark .dark\:text-gray-300{color:var(--color-gray-300)}.dark .dark\:text-gray-400{color:var(--color-gray-400)}.dark .dark\:text-gray-500{color:var(--color-gray-500)}.dark .dark\:text-green-200{color:var(--color-green-200)}.dark .dark\:text-green-300{color:var(--color-green-300)}.dark .dark\:text-green-400{color:var(--color-green-400)}.dark .dark\:text-indigo-400{color:var(--color-indigo-400)}.dark .dark\:text-orange-400{color:var(--color-orange-400)}.dark .dark\:text-purple-200{color:var(--color-purple-200)}.dark .dark\:text-purple-400{color:var(--color-purple-400)}.dark .dark\:text-red-100{color:var(--color-red-100)}.dark .dark\:text-red-200{color:var(--color-red-200)}.dark .dark\:text-red-300{color:var(--color-red-300)}.dark .dark\:text-red-400{color:var(--color-red-400)}.dark .dark\:text-white{color:var(--color-white)}.dark .dark\:text-yellow-200{color:var(--color-yellow-200)}.dark .dark\:text-yellow-300{color:var(--color-yellow-300)}.dark .dark\:text-yellow-400{color:var(--color-yellow-400)}.dark .dark\:placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-400::placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.dark .dark\:placeholder-gray-500::placeholder{color:var(--color-gray-500)}.dark .dark\:ring-blue-400\/20{--tw-ring-color:#54a2ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)20%,transparent)}}.dark .dark\:ring-blue-400\/30{--tw-ring-color:#54a2ff4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)30%,transparent)}}.dark .dark\:ring-blue-500\/20{--tw-ring-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.dark .dark\:ring-gray-400\/20{--tw-ring-color:#99a1af33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)20%,transparent)}}.dark .dark\:ring-gray-400\/30{--tw-ring-color:#99a1af4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)30%,transparent)}}.dark .dark\:ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.dark .dark\:ring-green-400\/20{--tw-ring-color:#05df7233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-400)20%,transparent)}}.dark .dark\:ring-green-400\/30{--tw-ring-color:#05df724d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-green-400)30%,transparent)}}.dark .dark\:ring-green-500\/20{--tw-ring-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.dark .dark\:ring-orange-500\/20{--tw-ring-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-orange-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.dark .dark\:ring-purple-400\/30{--tw-ring-color:#c07eff4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-purple-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-purple-400)30%,transparent)}}.dark .dark\:ring-purple-500\/20{--tw-ring-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-purple-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.dark .dark\:ring-red-400\/20{--tw-ring-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-400)20%,transparent)}}.dark .dark\:ring-red-400\/30{--tw-ring-color:#ff65684d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-red-400)30%,transparent)}}.dark .dark\:ring-red-500\/20{--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.dark .dark\:ring-yellow-400\/30{--tw-ring-color:#fac8004d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-yellow-400)30%,transparent)}}.dark .dark\:ring-yellow-500\/20{--tw-ring-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}@media (hover:hover){.dark .dark\:hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.dark .dark\:hover\:border-gray-500:hover{border-color:var(--color-gray-500)}.dark .dark\:hover\:bg-blue-800:hover{background-color:var(--color-blue-800)}.dark .dark\:hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}.dark .dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.dark .dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark .dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark .dark\:hover\:bg-red-700:hover{background-color:var(--color-red-700)}.dark .dark\:hover\:bg-red-800:hover{background-color:var(--color-red-800)}.dark .dark\:hover\:text-blue-100:hover{color:var(--color-blue-100)}.dark .dark\:hover\:text-blue-300:hover{color:var(--color-blue-300)}.dark .dark\:hover\:text-blue-400:hover{color:var(--color-blue-400)}.dark .dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.dark .dark\:hover\:text-gray-300:hover{color:var(--color-gray-300)}.dark .dark\:hover\:text-green-300:hover{color:var(--color-green-300)}.dark .dark\:hover\:text-indigo-300:hover{color:var(--color-indigo-300)}.dark .dark\:hover\:text-red-300:hover{color:var(--color-red-300)}.dark .dark\:hover\:text-white:hover{color:var(--color-white)}.dark .dark\:hover\:text-yellow-300:hover{color:var(--color-yellow-300)}}.dark .dark\:focus\:bg-red-700:focus{background-color:var(--color-red-700)}.dark .dark\:focus\:ring-offset-gray-900:focus{--tw-ring-offset-color:var(--color-gray-900)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/webapp/assets/_app/immutable/assets/_layout.BSyLSYks.css b/webapp/assets/_app/immutable/assets/_layout.BSyLSYks.css deleted file mode 100644 index 0da004ab..00000000 --- a/webapp/assets/_app/immutable/assets/_layout.BSyLSYks.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-50:oklch(98% .016 73.684);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-900:oklch(35.9% .144 278.697);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-wide:.025em;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-full{right:100%}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-full{left:100%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.container\!{width:100%!important}@media (min-width:640px){.container\!{max-width:640px!important}}@media (min-width:768px){.container\!{max-width:768px!important}}@media (min-width:1024px){.container\!{max-width:1024px!important}}@media (min-width:1280px){.container\!{max-width:1280px!important}}@media (min-width:1536px){.container\!{max-width:1536px!important}}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.-mr-0\.5{margin-right:calc(var(--spacing)*-.5)}.-mr-1{margin-right:calc(var(--spacing)*-1)}.-mr-12{margin-right:calc(var(--spacing)*-12)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-2\.5{margin-right:calc(var(--spacing)*2.5)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-0\.5{margin-left:calc(var(--spacing)*-.5)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.h-0{height:calc(var(--spacing)*0)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-24{height:calc(var(--spacing)*24)}.h-48{height:calc(var(--spacing)*48)}.h-64{height:calc(var(--spacing)*64)}.h-full{height:100%}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[90vh\]{max-height:90vh}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[38px\]{min-height:38px}.min-h-\[42px\]{min-height:42px}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing)*0)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-64{width:calc(var(--spacing)*64)}.w-80{width:calc(var(--spacing)*80)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[120px\]{min-width:120px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize\!{resize:both!important}.resize-none{resize:none}.resize-y{resize:vertical}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing)*0)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}:where(.-space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(-1px*var(--tw-space-y-reverse));margin-block-end:calc(-1px*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{-moz-column-gap:calc(var(--spacing)*4);column-gap:calc(var(--spacing)*4)}:where(.-space-x-px>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(-1px*var(--tw-space-x-reverse));margin-inline-end:calc(-1px*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-6{row-gap:calc(var(--spacing)*6)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-b-md{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-600{border-color:var(--color-gray-600)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-600{border-color:var(--color-indigo-600)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-yellow-300{border-color:var(--color-yellow-300)}.border-t-gray-900{border-top-color:var(--color-gray-900)}.border-r-gray-900{border-right-color:var(--color-gray-900)}.border-b-gray-900{border-bottom-color:var(--color-gray-900)}.border-l-gray-900{border-left-color:var(--color-gray-900)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-800\/50{background-color:#193cb880}@supports (color:color-mix(in lab,red,red)){.bg-blue-800\/50{background-color:color-mix(in oklab,var(--color-blue-800)50%,transparent)}}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-900{background-color:var(--color-red-900)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-white{--tw-gradient-to:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-20{padding-top:calc(var(--spacing)*20)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-black{color:var(--color-black)}.text-blue-200{color:var(--color-blue-200)}.text-blue-400{color:var(--color-blue-400)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-indigo-600{color:var(--color-indigo-600)}.text-orange-700{color:var(--color-orange-700)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.placeholder-gray-500::placeholder{color:var(--color-gray-500)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-600\/20{--tw-ring-color:#155dfc33}@supports (color:color-mix(in lab,red,red)){.ring-blue-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-600)20%,transparent)}}.ring-gray-200{--tw-ring-color:var(--color-gray-200)}.ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.ring-gray-600\/20{--tw-ring-color:#4a556533}@supports (color:color-mix(in lab,red,red)){.ring-gray-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-600)20%,transparent)}}.ring-green-200{--tw-ring-color:var(--color-green-200)}.ring-green-600\/20{--tw-ring-color:#00a54433}@supports (color:color-mix(in lab,red,red)){.ring-green-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-600)20%,transparent)}}.ring-orange-600\/20{--tw-ring-color:#f0510033}@supports (color:color-mix(in lab,red,red)){.ring-orange-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-600)20%,transparent)}}.ring-purple-600\/20{--tw-ring-color:#9810fa33}@supports (color:color-mix(in lab,red,red)){.ring-purple-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-600)20%,transparent)}}.ring-red-200{--tw-ring-color:var(--color-red-200)}.ring-red-600\/20{--tw-ring-color:#e4001433}@supports (color:color-mix(in lab,red,red)){.ring-red-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-600)20%,transparent)}}.ring-yellow-200{--tw-ring-color:var(--color-yellow-200)}.ring-yellow-600\/20{--tw-ring-color:#cd890033}@supports (color:color-mix(in lab,red,red)){.ring-yellow-600\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-600)20%,transparent)}}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.ring-inset{--tw-ring-inset:inset}@media (hover:hover){.group-hover\:visible:is(:where(.group):hover *){visibility:visible}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:bg-blue-200:hover{background-color:var(--color-blue-200)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-red-200:hover{background-color:var(--color-red-200)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-500:hover{color:var(--color-green-500)}.hover\:text-green-900:hover{color:var(--color-green-900)}.hover\:text-indigo-500:hover{color:var(--color-indigo-500)}.hover\:text-indigo-900:hover{color:var(--color-indigo-900)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-900:hover{color:var(--color-red-900)}.hover\:text-yellow-300:hover{color:var(--color-yellow-300)}.hover\:text-yellow-500:hover{color:var(--color-yellow-500)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:bg-red-200:focus{background-color:var(--color-red-200)}.focus\:placeholder-gray-400:focus::-moz-placeholder{color:var(--color-gray-400)}.focus\:placeholder-gray-400:focus::placeholder{color:var(--color-gray-400)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white:focus{--tw-ring-color:var(--color-white)}.focus\:ring-yellow-500:focus{--tw-ring-color:var(--color-yellow-500)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-400:disabled{background-color:var(--color-gray-400)}.disabled\:opacity-50:disabled{opacity:.5}@media (hover:hover){.disabled\:hover\:bg-gray-400:disabled:hover{background-color:var(--color-gray-400)}}@media (min-width:640px){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:w-full{width:100%}.sm\:max-w-md{max-width:var(--container-md)}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media (min-width:768px){.md\:ml-2{margin-left:calc(var(--spacing)*2)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}:where(.md\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}}@media (min-width:1024px){.lg\:fixed{position:fixed}.lg\:inset-y-0{inset-block:calc(var(--spacing)*0)}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-64{width:calc(var(--spacing)*64)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-col{flex-direction:column}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:pt-6{padding-top:calc(var(--spacing)*6)}.lg\:pl-64{padding-left:calc(var(--spacing)*64)}}.dark .dark\:block{display:block}.dark .dark\:hidden{display:none}:where(.dark .dark\:divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}.dark .dark\:border-blue-700{border-color:var(--color-blue-700)}.dark .dark\:border-blue-800{border-color:var(--color-blue-800)}.dark .dark\:border-gray-600{border-color:var(--color-gray-600)}.dark .dark\:border-gray-700{border-color:var(--color-gray-700)}.dark .dark\:border-green-700{border-color:var(--color-green-700)}.dark .dark\:border-red-500{border-color:var(--color-red-500)}.dark .dark\:border-red-600{border-color:var(--color-red-600)}.dark .dark\:border-red-700{border-color:var(--color-red-700)}.dark .dark\:border-red-800{border-color:var(--color-red-800)}.dark .dark\:border-yellow-600{border-color:var(--color-yellow-600)}.dark .dark\:border-yellow-700{border-color:var(--color-yellow-700)}.dark .dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark .dark\:bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.dark .dark\:bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.dark .dark\:bg-blue-700{background-color:var(--color-blue-700)}.dark .dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark .dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark .dark\:bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark .dark\:bg-blue-900\/50{background-color:#1c398e80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/50{background-color:color-mix(in oklab,var(--color-blue-900)50%,transparent)}}.dark .dark\:bg-gray-500\/10{background-color:#6a72821a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-500\/10{background-color:color-mix(in oklab,var(--color-gray-500)10%,transparent)}}.dark .dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark .dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark .dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark .dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark .dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark .dark\:bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.dark .dark\:bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.dark .dark\:bg-green-900{background-color:var(--color-green-900)}.dark .dark\:bg-green-900\/50{background-color:#0d542b80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-900\/50{background-color:color-mix(in oklab,var(--color-green-900)50%,transparent)}}.dark .dark\:bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500)10%,transparent)}}.dark .dark\:bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-purple-500\/10{background-color:color-mix(in oklab,var(--color-purple-500)10%,transparent)}}.dark .dark\:bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.dark .dark\:bg-red-700{background-color:var(--color-red-700)}.dark .dark\:bg-red-800{background-color:var(--color-red-800)}.dark .dark\:bg-red-900{background-color:var(--color-red-900)}.dark .dark\:bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark .dark\:bg-red-900\/50{background-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/50{background-color:color-mix(in oklab,var(--color-red-900)50%,transparent)}}.dark .dark\:bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500)10%,transparent)}}.dark .dark\:bg-yellow-900{background-color:var(--color-yellow-900)}.dark .dark\:bg-yellow-900\/20{background-color:#733e0a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}}.dark .dark\:from-gray-800{--tw-gradient-from:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-700{--tw-gradient-to:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:text-blue-100{color:var(--color-blue-100)}.dark .dark\:text-blue-200{color:var(--color-blue-200)}.dark .dark\:text-blue-300{color:var(--color-blue-300)}.dark .dark\:text-blue-400{color:var(--color-blue-400)}.dark .dark\:text-gray-200{color:var(--color-gray-200)}.dark .dark\:text-gray-300{color:var(--color-gray-300)}.dark .dark\:text-gray-400{color:var(--color-gray-400)}.dark .dark\:text-gray-500{color:var(--color-gray-500)}.dark .dark\:text-green-200{color:var(--color-green-200)}.dark .dark\:text-green-300{color:var(--color-green-300)}.dark .dark\:text-green-400{color:var(--color-green-400)}.dark .dark\:text-indigo-400{color:var(--color-indigo-400)}.dark .dark\:text-orange-400{color:var(--color-orange-400)}.dark .dark\:text-purple-400{color:var(--color-purple-400)}.dark .dark\:text-red-100{color:var(--color-red-100)}.dark .dark\:text-red-200{color:var(--color-red-200)}.dark .dark\:text-red-300{color:var(--color-red-300)}.dark .dark\:text-red-400{color:var(--color-red-400)}.dark .dark\:text-white{color:var(--color-white)}.dark .dark\:text-yellow-200{color:var(--color-yellow-200)}.dark .dark\:text-yellow-300{color:var(--color-yellow-300)}.dark .dark\:text-yellow-400{color:var(--color-yellow-400)}.dark .dark\:placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-400::placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-500::-moz-placeholder{color:var(--color-gray-500)}.dark .dark\:placeholder-gray-500::placeholder{color:var(--color-gray-500)}.dark .dark\:ring-blue-400\/20{--tw-ring-color:#54a2ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)20%,transparent)}}.dark .dark\:ring-blue-400\/30{--tw-ring-color:#54a2ff4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-blue-400)30%,transparent)}}.dark .dark\:ring-blue-500\/20{--tw-ring-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-blue-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.dark .dark\:ring-gray-400\/20{--tw-ring-color:#99a1af33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)20%,transparent)}}.dark .dark\:ring-gray-400\/30{--tw-ring-color:#99a1af4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)30%,transparent)}}.dark .dark\:ring-gray-500\/20{--tw-ring-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-gray-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.dark .dark\:ring-green-400\/20{--tw-ring-color:#05df7233}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-400)20%,transparent)}}.dark .dark\:ring-green-400\/30{--tw-ring-color:#05df724d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-green-400)30%,transparent)}}.dark .dark\:ring-green-500\/20{--tw-ring-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-green-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.dark .dark\:ring-orange-500\/20{--tw-ring-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-orange-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.dark .dark\:ring-purple-500\/20{--tw-ring-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-purple-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.dark .dark\:ring-red-400\/20{--tw-ring-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-400)20%,transparent)}}.dark .dark\:ring-red-400\/30{--tw-ring-color:#ff65684d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-red-400)30%,transparent)}}.dark .dark\:ring-red-500\/20{--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-red-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.dark .dark\:ring-yellow-400\/30{--tw-ring-color:#fac8004d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-400\/30{--tw-ring-color:color-mix(in oklab,var(--color-yellow-400)30%,transparent)}}.dark .dark\:ring-yellow-500\/20{--tw-ring-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.dark .dark\:ring-yellow-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}@media (hover:hover){.dark .dark\:hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.dark .dark\:hover\:border-gray-500:hover{border-color:var(--color-gray-500)}.dark .dark\:hover\:bg-blue-800:hover{background-color:var(--color-blue-800)}.dark .dark\:hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}.dark .dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.dark .dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark .dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark .dark\:hover\:bg-red-700:hover{background-color:var(--color-red-700)}.dark .dark\:hover\:bg-red-800:hover{background-color:var(--color-red-800)}.dark .dark\:hover\:text-blue-100:hover{color:var(--color-blue-100)}.dark .dark\:hover\:text-blue-300:hover{color:var(--color-blue-300)}.dark .dark\:hover\:text-blue-400:hover{color:var(--color-blue-400)}.dark .dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.dark .dark\:hover\:text-gray-300:hover{color:var(--color-gray-300)}.dark .dark\:hover\:text-green-300:hover{color:var(--color-green-300)}.dark .dark\:hover\:text-indigo-300:hover{color:var(--color-indigo-300)}.dark .dark\:hover\:text-red-300:hover{color:var(--color-red-300)}.dark .dark\:hover\:text-white:hover{color:var(--color-white)}}.dark .dark\:focus\:bg-red-700:focus{background-color:var(--color-red-700)}.dark .dark\:focus\:ring-offset-gray-900:focus{--tw-ring-offset-color:var(--color-gray-900)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/webapp/assets/_app/immutable/chunks/A5UGwKpF.js b/webapp/assets/_app/immutable/chunks/A5UGwKpF.js deleted file mode 100644 index a5faf556..00000000 --- a/webapp/assets/_app/immutable/chunks/A5UGwKpF.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as it}from"./TJn6xDN9.js";import{p as st,E as lt,m as n,o as nt,l as zr,g as e,h as ut,f as x,s as r,d as o,r as a,t as p,i as B,b as u,e as M,a as de,z as Ye,y as Q,u as v,k as d,D as X,c as bt,A as Ir,q as vt}from"./DniTuB_0.js";import{p as Ar,i as E}from"./DbNhg6mG.js";import{e as ie,i as se}from"./Ck5PkeSc.js";import{s as Ze,r as C,b as Y,g as D,c as jr,d as $r}from"./DD3srElq.js";import{b as $,a as ct}from"./CCQwxxp9.js";import{p as gt}from"./D4Caz1gY.js";import{M as pt}from"./PC4wJWhj.js";import{e as le}from"./BZiHL9L3.js";import{J as ft}from"./DcEwzE5l.js";var mt=x('

'),yt=x('
'),xt=x(""),_t=x(''),ht=x('
'),kt=x(""),wt=x(''),Et=x('
Loading templates...
'),Tt=x(""),Mt=x('

Templates define how the runner software is installed and configured.

',1),Pt=x('

Create a template first or proceed without a template to use default behavior.

'),Rt=x('

Select an entity first to see available templates

'),St=x(' '),Ct=x('
'),zt=x('

Entity & Provider Configuration

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Extra Specs (JSON)
',1),It=x('
Creating...
'),At=x('

Create New Pool

Entity Level *
');function Vt(Or,ne){st(ne,!1);const Z=lt();let ue=Ar(ne,"initialEntityType",8,""),er=Ar(ne,"initialEntityId",8,""),ee=n(!1),O=n(""),f=n(ue()),H=n([]),be=n([]),P=n([]),ve=n(!1),ce=n(!1),ge=n(!1),m=n(er()),G=n(""),V=n(""),F=n(""),pe=n(void 0),fe=n(void 0),me=n(void 0),ye=n(100),xe=n("garm"),T=n("linux"),re=n("amd64"),_e=n(""),he=n(!0),z=n([]),J=n(""),K=n("{}"),I=n(void 0);async function Hr(){try{d(ce,!0),d(be,await D.listProviders())}catch(i){d(O,le(i))}finally{d(ce,!1)}}async function rr(){try{d(ge,!0);const i=ke();if(!i){d(P,[]);return}if(d(P,await D.listTemplates(e(T),void 0,i)),!e(I)||!e(P).find(g=>g.id===e(I))){const g=e(P).find(L=>L.owner_id==="system");g?d(I,g.id):e(P).length>0&&d(I,e(P)[0].id)}}catch(i){d(O,le(i))}finally{d(ge,!1)}}function ke(){if(!e(m)||!e(H))return null;const i=e(H).find(g=>g.id===e(m));if(!i)return null;if("forge_type"in i)return i.forge_type;if("endpoint"in i){const g=i.endpoint;if(g&&"endpoint_type"in g)return g.endpoint_type||null}return"github"}async function tr(){if(e(f))try{switch(d(ve,!0),d(H,[]),e(f)){case"repository":d(H,await D.listRepositories());break;case"organization":d(H,await D.listOrganizations());break;case"enterprise":d(H,await D.listEnterprises());break}}catch(i){d(O,le(i))}finally{d(ve,!1)}}function we(i){e(f)!==i&&(d(f,i),d(m,""),d(I,void 0),tr())}function ar(){e(J).trim()&&!e(z).includes(e(J).trim())&&(d(z,[...e(z),e(J).trim()]),d(J,""))}function Lr(i){d(z,e(z).filter((g,L)=>L!==i))}function qr(i){i.key==="Enter"&&(i.preventDefault(),ar())}async function Br(){if(!e(f)||!e(m)||!e(G)||!e(V)||!e(F)){d(O,"Please fill in all required fields");return}try{d(ee,!0),d(O,"");let i={};if(e(K).trim())try{i=JSON.parse(e(K))}catch{throw new Error("Invalid JSON in extra specs")}const g={provider_name:e(G),image:e(V),flavor:e(F),max_runners:e(pe)||10,min_idle_runners:e(fe)||0,runner_bootstrap_timeout:e(me)||20,priority:e(ye),runner_prefix:e(xe),os_type:e(T),os_arch:e(re),"github-runner-group":e(_e)||void 0,enabled:e(he),tags:e(z),extra_specs:e(K).trim()?i:void 0,template_id:e(I)};if(ue()&&er())Z("submit",g);else{switch(e(f)){case"repository":await D.createRepositoryPool(e(m),g);break;case"organization":await D.createOrganizationPool(e(m),g);break;case"enterprise":await D.createEnterprisePool(e(m),g);break;default:throw new Error("Invalid entity level")}Z("submit",g)}}catch(i){d(O,le(i))}finally{d(ee,!1)}}nt(()=>{Hr(),ue()&&tr()}),zr(()=>(e(m),e(T)),()=>{e(m)&&e(T)&&rr()}),zr(()=>(e(T),e(m)),()=>{e(T)&&e(m)&&rr()}),ut(),it(),pt(Or,{$$events:{close:()=>Z("close")},children:(i,g)=>{var L=At(),Ee=r(o(L),2),or=o(Ee);{var Dr=k=>{var R=mt(),N=o(R),te=o(N,!0);a(N),a(R),p(()=>M(te,e(O))),u(k,R)};E(or,k=>{e(O)&&k(Dr)})}var Te=r(or,2),dr=r(o(Te),2),Me=o(dr),Pe=r(Me,2),ir=r(Pe,2);a(dr),a(Te);var sr=r(Te,2);{var Gr=k=>{var R=zt(),N=de(R),te=r(o(N),2),Se=o(te),Ce=o(Se),Fr=o(Ce);Ye(),a(Ce);var Kr=r(Ce,2);{var Ur=t=>{var b=yt();u(t,b)},Wr=t=>{var b=_t();p(()=>{e(m),Q(()=>{e(f),e(H)})});var w=o(b),q=o(w);a(w),w.value=w.__value="";var A=r(w);ie(A,1,()=>e(H),se,(c,s)=>{var y=xt(),j=o(y);{var U=l=>{var h=X();p(()=>M(h,`${e(s),v(()=>e(s).owner)??""}/${e(s),v(()=>e(s).name)??""} (${e(s),v(()=>e(s).endpoint?.name)??""})`)),u(l,h)},S=l=>{var h=X();p(()=>M(h,`${e(s),v(()=>e(s).name)??""} (${e(s),v(()=>e(s).endpoint?.name)??""})`)),u(l,h)};E(j,l=>{e(f)==="repository"?l(U):l(S,!1)})}a(y);var _={};p(()=>{_!==(_=(e(s),v(()=>e(s).id)))&&(y.value=(y.__value=(e(s),v(()=>e(s).id)))??"")}),u(c,y)}),a(b),p(()=>M(q,`Select a ${e(f)??""}`)),Y(b,()=>e(m),c=>d(m,c)),u(t,b)};E(Kr,t=>{e(ve)?t(Ur):t(Wr,!1)})}a(Se);var ur=r(Se,2),Qr=r(o(ur),2);{var Xr=t=>{var b=ht();u(t,b)},Yr=t=>{var b=wt();p(()=>{e(G),Q(()=>{e(be)})});var w=o(b);w.value=w.__value="";var q=r(w);ie(q,1,()=>e(be),se,(A,c)=>{var s=kt(),y=o(s,!0);a(s);var j={};p(()=>{M(y,(e(c),v(()=>e(c).name))),j!==(j=(e(c),v(()=>e(c).name)))&&(s.value=(s.__value=(e(c),v(()=>e(c).name)))??"")}),u(A,s)}),a(b),Y(b,()=>e(G),A=>d(G,A)),u(t,b)};E(Qr,t=>{e(ce)?t(Xr):t(Yr,!1)})}a(ur),a(te),a(N);var ze=r(N,2),Ie=r(o(ze),2),Ae=o(Ie),br=r(o(Ae),2);C(br),a(Ae);var je=r(Ae,2),vr=r(o(je),2);C(vr),a(je);var $e=r(je,2),Oe=r(o($e),2);p(()=>{e(T),Q(()=>{})});var He=o(Oe);He.value=He.__value="linux";var cr=r(He);cr.value=cr.__value="windows",a(Oe),a($e);var gr=r($e,2),Le=r(o(gr),2);p(()=>{e(re),Q(()=>{})});var qe=o(Le);qe.value=qe.__value="amd64";var pr=r(qe);pr.value=pr.__value="arm64",a(Le),a(gr),a(Ie);var fr=r(Ie,2),Zr=r(o(fr),2);{var et=t=>{var b=Et();u(t,b)},rt=t=>{var b=Ir(),w=de(b);{var q=c=>{var s=Mt(),y=de(s);p(()=>{e(I),Q(()=>{e(P)})}),ie(y,5,()=>e(P),se,(_,l)=>{var h=Tt(),W=o(h),We=r(W);{var Qe=Xe=>{var Cr=X();p(()=>M(Cr,`- ${e(l),v(()=>e(l).description)??""}`)),u(Xe,Cr)};E(We,Xe=>{e(l),v(()=>e(l).description)&&Xe(Qe)})}a(h);var oe={};p(()=>{M(W,`${e(l),v(()=>e(l).name)??""} ${e(l),v(()=>e(l).owner_id==="system"?"(System)":"")??""} `),oe!==(oe=(e(l),v(()=>e(l).id)))&&(h.value=(h.__value=(e(l),v(()=>e(l).id)))??"")}),u(_,h)}),a(y);var j=r(y,2),U=r(o(j));{var S=_=>{var l=X();p(h=>M(l,`Showing templates for ${h??""} ${e(T)??""}.`),[()=>v(ke)]),u(_,l)};E(U,_=>{e(m)&&_(S)})}a(j),Y(y,()=>e(I),_=>d(I,_)),u(c,s)},A=c=>{var s=Ir(),y=de(s);{var j=S=>{var _=Pt(),l=o(_),h=o(l);a(l);var W=r(l,2),We=o(W);Ye(),a(W),a(_),p((Qe,oe)=>{M(h,`No templates found for ${Qe??""} ${e(T)??""}.`),jr(We,"href",oe)},[()=>v(ke),()=>(vt($r),v(()=>$r("/templates")))]),u(S,_)},U=S=>{var _=Rt();u(S,_)};E(y,S=>{e(m)?S(j):S(U,!1)},!0)}u(c,s)};E(w,c=>{e(P),v(()=>e(P).length>0)?c(q):c(A,!1)},!0)}u(t,b)};E(Zr,t=>{e(ge)?t(et):t(rt,!1)})}a(fr),a(ze);var Be=r(ze,2),mr=r(o(Be),2),De=o(mr),yr=r(o(De),2);C(yr),a(De);var Ge=r(De,2),xr=r(o(Ge),2);C(xr),a(Ge);var _r=r(Ge,2),hr=r(o(_r),2);C(hr),a(_r),a(mr),a(Be);var kr=r(Be,2),Je=r(o(kr),2),Ne=o(Je),wr=r(o(Ne),2);C(wr),a(Ne);var Ve=r(Ne,2),Er=r(o(Ve),2);C(Er),a(Ve);var Tr=r(Ve,2),Mr=r(o(Tr),2);C(Mr),a(Tr),a(Je);var Fe=r(Je,2),Pr=r(o(Fe),2),Ke=o(Pr),ae=o(Ke);C(ae);var tt=r(ae,2);a(Ke);var at=r(Ke,2);{var ot=t=>{var b=Ct();ie(b,5,()=>e(z),se,(w,q,A)=>{var c=St(),s=o(c),y=r(s);a(c),p(()=>{M(s,`${e(q)??""} `),jr(y,"aria-label",`Remove tag ${e(q)}`)}),B("click",y,()=>Lr(A)),u(w,c)}),a(b),u(t,b)};E(at,t=>{e(z),v(()=>e(z).length>0)&&t(ot)})}a(Pr),a(Fe);var Ue=r(Fe,2),dt=r(o(Ue),2);ft(dt,{rows:4,placeholder:"{}",get value(){return e(K)},set value(t){d(K,t)},$$legacy:!0}),a(Ue);var Rr=r(Ue,2),Sr=o(Rr);C(Sr),Ye(2),a(Rr),a(kr),p(t=>M(Fr,`${t??""} `),[()=>(e(f),v(()=>e(f).charAt(0).toUpperCase()+e(f).slice(1)))]),$(br,()=>e(V),t=>d(V,t)),$(vr,()=>e(F),t=>d(F,t)),Y(Oe,()=>e(T),t=>d(T,t)),Y(Le,()=>e(re),t=>d(re,t)),$(yr,()=>e(fe),t=>d(fe,t)),$(xr,()=>e(pe),t=>d(pe,t)),$(hr,()=>e(me),t=>d(me,t)),$(wr,()=>e(xe),t=>d(xe,t)),$(Er,()=>e(ye),t=>d(ye,t)),$(Mr,()=>e(_e),t=>d(_e,t)),$(ae,()=>e(J),t=>d(J,t)),B("keydown",ae,qr),B("click",tt,ar),ct(Sr,()=>e(he),t=>d(he,t)),u(k,R)};E(sr,k=>{e(f)&&k(Gr)})}var lr=r(sr,2),nr=o(lr),Re=r(nr,2),Jr=o(Re);{var Nr=k=>{var R=It();u(k,R)},Vr=k=>{var R=X("Create Pool");u(k,R)};E(Jr,k=>{e(ee)?k(Nr):k(Vr,!1)})}a(Re),a(lr),a(Ee),a(L),p(()=>{Ze(Me,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(f)==="repository"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),Ze(Pe,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(f)==="organization"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),Ze(ir,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(f)==="enterprise"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),Re.disabled=e(ee)||!e(f)||!e(m)||!e(G)||!e(V)||!e(F)}),B("click",Me,()=>we("repository")),B("click",Pe,()=>we("organization")),B("click",ir,()=>we("enterprise")),B("click",nr,()=>Z("close")),B("submit",Ee,gt(Br)),u(i,L)},$$slots:{default:!0}}),bt()}export{Vt as C}; diff --git a/webapp/assets/_app/immutable/chunks/H2nrvwx_.js b/webapp/assets/_app/immutable/chunks/B-zJt1QP.js similarity index 79% rename from webapp/assets/_app/immutable/chunks/H2nrvwx_.js rename to webapp/assets/_app/immutable/chunks/B-zJt1QP.js index fcc90077..aad87cb5 100644 --- a/webapp/assets/_app/immutable/chunks/H2nrvwx_.js +++ b/webapp/assets/_app/immutable/chunks/B-zJt1QP.js @@ -1 +1 @@ -import{s as t,p as r}from"./DeKGyprh.js";const e={get data(){return r.data},get error(){return r.error},get form(){return r.form},get params(){return r.params},get route(){return r.route},get state(){return r.state},get status(){return r.status},get url(){return r.url}};t.updated.check;const s=e;export{s as p}; +import{s as t,p as r}from"./BSYpqPvJ.js";const e={get data(){return r.data},get error(){return r.error},get form(){return r.form},get params(){return r.params},get route(){return r.route},get state(){return r.state},get status(){return r.status},get url(){return r.url}};t.updated.check;const s=e;export{s as p}; diff --git a/webapp/assets/_app/immutable/chunks/C-ow2qSP.js b/webapp/assets/_app/immutable/chunks/B1uxuBYn.js similarity index 98% rename from webapp/assets/_app/immutable/chunks/C-ow2qSP.js rename to webapp/assets/_app/immutable/chunks/B1uxuBYn.js index af78c4ec..4aec8822 100644 --- a/webapp/assets/_app/immutable/chunks/C-ow2qSP.js +++ b/webapp/assets/_app/immutable/chunks/B1uxuBYn.js @@ -1 +1 @@ -import{F as p,G as l}from"./DniTuB_0.js";import{g as d}from"./DD3srElq.js";import{w as r}from"./DmHFwzWx.js";const f={repositories:[],organizations:[],enterprises:[],pools:[],scalesets:[],credentials:[],endpoints:[],controllerInfo:null,templates:[],loading:{repositories:!1,organizations:!1,enterprises:!1,pools:!1,scalesets:!1,credentials:!1,endpoints:!1,controllerInfo:!1,templates:!1},loaded:{repositories:!1,organizations:!1,enterprises:!1,pools:!1,scalesets:!1,credentials:!1,endpoints:!1,controllerInfo:!1,templates:!1},errorMessages:{repositories:"",organizations:"",enterprises:"",pools:"",scalesets:"",credentials:"",endpoints:"",controllerInfo:"",templates:""}},a=p(f);class u{unsubscribers=[];loadingPromises=new Map;retryAttempts=new Map;MAX_RETRIES=3;RETRY_DELAY_MS=1e3;websocketStatusUnsubscriber=null;async loadResource(e,t=!1){if(this.loadingPromises.has(e))return this.loadingPromises.get(e);a.update(o=>({...o,loading:{...o.loading,[e]:!0},errorMessages:{...o.errorMessages,[e]:""}}));const s=this.attemptLoad(e);this.loadingPromises.set(e,s);try{const o=await s;return a.update(n=>({...n,[e]:o,loading:{...n.loading,[e]:!1},loaded:{...n.loaded,[e]:!0},errorMessages:{...n.errorMessages,[e]:""}})),this.retryAttempts.delete(e),t&&this.startBackgroundLoading(e),o}catch(o){const n=o instanceof Error?o.message:"Failed to load data";throw a.update(i=>({...i,loading:{...i.loading,[e]:!1},errorMessages:{...i.errorMessages,[e]:n}})),console.error(`Failed to load ${e}:`,o),o}finally{this.loadingPromises.delete(e)}}async attemptLoad(e){const t=(this.retryAttempts.get(e)||0)+1;this.retryAttempts.set(e,t);try{let s;switch(e){case"repositories":s=d.listRepositories();break;case"organizations":s=d.listOrganizations();break;case"enterprises":s=d.listEnterprises();break;case"pools":s=d.listAllPools();break;case"scalesets":s=d.listScaleSets();break;case"credentials":s=d.listAllCredentials();break;case"endpoints":s=d.listAllEndpoints();break;case"controllerInfo":s=d.getControllerInfo();break;case"templates":s=d.listTemplates();break;default:throw new Error(`Unknown resource type: ${e}`)}return await s}catch(s){if(tsetTimeout(n,o)),this.attemptLoad(e)}else throw console.error(`All ${this.MAX_RETRIES} attempts failed for ${e}:`,s),s}}async startBackgroundLoading(e){const s=["repositories","organizations","enterprises","pools","scalesets","credentials","endpoints","templates"].filter(o=>o!==e);for(const o of s)setTimeout(()=>{this.loadResource(o,!1).catch(n=>{console.warn(`Background loading failed for ${o}:`,n)})},100*s.indexOf(o))}retryResource(e){return this.retryAttempts.delete(e),this.loadResource(e,!0)}setupWebSocketSubscriptions(){this.cleanup();const e=[r.subscribeToEntity("repository",["create","update","delete"],this.handleRepositoryEvent.bind(this)),r.subscribeToEntity("organization",["create","update","delete"],this.handleOrganizationEvent.bind(this)),r.subscribeToEntity("enterprise",["create","update","delete"],this.handleEnterpriseEvent.bind(this)),r.subscribeToEntity("pool",["create","update","delete"],this.handlePoolEvent.bind(this)),r.subscribeToEntity("scaleset",["create","update","delete"],this.handleScaleSetEvent.bind(this)),r.subscribeToEntity("controller",["update"],this.handleControllerEvent.bind(this)),r.subscribeToEntity("github_credentials",["create","update","delete"],this.handleCredentialsEvent.bind(this)),r.subscribeToEntity("gitea_credentials",["create","update","delete"],this.handleCredentialsEvent.bind(this)),r.subscribeToEntity("github_endpoint",["create","update","delete"],this.handleEndpointEvent.bind(this)),r.subscribeToEntity("template",["create","update","delete"],this.handleTemplateEvent.bind(this))];this.unsubscribers=e,this.setupWebSocketStatusMonitoring()}setupWebSocketStatusMonitoring(){this.websocketStatusUnsubscriber&&this.websocketStatusUnsubscriber();let e=!1;this.websocketStatusUnsubscriber=r.subscribe(t=>{t.connected&&!e&&(console.log("[EagerCache] WebSocket connected - reinitializing cache"),this.initializeAllResources()),e=t.connected})}async initializeAllResources(){const t=["repositories","organizations","enterprises","pools","scalesets","credentials","endpoints","controllerInfo","templates"].map(s=>this.loadResource(s,!0).catch(o=>{console.warn(`Failed to reload ${s} on WebSocket reconnect:`,o)}));await Promise.allSettled(t)}handleRepositoryEvent(e){a.update(t=>{if(!t.loaded.repositories)return t;const s=[...t.repositories],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,repositories:s}})}handleOrganizationEvent(e){a.update(t=>{if(!t.loaded.organizations)return t;const s=[...t.organizations],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,organizations:s}})}handleEnterpriseEvent(e){a.update(t=>{if(!t.loaded.enterprises)return t;const s=[...t.enterprises],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,enterprises:s}})}handlePoolEvent(e){a.update(t=>{if(!t.loaded.pools)return t;const s=[...t.pools],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,pools:s}})}handleScaleSetEvent(e){a.update(t=>{if(!t.loaded.scalesets)return t;const s=[...t.scalesets],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,scalesets:s}})}handleCredentialsEvent(e){a.update(t=>{if(!t.loaded.credentials)return t;const s=[...t.credentials],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,credentials:s}})}handleEndpointEvent(e){a.update(t=>{if(!t.loaded.endpoints)return t;const s=[...t.endpoints],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.name===o.name);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.name:o,i=s.findIndex(c=>c.name===n);i!==-1&&s.splice(i,1)}return{...t,endpoints:s}})}cleanup(){this.unsubscribers.forEach(e=>e()),this.unsubscribers=[],this.websocketStatusUnsubscriber&&(this.websocketStatusUnsubscriber(),this.websocketStatusUnsubscriber=null)}shouldUseCache(){return l(r).connected}async getRepositories(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching repositories directly from API"),await d.listRepositories();const t=l(a);return t.loaded.repositories?t.repositories:this.loadResource("repositories",!0)}async getOrganizations(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching organizations directly from API"),await d.listOrganizations();const t=l(a);return t.loaded.organizations?t.organizations:this.loadResource("organizations",!0)}async getEnterprises(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching enterprises directly from API"),await d.listEnterprises();const t=l(a);return t.loaded.enterprises?t.enterprises:this.loadResource("enterprises",!0)}async getPools(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching pools directly from API"),await d.listAllPools();const t=l(a);return t.loaded.pools?t.pools:this.loadResource("pools",!0)}async getScaleSets(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching scalesets directly from API"),await d.listScaleSets();const t=l(a);return t.loaded.scalesets?t.scalesets:this.loadResource("scalesets",!0)}async getCredentials(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching credentials directly from API"),await d.listAllCredentials();const t=l(a);return t.loaded.credentials?t.credentials:this.loadResource("credentials",!0)}async getEndpoints(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching endpoints directly from API"),await d.listAllEndpoints();const t=l(a);return t.loaded.endpoints?t.endpoints:this.loadResource("endpoints",!0)}async getControllerInfo(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching controller info directly from API"),await d.getControllerInfo();const t=l(a);return t.loaded.controllerInfo?t.controllerInfo:this.loadResource("controllerInfo",!0)}async getTemplates(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching templates directly from API"),await d.listTemplates();const t=l(a);return t.loaded.templates?t.templates:this.loadResource("templates",!0)}handleControllerEvent(e){a.update(t=>{if(!t.loaded.controllerInfo)return t;const s=e.payload;return e.operation==="update"?{...t,controllerInfo:s}:t})}handleTemplateEvent(e){a.update(t=>{if(!t.loaded.templates)return t;const s=[...t.templates],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,templates:s}})}}const h=new u;typeof window<"u"&&h.setupWebSocketSubscriptions();export{h as a,a as e}; +import{F as p,G as l}from"./BIqNNOMq.js";import{g as d}from"./CQh-7xkh.js";import{w as r}from"./C4VNo_Nu.js";const f={repositories:[],organizations:[],enterprises:[],pools:[],scalesets:[],credentials:[],endpoints:[],controllerInfo:null,templates:[],loading:{repositories:!1,organizations:!1,enterprises:!1,pools:!1,scalesets:!1,credentials:!1,endpoints:!1,controllerInfo:!1,templates:!1},loaded:{repositories:!1,organizations:!1,enterprises:!1,pools:!1,scalesets:!1,credentials:!1,endpoints:!1,controllerInfo:!1,templates:!1},errorMessages:{repositories:"",organizations:"",enterprises:"",pools:"",scalesets:"",credentials:"",endpoints:"",controllerInfo:"",templates:""}},a=p(f);class u{unsubscribers=[];loadingPromises=new Map;retryAttempts=new Map;MAX_RETRIES=3;RETRY_DELAY_MS=1e3;websocketStatusUnsubscriber=null;async loadResource(e,t=!1){if(this.loadingPromises.has(e))return this.loadingPromises.get(e);a.update(o=>({...o,loading:{...o.loading,[e]:!0},errorMessages:{...o.errorMessages,[e]:""}}));const s=this.attemptLoad(e);this.loadingPromises.set(e,s);try{const o=await s;return a.update(n=>({...n,[e]:o,loading:{...n.loading,[e]:!1},loaded:{...n.loaded,[e]:!0},errorMessages:{...n.errorMessages,[e]:""}})),this.retryAttempts.delete(e),t&&this.startBackgroundLoading(e),o}catch(o){const n=o instanceof Error?o.message:"Failed to load data";throw a.update(i=>({...i,loading:{...i.loading,[e]:!1},errorMessages:{...i.errorMessages,[e]:n}})),console.error(`Failed to load ${e}:`,o),o}finally{this.loadingPromises.delete(e)}}async attemptLoad(e){const t=(this.retryAttempts.get(e)||0)+1;this.retryAttempts.set(e,t);try{let s;switch(e){case"repositories":s=d.listRepositories();break;case"organizations":s=d.listOrganizations();break;case"enterprises":s=d.listEnterprises();break;case"pools":s=d.listAllPools();break;case"scalesets":s=d.listScaleSets();break;case"credentials":s=d.listAllCredentials();break;case"endpoints":s=d.listAllEndpoints();break;case"controllerInfo":s=d.getControllerInfo();break;case"templates":s=d.listTemplates();break;default:throw new Error(`Unknown resource type: ${e}`)}return await s}catch(s){if(tsetTimeout(n,o)),this.attemptLoad(e)}else throw console.error(`All ${this.MAX_RETRIES} attempts failed for ${e}:`,s),s}}async startBackgroundLoading(e){const s=["repositories","organizations","enterprises","pools","scalesets","credentials","endpoints","templates"].filter(o=>o!==e);for(const o of s)setTimeout(()=>{this.loadResource(o,!1).catch(n=>{console.warn(`Background loading failed for ${o}:`,n)})},100*s.indexOf(o))}retryResource(e){return this.retryAttempts.delete(e),this.loadResource(e,!0)}setupWebSocketSubscriptions(){this.cleanup();const e=[r.subscribeToEntity("repository",["create","update","delete"],this.handleRepositoryEvent.bind(this)),r.subscribeToEntity("organization",["create","update","delete"],this.handleOrganizationEvent.bind(this)),r.subscribeToEntity("enterprise",["create","update","delete"],this.handleEnterpriseEvent.bind(this)),r.subscribeToEntity("pool",["create","update","delete"],this.handlePoolEvent.bind(this)),r.subscribeToEntity("scaleset",["create","update","delete"],this.handleScaleSetEvent.bind(this)),r.subscribeToEntity("controller",["update"],this.handleControllerEvent.bind(this)),r.subscribeToEntity("github_credentials",["create","update","delete"],this.handleCredentialsEvent.bind(this)),r.subscribeToEntity("gitea_credentials",["create","update","delete"],this.handleCredentialsEvent.bind(this)),r.subscribeToEntity("github_endpoint",["create","update","delete"],this.handleEndpointEvent.bind(this)),r.subscribeToEntity("template",["create","update","delete"],this.handleTemplateEvent.bind(this))];this.unsubscribers=e,this.setupWebSocketStatusMonitoring()}setupWebSocketStatusMonitoring(){this.websocketStatusUnsubscriber&&this.websocketStatusUnsubscriber();let e=!1;this.websocketStatusUnsubscriber=r.subscribe(t=>{t.connected&&!e&&(console.log("[EagerCache] WebSocket connected - reinitializing cache"),this.initializeAllResources()),e=t.connected})}async initializeAllResources(){const t=["repositories","organizations","enterprises","pools","scalesets","credentials","endpoints","controllerInfo","templates"].map(s=>this.loadResource(s,!0).catch(o=>{console.warn(`Failed to reload ${s} on WebSocket reconnect:`,o)}));await Promise.allSettled(t)}handleRepositoryEvent(e){a.update(t=>{if(!t.loaded.repositories)return t;const s=[...t.repositories],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,repositories:s}})}handleOrganizationEvent(e){a.update(t=>{if(!t.loaded.organizations)return t;const s=[...t.organizations],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,organizations:s}})}handleEnterpriseEvent(e){a.update(t=>{if(!t.loaded.enterprises)return t;const s=[...t.enterprises],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,enterprises:s}})}handlePoolEvent(e){a.update(t=>{if(!t.loaded.pools)return t;const s=[...t.pools],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,pools:s}})}handleScaleSetEvent(e){a.update(t=>{if(!t.loaded.scalesets)return t;const s=[...t.scalesets],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,scalesets:s}})}handleCredentialsEvent(e){a.update(t=>{if(!t.loaded.credentials)return t;const s=[...t.credentials],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,credentials:s}})}handleEndpointEvent(e){a.update(t=>{if(!t.loaded.endpoints)return t;const s=[...t.endpoints],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.name===o.name);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.name:o,i=s.findIndex(c=>c.name===n);i!==-1&&s.splice(i,1)}return{...t,endpoints:s}})}cleanup(){this.unsubscribers.forEach(e=>e()),this.unsubscribers=[],this.websocketStatusUnsubscriber&&(this.websocketStatusUnsubscriber(),this.websocketStatusUnsubscriber=null)}shouldUseCache(){return l(r).connected}async getRepositories(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching repositories directly from API"),await d.listRepositories();const t=l(a);return t.loaded.repositories?t.repositories:this.loadResource("repositories",!0)}async getOrganizations(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching organizations directly from API"),await d.listOrganizations();const t=l(a);return t.loaded.organizations?t.organizations:this.loadResource("organizations",!0)}async getEnterprises(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching enterprises directly from API"),await d.listEnterprises();const t=l(a);return t.loaded.enterprises?t.enterprises:this.loadResource("enterprises",!0)}async getPools(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching pools directly from API"),await d.listAllPools();const t=l(a);return t.loaded.pools?t.pools:this.loadResource("pools",!0)}async getScaleSets(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching scalesets directly from API"),await d.listScaleSets();const t=l(a);return t.loaded.scalesets?t.scalesets:this.loadResource("scalesets",!0)}async getCredentials(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching credentials directly from API"),await d.listAllCredentials();const t=l(a);return t.loaded.credentials?t.credentials:this.loadResource("credentials",!0)}async getEndpoints(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching endpoints directly from API"),await d.listAllEndpoints();const t=l(a);return t.loaded.endpoints?t.endpoints:this.loadResource("endpoints",!0)}async getControllerInfo(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching controller info directly from API"),await d.getControllerInfo();const t=l(a);return t.loaded.controllerInfo?t.controllerInfo:this.loadResource("controllerInfo",!0)}async getTemplates(){if(!l(r).connected)return console.log("[EagerCache] WebSocket disconnected - fetching templates directly from API"),await d.listTemplates();const t=l(a);return t.loaded.templates?t.templates:this.loadResource("templates",!0)}handleControllerEvent(e){a.update(t=>{if(!t.loaded.controllerInfo)return t;const s=e.payload;return e.operation==="update"?{...t,controllerInfo:s}:t})}handleTemplateEvent(e){a.update(t=>{if(!t.loaded.templates)return t;const s=[...t.templates],o=e.payload;if(e.operation==="create")s.push(o);else if(e.operation==="update"){const n=s.findIndex(i=>i.id===o.id);n!==-1&&(s[n]=o)}else if(e.operation==="delete"){const n=typeof o=="object"?o.id:o,i=s.findIndex(c=>c.id===n);i!==-1&&s.splice(i,1)}return{...t,templates:s}})}}const h=new u;typeof window<"u"&&h.setupWebSocketSubscriptions();export{h as a,a as e}; diff --git a/webapp/assets/_app/immutable/chunks/B5vVe1Fo.js b/webapp/assets/_app/immutable/chunks/B5vVe1Fo.js deleted file mode 100644 index 04f9edd0..00000000 --- a/webapp/assets/_app/immutable/chunks/B5vVe1Fo.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as D}from"./TJn6xDN9.js";import{p as E,E as B,l as t,q as s,g as e,m as o,h as P,f as T,t as q,i as S,b as F,c as G,u as I,d as _,k as a,r as z}from"./DniTuB_0.js";import{i as J,h as K,s as N,j as O}from"./DD3srElq.js";import{l as j,p as l}from"./DbNhg6mG.js";var Q=T('');function Z(C,i){const M=j(i,["children","$$slots","$$events","$$legacy"]),L=j(M,["action","disabled","title","ariaLabel","size"]);E(i,!1);const u=o(),h=o(),k=o(),f=o(),g=o(),v=o(),n=o(),m=o(),b=o(),A=B();let r=l(i,"action",8,"edit"),x=l(i,"disabled",8,!1),w=l(i,"title",8,""),y=l(i,"ariaLabel",8,""),c=l(i,"size",8,"md");function H(){x()||A("click")}t(()=>{},()=>{a(u,"transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-gray-900 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50")}),t(()=>s(c()),()=>{a(h,{sm:"p-1",md:"p-2"}[c()])}),t(()=>s(r()),()=>{a(k,{edit:"text-indigo-600 dark:text-indigo-400 hover:text-indigo-900 dark:hover:text-indigo-300 focus:ring-indigo-500",delete:"text-red-600 dark:text-red-400 hover:text-red-900 dark:hover:text-red-300 focus:ring-red-500",view:"text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-300 focus:ring-gray-500",add:"text-green-600 dark:text-green-400 hover:text-green-900 dark:hover:text-green-300 focus:ring-green-500",copy:"text-blue-600 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 focus:ring-blue-500",download:"text-blue-600 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 focus:ring-blue-500"}[r()])}),t(()=>s(c()),()=>{a(f,c()==="sm"?"h-4 w-4":"h-5 w-5")}),t(()=>(e(u),e(h),e(k)),()=>{a(g,[e(u),e(h),e(k)].join(" "))}),t(()=>{},()=>{a(v,{edit:'',delete:'',view:'',add:'',copy:'',download:''})}),t(()=>{},()=>{a(n,{edit:"Edit",delete:"Delete",view:"View",add:"Add",copy:"Clone",download:"Download"})}),t(()=>(s(w()),e(n),s(r())),()=>{a(m,w()||e(n)[r()])}),t(()=>(s(y()),e(n),s(r())),()=>{a(b,y()||`${e(n)[r()]} item`)}),P(),D();var d=Q();J(d,()=>({type:"button",class:e(g),disabled:x(),title:e(m),"aria-label":e(b),...L}));var p=_(d),V=_(p);K(V,()=>(e(v),s(r()),I(()=>e(v)[r()])),!0),z(p),z(d),q(()=>N(p,0,O(e(f)))),S("click",d,H),F(C,d),G()}export{Z as A}; diff --git a/webapp/assets/_app/immutable/chunks/B6XSaEl0.js b/webapp/assets/_app/immutable/chunks/B6XSaEl0.js deleted file mode 100644 index 43fd57c4..00000000 --- a/webapp/assets/_app/immutable/chunks/B6XSaEl0.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as q}from"./TJn6xDN9.js";import{p as A,E as F,f as y,s as l,d as t,r as a,z as $,D as b,b as o,t as p,e as n,c as G}from"./DniTuB_0.js";import{p as v,i as H}from"./DbNhg6mG.js";import{M as I}from"./PC4wJWhj.js";import{B as w}from"./DD3srElq.js";var J=y('

'),K=y('

');function W(D,s){A(s,!1);let M=v(s,"title",8),j=v(s,"message",8),g=v(s,"itemName",8,""),d=v(s,"loading",8,!1);const c=F();function B(){c("confirm")}q(),I(D,{$$events:{close:()=>c("close")},children:(C,O)=>{var m=K(),f=l(t(m),2),u=t(f),P=t(u,!0);a(u);var h=l(u,2),x=t(h),z=t(x,!0);a(x);var E=l(x,2);{var L=e=>{var i=J(),r=t(i,!0);a(i),p(()=>n(r,g())),o(e,i)};H(E,e=>{g()&&e(L)})}a(h),a(f);var _=l(f,2),k=t(_);w(k,{variant:"secondary",get disabled(){return d()},$$events:{click:()=>c("close")},children:(e,i)=>{$();var r=b("Cancel");o(e,r)},$$slots:{default:!0}});var N=l(k,2);w(N,{variant:"danger",get disabled(){return d()},get loading(){return d()},$$events:{click:B},children:(e,i)=>{$();var r=b();p(()=>n(r,d()?"Deleting...":"Delete")),o(e,r)},$$slots:{default:!0}}),a(_),a(m),p(()=>{n(P,M()),n(z,j())}),o(C,m)},$$slots:{default:!0}}),G()}export{W as D}; diff --git a/webapp/assets/_app/immutable/chunks/LMA6-4d1.js b/webapp/assets/_app/immutable/chunks/B7If18kh.js similarity index 99% rename from webapp/assets/_app/immutable/chunks/LMA6-4d1.js rename to webapp/assets/_app/immutable/chunks/B7If18kh.js index 8f0b01ca..e06602fd 100644 --- a/webapp/assets/_app/immutable/chunks/LMA6-4d1.js +++ b/webapp/assets/_app/immutable/chunks/B7If18kh.js @@ -1,4 +1,4 @@ -import{d as o}from"./DD3srElq.js";function l(r){if(!r)return"N/A";try{return(typeof r=="string"?new Date(r):r).toLocaleString()}catch{return"Invalid Date"}}function f(r,e="w-4 h-4"){return r==="gitea"?``:r==="github"?`
`:` +import{d as o}from"./CQh-7xkh.js";function l(r){if(!r)return"N/A";try{return(typeof r=="string"?new Date(r):r).toLocaleString()}catch{return"Invalid Date"}}function f(r,e="w-4 h-4"){return r==="gitea"?``:r==="github"?`
`:` `}function d(r,e){if(r.repo_name)return r.repo_name;if(r.org_name)return r.org_name;if(r.enterprise_name)return r.enterprise_name;if(r.repo_id&&!r.repo_name&&e?.repositories){const n=e.repositories.find(t=>t.id===r.repo_id);return n?`${n.owner}/${n.name}`:"Unknown Entity"}if(r.org_id&&!r.org_name&&e?.organizations){const n=e.organizations.find(t=>t.id===r.org_id);return n&&n.name?n.name:"Unknown Entity"}if(r.enterprise_id&&!r.enterprise_name&&e?.enterprises){const n=e.enterprises.find(t=>t.id===r.enterprise_id);return n&&n.name?n.name:"Unknown Entity"}return"Unknown Entity"}function p(r){return r.repo_id?"repository":r.org_id?"organization":r.enterprise_id?"enterprise":"unknown"}function g(r){return r.repo_id?o(`/repositories/${r.repo_id}`):r.org_id?o(`/organizations/${r.org_id}`):r.enterprise_id?o(`/enterprises/${r.enterprise_id}`):"#"}function w(r){r&&(r.scrollTop=r.scrollHeight)}function m(r){return{newPerPage:r,newCurrentPage:1}}function v(r){return r.pool_manager_status?.running?{text:"Running",variant:"success"}:{text:"Stopped",variant:"error"}}function _(r){switch(r.toLowerCase()){case"error":return{text:"Error",variant:"error"};case"warning":return{text:"Warning",variant:"warning"};case"info":return{text:"Info",variant:"info"};default:return{text:r,variant:"info"}}}function i(r,e,n){if(!e.trim())return r;const t=e.toLowerCase();return r.filter(s=>typeof n=="function"?n(s).toLowerCase().includes(t):n.some(a=>s[a]?.toString().toLowerCase().includes(t)))}function h(r,e){return i(r,e,["name","owner"])}function x(r,e){return i(r,e,["name"])}function k(r,e){return i(r,e,n=>[n.name||"",n.description||"",n.endpoint?.name||""].join(" "))}function E(r,e){return i(r,e,["name","description","base_url","api_base_url"])}function L(r,e,n){return r.slice((e-1)*n,e*n)}export{E as a,l as b,m as c,_ as d,d as e,k as f,f as g,i as h,p as i,g as j,v as k,x as l,h as m,L as p,w as s}; diff --git a/webapp/assets/_app/immutable/chunks/B9-0TtNc.js b/webapp/assets/_app/immutable/chunks/B9-0TtNc.js deleted file mode 100644 index 638fb80c..00000000 --- a/webapp/assets/_app/immutable/chunks/B9-0TtNc.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as K}from"./TJn6xDN9.js";import{p as O,f as U,d as e,r as t,s,q as c,u as o,z as at,t as W,e as p,b as h,c as Q,E as mt,D as ut,A as Y,a as Z,g as P}from"./DniTuB_0.js";import{p as T,i as H,s as pt,a as gt}from"./DbNhg6mG.js";import{c as rt,d as tt,B as xt}from"./DD3srElq.js";import{b as R,e as ft}from"./LMA6-4d1.js";import{B as $}from"./DcQdHuVc.js";import{e as yt}from"./C-ow2qSP.js";import{D as ht,G as et}from"./QtGwBUod.js";import{E as _t}from"./D3pbRQAB.js";import{S as bt}from"./Dn_Ue57e.js";import{e as kt,i as wt}from"./Ck5PkeSc.js";import{b as Ct}from"./C-xTH-sp.js";var Pt=U('

ID
Created At
Updated At
Status
Pool Balancer Type
');function qt(L,v){O(v,!1);let a=T(v,"entity",8),g=T(v,"entityType",8);function B(){return`${g().charAt(0).toUpperCase()+g().slice(1)} Information`}function n(){if(!a().endpoint?.base_url)return"#";switch(g()){case"repository":const d=a();return`${a().endpoint.base_url}/${d.owner}/${a().name}`;case"organization":return`${a().endpoint.base_url}/${a().name}`;case"enterprise":return`${a().endpoint.base_url}/enterprises/${a().name}`;default:return"#"}}function E(){return`${g().charAt(0).toUpperCase()+g().slice(1)} URL`}function V(){const d=a().pool_balancing_type;if(!d||d===""||d==="none")return"Round Robin (default)";switch(d){case"roundrobin":return"Round Robin";case"pack":return"Pack";default:return d}}K();var m=Pt(),x=e(m),_=e(x),I=e(_,!0);t(_);var b=s(_,2),i=e(b),f=s(e(i),2),k=e(f,!0);t(f),t(i);var u=s(i,2),D=s(e(u),2),M=e(D,!0);t(D),t(u);var w=s(u,2),S=s(e(w),2),G=e(S,!0);t(S),t(w);var r=s(w,2),C=s(e(r),2),l=e(C);{var A=d=>{$(d,{variant:"success",text:"Running"})},j=d=>{$(d,{variant:"error",text:"Stopped"})};H(l,d=>{c(a()),o(()=>a().pool_manager_status?.running)?d(A):d(j,!1)})}t(C),t(r);var N=s(r,2),z=s(e(N),2),y=e(z,!0);t(z),t(N);var q=s(N,2),F=e(q),st=e(F,!0);t(F);var X=s(F,2),J=e(X),ot=e(J);at(),t(J),t(X),t(q),t(b),t(x),t(m),W((d,it,dt,nt,lt,vt,ct)=>{p(I,d),p(k,(c(a()),o(()=>a().id))),p(M,it),p(G,dt),p(y,nt),p(st,lt),rt(J,"href",vt),p(ot,`${ct??""} `)},[()=>o(B),()=>(c(R),c(a()),o(()=>R(a().created_at))),()=>(c(R),c(a()),o(()=>R(a().updated_at))),()=>o(V),()=>o(E),()=>o(n),()=>o(n)]),h(L,m),Q()}var Tt=U('

No pools configured

'),Et=U('');function Wt(L,v){O(v,!1);const[a,g]=pt(),B=()=>gt(yt,"$eagerCache",a);let n=T(v,"pools",8),E=T(v,"entityType",8),V=T(v,"entityId",8,""),m=T(v,"entityName",8,"");const x=mt();function _(){x("addPool",{entityType:E(),entityId:V(),entityName:m()})}const I=[{key:"id",title:"ID",flexible:!0,cellComponent:_t,cellProps:{entityType:"pool",showId:!0,fontMono:!0}},{key:"image",title:"Image",flexible:!0,cellComponent:et,cellProps:{field:"image",type:"code",showTitle:!0}},{key:"provider",title:"Provider",cellComponent:et,cellProps:{field:"provider_name"}},{key:"status",title:"Status",cellComponent:bt,cellProps:{statusType:"enabled"}}],b={entityType:"pool",primaryText:{field:"id",isClickable:!0,href:"/pools/{id}",useId:!0,isMonospace:!0},secondaryText:{field:"entity_name",computedValue:r=>ft(r,B())},badges:[{type:"custom",value:r=>({variant:r.enabled?"success":"error",text:r.enabled?"Enabled":"Disabled"})}]};K();var i=Et(),f=e(i),k=e(f),u=e(k),D=e(u);t(u);var M=s(u,2);t(k);var w=s(k,2);{var S=r=>{var C=Tt(),l=s(e(C),4),A=e(l);t(l);var j=s(l,2),N=e(j);xt(N,{variant:"primary",size:"sm",$$events:{click:_},children:(z,y)=>{at();var q=ut("Add Pool");h(z,q)},$$slots:{default:!0}}),t(j),t(C),W(()=>p(A,`No pools configured for this ${E()??""}.`)),h(r,C)},G=r=>{ht(r,{get columns(){return I},get data(){return n()},loading:!1,error:"",searchTerm:"",showSearch:!1,showPagination:!1,currentPage:1,get perPage(){return c(n()),o(()=>n().length)},totalPages:1,get totalItems(){return c(n()),o(()=>n().length)},itemName:"pools",emptyTitle:"No pools configured",get emptyMessage(){return`No pools configured for this ${E()??""}.`},emptyIconType:"cog",get mobileCardConfig(){return b}})};H(w,r=>{c(n()),o(()=>n().length===0)?r(S):r(G,!1)})}t(f),t(i),W(r=>{p(D,`Pools (${c(n()),o(()=>n().length)??""})`),rt(M,"href",r)},[()=>(c(tt),o(()=>tt("/pools")))]),h(L,i),Q(),g()}var It=U('

'),Nt=U('

Events

'),Bt=U('

Events

No events available

');function Ft(L,v){O(v,!1);let a=T(v,"events",8),g=T(v,"eventsContainer",12,void 0);K();var B=Y(),n=Z(B);{var E=m=>{var x=Nt(),_=e(x),I=s(e(_),2);kt(I,5,a,wt,(b,i)=>{var f=It(),k=e(f),u=e(k),D=e(u,!0);t(u);var M=s(u,2),w=e(M);{var S=l=>{$(l,{variant:"error",text:"Error"})},G=l=>{var A=Y(),j=Z(A);{var N=y=>{$(y,{variant:"warning",text:"Warning"})},z=y=>{$(y,{variant:"info",text:"Info"})};H(j,y=>{P(i),o(()=>(P(i).event_level||"info").toLowerCase()==="warning")?y(N):y(z,!1)},!0)}h(l,A)};H(w,l=>{P(i),o(()=>(P(i).event_level||"info").toLowerCase()==="error")?l(S):l(G,!1)})}var r=s(w,2),C=e(r,!0);t(r),t(M),t(k),t(f),W(l=>{p(D,(P(i),o(()=>P(i).message))),p(C,l)},[()=>(c(R),P(i),o(()=>R(P(i).created_at)))]),h(b,f)}),t(I),Ct(I,b=>g(b),()=>g()),t(_),t(x),h(m,x)},V=m=>{var x=Bt();h(m,x)};H(n,m=>{c(a()),o(()=>a()&&a().length>0)?m(E):m(V,!1)})}h(L,B),Q()}export{qt as E,Wt as P,Ft as a}; diff --git a/webapp/assets/_app/immutable/chunks/PC4wJWhj.js b/webapp/assets/_app/immutable/chunks/BFX8vI-4.js similarity index 73% rename from webapp/assets/_app/immutable/chunks/PC4wJWhj.js rename to webapp/assets/_app/immutable/chunks/BFX8vI-4.js index 9793ad50..af8d4fcb 100644 --- a/webapp/assets/_app/immutable/chunks/PC4wJWhj.js +++ b/webapp/assets/_app/immutable/chunks/BFX8vI-4.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import{i as u}from"./TJn6xDN9.js";import{p as v,E as m,f as h,d as r,r as d,i as t,b as k,c as g}from"./DniTuB_0.js";import{f as b}from"./DD3srElq.js";var w=h('');function M(s,i){v(i,!1);const l=m();function n(){l("close")}function c(o){o.stopPropagation()}function f(o){o.key==="Escape"&&l("close")}u();var a=w(),e=r(a),p=r(e);b(p,i,"default",{}),d(e),d(a),t("click",e,c),t("click",a,n),t("keydown",a,f),k(s,a),g()}export{M}; +import"./DsnmJJEf.js";import{i as u}from"./De-I_rkH.js";import{p as v,E as m,f as h,d as r,r as d,i as t,b as k,c as g}from"./BIqNNOMq.js";import{f as b}from"./CQh-7xkh.js";var w=h('');function M(s,i){v(i,!1);const l=m();function n(){l("close")}function c(o){o.stopPropagation()}function f(o){o.key==="Escape"&&l("close")}u();var a=w(),e=r(a),p=r(e);b(p,i,"default",{}),d(e),d(a),t("click",e,c),t("click",a,n),t("keydown",a,f),k(s,a),g()}export{M}; diff --git a/webapp/assets/_app/immutable/chunks/CzKtu-7o.js b/webapp/assets/_app/immutable/chunks/BIfA0Pjo.js similarity index 71% rename from webapp/assets/_app/immutable/chunks/CzKtu-7o.js rename to webapp/assets/_app/immutable/chunks/BIfA0Pjo.js index 1a9776b1..a3bb18db 100644 --- a/webapp/assets/_app/immutable/chunks/CzKtu-7o.js +++ b/webapp/assets/_app/immutable/chunks/BIfA0Pjo.js @@ -1 +1 @@ -import{s as e}from"./DeKGyprh.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p}; +import{s as e}from"./BSYpqPvJ.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p}; diff --git a/webapp/assets/_app/immutable/chunks/DniTuB_0.js b/webapp/assets/_app/immutable/chunks/BIqNNOMq.js similarity index 99% rename from webapp/assets/_app/immutable/chunks/DniTuB_0.js rename to webapp/assets/_app/immutable/chunks/BIqNNOMq.js index ae3f4319..07245abc 100644 --- a/webapp/assets/_app/immutable/chunks/DniTuB_0.js +++ b/webapp/assets/_app/immutable/chunks/BIqNNOMq.js @@ -1,2 +1,2 @@ var Je=Array.isArray,wn=Array.prototype.indexOf,yn=Array.from,$e=Object.defineProperty,be=Object.getOwnPropertyDescriptor,gn=Object.getOwnPropertyDescriptors,bn=Object.prototype,mn=Array.prototype,At=Object.getPrototypeOf,dt=Object.isExtensible;function Mr(e){return typeof e=="function"}const Ne=()=>{};function Lr(e){return e()}function St(e){for(var t=0;t{e=r,t=s});return{promise:n,resolve:e,reject:t}}const k=2,Qe=4,qe=8,Ae=16,Y=32,ae=64,kt=128,O=256,De=512,m=1024,P=2048,H=4096,W=8192,de=16384,et=32768,Ct=65536,ht=1<<17,Rt=1<<18,tt=1<<19,nt=1<<20,Be=1<<21,rt=1<<22,X=1<<23,Z=Symbol("$state"),Fr=Symbol("legacy props"),qr=Symbol(""),at=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},st=3,me=8;function Tn(){throw new Error("https://svelte.dev/e/await_outside_boundary")}function he(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function xn(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function An(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function Sn(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function kn(e){throw new Error("https://svelte.dev/e/effect_orphan")}function Cn(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function Rn(){throw new Error("https://svelte.dev/e/get_abort_signal_outside_reaction")}function On(){throw new Error("https://svelte.dev/e/hydration_failed")}function Ot(e){throw new Error("https://svelte.dev/e/lifecycle_legacy_only")}function Vr(e){throw new Error("https://svelte.dev/e/props_invalid_value")}function Nn(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function Pn(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Dn(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}const Yr=1,Hr=2,Ur=4,$r=8,Br=16,Wr=1,zr=2,Gr=4,Kr=8,Xr=16,Nt=1,In=2,it="[",Mn="[!",Pt="]",oe={},E=Symbol(),Zr="http://www.w3.org/1999/xhtml",Jr="@attach";function je(e){console.warn("https://svelte.dev/e/hydration_mismatch")}function Qr(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}let g=!1;function fe(e){g=e}let w;function I(e){if(e===null)throw je(),oe;return w=e}function ut(){return I(M(w))}function ea(e){if(g){if(M(w)!==null)throw je(),oe;w=e}}function ta(e=1){if(g){for(var t=e,n=w;t--;)n=M(n);w=n}}function na(){for(var e=0,t=w;;){if(t.nodeType===me){var n=t.data;if(n===Pt){if(e===0)return t;e-=1}else(n===it||n===Mn)&&(e+=1)}var r=M(t);t.remove(),t=r}}function ra(e){if(!e||e.nodeType!==me)throw je(),oe;return e.data}function Dt(e){return e===this.v}function It(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function aa(e,t){return e!==t}function Mt(e){return!It(e,this.v)}let Se=!1;function sa(){Se=!0}let p=null;function Ie(e){p=e}function Ln(e){return Ve().get(e)}function Fn(e,t){return Ve().set(e,t),t}function qn(e){return Ve().has(e)}function jn(){return Ve()}function Vn(e,t=!1,n){p={p,c:null,e:null,s:e,x:null,l:Se&&!t?{s:null,u:null,$:[]}:null}}function Yn(e){var t=p,n=t.e;if(n!==null){t.e=null;for(var r of n)Jt(r)}return e!==void 0&&(t.x=e),p=t.p,e??{}}function ke(){return!Se||p!==null&&p.l===null}function Ve(e){return p===null&&he(),p.c??=new Map(Hn(p)||void 0)}function Hn(e){let t=e.p;for(;t!==null;){const n=t.c;if(n!==null)return n;t=t.p}return null}const Un=new WeakMap;function $n(e){var t=h;if(t===null)return d.f|=X,e;if((t.f&et)===0){if((t.f&kt)===0)throw!t.parent&&e instanceof Error&&Lt(e),e;t.b.error(e)}else lt(e,t)}function lt(e,t){for(;t!==null;){if((t.f&kt)!==0)try{t.b.error(e);return}catch(n){e=n}t=t.parent}throw e instanceof Error&&Lt(e),e}function Lt(e){const t=Un.get(e);t&&($e(e,"message",{value:t.message}),$e(e,"stack",{value:t.stack}))}const Bn=typeof requestIdleCallback>"u"?e=>setTimeout(e,1):requestIdleCallback;let Ee=[],Te=[];function Ft(){var e=Ee;Ee=[],St(e)}function qt(){var e=Te;Te=[],St(e)}function jt(e){Ee.length===0&&queueMicrotask(Ft),Ee.push(e)}function ia(e){Te.length===0&&Bn(qt),Te.push(e)}function Wn(){Ee.length>0&&Ft(),Te.length>0&&qt()}function zn(){for(var e=h.b;e!==null&&!e.has_pending_snippet();)e=e.parent;return e===null&&Tn(),e}function ft(e){var t=k|P,n=d!==null&&(d.f&k)!==0?d:null;return h===null||n!==null&&(n.f&O)!==0?t|=O:h.f|=tt,{ctx:p,deps:null,effects:null,equals:Dt,f:t,fn:e,reactions:null,rv:0,v:E,wv:0,parent:n??h,ac:null}}function Gn(e,t){let n=h;n===null&&xn();var r=n.b,s=void 0,a=ct(E),i=null,f=!d;return ar(()=>{try{var u=e()}catch(_){u=Promise.reject(_)}var l=()=>u;s=i?.then(l,l)??Promise.resolve(u),i=s;var o=y,v=r.pending;f&&(r.update_pending_count(1),v||o.increment());const c=(_,b=void 0)=>{i=null,v||o.activate(),b?b!==at&&(a.f|=X,Le(a,b)):((a.f&X)!==0&&(a.f^=X),Le(a,_)),f&&(r.update_pending_count(-1),v||o.decrement()),Ht()};if(s.then(c,_=>c(null,_||"unknown")),o)return()=>{queueMicrotask(()=>o.neuter())}}),new Promise(u=>{function l(o){function v(){o===s?u(a):l(s)}o.then(v,v)}l(s)})}function ua(e){const t=ft(e);return sn(t),t}function Kn(e){const t=ft(e);return t.equals=Mt,t}function Vt(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;nGn(u))).then(u=>{s?.activate(),i();try{n([...e.map(r),...u])}catch(l){(a.f&de)===0&<(l,a)}s?.deactivate(),Ht()}).catch(u=>{f.error(u)})}function Jn(){var e=h,t=d,n=p;return function(){G(e),L(t),Ie(n)}}function Ht(){G(null),L(null),Ie(null)}const we=new Set;let y=null,He=null,ve=null,pt=new Set,Me=[];function Ut(){const e=Me.shift();Me.length>0&&queueMicrotask(Ut),e()}let ee=[],Ye=null,We=!1,Pe=!1;class te{current=new Map;#a=new Map;#s=new Set;#e=0;#f=null;#o=!1;#n=[];#i=[];#r=[];#t=[];#u=[];#c=[];#_=[];skipped_effects=new Set;process(t){ee=[],He=null;var n=null;if(we.size>1){n=new Map,ve=new Map;for(const[a,i]of this.current)n.set(a,{v:a.v,wv:a.wv}),a.v=i;for(const a of we)if(a!==this)for(const[i,f]of a.#a)n.has(i)||(n.set(i,{v:i.v,wv:i.wv}),i.v=f)}for(const a of t)this.#d(a);if(this.#n.length===0&&this.#e===0){this.#v();var r=this.#r,s=this.#t;this.#r=[],this.#t=[],this.#u=[],He=y,y=null,wt(r),wt(s),y===null?y=this:we.delete(this),this.#f?.resolve()}else this.#l(this.#r),this.#l(this.#t),this.#l(this.#u);if(n){for(const[a,{v:i,wv:f}]of n)a.wv<=f&&(a.v=i);ve=null}for(const a of this.#n)_e(a);for(const a of this.#i)_e(a);this.#n=[],this.#i=[]}#d(t){t.f^=m;for(var n=t.first;n!==null;){var r=n.f,s=(r&(Y|ae))!==0,a=s&&(r&m)!==0,i=a||(r&W)!==0||this.skipped_effects.has(n);if(!i&&n.fn!==null){if(s)n.f^=m;else if((r&m)===0)if((r&Qe)!==0)this.#t.push(n);else if((r&rt)!==0){var f=n.b?.pending?this.#i:this.#n;f.push(n)}else Ce(n)&&((n.f&Ae)!==0&&this.#u.push(n),_e(n));var u=n.first;if(u!==null){n=u;continue}}var l=n.parent;for(n=n.next;n===null&&l!==null;)n=l.next,l=l.parent}}#l(t){for(const n of t)((n.f&P)!==0?this.#c:this.#_).push(n),x(n,m);t.length=0}capture(t,n){this.#a.has(t)||this.#a.set(t,n),this.current.set(t,t.v)}activate(){y=this}deactivate(){y=null,He=null;for(const t of pt)if(pt.delete(t),t(),y!==null)break}neuter(){this.#o=!0}flush(){ee.length>0?ze():this.#v(),y===this&&(this.#e===0&&we.delete(this),this.deactivate())}#v(){if(!this.#o)for(const t of this.#s)t();this.#s.clear()}increment(){this.#e+=1}decrement(){if(this.#e-=1,this.#e===0){for(const t of this.#c)x(t,P),ne(t);for(const t of this.#_)x(t,H),ne(t);this.#r=[],this.#t=[],this.flush()}else this.deactivate()}add_callback(t){this.#s.add(t)}settled(){return(this.#f??=En()).promise}static ensure(){if(y===null){const t=y=new te;we.add(y),Pe||te.enqueue(()=>{y===t&&t.flush()})}return y}static enqueue(t){Me.length===0&&queueMicrotask(Ut),Me.unshift(t)}}function $t(e){var t=Pe;Pe=!0;try{var n;for(e&&(ze(),n=e());;){if(Wn(),ee.length===0&&(y?.flush(),ee.length===0))return Ye=null,n;ze()}}finally{Pe=t}}function ze(){var e=ce;We=!0;try{var t=0;for(bt(!0);ee.length>0;){var n=te.ensure();if(t++>1e3){var r,s;Qn()}n.process(ee),J.clear()}}finally{We=!1,bt(e),Ye=null}}function Qn(){try{Cn()}catch(e){lt(e,Ye)}}function wt(e){var t=e.length;if(t!==0){for(var n=0;ns&&(r.f&nt)!==0)break}}for(;nK(e))),t}function j(e,t,n=!1){d!==null&&(!D||(d.f&ht)!==0)&&ke()&&(d.f&(k|Ae|rt|ht))!==0&&!V?.includes(e)&&Dn();let r=n?ye(t):t;return Le(e,r)}function Le(e,t){if(!e.equals(t)){var n=e.v;pe?J.set(e,t):J.set(e,n),e.v=t;var r=te.ensure();r.capture(e,n),(e.f&k)!==0&&((e.f&P)!==0&&ot(e),x(e,(e.f&O)===0?m:H)),e.wv=ln(),Bt(e,P),ke()&&h!==null&&(h.f&m)!==0&&(h.f&(Y|ae))===0&&(R===null?_r([e]):R.push(e))}return t}function oa(e,t=1){var n=K(e),r=t===1?n++:n--;return j(e,n),r}function Ue(e){j(e,e.v+1)}function Bt(e,t){var n=e.reactions;if(n!==null)for(var r=ke(),s=n.length,a=0;a{if(Q===a)return f();var u=d,l=Q;L(null),Et(a);var o=f();return L(u),Et(l),o};return r&&n.set("length",$(e.length)),new Proxy(e,{defineProperty(f,u,l){(!("value"in l)||l.configurable===!1||l.enumerable===!1||l.writable===!1)&&Nn();var o=n.get(u);return o===void 0?o=i(()=>{var v=$(l.value);return n.set(u,v),v}):j(o,l.value,!0),!0},deleteProperty(f,u){var l=n.get(u);if(l===void 0){if(u in f){const o=i(()=>$(E));n.set(u,o),Ue(s)}}else j(l,E),Ue(s);return!0},get(f,u,l){if(u===Z)return e;var o=n.get(u),v=u in f;if(o===void 0&&(!v||be(f,u)?.writable)&&(o=i(()=>{var _=ye(v?f[u]:E),b=$(_);return b}),n.set(u,o)),o!==void 0){var c=K(o);return c===E?void 0:c}return Reflect.get(f,u,l)},getOwnPropertyDescriptor(f,u){var l=Reflect.getOwnPropertyDescriptor(f,u);if(l&&"value"in l){var o=n.get(u);o&&(l.value=K(o))}else if(l===void 0){var v=n.get(u),c=v?.v;if(v!==void 0&&c!==E)return{enumerable:!0,configurable:!0,value:c,writable:!0}}return l},has(f,u){if(u===Z)return!0;var l=n.get(u),o=l!==void 0&&l.v!==E||Reflect.has(f,u);if(l!==void 0||h!==null&&(!o||be(f,u)?.writable)){l===void 0&&(l=i(()=>{var c=o?ye(f[u]):E,_=$(c);return _}),n.set(u,l));var v=K(l);if(v===E)return!1}return o},set(f,u,l,o){var v=n.get(u),c=u in f;if(r&&u==="length")for(var _=l;_$(E)),n.set(_+"",b))}if(v===void 0)(!c||be(f,u)?.writable)&&(v=i(()=>$(void 0)),j(v,ye(l)),n.set(u,v));else{c=v.v!==E;var q=i(()=>ye(l));j(v,q)}var Re=Reflect.getOwnPropertyDescriptor(f,u);if(Re?.set&&Re.set.call(o,l),!c){if(r&&typeof u=="string"){var Oe=n.get("length"),U=Number(u);Number.isInteger(U)&&U>=Oe.v&&j(Oe,U+1)}Ue(s)}return!0},ownKeys(f){K(s);var u=Reflect.ownKeys(f).filter(v=>{var c=n.get(v);return c===void 0||c.v!==E});for(var[l,o]of n)o.v!==E&&!(l in f)&&u.push(l);return u},setPrototypeOf(){Pn()}})}function yt(e){try{if(e!==null&&typeof e=="object"&&Z in e)return e[Z]}catch{}return e}function ca(e,t){return Object.is(yt(e),yt(t))}var gt,er,Wt,zt,Gt;function Ge(){if(gt===void 0){gt=window,er=document,Wt=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;zt=be(t,"firstChild").get,Gt=be(t,"nextSibling").get,dt(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),dt(n)&&(n.__t=void 0)}}function z(e=""){return document.createTextNode(e)}function A(e){return zt.call(e)}function M(e){return Gt.call(e)}function _a(e,t){if(!g)return A(e);var n=A(w);if(n===null)n=w.appendChild(z());else if(t&&n.nodeType!==st){var r=z();return n?.before(r),I(r),r}return I(n),n}function va(e,t){if(!g){var n=A(e);return n instanceof Comment&&n.data===""?M(n):n}return w}function da(e,t=1,n=!1){let r=g?w:e;for(var s;t--;)s=r,r=M(r);if(!g)return r;if(n&&r?.nodeType!==st){var a=z();return r===null?s?.after(a):r.before(a),I(a),a}return I(r),r}function Kt(e){e.textContent=""}function ha(){return!1}function Xt(e){h===null&&d===null&&kn(),d!==null&&(d.f&O)!==0&&h===null&&Sn(),pe&&An()}function tr(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function F(e,t,n,r=!0){var s=h;s!==null&&(s.f&W)!==0&&(e|=W);var a={ctx:p,deps:null,nodes_start:null,nodes_end:null,f:e|P,first:null,fn:t,last:null,next:null,parent:s,b:s&&s.b,prev:null,teardown:null,transitions:null,wv:0,ac:null};if(n)try{_e(a),a.f|=et}catch(u){throw re(a),u}else t!==null&&ne(a);var i=n&&a.deps===null&&a.first===null&&a.nodes_start===null&&a.teardown===null&&(a.f&tt)===0;if(!i&&r&&(s!==null&&tr(a,s),d!==null&&(d.f&k)!==0&&(e&ae)===0)){var f=d;(f.effects??=[]).push(a)}return a}function Zt(e){const t=F(qe,null,!1);return x(t,m),t.teardown=e,t}function nr(e){Xt();var t=h.f,n=!d&&(t&Y)!==0&&(t&et)===0;if(n){var r=p;(r.e??=[]).push(e)}else return Jt(e)}function Jt(e){return F(Qe|nt,e,!1)}function pa(e){return Xt(),F(qe|nt,e,!0)}function rr(e){te.ensure();const t=F(ae,e,!0);return(n={})=>new Promise(r=>{n.outro?fr(t,()=>{re(t),r(void 0)}):(re(t),r(void 0))})}function wa(e){return F(Qe,e,!1)}function ya(e,t){var n=p,r={effect:null,ran:!1,deps:e};n.l.$.push(r),r.effect=Qt(()=>{e(),!r.ran&&(r.ran=!0,se(t))})}function ga(){var e=p;Qt(()=>{for(var t of e.l.$){t.deps();var n=t.effect;(n.f&m)!==0&&x(n,H),Ce(n)&&_e(n),t.ran=!1}})}function ar(e){return F(rt|tt,e,!0)}function Qt(e,t=0){return F(qe|t,e,!0)}function ba(e,t=[],n=[]){Zn(t,n,r=>{F(qe,()=>e(...r.map(K)),!0)})}function sr(e,t=0){var n=F(Ae|t,e,!0);return n}function ir(e,t=!0){return F(Y,e,!0,t)}function en(e){var t=e.teardown;if(t!==null){const n=pe,r=d;mt(!0),L(null);try{t.call(null)}finally{mt(n),L(r)}}}function tn(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){n.ac?.abort(at);var r=n.next;(n.f&ae)!==0?n.parent=null:re(n,t),n=r}}function ur(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&Y)===0&&re(t),t=n}}function re(e,t=!0){var n=!1;(t||(e.f&Rt)!==0)&&e.nodes_start!==null&&e.nodes_end!==null&&(lr(e.nodes_start,e.nodes_end),n=!0),tn(e,t&&!n),Fe(e,0),x(e,de);var r=e.transitions;if(r!==null)for(const a of r)a.stop();en(e);var s=e.parent;s!==null&&s.first!==null&&nn(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes_start=e.nodes_end=e.ac=null}function lr(e,t){for(;e!==null;){var n=e===t?null:M(e);e.remove(),e=n}}function nn(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function fr(e,t){var n=[];rn(e,n,!0),or(n,()=>{re(e),t&&t()})}function or(e,t){var n=e.length;if(n>0){var r=()=>--n||t();for(var s of e)s.out(r)}else t()}function rn(e,t,n){if((e.f&W)===0){if(e.f^=W,e.transitions!==null)for(const i of e.transitions)(i.is_global||n)&&t.push(i);for(var r=e.first;r!==null;){var s=r.next,a=(r.f&Ct)!==0||(r.f&Y)!==0;rn(r,t,a?n:!1),r=s}}}function ma(e){an(e,!0)}function an(e,t){if((e.f&W)!==0){e.f^=W,(e.f&m)===0&&(x(e,P),ne(e));for(var n=e.first;n!==null;){var r=n.next,s=(n.f&Ct)!==0||(n.f&Y)!==0;an(n,s?t:!1),n=r}if(e.transitions!==null)for(const a of e.transitions)(a.is_global||t)&&a.in()}}let le=null;function cr(e){var t=le;try{if(le=new Set,se(e),t!==null)for(var n of le)t.add(n);return le}finally{le=t}}function Ea(e){for(var t of cr(e))Le(t,t.v)}let ce=!1;function bt(e){ce=e}let pe=!1;function mt(e){pe=e}let d=null,D=!1;function L(e){d=e}let h=null;function G(e){h=e}let V=null;function sn(e){d!==null&&(V===null?V=[e]:V.push(e))}let T=null,S=0,R=null;function _r(e){R=e}let un=1,xe=0,Q=xe;function Et(e){Q=e}let B=!1;function ln(){return++un}function Ce(e){var t=e.f;if((t&P)!==0)return!0;if((t&H)!==0){var n=e.deps,r=(t&O)!==0;if(n!==null){var s,a,i=(t&De)!==0,f=r&&h!==null&&!B,u=n.length;if((i||f)&&(h===null||(h.f&de)===0)){var l=e,o=l.parent;for(s=0;se.wv)return!0}(!r||h!==null&&!B)&&x(e,m)}return!1}function fn(e,t,n=!0){var r=e.reactions;if(r!==null&&!V?.includes(e))for(var s=0;s0)for(c.length=S+T.length,_=0;_{document.activeElement===n&&e.focus()})}}function Ca(e){g&&A(e)!==null&&Kt(e)}let Tt=!1;function mr(){Tt||(Tt=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t.__on_r?.()})},{capture:!0}))}function _n(e){var t=d,n=h;L(null),G(null);try{return e()}finally{L(t),G(n)}}function Ra(e,t,n,r=n){e.addEventListener(t,()=>_n(n));const s=e.__on_r;s?e.__on_r=()=>{s(),r(!0)}:e.__on_r=()=>r(!0),mr()}const vn=new Set,Xe=new Set;function Er(e,t,n,r={}){function s(a){if(r.capture||ge.call(t,a),!a.cancelBubble)return _n(()=>n?.call(this,a))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?jt(()=>{t.addEventListener(e,s,r)}):t.addEventListener(e,s,r),s}function Oa(e,t,n,r,s){var a={capture:r,passive:s},i=Er(e,t,n,a);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&Zt(()=>{t.removeEventListener(e,i,a)})}function Na(e){for(var t=0;t{throw U});throw c}}finally{e.__root=t,delete e.currentTarget,L(o),G(v)}}}let C;function Tr(){C=void 0}function Pa(e){let t=null,n=g;var r;if(g){for(t=w,C===void 0&&(C=A(document.head));C!==null&&(C.nodeType!==me||C.data!==it);)C=M(C);C===null?fe(!1):C=I(M(C))}g||(r=document.head.appendChild(z()));try{sr(()=>e(r),Rt)}finally{n&&(fe(!0),C=w,I(t))}}function _t(e){var t=document.createElement("template");return t.innerHTML=e.replaceAll("",""),t.content}function N(e,t){var n=h;n.nodes_start===null&&(n.nodes_start=e,n.nodes_end=t)}function Da(e,t){var n=(t&Nt)!==0,r=(t&In)!==0,s,a=!e.startsWith("");return()=>{if(g)return N(w,null),w;s===void 0&&(s=_t(a?e:""+e),n||(s=A(s)));var i=r||Wt?document.importNode(s,!0):s.cloneNode(!0);if(n){var f=A(i),u=i.lastChild;N(f,u)}else N(i,i);return i}}function xr(e,t,n="svg"){var r=!e.startsWith(""),s=(t&Nt)!==0,a=`<${n}>${r?e:""+e}`,i;return()=>{if(g)return N(w,null),w;if(!i){var f=_t(a),u=A(f);if(s)for(i=document.createDocumentFragment();A(u);)i.appendChild(A(u));else i=A(u)}var l=i.cloneNode(!0);if(s){var o=A(l),v=l.lastChild;N(o,v)}else N(l,l);return l}}function Ia(e,t){return xr(e,t,"svg")}function Ma(e=""){if(!g){var t=z(e+"");return N(t,t),t}var n=w;return n.nodeType!==st&&(n.before(n=z()),I(n)),N(n,n),n}function La(){if(g)return N(w,null),w;var e=document.createDocumentFragment(),t=document.createComment(""),n=z();return e.append(t,n),N(t,n),e}function Fa(e,t){if(g){h.nodes_end=w,ut();return}e!==null&&e.before(t)}function qa(e,t){var n=t==null?"":typeof t=="object"?t+"":t;n!==(e.__t??=e.nodeValue)&&(e.__t=n,e.nodeValue=n+"")}function dn(e,t){return hn(e,t)}function Ar(e,t){Ge(),t.intro=t.intro??!1;const n=t.target,r=g,s=w;try{for(var a=A(n);a&&(a.nodeType!==me||a.data!==it);)a=M(a);if(!a)throw oe;fe(!0),I(a),ut();const i=hn(e,{...t,anchor:a});if(w===null||w.nodeType!==me||w.data!==Pt)throw je(),oe;return fe(!1),i}catch(i){if(i instanceof Error&&i.message.split(` -`).some(f=>f.startsWith("https://svelte.dev/e/")))throw i;return i!==oe&&console.warn("Failed to hydrate: ",i),t.recover===!1&&On(),Ge(),Kt(n),fe(!1),dn(e,t)}finally{fe(r),I(s),Tr()}}const ie=new Map;function hn(e,{target:t,anchor:n,props:r={},events:s,context:a,intro:i=!0}){Ge();var f=new Set,u=v=>{for(var c=0;c{var v=n??t.appendChild(z());return ir(()=>{if(a){Vn({});var c=p;c.c=a}s&&(r.$$events=s),g&&N(v,null),l=e(v,r)||{},g&&(h.nodes_end=w),a&&Yn()}),()=>{for(var c of f){t.removeEventListener(c,ge);var _=ie.get(c);--_===0?(document.removeEventListener(c,ge),ie.delete(c)):ie.set(c,_)}Xe.delete(u),v!==n&&v.parentNode?.removeChild(v)}});return Ze.set(l,o),l}let Ze=new WeakMap;function Sr(e,t){const n=Ze.get(e);return n?(Ze.delete(e),n(t)):Promise.resolve()}function kr(e){return(t,...n)=>{var r=e(...n),s;if(g)s=w,ut();else{var a=r.render().trim(),i=_t(a);s=A(i),t.before(s)}const f=r.setup?.(s);N(s,s),typeof f=="function"&&Zt(f)}}function Cr(e,t,n){if(e==null)return t(void 0),Ne;const r=se(()=>e.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const ue=[];function ja(e,t=Ne){let n=null;const r=new Set;function s(f){if(It(e,f)&&(e=f,n)){const u=!ue.length;for(const l of r)l[1](),ue.push(l,e);if(u){for(let l=0;l{r.delete(l),r.size===0&&n&&(n(),n=null)}}return{set:s,update:a,subscribe:i}}function Va(e){let t;return Cr(e,n=>t=n)(),t}function Rr(){return d===null&&Rn(),(d.ac??=new AbortController).signal}function pn(e){p===null&&he(),Se&&p.l!==null?vt(p).m.push(e):nr(()=>{const t=se(e);if(typeof t=="function")return t})}function Or(e){p===null&&he(),pn(()=>()=>se(e))}function Nr(e,t,{bubbles:n=!1,cancelable:r=!1}={}){return new CustomEvent(e,{detail:t,bubbles:n,cancelable:r})}function Pr(){const e=p;return e===null&&he(),(t,n,r)=>{const s=e.s.$$events?.[t];if(s){const a=Je(s)?s.slice():[s],i=Nr(t,n,r);for(const f of a)f.call(e.x,i);return!i.defaultPrevented}return!0}}function Dr(e){p===null&&he(),p.l===null&&Ot(),vt(p).b.push(e)}function Ir(e){p===null&&he(),p.l===null&&Ot(),vt(p).a.push(e)}function vt(e){var t=e.l;return t.u??={a:[],b:[],m:[]}}const Ya=Object.freeze(Object.defineProperty({__proto__:null,afterUpdate:Ir,beforeUpdate:Dr,createEventDispatcher:Pr,createRawSnippet:kr,flushSync:$t,getAbortSignal:Rr,getAllContexts:jn,getContext:Ln,hasContext:qn,hydrate:Ar,mount:dn,onDestroy:Or,onMount:pn,setContext:Fn,settled:hr,tick:dr,unmount:Sr,untrack:se},Symbol.toStringTag,{value:"Module"}));export{er as $,La as A,Or as B,Ia as C,Ma as D,Pr as E,ja as F,Va as G,g as H,ut as I,sr as J,Ct as K,z as L,ir as M,y as N,ha as O,w as P,fr as Q,I as R,A as S,ra as T,Mn as U,na as V,fe as W,me as X,Pt as Y,Le as Z,ct as _,va as a,Qr as a$,yn as a0,Je as a1,Hr as a2,ma as a3,Yr as a4,Br as a5,W as a6,re as a7,M as a8,rn as a9,Gr as aA,ye as aB,de as aC,Kr as aD,Se as aE,zr as aF,Wr as aG,oa as aH,G as aI,Xr as aJ,pe as aK,Fr as aL,Mr as aM,Ar as aN,dn as aO,$t as aP,Sr as aQ,$ as aR,dr as aS,ua as aT,aa as aU,It as aV,lr as aW,je as aX,oe as aY,N as aZ,_t as a_,Kt as aa,or as ab,h as ac,Ur as ad,jt as ae,$r as af,wa as ag,Qt as ah,Z as ai,ke as aj,Ra as ak,He as al,p as am,pa as an,nr as ao,Lr as ap,St as aq,ft as ar,sa as as,E as at,Ne as au,Cr as av,Zt as aw,$e as ax,be as ay,Vr as az,Fa as b,ca as b0,Zn as b1,qr as b2,Zr as b3,At as b4,Jr as b5,gn as b6,xa as b7,Er as b8,Na as b9,ka as ba,Sa as bb,ia as bc,mr as bd,Aa as be,Ya as bf,Yn as c,_a as d,qa as e,Da as f,K as g,ga as h,Oa as i,Pa as j,j as k,ya as l,la as m,gt as n,pn as o,Vn as p,Ta as q,ea as r,da as s,ba as t,se as u,Kn as v,fa as w,Ca as x,Ea as y,ta as z}; +`).some(f=>f.startsWith("https://svelte.dev/e/")))throw i;return i!==oe&&console.warn("Failed to hydrate: ",i),t.recover===!1&&On(),Ge(),Kt(n),fe(!1),dn(e,t)}finally{fe(r),I(s),Tr()}}const ie=new Map;function hn(e,{target:t,anchor:n,props:r={},events:s,context:a,intro:i=!0}){Ge();var f=new Set,u=v=>{for(var c=0;c{var v=n??t.appendChild(z());return ir(()=>{if(a){Vn({});var c=p;c.c=a}s&&(r.$$events=s),g&&N(v,null),l=e(v,r)||{},g&&(h.nodes_end=w),a&&Yn()}),()=>{for(var c of f){t.removeEventListener(c,ge);var _=ie.get(c);--_===0?(document.removeEventListener(c,ge),ie.delete(c)):ie.set(c,_)}Xe.delete(u),v!==n&&v.parentNode?.removeChild(v)}});return Ze.set(l,o),l}let Ze=new WeakMap;function Sr(e,t){const n=Ze.get(e);return n?(Ze.delete(e),n(t)):Promise.resolve()}function kr(e){return(t,...n)=>{var r=e(...n),s;if(g)s=w,ut();else{var a=r.render().trim(),i=_t(a);s=A(i),t.before(s)}const f=r.setup?.(s);N(s,s),typeof f=="function"&&Zt(f)}}function Cr(e,t,n){if(e==null)return t(void 0),Ne;const r=se(()=>e.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const ue=[];function ja(e,t=Ne){let n=null;const r=new Set;function s(f){if(It(e,f)&&(e=f,n)){const u=!ue.length;for(const l of r)l[1](),ue.push(l,e);if(u){for(let l=0;l{r.delete(l),r.size===0&&n&&(n(),n=null)}}return{set:s,update:a,subscribe:i}}function Va(e){let t;return Cr(e,n=>t=n)(),t}function Rr(){return d===null&&Rn(),(d.ac??=new AbortController).signal}function pn(e){p===null&&he(),Se&&p.l!==null?vt(p).m.push(e):nr(()=>{const t=se(e);if(typeof t=="function")return t})}function Or(e){p===null&&he(),pn(()=>()=>se(e))}function Nr(e,t,{bubbles:n=!1,cancelable:r=!1}={}){return new CustomEvent(e,{detail:t,bubbles:n,cancelable:r})}function Pr(){const e=p;return e===null&&he(),(t,n,r)=>{const s=e.s.$$events?.[t];if(s){const a=Je(s)?s.slice():[s],i=Nr(t,n,r);for(const f of a)f.call(e.x,i);return!i.defaultPrevented}return!0}}function Dr(e){p===null&&he(),p.l===null&&Ot(),vt(p).b.push(e)}function Ir(e){p===null&&he(),p.l===null&&Ot(),vt(p).a.push(e)}function vt(e){var t=e.l;return t.u??={a:[],b:[],m:[]}}const Ya=Object.freeze(Object.defineProperty({__proto__:null,afterUpdate:Ir,beforeUpdate:Dr,createEventDispatcher:Pr,createRawSnippet:kr,flushSync:$t,getAbortSignal:Rr,getAllContexts:jn,getContext:Ln,hasContext:qn,hydrate:Ar,mount:dn,onDestroy:Or,onMount:pn,setContext:Fn,settled:hr,tick:dr,unmount:Sr,untrack:se},Symbol.toStringTag,{value:"Module"}));export{er as $,La as A,Or as B,Ia as C,Ma as D,Pr as E,ja as F,Va as G,g as H,ut as I,sr as J,Ct as K,z as L,ir as M,y as N,ha as O,w as P,fr as Q,I as R,A as S,ra as T,Mn as U,na as V,fe as W,me as X,Pt as Y,Le as Z,ct as _,va as a,Qr as a$,yn as a0,Je as a1,Hr as a2,ma as a3,Yr as a4,Br as a5,W as a6,re as a7,M as a8,rn as a9,Gr as aA,ye as aB,de as aC,Kr as aD,Se as aE,zr as aF,Wr as aG,oa as aH,G as aI,Xr as aJ,pe as aK,Fr as aL,Mr as aM,Ar as aN,dn as aO,$t as aP,Sr as aQ,$ as aR,dr as aS,ua as aT,It as aU,aa as aV,lr as aW,je as aX,oe as aY,N as aZ,_t as a_,Kt as aa,or as ab,h as ac,Ur as ad,jt as ae,$r as af,wa as ag,Qt as ah,Z as ai,ke as aj,Ra as ak,He as al,p as am,pa as an,nr as ao,Lr as ap,St as aq,ft as ar,sa as as,E as at,Ne as au,Cr as av,Zt as aw,$e as ax,be as ay,Vr as az,Fa as b,ca as b0,Zn as b1,qr as b2,Zr as b3,At as b4,Jr as b5,gn as b6,xa as b7,Er as b8,Na as b9,ka as ba,Sa as bb,ia as bc,mr as bd,Aa as be,Ya as bf,Yn as c,_a as d,qa as e,Da as f,K as g,ga as h,Oa as i,Pa as j,j as k,ya as l,la as m,gt as n,pn as o,Vn as p,Ta as q,ea as r,da as s,ba as t,se as u,Kn as v,fa as w,Ca as x,Ea as y,ta as z}; diff --git a/webapp/assets/_app/immutable/chunks/BKBUu_Ci.js b/webapp/assets/_app/immutable/chunks/BKBUu_Ci.js new file mode 100644 index 00000000..4283e8dc --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/BKBUu_Ci.js @@ -0,0 +1,10 @@ +import"./DsnmJJEf.js";import{i as St}from"./De-I_rkH.js";import{ag as Ct,u as Se,ah as bt,q as wt,aU as yt,p as Et,o as kt,g as R,m as we,w as te,k as ne,B as Lt,l as me,aS as it,h as Dt,f as We,d as ve,r as _e,s as Be,t as ze,e as Xe,i as Te,b as De,A as Rt,a as xt,c as At,C as lt}from"./BIqNNOMq.js";import{p as st,i as je}from"./CfI2BFUj.js";import{e as rt}from"./D8ZtP9JD.js";import{s as nt,c as qe}from"./CQh-7xkh.js";import{b as Bt}from"./BLHP-Xk3.js";import{s as Tt}from"./CdEA5IGF.js";function Mt(oe,re,X){Ct(()=>{var Y=Se(()=>re(oe,X?.())||{});if(X&&Y?.update){var Z=!1,he={};bt(()=>{var O=X();wt(O),Z&&yt(he,O)&&(he=O,Y.update(O))}),Z=!0}if(Y?.destroy)return()=>Y.destroy()})}const Ot=5,ct=6,Pt=7,It=8,Ht=9;function Qe(oe,re){const X=new ArrayBuffer(1+re.byteLength);return new DataView(X).setUint8(0,oe),new Uint8Array(X,1).set(new Uint8Array(re)),X}function Ft(oe){const re=new DataView(oe);if(oe.byteLength<1)throw new Error("Message too short");return{type:re.getUint8(0),payload:oe.slice(1)}}function Wt(oe,re){const X=new ArrayBuffer(16+re.length);return new Uint8Array(X,0,16).set(new Uint8Array(oe)),new Uint8Array(X,16).set(re),Qe(ct,X)}function $t(oe,re,X){const Y=new ArrayBuffer(20),Z=new DataView(Y);return new Uint8Array(Y,0,16).set(new Uint8Array(oe)),Z.setUint16(16,X,!1),Z.setUint16(18,re,!1),Qe(Pt,Y)}function Ut(oe){const re=new ArrayBuffer(16);return new Uint8Array(re).set(new Uint8Array(oe)),Qe(Ht,re)}function Nt(oe,re,X,Y,Z){return new Promise((he,O)=>{try{const o=`${window.location.origin.replace(/^http/,"ws")}/api/v1/ws/agent/${encodeURIComponent(oe)}/shell`,c=new WebSocket(o);c.binaryType="arraybuffer";let _=null,r=!1;const d={ws:c,sessionId:null,onData:re,onReady:X,onExit:Y,onError:Z,sendData:f=>{if(_&&c.readyState===WebSocket.OPEN){const u=Wt(_,f);c.send(u)}},resize:(f,u)=>{if(_&&c.readyState===WebSocket.OPEN){const h=$t(_,f,u);c.send(h)}},close:()=>{if(_&&c.readyState===WebSocket.OPEN){const f=Ut(_);c.send(f)}c.close()}};c.onopen=()=>{r=!0},c.onmessage=f=>{try{const{type:u,payload:h}=Ft(f.data);switch(u){case Ot:if(h.byteLength>=17){const i=new DataView(h),s=h.slice(0,16),e=i.getUint8(16),t=h.byteLength>17?new TextDecoder("utf-8").decode(h.slice(17)):"";e?Z(t||"Shell initialization failed"):(_=s,d.sessionId=_,X())}break;case ct:if(h.byteLength>=16){const i=new Uint8Array(h.slice(16));re(i)}break;case It:Y();break;default:console.warn("Unknown message type:",u);break}}catch(u){Z(`Failed to parse message: ${u instanceof Error?u.message:"Unknown error"}`)}},c.onerror=f=>{Z("WebSocket error occurred")},c.onclose=f=>{r?Y():O(new Error(`Failed to connect: ${f.reason||"Connection closed"}`))},he(d)}catch(n){O(n)}})}var Ye={exports:{}},ot;function zt(){return ot||(ot=1,function(oe,re){(function(X,Y){oe.exports=Y()})(globalThis,()=>(()=>{var X={4567:function(O,n,o){var c=this&&this.__decorate||function(e,t,a,g){var v,p=arguments.length,l=p<3?t:g===null?g=Object.getOwnPropertyDescriptor(t,a):g;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")l=Reflect.decorate(e,t,a,g);else for(var S=e.length-1;S>=0;S--)(v=e[S])&&(l=(p<3?v(l):p>3?v(t,a,l):v(t,a))||l);return p>3&&l&&Object.defineProperty(t,a,l),l},_=this&&this.__param||function(e,t){return function(a,g){t(a,g,e)}};Object.defineProperty(n,"__esModule",{value:!0}),n.AccessibilityManager=void 0;const r=o(9042),d=o(9924),f=o(844),u=o(4725),h=o(2585),i=o(3656);let s=n.AccessibilityManager=class extends f.Disposable{constructor(e,t,a,g){super(),this._terminal=e,this._coreBrowserService=a,this._renderService=g,this._rowColumns=new WeakMap,this._liveRegionLineCount=0,this._charsToConsume=[],this._charsToAnnounce="",this._accessibilityContainer=this._coreBrowserService.mainDocument.createElement("div"),this._accessibilityContainer.classList.add("xterm-accessibility"),this._rowContainer=this._coreBrowserService.mainDocument.createElement("div"),this._rowContainer.setAttribute("role","list"),this._rowContainer.classList.add("xterm-accessibility-tree"),this._rowElements=[];for(let v=0;vthis._handleBoundaryFocus(v,0),this._bottomBoundaryFocusListener=v=>this._handleBoundaryFocus(v,1),this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions(),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=this._coreBrowserService.mainDocument.createElement("div"),this._liveRegion.classList.add("live-region"),this._liveRegion.setAttribute("aria-live","assertive"),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this.register(new d.TimeBasedDebouncer(this._renderRows.bind(this))),!this._terminal.element)throw new Error("Cannot enable accessibility before Terminal.open");this._terminal.element.insertAdjacentElement("afterbegin",this._accessibilityContainer),this.register(this._terminal.onResize(v=>this._handleResize(v.rows))),this.register(this._terminal.onRender(v=>this._refreshRows(v.start,v.end))),this.register(this._terminal.onScroll(()=>this._refreshRows())),this.register(this._terminal.onA11yChar(v=>this._handleChar(v))),this.register(this._terminal.onLineFeed(()=>this._handleChar(` +`))),this.register(this._terminal.onA11yTab(v=>this._handleTab(v))),this.register(this._terminal.onKey(v=>this._handleKey(v.key))),this.register(this._terminal.onBlur(()=>this._clearLiveRegion())),this.register(this._renderService.onDimensionsChange(()=>this._refreshRowsDimensions())),this.register((0,i.addDisposableDomListener)(document,"selectionchange",()=>this._handleSelectionChange())),this.register(this._coreBrowserService.onDprChange(()=>this._refreshRowsDimensions())),this._refreshRows(),this.register((0,f.toDisposable)(()=>{this._accessibilityContainer.remove(),this._rowElements.length=0}))}_handleTab(e){for(let t=0;t0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,e===` +`&&(this._liveRegionLineCount++,this._liveRegionLineCount===21&&(this._liveRegion.textContent+=r.tooMuchOutput)))}_clearLiveRegion(){this._liveRegion.textContent="",this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),new RegExp("\\p{Control}","u").test(e)||this._charsToConsume.push(e)}_refreshRows(e,t){this._liveRegionDebouncer.refresh(e,t,this._terminal.rows)}_renderRows(e,t){const a=this._terminal.buffer,g=a.lines.length.toString();for(let v=e;v<=t;v++){const p=a.lines.get(a.ydisp+v),l=[],S=p?.translateToString(!0,void 0,void 0,l)||"",E=(a.ydisp+v+1).toString(),k=this._rowElements[v];k&&(S.length===0?(k.innerText=" ",this._rowColumns.set(k,[0,1])):(k.textContent=S,this._rowColumns.set(k,l)),k.setAttribute("aria-posinset",E),k.setAttribute("aria-setsize",g))}this._announceCharacters()}_announceCharacters(){this._charsToAnnounce.length!==0&&(this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce="")}_handleBoundaryFocus(e,t){const a=e.target,g=this._rowElements[t===0?1:this._rowElements.length-2];if(a.getAttribute("aria-posinset")===(t===0?"1":`${this._terminal.buffer.lines.length}`)||e.relatedTarget!==g)return;let v,p;if(t===0?(v=a,p=this._rowElements.pop(),this._rowContainer.removeChild(p)):(v=this._rowElements.shift(),p=a,this._rowContainer.removeChild(v)),v.removeEventListener("focus",this._topBoundaryFocusListener),p.removeEventListener("focus",this._bottomBoundaryFocusListener),t===0){const l=this._createAccessibilityTreeNode();this._rowElements.unshift(l),this._rowContainer.insertAdjacentElement("afterbegin",l)}else{const l=this._createAccessibilityTreeNode();this._rowElements.push(l),this._rowContainer.appendChild(l)}this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._terminal.scrollLines(t===0?-1:1),this._rowElements[t===0?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(this._rowElements.length===0)return;const e=document.getSelection();if(!e)return;if(e.isCollapsed)return void(this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection());if(!e.anchorNode||!e.focusNode)return void console.error("anchorNode and/or focusNode are null");let t={node:e.anchorNode,offset:e.anchorOffset},a={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(a.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===a.node&&t.offset>a.offset)&&([t,a]=[a,t]),t.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(t={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(t.node))return;const g=this._rowElements.slice(-1)[0];if(a.node.compareDocumentPosition(g)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(a={node:g,offset:g.textContent?.length??0}),!this._rowContainer.contains(a.node))return;const v=({node:S,offset:E})=>{const k=S instanceof Text?S.parentNode:S;let x=parseInt(k?.getAttribute("aria-posinset"),10)-1;if(isNaN(x))return console.warn("row is invalid. Race condition?"),null;const w=this._rowColumns.get(k);if(!w)return console.warn("columns is null. Race condition?"),null;let T=E=this._terminal.cols&&(++x,T=0),{row:x,column:T}},p=v(t),l=v(a);if(p&&l){if(p.row>l.row||p.row===l.row&&p.column>=l.column)throw new Error("invalid range");this._terminal.select(p.column,p.row,(l.row-p.row)*this._terminal.cols-p.column+l.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener("focus",this._bottomBoundaryFocusListener);for(let t=this._rowContainer.children.length;te;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){const e=this._coreBrowserService.mainDocument.createElement("div");return e.setAttribute("role","listitem"),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){this._accessibilityContainer.style.width=`${this._renderService.dimensions.css.canvas.width}px`,this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;e{function o(d){return d.replace(/\r?\n/g,"\r")}function c(d,f){return f?"\x1B[200~"+d+"\x1B[201~":d}function _(d,f,u,h){d=c(d=o(d),u.decPrivateModes.bracketedPasteMode&&h.rawOptions.ignoreBracketedPasteMode!==!0),u.triggerDataEvent(d,!0),f.value=""}function r(d,f,u){const h=u.getBoundingClientRect(),i=d.clientX-h.left-10,s=d.clientY-h.top-10;f.style.width="20px",f.style.height="20px",f.style.left=`${i}px`,f.style.top=`${s}px`,f.style.zIndex="1000",f.focus()}Object.defineProperty(n,"__esModule",{value:!0}),n.rightClickHandler=n.moveTextAreaUnderMouseCursor=n.paste=n.handlePasteEvent=n.copyHandler=n.bracketTextForPaste=n.prepareTextForTerminal=void 0,n.prepareTextForTerminal=o,n.bracketTextForPaste=c,n.copyHandler=function(d,f){d.clipboardData&&d.clipboardData.setData("text/plain",f.selectionText),d.preventDefault()},n.handlePasteEvent=function(d,f,u,h){d.stopPropagation(),d.clipboardData&&_(d.clipboardData.getData("text/plain"),f,u,h)},n.paste=_,n.moveTextAreaUnderMouseCursor=r,n.rightClickHandler=function(d,f,u,h,i){r(d,f,u),i&&h.rightClickSelect(d),f.value=h.selectionText,f.select()}},7239:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.ColorContrastCache=void 0;const c=o(1505);n.ColorContrastCache=class{constructor(){this._color=new c.TwoKeyMap,this._css=new c.TwoKeyMap}setCss(_,r,d){this._css.set(_,r,d)}getCss(_,r){return this._css.get(_,r)}setColor(_,r,d){this._color.set(_,r,d)}getColor(_,r){return this._color.get(_,r)}clear(){this._color.clear(),this._css.clear()}}},3656:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.addDisposableDomListener=void 0,n.addDisposableDomListener=function(o,c,_,r){o.addEventListener(c,_,r);let d=!1;return{dispose:()=>{d||(d=!0,o.removeEventListener(c,_,r))}}}},3551:function(O,n,o){var c=this&&this.__decorate||function(s,e,t,a){var g,v=arguments.length,p=v<3?e:a===null?a=Object.getOwnPropertyDescriptor(e,t):a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")p=Reflect.decorate(s,e,t,a);else for(var l=s.length-1;l>=0;l--)(g=s[l])&&(p=(v<3?g(p):v>3?g(e,t,p):g(e,t))||p);return v>3&&p&&Object.defineProperty(e,t,p),p},_=this&&this.__param||function(s,e){return function(t,a){e(t,a,s)}};Object.defineProperty(n,"__esModule",{value:!0}),n.Linkifier=void 0;const r=o(3656),d=o(8460),f=o(844),u=o(2585),h=o(4725);let i=n.Linkifier=class extends f.Disposable{get currentLink(){return this._currentLink}constructor(s,e,t,a,g){super(),this._element=s,this._mouseService=e,this._renderService=t,this._bufferService=a,this._linkProviderService=g,this._linkCacheDisposables=[],this._isMouseOut=!0,this._wasResized=!1,this._activeLine=-1,this._onShowLinkUnderline=this.register(new d.EventEmitter),this.onShowLinkUnderline=this._onShowLinkUnderline.event,this._onHideLinkUnderline=this.register(new d.EventEmitter),this.onHideLinkUnderline=this._onHideLinkUnderline.event,this.register((0,f.getDisposeArrayDisposable)(this._linkCacheDisposables)),this.register((0,f.toDisposable)(()=>{this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()})),this.register(this._bufferService.onResize(()=>{this._clearCurrentLink(),this._wasResized=!0})),this.register((0,r.addDisposableDomListener)(this._element,"mouseleave",()=>{this._isMouseOut=!0,this._clearCurrentLink()})),this.register((0,r.addDisposableDomListener)(this._element,"mousemove",this._handleMouseMove.bind(this))),this.register((0,r.addDisposableDomListener)(this._element,"mousedown",this._handleMouseDown.bind(this))),this.register((0,r.addDisposableDomListener)(this._element,"mouseup",this._handleMouseUp.bind(this)))}_handleMouseMove(s){this._lastMouseEvent=s;const e=this._positionFromMouseEvent(s,this._element,this._mouseService);if(!e)return;this._isMouseOut=!1;const t=s.composedPath();for(let a=0;a{a?.forEach(g=>{g.link.dispose&&g.link.dispose()})}),this._activeProviderReplies=new Map,this._activeLine=s.y);let t=!1;for(const[a,g]of this._linkProviderService.linkProviders.entries())e?this._activeProviderReplies?.get(a)&&(t=this._checkLinkProviderResult(a,s,t)):g.provideLinks(s.y,v=>{if(this._isMouseOut)return;const p=v?.map(l=>({link:l}));this._activeProviderReplies?.set(a,p),t=this._checkLinkProviderResult(a,s,t),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(s.y,this._activeProviderReplies)})}_removeIntersectingLinks(s,e){const t=new Set;for(let a=0;as?this._bufferService.cols:p.link.range.end.x;for(let E=l;E<=S;E++){if(t.has(E)){g.splice(v--,1);break}t.add(E)}}}}_checkLinkProviderResult(s,e,t){if(!this._activeProviderReplies)return t;const a=this._activeProviderReplies.get(s);let g=!1;for(let v=0;vthis._linkAtPosition(p.link,e));v&&(t=!0,this._handleNewLink(v))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!t)for(let v=0;vthis._linkAtPosition(l.link,e));if(p){t=!0,this._handleNewLink(p);break}}return t}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(s){if(!this._currentLink)return;const e=this._positionFromMouseEvent(s,this._element,this._mouseService);e&&this._mouseDownLink===this._currentLink&&this._linkAtPosition(this._currentLink.link,e)&&this._currentLink.link.activate(s,this._currentLink.link.text)}_clearCurrentLink(s,e){this._currentLink&&this._lastMouseEvent&&(!s||!e||this._currentLink.link.range.start.y>=s&&this._currentLink.link.range.end.y<=e)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,(0,f.disposeArray)(this._linkCacheDisposables))}_handleNewLink(s){if(!this._lastMouseEvent)return;const e=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);e&&this._linkAtPosition(s.link,e)&&(this._currentLink=s,this._currentLink.state={decorations:{underline:s.link.decorations===void 0||s.link.decorations.underline,pointerCursor:s.link.decorations===void 0||s.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,s.link,this._lastMouseEvent),s.link.decorations={},Object.defineProperties(s.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:t=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==t&&(this._currentLink.state.decorations.pointerCursor=t,this._currentLink.state.isHovered&&this._element.classList.toggle("xterm-cursor-pointer",t))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:t=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==t&&(this._currentLink.state.decorations.underline=t,this._currentLink.state.isHovered&&this._fireUnderlineEvent(s.link,t))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(t=>{if(!this._currentLink)return;const a=t.start===0?0:t.start+1+this._bufferService.buffer.ydisp,g=this._bufferService.buffer.ydisp+1+t.end;if(this._currentLink.link.range.start.y>=a&&this._currentLink.link.range.end.y<=g&&(this._clearCurrentLink(a,g),this._lastMouseEvent)){const v=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);v&&this._askForLink(v,!1)}})))}_linkHover(s,e,t){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(e,!0),this._currentLink.state.decorations.pointerCursor&&s.classList.add("xterm-cursor-pointer")),e.hover&&e.hover(t,e.text)}_fireUnderlineEvent(s,e){const t=s.range,a=this._bufferService.buffer.ydisp,g=this._createLinkUnderlineEvent(t.start.x-1,t.start.y-a-1,t.end.x,t.end.y-a-1,void 0);(e?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(g)}_linkLeave(s,e,t){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(e,!1),this._currentLink.state.decorations.pointerCursor&&s.classList.remove("xterm-cursor-pointer")),e.leave&&e.leave(t,e.text)}_linkAtPosition(s,e){const t=s.range.start.y*this._bufferService.cols+s.range.start.x,a=s.range.end.y*this._bufferService.cols+s.range.end.x,g=e.y*this._bufferService.cols+e.x;return t<=g&&g<=a}_positionFromMouseEvent(s,e,t){const a=t.getCoords(s,e,this._bufferService.cols,this._bufferService.rows);if(a)return{x:a[0],y:a[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(s,e,t,a,g){return{x1:s,y1:e,x2:t,y2:a,cols:this._bufferService.cols,fg:g}}};n.Linkifier=i=c([_(1,h.IMouseService),_(2,h.IRenderService),_(3,u.IBufferService),_(4,h.ILinkProviderService)],i)},9042:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.tooMuchOutput=n.promptLabel=void 0,n.promptLabel="Terminal input",n.tooMuchOutput="Too much output to announce, navigate to rows manually to read"},3730:function(O,n,o){var c=this&&this.__decorate||function(h,i,s,e){var t,a=arguments.length,g=a<3?i:e===null?e=Object.getOwnPropertyDescriptor(i,s):e;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")g=Reflect.decorate(h,i,s,e);else for(var v=h.length-1;v>=0;v--)(t=h[v])&&(g=(a<3?t(g):a>3?t(i,s,g):t(i,s))||g);return a>3&&g&&Object.defineProperty(i,s,g),g},_=this&&this.__param||function(h,i){return function(s,e){i(s,e,h)}};Object.defineProperty(n,"__esModule",{value:!0}),n.OscLinkProvider=void 0;const r=o(511),d=o(2585);let f=n.OscLinkProvider=class{constructor(h,i,s){this._bufferService=h,this._optionsService=i,this._oscLinkService=s}provideLinks(h,i){const s=this._bufferService.buffer.lines.get(h-1);if(!s)return void i(void 0);const e=[],t=this._optionsService.rawOptions.linkHandler,a=new r.CellData,g=s.getTrimmedLength();let v=-1,p=-1,l=!1;for(let S=0;St?t.activate(w,T,k):u(0,T),hover:(w,T)=>t?.hover?.(w,T,k),leave:(w,T)=>t?.leave?.(w,T,k)})}l=!1,a.hasExtendedAttrs()&&a.extended.urlId?(p=S,v=a.extended.urlId):(p=-1,v=-1)}}i(e)}};function u(h,i){if(confirm(`Do you want to navigate to ${i}? + +WARNING: This link could potentially be dangerous`)){const s=window.open();if(s){try{s.opener=null}catch{}s.location.href=i}else console.warn("Opening link blocked as opener could not be cleared")}}n.OscLinkProvider=f=c([_(0,d.IBufferService),_(1,d.IOptionsService),_(2,d.IOscLinkService)],f)},6193:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.RenderDebouncer=void 0,n.RenderDebouncer=class{constructor(o,c){this._renderCallback=o,this._coreBrowserService=c,this._refreshCallbacks=[]}dispose(){this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)}addRefreshCallback(o){return this._refreshCallbacks.push(o),this._animationFrame||(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh())),this._animationFrame}refresh(o,c,_){this._rowCount=_,o=o!==void 0?o:0,c=c!==void 0?c:this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,o):o,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,c):c,this._animationFrame||(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()))}_innerRefresh(){if(this._animationFrame=void 0,this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0)return void this._runRefreshCallbacks();const o=Math.max(this._rowStart,0),c=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(o,c),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(const o of this._refreshCallbacks)o(0);this._refreshCallbacks=[]}}},3236:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Terminal=void 0;const c=o(3614),_=o(3656),r=o(3551),d=o(9042),f=o(3730),u=o(1680),h=o(3107),i=o(5744),s=o(2950),e=o(1296),t=o(428),a=o(4269),g=o(5114),v=o(8934),p=o(3230),l=o(9312),S=o(4725),E=o(6731),k=o(8055),x=o(8969),w=o(8460),T=o(844),I=o(6114),$=o(8437),j=o(2584),W=o(7399),m=o(5941),b=o(9074),y=o(2585),L=o(5435),P=o(4567),U=o(779);class q extends x.CoreTerminal{get onFocus(){return this._onFocus.event}get onBlur(){return this._onBlur.event}get onA11yChar(){return this._onA11yCharEmitter.event}get onA11yTab(){return this._onA11yTabEmitter.event}get onWillOpen(){return this._onWillOpen.event}constructor(A={}){super(A),this.browser=I,this._keyDownHandled=!1,this._keyDownSeen=!1,this._keyPressHandled=!1,this._unprocessedDeadKey=!1,this._accessibilityManager=this.register(new T.MutableDisposable),this._onCursorMove=this.register(new w.EventEmitter),this.onCursorMove=this._onCursorMove.event,this._onKey=this.register(new w.EventEmitter),this.onKey=this._onKey.event,this._onRender=this.register(new w.EventEmitter),this.onRender=this._onRender.event,this._onSelectionChange=this.register(new w.EventEmitter),this.onSelectionChange=this._onSelectionChange.event,this._onTitleChange=this.register(new w.EventEmitter),this.onTitleChange=this._onTitleChange.event,this._onBell=this.register(new w.EventEmitter),this.onBell=this._onBell.event,this._onFocus=this.register(new w.EventEmitter),this._onBlur=this.register(new w.EventEmitter),this._onA11yCharEmitter=this.register(new w.EventEmitter),this._onA11yTabEmitter=this.register(new w.EventEmitter),this._onWillOpen=this.register(new w.EventEmitter),this._setup(),this._decorationService=this._instantiationService.createInstance(b.DecorationService),this._instantiationService.setService(y.IDecorationService,this._decorationService),this._linkProviderService=this._instantiationService.createInstance(U.LinkProviderService),this._instantiationService.setService(S.ILinkProviderService,this._linkProviderService),this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(f.OscLinkProvider)),this.register(this._inputHandler.onRequestBell(()=>this._onBell.fire())),this.register(this._inputHandler.onRequestRefreshRows((C,M)=>this.refresh(C,M))),this.register(this._inputHandler.onRequestSendFocus(()=>this._reportFocus())),this.register(this._inputHandler.onRequestReset(()=>this.reset())),this.register(this._inputHandler.onRequestWindowsOptionsReport(C=>this._reportWindowsOptions(C))),this.register(this._inputHandler.onColor(C=>this._handleColorEvent(C))),this.register((0,w.forwardEvent)(this._inputHandler.onCursorMove,this._onCursorMove)),this.register((0,w.forwardEvent)(this._inputHandler.onTitleChange,this._onTitleChange)),this.register((0,w.forwardEvent)(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this.register((0,w.forwardEvent)(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this.register(this._bufferService.onResize(C=>this._afterResize(C.cols,C.rows))),this.register((0,T.toDisposable)(()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)}))}_handleColorEvent(A){if(this._themeService)for(const C of A){let M,H="";switch(C.index){case 256:M="foreground",H="10";break;case 257:M="background",H="11";break;case 258:M="cursor",H="12";break;default:M="ansi",H="4;"+C.index}switch(C.type){case 0:const z=k.color.toColorRGB(M==="ansi"?this._themeService.colors.ansi[C.index]:this._themeService.colors[M]);this.coreService.triggerDataEvent(`${j.C0.ESC}]${H};${(0,m.toRgbString)(z)}${j.C1_ESCAPED.ST}`);break;case 1:if(M==="ansi")this._themeService.modifyColors(N=>N.ansi[C.index]=k.channels.toColor(...C.color));else{const N=M;this._themeService.modifyColors(J=>J[N]=k.channels.toColor(...C.color))}break;case 2:this._themeService.restoreColor(C.index)}}}_setup(){super._setup(),this._customKeyEventHandler=void 0}get buffer(){return this.buffers.active}focus(){this.textarea&&this.textarea.focus({preventScroll:!0})}_handleScreenReaderModeOptionChange(A){A?!this._accessibilityManager.value&&this._renderService&&(this._accessibilityManager.value=this._instantiationService.createInstance(P.AccessibilityManager,this)):this._accessibilityManager.clear()}_handleTextAreaFocus(A){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(j.C0.ESC+"[I"),this.element.classList.add("focus"),this._showCursor(),this._onFocus.fire()}blur(){return this.textarea?.blur()}_handleTextAreaBlur(){this.textarea.value="",this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(j.C0.ESC+"[O"),this.element.classList.remove("focus"),this._onBlur.fire()}_syncTextArea(){if(!this.textarea||!this.buffer.isCursorInViewport||this._compositionHelper.isComposing||!this._renderService)return;const A=this.buffer.ybase+this.buffer.y,C=this.buffer.lines.get(A);if(!C)return;const M=Math.min(this.buffer.x,this.cols-1),H=this._renderService.dimensions.css.cell.height,z=C.getWidth(M),N=this._renderService.dimensions.css.cell.width*z,J=this.buffer.y*this._renderService.dimensions.css.cell.height,se=M*this._renderService.dimensions.css.cell.width;this.textarea.style.left=se+"px",this.textarea.style.top=J+"px",this.textarea.style.width=N+"px",this.textarea.style.height=H+"px",this.textarea.style.lineHeight=H+"px",this.textarea.style.zIndex="-5"}_initGlobal(){this._bindKeys(),this.register((0,_.addDisposableDomListener)(this.element,"copy",C=>{this.hasSelection()&&(0,c.copyHandler)(C,this._selectionService)}));const A=C=>(0,c.handlePasteEvent)(C,this.textarea,this.coreService,this.optionsService);this.register((0,_.addDisposableDomListener)(this.textarea,"paste",A)),this.register((0,_.addDisposableDomListener)(this.element,"paste",A)),I.isFirefox?this.register((0,_.addDisposableDomListener)(this.element,"mousedown",C=>{C.button===2&&(0,c.rightClickHandler)(C,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})):this.register((0,_.addDisposableDomListener)(this.element,"contextmenu",C=>{(0,c.rightClickHandler)(C,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})),I.isLinux&&this.register((0,_.addDisposableDomListener)(this.element,"auxclick",C=>{C.button===1&&(0,c.moveTextAreaUnderMouseCursor)(C,this.textarea,this.screenElement)}))}_bindKeys(){this.register((0,_.addDisposableDomListener)(this.textarea,"keyup",A=>this._keyUp(A),!0)),this.register((0,_.addDisposableDomListener)(this.textarea,"keydown",A=>this._keyDown(A),!0)),this.register((0,_.addDisposableDomListener)(this.textarea,"keypress",A=>this._keyPress(A),!0)),this.register((0,_.addDisposableDomListener)(this.textarea,"compositionstart",()=>this._compositionHelper.compositionstart())),this.register((0,_.addDisposableDomListener)(this.textarea,"compositionupdate",A=>this._compositionHelper.compositionupdate(A))),this.register((0,_.addDisposableDomListener)(this.textarea,"compositionend",()=>this._compositionHelper.compositionend())),this.register((0,_.addDisposableDomListener)(this.textarea,"input",A=>this._inputEvent(A),!0)),this.register(this.onRender(()=>this._compositionHelper.updateCompositionElements()))}open(A){if(!A)throw new Error("Terminal requires a parent element.");if(A.isConnected||this._logService.debug("Terminal.open was called on an element that was not attached to the DOM"),this.element?.ownerDocument.defaultView&&this._coreBrowserService)return void(this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView));this._document=A.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement("div"),this.element.dir="ltr",this.element.classList.add("terminal"),this.element.classList.add("xterm"),A.appendChild(this.element);const C=this._document.createDocumentFragment();this._viewportElement=this._document.createElement("div"),this._viewportElement.classList.add("xterm-viewport"),C.appendChild(this._viewportElement),this._viewportScrollArea=this._document.createElement("div"),this._viewportScrollArea.classList.add("xterm-scroll-area"),this._viewportElement.appendChild(this._viewportScrollArea),this.screenElement=this._document.createElement("div"),this.screenElement.classList.add("xterm-screen"),this.register((0,_.addDisposableDomListener)(this.screenElement,"mousemove",M=>this.updateCursorStyle(M))),this._helperContainer=this._document.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),C.appendChild(this.screenElement),this.textarea=this._document.createElement("textarea"),this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",d.promptLabel),I.isChromeOS||this.textarea.setAttribute("aria-multiline","false"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this._coreBrowserService=this.register(this._instantiationService.createInstance(g.CoreBrowserService,this.textarea,A.ownerDocument.defaultView??window,this._document??typeof window<"u"?window.document:null)),this._instantiationService.setService(S.ICoreBrowserService,this._coreBrowserService),this.register((0,_.addDisposableDomListener)(this.textarea,"focus",M=>this._handleTextAreaFocus(M))),this.register((0,_.addDisposableDomListener)(this.textarea,"blur",()=>this._handleTextAreaBlur())),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(t.CharSizeService,this._document,this._helperContainer),this._instantiationService.setService(S.ICharSizeService,this._charSizeService),this._themeService=this._instantiationService.createInstance(E.ThemeService),this._instantiationService.setService(S.IThemeService,this._themeService),this._characterJoinerService=this._instantiationService.createInstance(a.CharacterJoinerService),this._instantiationService.setService(S.ICharacterJoinerService,this._characterJoinerService),this._renderService=this.register(this._instantiationService.createInstance(p.RenderService,this.rows,this.screenElement)),this._instantiationService.setService(S.IRenderService,this._renderService),this.register(this._renderService.onRenderedViewportChange(M=>this._onRender.fire(M))),this.onResize(M=>this._renderService.resize(M.cols,M.rows)),this._compositionView=this._document.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=this._instantiationService.createInstance(s.CompositionHelper,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this._mouseService=this._instantiationService.createInstance(v.MouseService),this._instantiationService.setService(S.IMouseService,this._mouseService),this.linkifier=this.register(this._instantiationService.createInstance(r.Linkifier,this.screenElement)),this.element.appendChild(C);try{this._onWillOpen.fire(this.element)}catch{}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this.viewport=this._instantiationService.createInstance(u.Viewport,this._viewportElement,this._viewportScrollArea),this.viewport.onRequestScrollLines(M=>this.scrollLines(M.amount,M.suppressScrollEvent,1)),this.register(this._inputHandler.onRequestSyncScrollBar(()=>this.viewport.syncScrollArea())),this.register(this.viewport),this.register(this.onCursorMove(()=>{this._renderService.handleCursorMove(),this._syncTextArea()})),this.register(this.onResize(()=>this._renderService.handleResize(this.cols,this.rows))),this.register(this.onBlur(()=>this._renderService.handleBlur())),this.register(this.onFocus(()=>this._renderService.handleFocus())),this.register(this._renderService.onDimensionsChange(()=>this.viewport.syncScrollArea())),this._selectionService=this.register(this._instantiationService.createInstance(l.SelectionService,this.element,this.screenElement,this.linkifier)),this._instantiationService.setService(S.ISelectionService,this._selectionService),this.register(this._selectionService.onRequestScrollLines(M=>this.scrollLines(M.amount,M.suppressScrollEvent))),this.register(this._selectionService.onSelectionChange(()=>this._onSelectionChange.fire())),this.register(this._selectionService.onRequestRedraw(M=>this._renderService.handleSelectionChanged(M.start,M.end,M.columnSelectMode))),this.register(this._selectionService.onLinuxMouseSelection(M=>{this.textarea.value=M,this.textarea.focus(),this.textarea.select()})),this.register(this._onScroll.event(M=>{this.viewport.syncScrollArea(),this._selectionService.refresh()})),this.register((0,_.addDisposableDomListener)(this._viewportElement,"scroll",()=>this._selectionService.refresh())),this.register(this._instantiationService.createInstance(h.BufferDecorationRenderer,this.screenElement)),this.register((0,_.addDisposableDomListener)(this.element,"mousedown",M=>this._selectionService.handleMouseDown(M))),this.coreMouseService.areMouseEventsActive?(this._selectionService.disable(),this.element.classList.add("enable-mouse-events")):this._selectionService.enable(),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(P.AccessibilityManager,this)),this.register(this.optionsService.onSpecificOptionChange("screenReaderMode",M=>this._handleScreenReaderModeOptionChange(M))),this.options.overviewRulerWidth&&(this._overviewRulerRenderer=this.register(this._instantiationService.createInstance(i.OverviewRulerRenderer,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange("overviewRulerWidth",M=>{!this._overviewRulerRenderer&&M&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this.register(this._instantiationService.createInstance(i.OverviewRulerRenderer,this._viewportElement,this.screenElement)))}),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()}_createRenderer(){return this._instantiationService.createInstance(e.DomRenderer,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}bindMouse(){const A=this,C=this.element;function M(N){const J=A._mouseService.getMouseReportCoords(N,A.screenElement);if(!J)return!1;let se,ee;switch(N.overrideType||N.type){case"mousemove":ee=32,N.buttons===void 0?(se=3,N.button!==void 0&&(se=N.button<3?N.button:3)):se=1&N.buttons?0:4&N.buttons?1:2&N.buttons?2:3;break;case"mouseup":ee=0,se=N.button<3?N.button:3;break;case"mousedown":ee=1,se=N.button<3?N.button:3;break;case"wheel":if(A._customWheelEventHandler&&A._customWheelEventHandler(N)===!1||A.viewport.getLinesScrolled(N)===0)return!1;ee=N.deltaY<0?0:1,se=4;break;default:return!1}return!(ee===void 0||se===void 0||se>4)&&A.coreMouseService.triggerMouseEvent({col:J.col,row:J.row,x:J.x,y:J.y,button:se,action:ee,ctrl:N.ctrlKey,alt:N.altKey,shift:N.shiftKey})}const H={mouseup:null,wheel:null,mousedrag:null,mousemove:null},z={mouseup:N=>(M(N),N.buttons||(this._document.removeEventListener("mouseup",H.mouseup),H.mousedrag&&this._document.removeEventListener("mousemove",H.mousedrag)),this.cancel(N)),wheel:N=>(M(N),this.cancel(N,!0)),mousedrag:N=>{N.buttons&&M(N)},mousemove:N=>{N.buttons||M(N)}};this.register(this.coreMouseService.onProtocolChange(N=>{N?(this.optionsService.rawOptions.logLevel==="debug"&&this._logService.debug("Binding to mouse events:",this.coreMouseService.explainEvents(N)),this.element.classList.add("enable-mouse-events"),this._selectionService.disable()):(this._logService.debug("Unbinding from mouse events."),this.element.classList.remove("enable-mouse-events"),this._selectionService.enable()),8&N?H.mousemove||(C.addEventListener("mousemove",z.mousemove),H.mousemove=z.mousemove):(C.removeEventListener("mousemove",H.mousemove),H.mousemove=null),16&N?H.wheel||(C.addEventListener("wheel",z.wheel,{passive:!1}),H.wheel=z.wheel):(C.removeEventListener("wheel",H.wheel),H.wheel=null),2&N?H.mouseup||(H.mouseup=z.mouseup):(this._document.removeEventListener("mouseup",H.mouseup),H.mouseup=null),4&N?H.mousedrag||(H.mousedrag=z.mousedrag):(this._document.removeEventListener("mousemove",H.mousedrag),H.mousedrag=null)})),this.coreMouseService.activeProtocol=this.coreMouseService.activeProtocol,this.register((0,_.addDisposableDomListener)(C,"mousedown",N=>{if(N.preventDefault(),this.focus(),this.coreMouseService.areMouseEventsActive&&!this._selectionService.shouldForceSelection(N))return M(N),H.mouseup&&this._document.addEventListener("mouseup",H.mouseup),H.mousedrag&&this._document.addEventListener("mousemove",H.mousedrag),this.cancel(N)})),this.register((0,_.addDisposableDomListener)(C,"wheel",N=>{if(!H.wheel){if(this._customWheelEventHandler&&this._customWheelEventHandler(N)===!1)return!1;if(!this.buffer.hasScrollback){const J=this.viewport.getLinesScrolled(N);if(J===0)return;const se=j.C0.ESC+(this.coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(N.deltaY<0?"A":"B");let ee="";for(let le=0;le{if(!this.coreMouseService.areMouseEventsActive)return this.viewport.handleTouchStart(N),this.cancel(N)},{passive:!0})),this.register((0,_.addDisposableDomListener)(C,"touchmove",N=>{if(!this.coreMouseService.areMouseEventsActive)return this.viewport.handleTouchMove(N)?void 0:this.cancel(N)},{passive:!1}))}refresh(A,C){this._renderService?.refreshRows(A,C)}updateCursorStyle(A){this._selectionService?.shouldColumnSelect(A)?this.element.classList.add("column-select"):this.element.classList.remove("column-select")}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(A,C,M=0){M===1?(super.scrollLines(A,C,M),this.refresh(0,this.rows-1)):this.viewport?.scrollLines(A)}paste(A){(0,c.paste)(A,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(A){this._customKeyEventHandler=A}attachCustomWheelEventHandler(A){this._customWheelEventHandler=A}registerLinkProvider(A){return this._linkProviderService.registerLinkProvider(A)}registerCharacterJoiner(A){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");const C=this._characterJoinerService.register(A);return this.refresh(0,this.rows-1),C}deregisterCharacterJoiner(A){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");this._characterJoinerService.deregister(A)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(A){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+A)}registerDecoration(A){return this._decorationService.registerDecoration(A)}hasSelection(){return!!this._selectionService&&this._selectionService.hasSelection}select(A,C,M){this._selectionService.setSelection(A,C,M)}getSelection(){return this._selectionService?this._selectionService.selectionText:""}getSelectionPosition(){if(this._selectionService&&this._selectionService.hasSelection)return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(A,C){this._selectionService?.selectLines(A,C)}_keyDown(A){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&this._customKeyEventHandler(A)===!1)return!1;const C=this.browser.isMac&&this.options.macOptionIsMeta&&A.altKey;if(!C&&!this._compositionHelper.keydown(A))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(),!1;C||A.key!=="Dead"&&A.key!=="AltGraph"||(this._unprocessedDeadKey=!0);const M=(0,W.evaluateKeyboardEvent)(A,this.coreService.decPrivateModes.applicationCursorKeys,this.browser.isMac,this.options.macOptionIsMeta);if(this.updateCursorStyle(A),M.type===3||M.type===2){const H=this.rows-1;return this.scrollLines(M.type===2?-H:H),this.cancel(A,!0)}return M.type===1&&this.selectAll(),!!this._isThirdLevelShift(this.browser,A)||(M.cancel&&this.cancel(A,!0),!M.key||!!(A.key&&!A.ctrlKey&&!A.altKey&&!A.metaKey&&A.key.length===1&&A.key.charCodeAt(0)>=65&&A.key.charCodeAt(0)<=90)||(this._unprocessedDeadKey?(this._unprocessedDeadKey=!1,!0):(M.key!==j.C0.ETX&&M.key!==j.C0.CR||(this.textarea.value=""),this._onKey.fire({key:M.key,domEvent:A}),this._showCursor(),this.coreService.triggerDataEvent(M.key,!0),!this.optionsService.rawOptions.screenReaderMode||A.altKey||A.ctrlKey?this.cancel(A,!0):void(this._keyDownHandled=!0))))}_isThirdLevelShift(A,C){const M=A.isMac&&!this.options.macOptionIsMeta&&C.altKey&&!C.ctrlKey&&!C.metaKey||A.isWindows&&C.altKey&&C.ctrlKey&&!C.metaKey||A.isWindows&&C.getModifierState("AltGraph");return C.type==="keypress"?M:M&&(!C.keyCode||C.keyCode>47)}_keyUp(A){this._keyDownSeen=!1,this._customKeyEventHandler&&this._customKeyEventHandler(A)===!1||(function(C){return C.keyCode===16||C.keyCode===17||C.keyCode===18}(A)||this.focus(),this.updateCursorStyle(A),this._keyPressHandled=!1)}_keyPress(A){let C;if(this._keyPressHandled=!1,this._keyDownHandled||this._customKeyEventHandler&&this._customKeyEventHandler(A)===!1)return!1;if(this.cancel(A),A.charCode)C=A.charCode;else if(A.which===null||A.which===void 0)C=A.keyCode;else{if(A.which===0||A.charCode===0)return!1;C=A.which}return!(!C||(A.altKey||A.ctrlKey||A.metaKey)&&!this._isThirdLevelShift(this.browser,A)||(C=String.fromCharCode(C),this._onKey.fire({key:C,domEvent:A}),this._showCursor(),this.coreService.triggerDataEvent(C,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,0))}_inputEvent(A){if(A.data&&A.inputType==="insertText"&&(!A.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;const C=A.data;return this.coreService.triggerDataEvent(C,!0),this.cancel(A),!0}return!1}resize(A,C){A!==this.cols||C!==this.rows?super.resize(A,C):this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure()}_afterResize(A,C){this._charSizeService?.measure(),this.viewport?.syncScrollArea(!0)}clear(){if(this.buffer.ybase!==0||this.buffer.y!==0){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let A=1;A{Object.defineProperty(n,"__esModule",{value:!0}),n.TimeBasedDebouncer=void 0,n.TimeBasedDebouncer=class{constructor(o,c=1e3){this._renderCallback=o,this._debounceThresholdMS=c,this._lastRefreshMs=0,this._additionalRefreshRequested=!1}dispose(){this._refreshTimeoutID&&clearTimeout(this._refreshTimeoutID)}refresh(o,c,_){this._rowCount=_,o=o!==void 0?o:0,c=c!==void 0?c:this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,o):o,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,c):c;const r=Date.now();if(r-this._lastRefreshMs>=this._debounceThresholdMS)this._lastRefreshMs=r,this._innerRefresh();else if(!this._additionalRefreshRequested){const d=r-this._lastRefreshMs,f=this._debounceThresholdMS-d;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout(()=>{this._lastRefreshMs=Date.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0},f)}}_innerRefresh(){if(this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0)return;const o=Math.max(this._rowStart,0),c=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(o,c)}}},1680:function(O,n,o){var c=this&&this.__decorate||function(s,e,t,a){var g,v=arguments.length,p=v<3?e:a===null?a=Object.getOwnPropertyDescriptor(e,t):a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")p=Reflect.decorate(s,e,t,a);else for(var l=s.length-1;l>=0;l--)(g=s[l])&&(p=(v<3?g(p):v>3?g(e,t,p):g(e,t))||p);return v>3&&p&&Object.defineProperty(e,t,p),p},_=this&&this.__param||function(s,e){return function(t,a){e(t,a,s)}};Object.defineProperty(n,"__esModule",{value:!0}),n.Viewport=void 0;const r=o(3656),d=o(4725),f=o(8460),u=o(844),h=o(2585);let i=n.Viewport=class extends u.Disposable{constructor(s,e,t,a,g,v,p,l){super(),this._viewportElement=s,this._scrollArea=e,this._bufferService=t,this._optionsService=a,this._charSizeService=g,this._renderService=v,this._coreBrowserService=p,this.scrollBarWidth=0,this._currentRowHeight=0,this._currentDeviceCellHeight=0,this._lastRecordedBufferLength=0,this._lastRecordedViewportHeight=0,this._lastRecordedBufferHeight=0,this._lastTouchY=0,this._lastScrollTop=0,this._wheelPartialScroll=0,this._refreshAnimationFrame=null,this._ignoreNextScrollEvent=!1,this._smoothScrollState={startTime:0,origin:-1,target:-1},this._onRequestScrollLines=this.register(new f.EventEmitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this.scrollBarWidth=this._viewportElement.offsetWidth-this._scrollArea.offsetWidth||15,this.register((0,r.addDisposableDomListener)(this._viewportElement,"scroll",this._handleScroll.bind(this))),this._activeBuffer=this._bufferService.buffer,this.register(this._bufferService.buffers.onBufferActivate(S=>this._activeBuffer=S.activeBuffer)),this._renderDimensions=this._renderService.dimensions,this.register(this._renderService.onDimensionsChange(S=>this._renderDimensions=S)),this._handleThemeChange(l.colors),this.register(l.onChangeColors(S=>this._handleThemeChange(S))),this.register(this._optionsService.onSpecificOptionChange("scrollback",()=>this.syncScrollArea())),setTimeout(()=>this.syncScrollArea())}_handleThemeChange(s){this._viewportElement.style.backgroundColor=s.background.css}reset(){this._currentRowHeight=0,this._currentDeviceCellHeight=0,this._lastRecordedBufferLength=0,this._lastRecordedViewportHeight=0,this._lastRecordedBufferHeight=0,this._lastTouchY=0,this._lastScrollTop=0,this._coreBrowserService.window.requestAnimationFrame(()=>this.syncScrollArea())}_refresh(s){if(s)return this._innerRefresh(),void(this._refreshAnimationFrame!==null&&this._coreBrowserService.window.cancelAnimationFrame(this._refreshAnimationFrame));this._refreshAnimationFrame===null&&(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()))}_innerRefresh(){if(this._charSizeService.height>0){this._currentRowHeight=this._renderDimensions.device.cell.height/this._coreBrowserService.dpr,this._currentDeviceCellHeight=this._renderDimensions.device.cell.height,this._lastRecordedViewportHeight=this._viewportElement.offsetHeight;const e=Math.round(this._currentRowHeight*this._lastRecordedBufferLength)+(this._lastRecordedViewportHeight-this._renderDimensions.css.canvas.height);this._lastRecordedBufferHeight!==e&&(this._lastRecordedBufferHeight=e,this._scrollArea.style.height=this._lastRecordedBufferHeight+"px")}const s=this._bufferService.buffer.ydisp*this._currentRowHeight;this._viewportElement.scrollTop!==s&&(this._ignoreNextScrollEvent=!0,this._viewportElement.scrollTop=s),this._refreshAnimationFrame=null}syncScrollArea(s=!1){if(this._lastRecordedBufferLength!==this._bufferService.buffer.lines.length)return this._lastRecordedBufferLength=this._bufferService.buffer.lines.length,void this._refresh(s);this._lastRecordedViewportHeight===this._renderService.dimensions.css.canvas.height&&this._lastScrollTop===this._activeBuffer.ydisp*this._currentRowHeight&&this._renderDimensions.device.cell.height===this._currentDeviceCellHeight||this._refresh(s)}_handleScroll(s){if(this._lastScrollTop=this._viewportElement.scrollTop,!this._viewportElement.offsetParent)return;if(this._ignoreNextScrollEvent)return this._ignoreNextScrollEvent=!1,void this._onRequestScrollLines.fire({amount:0,suppressScrollEvent:!0});const e=Math.round(this._lastScrollTop/this._currentRowHeight)-this._bufferService.buffer.ydisp;this._onRequestScrollLines.fire({amount:e,suppressScrollEvent:!0})}_smoothScroll(){if(this._isDisposed||this._smoothScrollState.origin===-1||this._smoothScrollState.target===-1)return;const s=this._smoothScrollPercent();this._viewportElement.scrollTop=this._smoothScrollState.origin+Math.round(s*(this._smoothScrollState.target-this._smoothScrollState.origin)),s<1?this._coreBrowserService.window.requestAnimationFrame(()=>this._smoothScroll()):this._clearSmoothScrollState()}_smoothScrollPercent(){return this._optionsService.rawOptions.smoothScrollDuration&&this._smoothScrollState.startTime?Math.max(Math.min((Date.now()-this._smoothScrollState.startTime)/this._optionsService.rawOptions.smoothScrollDuration,1),0):1}_clearSmoothScrollState(){this._smoothScrollState.startTime=0,this._smoothScrollState.origin=-1,this._smoothScrollState.target=-1}_bubbleScroll(s,e){const t=this._viewportElement.scrollTop+this._lastRecordedViewportHeight;return!(e<0&&this._viewportElement.scrollTop!==0||e>0&&t0&&(t=k),a=""}}return{bufferElements:g,cursorElement:t}}getLinesScrolled(s){if(s.deltaY===0||s.shiftKey)return 0;let e=this._applyScrollModifier(s.deltaY,s);return s.deltaMode===WheelEvent.DOM_DELTA_PIXEL?(e/=this._currentRowHeight+0,this._wheelPartialScroll+=e,e=Math.floor(Math.abs(this._wheelPartialScroll))*(this._wheelPartialScroll>0?1:-1),this._wheelPartialScroll%=1):s.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(e*=this._bufferService.rows),e}_applyScrollModifier(s,e){const t=this._optionsService.rawOptions.fastScrollModifier;return t==="alt"&&e.altKey||t==="ctrl"&&e.ctrlKey||t==="shift"&&e.shiftKey?s*this._optionsService.rawOptions.fastScrollSensitivity*this._optionsService.rawOptions.scrollSensitivity:s*this._optionsService.rawOptions.scrollSensitivity}handleTouchStart(s){this._lastTouchY=s.touches[0].pageY}handleTouchMove(s){const e=this._lastTouchY-s.touches[0].pageY;return this._lastTouchY=s.touches[0].pageY,e!==0&&(this._viewportElement.scrollTop+=e,this._bubbleScroll(s,e))}};n.Viewport=i=c([_(2,h.IBufferService),_(3,h.IOptionsService),_(4,d.ICharSizeService),_(5,d.IRenderService),_(6,d.ICoreBrowserService),_(7,d.IThemeService)],i)},3107:function(O,n,o){var c=this&&this.__decorate||function(h,i,s,e){var t,a=arguments.length,g=a<3?i:e===null?e=Object.getOwnPropertyDescriptor(i,s):e;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")g=Reflect.decorate(h,i,s,e);else for(var v=h.length-1;v>=0;v--)(t=h[v])&&(g=(a<3?t(g):a>3?t(i,s,g):t(i,s))||g);return a>3&&g&&Object.defineProperty(i,s,g),g},_=this&&this.__param||function(h,i){return function(s,e){i(s,e,h)}};Object.defineProperty(n,"__esModule",{value:!0}),n.BufferDecorationRenderer=void 0;const r=o(4725),d=o(844),f=o(2585);let u=n.BufferDecorationRenderer=class extends d.Disposable{constructor(h,i,s,e,t){super(),this._screenElement=h,this._bufferService=i,this._coreBrowserService=s,this._decorationService=e,this._renderService=t,this._decorationElements=new Map,this._altBufferIsActive=!1,this._dimensionsChanged=!1,this._container=document.createElement("div"),this._container.classList.add("xterm-decoration-container"),this._screenElement.appendChild(this._container),this.register(this._renderService.onRenderedViewportChange(()=>this._doRefreshDecorations())),this.register(this._renderService.onDimensionsChange(()=>{this._dimensionsChanged=!0,this._queueRefresh()})),this.register(this._coreBrowserService.onDprChange(()=>this._queueRefresh())),this.register(this._bufferService.buffers.onBufferActivate(()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt})),this.register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh())),this.register(this._decorationService.onDecorationRemoved(a=>this._removeDecoration(a))),this.register((0,d.toDisposable)(()=>{this._container.remove(),this._decorationElements.clear()}))}_queueRefresh(){this._animationFrame===void 0&&(this._animationFrame=this._renderService.addRefreshCallback(()=>{this._doRefreshDecorations(),this._animationFrame=void 0}))}_doRefreshDecorations(){for(const h of this._decorationService.decorations)this._renderDecoration(h);this._dimensionsChanged=!1}_renderDecoration(h){this._refreshStyle(h),this._dimensionsChanged&&this._refreshXPosition(h)}_createElement(h){const i=this._coreBrowserService.mainDocument.createElement("div");i.classList.add("xterm-decoration"),i.classList.toggle("xterm-decoration-top-layer",h?.options?.layer==="top"),i.style.width=`${Math.round((h.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,i.style.height=(h.options.height||1)*this._renderService.dimensions.css.cell.height+"px",i.style.top=(h.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height+"px",i.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;const s=h.options.x??0;return s&&s>this._bufferService.cols&&(i.style.display="none"),this._refreshXPosition(h,i),i}_refreshStyle(h){const i=h.marker.line-this._bufferService.buffers.active.ydisp;if(i<0||i>=this._bufferService.rows)h.element&&(h.element.style.display="none",h.onRenderEmitter.fire(h.element));else{let s=this._decorationElements.get(h);s||(s=this._createElement(h),h.element=s,this._decorationElements.set(h,s),this._container.appendChild(s),h.onDispose(()=>{this._decorationElements.delete(h),s.remove()})),s.style.top=i*this._renderService.dimensions.css.cell.height+"px",s.style.display=this._altBufferIsActive?"none":"block",h.onRenderEmitter.fire(s)}}_refreshXPosition(h,i=h.element){if(!i)return;const s=h.options.x??0;(h.options.anchor||"left")==="right"?i.style.right=s?s*this._renderService.dimensions.css.cell.width+"px":"":i.style.left=s?s*this._renderService.dimensions.css.cell.width+"px":""}_removeDecoration(h){this._decorationElements.get(h)?.remove(),this._decorationElements.delete(h),h.dispose()}};n.BufferDecorationRenderer=u=c([_(1,f.IBufferService),_(2,r.ICoreBrowserService),_(3,f.IDecorationService),_(4,r.IRenderService)],u)},5871:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.ColorZoneStore=void 0,n.ColorZoneStore=class{constructor(){this._zones=[],this._zonePool=[],this._zonePoolIndex=0,this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(o){if(o.options.overviewRulerOptions){for(const c of this._zones)if(c.color===o.options.overviewRulerOptions.color&&c.position===o.options.overviewRulerOptions.position){if(this._lineIntersectsZone(c,o.marker.line))return;if(this._lineAdjacentToZone(c,o.marker.line,o.options.overviewRulerOptions.position))return void this._addLineToZone(c,o.marker.line)}if(this._zonePoolIndex=o.startBufferLine&&c<=o.endBufferLine}_lineAdjacentToZone(o,c,_){return c>=o.startBufferLine-this._linePadding[_||"full"]&&c<=o.endBufferLine+this._linePadding[_||"full"]}_addLineToZone(o,c){o.startBufferLine=Math.min(o.startBufferLine,c),o.endBufferLine=Math.max(o.endBufferLine,c)}}},5744:function(O,n,o){var c=this&&this.__decorate||function(t,a,g,v){var p,l=arguments.length,S=l<3?a:v===null?v=Object.getOwnPropertyDescriptor(a,g):v;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")S=Reflect.decorate(t,a,g,v);else for(var E=t.length-1;E>=0;E--)(p=t[E])&&(S=(l<3?p(S):l>3?p(a,g,S):p(a,g))||S);return l>3&&S&&Object.defineProperty(a,g,S),S},_=this&&this.__param||function(t,a){return function(g,v){a(g,v,t)}};Object.defineProperty(n,"__esModule",{value:!0}),n.OverviewRulerRenderer=void 0;const r=o(5871),d=o(4725),f=o(844),u=o(2585),h={full:0,left:0,center:0,right:0},i={full:0,left:0,center:0,right:0},s={full:0,left:0,center:0,right:0};let e=n.OverviewRulerRenderer=class extends f.Disposable{get _width(){return this._optionsService.options.overviewRulerWidth||0}constructor(t,a,g,v,p,l,S){super(),this._viewportElement=t,this._screenElement=a,this._bufferService=g,this._decorationService=v,this._renderService=p,this._optionsService=l,this._coreBrowserService=S,this._colorZoneStore=new r.ColorZoneStore,this._shouldUpdateDimensions=!0,this._shouldUpdateAnchor=!0,this._lastKnownBufferLength=0,this._canvas=this._coreBrowserService.mainDocument.createElement("canvas"),this._canvas.classList.add("xterm-decoration-overview-ruler"),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement);const E=this._canvas.getContext("2d");if(!E)throw new Error("Ctx cannot be null");this._ctx=E,this._registerDecorationListeners(),this._registerBufferChangeListeners(),this._registerDimensionChangeListeners(),this.register((0,f.toDisposable)(()=>{this._canvas?.remove()}))}_registerDecorationListeners(){this.register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh(void 0,!0))),this.register(this._decorationService.onDecorationRemoved(()=>this._queueRefresh(void 0,!0)))}_registerBufferChangeListeners(){this.register(this._renderService.onRenderedViewportChange(()=>this._queueRefresh())),this.register(this._bufferService.buffers.onBufferActivate(()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?"none":"block"})),this.register(this._bufferService.onScroll(()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())}))}_registerDimensionChangeListeners(){this.register(this._renderService.onRender(()=>{this._containerHeight&&this._containerHeight===this._screenElement.clientHeight||(this._queueRefresh(!0),this._containerHeight=this._screenElement.clientHeight)})),this.register(this._optionsService.onSpecificOptionChange("overviewRulerWidth",()=>this._queueRefresh(!0))),this.register(this._coreBrowserService.onDprChange(()=>this._queueRefresh(!0))),this._queueRefresh(!0)}_refreshDrawConstants(){const t=Math.floor(this._canvas.width/3),a=Math.ceil(this._canvas.width/3);i.full=this._canvas.width,i.left=t,i.center=a,i.right=t,this._refreshDrawHeightConstants(),s.full=0,s.left=0,s.center=i.left,s.right=i.left+i.center}_refreshDrawHeightConstants(){h.full=Math.round(2*this._coreBrowserService.dpr);const t=this._canvas.height/this._bufferService.buffer.lines.length,a=Math.round(Math.max(Math.min(t,12),6)*this._coreBrowserService.dpr);h.left=a,h.center=a,h.right=a}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*h.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*h.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*h.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*h.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${this._screenElement.clientHeight}px`,this._canvas.height=Math.round(this._screenElement.clientHeight*this._coreBrowserService.dpr),this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(const a of this._decorationService.decorations)this._colorZoneStore.addDecoration(a);this._ctx.lineWidth=1;const t=this._colorZoneStore.zones;for(const a of t)a.position!=="full"&&this._renderColorZone(a);for(const a of t)a.position==="full"&&this._renderColorZone(a);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderColorZone(t){this._ctx.fillStyle=t.color,this._ctx.fillRect(s[t.position||"full"],Math.round((this._canvas.height-1)*(t.startBufferLine/this._bufferService.buffers.active.lines.length)-h[t.position||"full"]/2),i[t.position||"full"],Math.round((this._canvas.height-1)*((t.endBufferLine-t.startBufferLine)/this._bufferService.buffers.active.lines.length)+h[t.position||"full"]))}_queueRefresh(t,a){this._shouldUpdateDimensions=t||this._shouldUpdateDimensions,this._shouldUpdateAnchor=a||this._shouldUpdateAnchor,this._animationFrame===void 0&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._refreshDecorations(),this._animationFrame=void 0}))}};n.OverviewRulerRenderer=e=c([_(2,u.IBufferService),_(3,u.IDecorationService),_(4,d.IRenderService),_(5,u.IOptionsService),_(6,d.ICoreBrowserService)],e)},2950:function(O,n,o){var c=this&&this.__decorate||function(h,i,s,e){var t,a=arguments.length,g=a<3?i:e===null?e=Object.getOwnPropertyDescriptor(i,s):e;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")g=Reflect.decorate(h,i,s,e);else for(var v=h.length-1;v>=0;v--)(t=h[v])&&(g=(a<3?t(g):a>3?t(i,s,g):t(i,s))||g);return a>3&&g&&Object.defineProperty(i,s,g),g},_=this&&this.__param||function(h,i){return function(s,e){i(s,e,h)}};Object.defineProperty(n,"__esModule",{value:!0}),n.CompositionHelper=void 0;const r=o(4725),d=o(2585),f=o(2584);let u=n.CompositionHelper=class{get isComposing(){return this._isComposing}constructor(h,i,s,e,t,a){this._textarea=h,this._compositionView=i,this._bufferService=s,this._optionsService=e,this._coreService=t,this._renderService=a,this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._dataAlreadySent=""}compositionstart(){this._isComposing=!0,this._compositionPosition.start=this._textarea.value.length,this._compositionView.textContent="",this._dataAlreadySent="",this._compositionView.classList.add("active")}compositionupdate(h){this._compositionView.textContent=h.data,this.updateCompositionElements(),setTimeout(()=>{this._compositionPosition.end=this._textarea.value.length},0)}compositionend(){this._finalizeComposition(!0)}keydown(h){if(this._isComposing||this._isSendingComposition){if(h.keyCode===229||h.keyCode===16||h.keyCode===17||h.keyCode===18)return!1;this._finalizeComposition(!1)}return h.keyCode!==229||(this._handleAnyTextareaChanges(),!1)}_finalizeComposition(h){if(this._compositionView.classList.remove("active"),this._isComposing=!1,h){const i={start:this._compositionPosition.start,end:this._compositionPosition.end};this._isSendingComposition=!0,setTimeout(()=>{if(this._isSendingComposition){let s;this._isSendingComposition=!1,i.start+=this._dataAlreadySent.length,s=this._isComposing?this._textarea.value.substring(i.start,i.end):this._textarea.value.substring(i.start),s.length>0&&this._coreService.triggerDataEvent(s,!0)}},0)}else{this._isSendingComposition=!1;const i=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(i,!0)}}_handleAnyTextareaChanges(){const h=this._textarea.value;setTimeout(()=>{if(!this._isComposing){const i=this._textarea.value,s=i.replace(h,"");this._dataAlreadySent=s,i.length>h.length?this._coreService.triggerDataEvent(s,!0):i.lengththis.updateCompositionElements(!0),0)}}};n.CompositionHelper=u=c([_(2,d.IBufferService),_(3,d.IOptionsService),_(4,d.ICoreService),_(5,r.IRenderService)],u)},9806:(O,n)=>{function o(c,_,r){const d=r.getBoundingClientRect(),f=c.getComputedStyle(r),u=parseInt(f.getPropertyValue("padding-left")),h=parseInt(f.getPropertyValue("padding-top"));return[_.clientX-d.left-u,_.clientY-d.top-h]}Object.defineProperty(n,"__esModule",{value:!0}),n.getCoords=n.getCoordsRelativeToElement=void 0,n.getCoordsRelativeToElement=o,n.getCoords=function(c,_,r,d,f,u,h,i,s){if(!u)return;const e=o(c,_,r);return e?(e[0]=Math.ceil((e[0]+(s?h/2:0))/h),e[1]=Math.ceil(e[1]/i),e[0]=Math.min(Math.max(e[0],1),d+(s?1:0)),e[1]=Math.min(Math.max(e[1],1),f),e):void 0}},9504:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.moveToCellSequence=void 0;const c=o(2584);function _(i,s,e,t){const a=i-r(i,e),g=s-r(s,e),v=Math.abs(a-g)-function(p,l,S){let E=0;const k=p-r(p,S),x=l-r(l,S);for(let w=0;w=0&&is?"A":"B"}function f(i,s,e,t,a,g){let v=i,p=s,l="";for(;v!==e||p!==t;)v+=a?1:-1,a&&v>g.cols-1?(l+=g.buffer.translateBufferLineToString(p,!1,i,v),v=0,i=0,p++):!a&&v<0&&(l+=g.buffer.translateBufferLineToString(p,!1,0,i+1),v=g.cols-1,i=v,p--);return l+g.buffer.translateBufferLineToString(p,!1,i,v)}function u(i,s){const e=s?"O":"[";return c.C0.ESC+e+i}function h(i,s){i=Math.floor(i);let e="";for(let t=0;t0?k-r(k,x):S;const I=k,$=function(j,W,m,b,y,L){let P;return P=_(m,b,y,L).length>0?b-r(b,y):W,j=m&&Pi?"D":"C",h(Math.abs(a-i),u(v,t));v=g>s?"D":"C";const p=Math.abs(g-s);return h(function(l,S){return S.cols-l}(g>s?i:a,e)+(p-1)*e.cols+1+((g>s?a:i)-1),u(v,t))}},1296:function(O,n,o){var c=this&&this.__decorate||function(w,T,I,$){var j,W=arguments.length,m=W<3?T:$===null?$=Object.getOwnPropertyDescriptor(T,I):$;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")m=Reflect.decorate(w,T,I,$);else for(var b=w.length-1;b>=0;b--)(j=w[b])&&(m=(W<3?j(m):W>3?j(T,I,m):j(T,I))||m);return W>3&&m&&Object.defineProperty(T,I,m),m},_=this&&this.__param||function(w,T){return function(I,$){T(I,$,w)}};Object.defineProperty(n,"__esModule",{value:!0}),n.DomRenderer=void 0;const r=o(3787),d=o(2550),f=o(2223),u=o(6171),h=o(6052),i=o(4725),s=o(8055),e=o(8460),t=o(844),a=o(2585),g="xterm-dom-renderer-owner-",v="xterm-rows",p="xterm-fg-",l="xterm-bg-",S="xterm-focus",E="xterm-selection";let k=1,x=n.DomRenderer=class extends t.Disposable{constructor(w,T,I,$,j,W,m,b,y,L,P,U,q){super(),this._terminal=w,this._document=T,this._element=I,this._screenElement=$,this._viewportElement=j,this._helperContainer=W,this._linkifier2=m,this._charSizeService=y,this._optionsService=L,this._bufferService=P,this._coreBrowserService=U,this._themeService=q,this._terminalClass=k++,this._rowElements=[],this._selectionRenderModel=(0,h.createSelectionRenderModel)(),this.onRequestRedraw=this.register(new e.EventEmitter).event,this._rowContainer=this._document.createElement("div"),this._rowContainer.classList.add(v),this._rowContainer.style.lineHeight="normal",this._rowContainer.setAttribute("aria-hidden","true"),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement("div"),this._selectionContainer.classList.add(E),this._selectionContainer.setAttribute("aria-hidden","true"),this.dimensions=(0,u.createRenderDimensions)(),this._updateDimensions(),this.register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this.register(this._themeService.onChangeColors(K=>this._injectCss(K))),this._injectCss(this._themeService.colors),this._rowFactory=b.createInstance(r.DomRendererRowFactory,document),this._element.classList.add(g+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this.register(this._linkifier2.onShowLinkUnderline(K=>this._handleLinkHover(K))),this.register(this._linkifier2.onHideLinkUnderline(K=>this._handleLinkLeave(K))),this.register((0,t.toDisposable)(()=>{this._element.classList.remove(g+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()})),this._widthCache=new d.WidthCache(this._document,this._helperContainer),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){const w=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*w,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*w),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/w),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/w),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(const I of this._rowElements)I.style.width=`${this.dimensions.css.canvas.width}px`,I.style.height=`${this.dimensions.css.cell.height}px`,I.style.lineHeight=`${this.dimensions.css.cell.height}px`,I.style.overflow="hidden";this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._dimensionsStyleElement));const T=`${this._terminalSelector} .${v} span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=T,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(w){this._themeStyleElement||(this._themeStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._themeStyleElement));let T=`${this._terminalSelector} .${v} { color: ${w.foreground.css}; font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`;T+=`${this._terminalSelector} .${v} .xterm-dim { color: ${s.color.multiplyOpacity(w.foreground,.5).css};}`,T+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}`;const I=`blink_underline_${this._terminalClass}`,$=`blink_bar_${this._terminalClass}`,j=`blink_block_${this._terminalClass}`;T+=`@keyframes ${I} { 50% { border-bottom-style: hidden; }}`,T+=`@keyframes ${$} { 50% { box-shadow: none; }}`,T+=`@keyframes ${j} { 0% { background-color: ${w.cursor.css}; color: ${w.cursorAccent.css}; } 50% { background-color: inherit; color: ${w.cursor.css}; }}`,T+=`${this._terminalSelector} .${v}.${S} .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${I} 1s step-end infinite;}${this._terminalSelector} .${v}.${S} .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${$} 1s step-end infinite;}${this._terminalSelector} .${v}.${S} .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${j} 1s step-end infinite;}${this._terminalSelector} .${v} .xterm-cursor.xterm-cursor-block { background-color: ${w.cursor.css}; color: ${w.cursorAccent.css};}${this._terminalSelector} .${v} .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${w.cursor.css} !important; color: ${w.cursorAccent.css} !important;}${this._terminalSelector} .${v} .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${w.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .${v} .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${w.cursor.css} inset;}${this._terminalSelector} .${v} .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${w.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,T+=`${this._terminalSelector} .${E} { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .${E} div { position: absolute; background-color: ${w.selectionBackgroundOpaque.css};}${this._terminalSelector} .${E} div { position: absolute; background-color: ${w.selectionInactiveBackgroundOpaque.css};}`;for(const[W,m]of w.ansi.entries())T+=`${this._terminalSelector} .${p}${W} { color: ${m.css}; }${this._terminalSelector} .${p}${W}.xterm-dim { color: ${s.color.multiplyOpacity(m,.5).css}; }${this._terminalSelector} .${l}${W} { background-color: ${m.css}; }`;T+=`${this._terminalSelector} .${p}${f.INVERTED_DEFAULT_COLOR} { color: ${s.color.opaque(w.background).css}; }${this._terminalSelector} .${p}${f.INVERTED_DEFAULT_COLOR}.xterm-dim { color: ${s.color.multiplyOpacity(s.color.opaque(w.background),.5).css}; }${this._terminalSelector} .${l}${f.INVERTED_DEFAULT_COLOR} { background-color: ${w.foreground.css}; }`,this._themeStyleElement.textContent=T}_setDefaultSpacing(){const w=this.dimensions.css.cell.width-this._widthCache.get("W",!1,!1);this._rowContainer.style.letterSpacing=`${w}px`,this._rowFactory.defaultSpacing=w}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(w,T){for(let I=this._rowElements.length;I<=T;I++){const $=this._document.createElement("div");this._rowContainer.appendChild($),this._rowElements.push($)}for(;this._rowElements.length>T;)this._rowContainer.removeChild(this._rowElements.pop())}handleResize(w,T){this._refreshRowElements(w,T),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove(S),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add(S),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleSelectionChanged(w,T,I){if(this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(w,T,I),this.renderRows(0,this._bufferService.rows-1),!w||!T)return;this._selectionRenderModel.update(this._terminal,w,T,I);const $=this._selectionRenderModel.viewportStartRow,j=this._selectionRenderModel.viewportEndRow,W=this._selectionRenderModel.viewportCappedStartRow,m=this._selectionRenderModel.viewportCappedEndRow;if(W>=this._bufferService.rows||m<0)return;const b=this._document.createDocumentFragment();if(I){const y=w[0]>T[0];b.appendChild(this._createSelectionElement(W,y?T[0]:w[0],y?w[0]:T[0],m-W+1))}else{const y=$===W?w[0]:0,L=W===j?T[0]:this._bufferService.cols;b.appendChild(this._createSelectionElement(W,y,L));const P=m-W-1;if(b.appendChild(this._createSelectionElement(W+1,0,this._bufferService.cols,P)),W!==m){const U=j===m?T[0]:this._bufferService.cols;b.appendChild(this._createSelectionElement(m,0,U))}}this._selectionContainer.appendChild(b)}_createSelectionElement(w,T,I,$=1){const j=this._document.createElement("div"),W=T*this.dimensions.css.cell.width;let m=this.dimensions.css.cell.width*(I-T);return W+m>this.dimensions.css.canvas.width&&(m=this.dimensions.css.canvas.width-W),j.style.height=$*this.dimensions.css.cell.height+"px",j.style.top=w*this.dimensions.css.cell.height+"px",j.style.left=`${W}px`,j.style.width=`${m}px`,j}handleCursorMove(){}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(const w of this._rowElements)w.replaceChildren()}renderRows(w,T){const I=this._bufferService.buffer,$=I.ybase+I.y,j=Math.min(I.x,this._bufferService.cols-1),W=this._optionsService.rawOptions.cursorBlink,m=this._optionsService.rawOptions.cursorStyle,b=this._optionsService.rawOptions.cursorInactiveStyle;for(let y=w;y<=T;y++){const L=y+I.ydisp,P=this._rowElements[y],U=I.lines.get(L);if(!P||!U)break;P.replaceChildren(...this._rowFactory.createRow(U,L,L===$,m,b,j,W,this.dimensions.css.cell.width,this._widthCache,-1,-1))}}get _terminalSelector(){return`.${g}${this._terminalClass}`}_handleLinkHover(w){this._setCellUnderline(w.x1,w.x2,w.y1,w.y2,w.cols,!0)}_handleLinkLeave(w){this._setCellUnderline(w.x1,w.x2,w.y1,w.y2,w.cols,!1)}_setCellUnderline(w,T,I,$,j,W){I<0&&(w=0),$<0&&(T=0);const m=this._bufferService.rows-1;I=Math.max(Math.min(I,m),0),$=Math.max(Math.min($,m),0),j=Math.min(j,this._bufferService.cols);const b=this._bufferService.buffer,y=b.ybase+b.y,L=Math.min(b.x,j-1),P=this._optionsService.rawOptions.cursorBlink,U=this._optionsService.rawOptions.cursorStyle,q=this._optionsService.rawOptions.cursorInactiveStyle;for(let K=I;K<=$;++K){const A=K+b.ydisp,C=this._rowElements[K],M=b.lines.get(A);if(!C||!M)break;C.replaceChildren(...this._rowFactory.createRow(M,A,A===y,U,q,L,P,this.dimensions.css.cell.width,this._widthCache,W?K===I?w:0:-1,W?(K===$?T:j)-1:-1))}}};n.DomRenderer=x=c([_(7,a.IInstantiationService),_(8,i.ICharSizeService),_(9,a.IOptionsService),_(10,a.IBufferService),_(11,i.ICoreBrowserService),_(12,i.IThemeService)],x)},3787:function(O,n,o){var c=this&&this.__decorate||function(v,p,l,S){var E,k=arguments.length,x=k<3?p:S===null?S=Object.getOwnPropertyDescriptor(p,l):S;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")x=Reflect.decorate(v,p,l,S);else for(var w=v.length-1;w>=0;w--)(E=v[w])&&(x=(k<3?E(x):k>3?E(p,l,x):E(p,l))||x);return k>3&&x&&Object.defineProperty(p,l,x),x},_=this&&this.__param||function(v,p){return function(l,S){p(l,S,v)}};Object.defineProperty(n,"__esModule",{value:!0}),n.DomRendererRowFactory=void 0;const r=o(2223),d=o(643),f=o(511),u=o(2585),h=o(8055),i=o(4725),s=o(4269),e=o(6171),t=o(3734);let a=n.DomRendererRowFactory=class{constructor(v,p,l,S,E,k,x){this._document=v,this._characterJoinerService=p,this._optionsService=l,this._coreBrowserService=S,this._coreService=E,this._decorationService=k,this._themeService=x,this._workCell=new f.CellData,this._columnSelectMode=!1,this.defaultSpacing=0}handleSelectionChanged(v,p,l){this._selectionStart=v,this._selectionEnd=p,this._columnSelectMode=l}createRow(v,p,l,S,E,k,x,w,T,I,$){const j=[],W=this._characterJoinerService.getJoinedCharacters(p),m=this._themeService.colors;let b,y=v.getNoBgTrimmedLength();l&&y0&&J===W[0][0]){ee=!0;const ie=W.shift();V=new s.JoinedCellData(this._workCell,v.translateToString(!0,ie[0],ie[1]),ie[1]-ie[0]),le=ie[1]-1,se=V.getWidth()}const Ee=this._isCellInSelection(J,p),Me=l&&J===k,Oe=N&&J>=I&&J<=$;let Pe=!1;this._decorationService.forEachDecorationAtCell(J,p,void 0,ie=>{Pe=!0});let Ie=V.getChars()||d.WHITESPACE_CELL_CHAR;if(Ie===" "&&(V.isUnderline()||V.isOverline())&&(Ie=" "),H=se*w-T.get(Ie,V.isBold(),V.isItalic()),b){if(L&&(Ee&&M||!Ee&&!M&&V.bg===U)&&(Ee&&M&&m.selectionForeground||V.fg===q)&&V.extended.ext===K&&Oe===A&&H===C&&!Me&&!ee&&!Pe){V.isInvisible()?P+=d.WHITESPACE_CELL_CHAR:P+=Ie,L++;continue}L&&(b.textContent=P),b=this._document.createElement("span"),L=0,P=""}else b=this._document.createElement("span");if(U=V.bg,q=V.fg,K=V.extended.ext,A=Oe,C=H,M=Ee,ee&&k>=J&&k<=le&&(k=J),!this._coreService.isCursorHidden&&Me&&this._coreService.isCursorInitialized){if(z.push("xterm-cursor"),this._coreBrowserService.isFocused)x&&z.push("xterm-cursor-blink"),z.push(S==="bar"?"xterm-cursor-bar":S==="underline"?"xterm-cursor-underline":"xterm-cursor-block");else if(E)switch(E){case"outline":z.push("xterm-cursor-outline");break;case"block":z.push("xterm-cursor-block");break;case"bar":z.push("xterm-cursor-bar");break;case"underline":z.push("xterm-cursor-underline")}}if(V.isBold()&&z.push("xterm-bold"),V.isItalic()&&z.push("xterm-italic"),V.isDim()&&z.push("xterm-dim"),P=V.isInvisible()?d.WHITESPACE_CELL_CHAR:V.getChars()||d.WHITESPACE_CELL_CHAR,V.isUnderline()&&(z.push(`xterm-underline-${V.extended.underlineStyle}`),P===" "&&(P=" "),!V.isUnderlineColorDefault()))if(V.isUnderlineColorRGB())b.style.textDecorationColor=`rgb(${t.AttributeData.toColorRGB(V.getUnderlineColor()).join(",")})`;else{let ie=V.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&V.isBold()&&ie<8&&(ie+=8),b.style.textDecorationColor=m.ansi[ie].css}V.isOverline()&&(z.push("xterm-overline"),P===" "&&(P=" ")),V.isStrikethrough()&&z.push("xterm-strikethrough"),Oe&&(b.style.textDecoration="underline");let de=V.getFgColor(),Re=V.getFgColorMode(),pe=V.getBgColor(),xe=V.getBgColorMode();const He=!!V.isInverse();if(He){const ie=de;de=pe,pe=ie;const $e=Re;Re=xe,xe=$e}let ge,ke,Ce,Le=!1;switch(this._decorationService.forEachDecorationAtCell(J,p,void 0,ie=>{ie.options.layer!=="top"&&Le||(ie.backgroundColorRGB&&(xe=50331648,pe=ie.backgroundColorRGB.rgba>>8&16777215,ge=ie.backgroundColorRGB),ie.foregroundColorRGB&&(Re=50331648,de=ie.foregroundColorRGB.rgba>>8&16777215,ke=ie.foregroundColorRGB),Le=ie.options.layer==="top")}),!Le&&Ee&&(ge=this._coreBrowserService.isFocused?m.selectionBackgroundOpaque:m.selectionInactiveBackgroundOpaque,pe=ge.rgba>>8&16777215,xe=50331648,Le=!0,m.selectionForeground&&(Re=50331648,de=m.selectionForeground.rgba>>8&16777215,ke=m.selectionForeground)),Le&&z.push("xterm-decoration-top"),xe){case 16777216:case 33554432:Ce=m.ansi[pe],z.push(`xterm-bg-${pe}`);break;case 50331648:Ce=h.channels.toColor(pe>>16,pe>>8&255,255&pe),this._addStyle(b,`background-color:#${g((pe>>>0).toString(16),"0",6)}`);break;default:He?(Ce=m.foreground,z.push(`xterm-bg-${r.INVERTED_DEFAULT_COLOR}`)):Ce=m.background}switch(ge||V.isDim()&&(ge=h.color.multiplyOpacity(Ce,.5)),Re){case 16777216:case 33554432:V.isBold()&&de<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&(de+=8),this._applyMinimumContrast(b,Ce,m.ansi[de],V,ge,void 0)||z.push(`xterm-fg-${de}`);break;case 50331648:const ie=h.channels.toColor(de>>16&255,de>>8&255,255&de);this._applyMinimumContrast(b,Ce,ie,V,ge,ke)||this._addStyle(b,`color:#${g(de.toString(16),"0",6)}`);break;default:this._applyMinimumContrast(b,Ce,m.foreground,V,ge,ke)||He&&z.push(`xterm-fg-${r.INVERTED_DEFAULT_COLOR}`)}z.length&&(b.className=z.join(" "),z.length=0),Me||ee||Pe?b.textContent=P:L++,H!==this.defaultSpacing&&(b.style.letterSpacing=`${H}px`),j.push(b),J=le}return b&&L&&(b.textContent=P),j}_applyMinimumContrast(v,p,l,S,E,k){if(this._optionsService.rawOptions.minimumContrastRatio===1||(0,e.treatGlyphAsBackgroundColor)(S.getCode()))return!1;const x=this._getContrastCache(S);let w;if(E||k||(w=x.getColor(p.rgba,l.rgba)),w===void 0){const T=this._optionsService.rawOptions.minimumContrastRatio/(S.isDim()?2:1);w=h.color.ensureContrastRatio(E||p,k||l,T),x.setColor((E||p).rgba,(k||l).rgba,w??null)}return!!w&&(this._addStyle(v,`color:${w.css}`),!0)}_getContrastCache(v){return v.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(v,p){v.setAttribute("style",`${v.getAttribute("style")||""}${p};`)}_isCellInSelection(v,p){const l=this._selectionStart,S=this._selectionEnd;return!(!l||!S)&&(this._columnSelectMode?l[0]<=S[0]?v>=l[0]&&p>=l[1]&&v=l[1]&&v>=S[0]&&p<=S[1]:p>l[1]&&p=l[0]&&v=l[0])}};function g(v,p,l){for(;v.length{Object.defineProperty(n,"__esModule",{value:!0}),n.WidthCache=void 0,n.WidthCache=class{constructor(o,c){this._flat=new Float32Array(256),this._font="",this._fontSize=0,this._weight="normal",this._weightBold="bold",this._measureElements=[],this._container=o.createElement("div"),this._container.classList.add("xterm-width-cache-measure-container"),this._container.setAttribute("aria-hidden","true"),this._container.style.whiteSpace="pre",this._container.style.fontKerning="none";const _=o.createElement("span");_.classList.add("xterm-char-measure-element");const r=o.createElement("span");r.classList.add("xterm-char-measure-element"),r.style.fontWeight="bold";const d=o.createElement("span");d.classList.add("xterm-char-measure-element"),d.style.fontStyle="italic";const f=o.createElement("span");f.classList.add("xterm-char-measure-element"),f.style.fontWeight="bold",f.style.fontStyle="italic",this._measureElements=[_,r,d,f],this._container.appendChild(_),this._container.appendChild(r),this._container.appendChild(d),this._container.appendChild(f),c.appendChild(this._container),this.clear()}dispose(){this._container.remove(),this._measureElements.length=0,this._holey=void 0}clear(){this._flat.fill(-9999),this._holey=new Map}setFont(o,c,_,r){o===this._font&&c===this._fontSize&&_===this._weight&&r===this._weightBold||(this._font=o,this._fontSize=c,this._weight=_,this._weightBold=r,this._container.style.fontFamily=this._font,this._container.style.fontSize=`${this._fontSize}px`,this._measureElements[0].style.fontWeight=`${_}`,this._measureElements[1].style.fontWeight=`${r}`,this._measureElements[2].style.fontWeight=`${_}`,this._measureElements[3].style.fontWeight=`${r}`,this.clear())}get(o,c,_){let r=0;if(!c&&!_&&o.length===1&&(r=o.charCodeAt(0))<256){if(this._flat[r]!==-9999)return this._flat[r];const u=this._measure(o,0);return u>0&&(this._flat[r]=u),u}let d=o;c&&(d+="B"),_&&(d+="I");let f=this._holey.get(d);if(f===void 0){let u=0;c&&(u|=1),_&&(u|=2),f=this._measure(o,u),f>0&&this._holey.set(d,f)}return f}_measure(o,c){const _=this._measureElements[c];return _.textContent=o.repeat(32),_.offsetWidth/32}}},2223:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.TEXT_BASELINE=n.DIM_OPACITY=n.INVERTED_DEFAULT_COLOR=void 0;const c=o(6114);n.INVERTED_DEFAULT_COLOR=257,n.DIM_OPACITY=.5,n.TEXT_BASELINE=c.isFirefox||c.isLegacyEdge?"bottom":"ideographic"},6171:(O,n)=>{function o(_){return 57508<=_&&_<=57558}function c(_){return _>=128512&&_<=128591||_>=127744&&_<=128511||_>=128640&&_<=128767||_>=9728&&_<=9983||_>=9984&&_<=10175||_>=65024&&_<=65039||_>=129280&&_<=129535||_>=127462&&_<=127487}Object.defineProperty(n,"__esModule",{value:!0}),n.computeNextVariantOffset=n.createRenderDimensions=n.treatGlyphAsBackgroundColor=n.allowRescaling=n.isEmoji=n.isRestrictedPowerlineGlyph=n.isPowerlineGlyph=n.throwIfFalsy=void 0,n.throwIfFalsy=function(_){if(!_)throw new Error("value must not be falsy");return _},n.isPowerlineGlyph=o,n.isRestrictedPowerlineGlyph=function(_){return 57520<=_&&_<=57527},n.isEmoji=c,n.allowRescaling=function(_,r,d,f){return r===1&&d>Math.ceil(1.5*f)&&_!==void 0&&_>255&&!c(_)&&!o(_)&&!function(u){return 57344<=u&&u<=63743}(_)},n.treatGlyphAsBackgroundColor=function(_){return o(_)||function(r){return 9472<=r&&r<=9631}(_)},n.createRenderDimensions=function(){return{css:{canvas:{width:0,height:0},cell:{width:0,height:0}},device:{canvas:{width:0,height:0},cell:{width:0,height:0},char:{width:0,height:0,left:0,top:0}}}},n.computeNextVariantOffset=function(_,r,d=0){return(_-(2*Math.round(r)-d))%(2*Math.round(r))}},6052:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.createSelectionRenderModel=void 0;class o{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(_,r,d,f=!1){if(this.selectionStart=r,this.selectionEnd=d,!r||!d||r[0]===d[0]&&r[1]===d[1])return void this.clear();const u=_.buffers.active.ydisp,h=r[1]-u,i=d[1]-u,s=Math.max(h,0),e=Math.min(i,_.rows-1);s>=_.rows||e<0?this.clear():(this.hasSelection=!0,this.columnSelectMode=f,this.viewportStartRow=h,this.viewportEndRow=i,this.viewportCappedStartRow=s,this.viewportCappedEndRow=e,this.startCol=r[0],this.endCol=d[0])}isCellSelected(_,r,d){return!!this.hasSelection&&(d-=_.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?r>=this.startCol&&d>=this.viewportCappedStartRow&&r=this.viewportCappedStartRow&&r>=this.endCol&&d<=this.viewportCappedEndRow:d>this.viewportStartRow&&d=this.startCol&&r=this.startCol)}}n.createSelectionRenderModel=function(){return new o}},456:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.SelectionModel=void 0,n.SelectionModel=class{constructor(o){this._bufferService=o,this.isSelectAllActive=!1,this.selectionStartLength=0}clearSelection(){this.selectionStart=void 0,this.selectionEnd=void 0,this.isSelectAllActive=!1,this.selectionStartLength=0}get finalSelectionStart(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart}get finalSelectionEnd(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){const o=this.selectionStart[0]+this.selectionStartLength;return o>this._bufferService.cols?o%this._bufferService.cols==0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(o/this._bufferService.cols)-1]:[o%this._bufferService.cols,this.selectionStart[1]+Math.floor(o/this._bufferService.cols)]:[o,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){const o=this.selectionStart[0]+this.selectionStartLength;return o>this._bufferService.cols?[o%this._bufferService.cols,this.selectionStart[1]+Math.floor(o/this._bufferService.cols)]:[Math.max(o,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){const o=this.selectionStart,c=this.selectionEnd;return!(!o||!c)&&(o[1]>c[1]||o[1]===c[1]&&o[0]>c[0])}handleTrim(o){return this.selectionStart&&(this.selectionStart[1]-=o),this.selectionEnd&&(this.selectionEnd[1]-=o),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)}}},428:function(O,n,o){var c=this&&this.__decorate||function(e,t,a,g){var v,p=arguments.length,l=p<3?t:g===null?g=Object.getOwnPropertyDescriptor(t,a):g;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")l=Reflect.decorate(e,t,a,g);else for(var S=e.length-1;S>=0;S--)(v=e[S])&&(l=(p<3?v(l):p>3?v(t,a,l):v(t,a))||l);return p>3&&l&&Object.defineProperty(t,a,l),l},_=this&&this.__param||function(e,t){return function(a,g){t(a,g,e)}};Object.defineProperty(n,"__esModule",{value:!0}),n.CharSizeService=void 0;const r=o(2585),d=o(8460),f=o(844);let u=n.CharSizeService=class extends f.Disposable{get hasValidSize(){return this.width>0&&this.height>0}constructor(e,t,a){super(),this._optionsService=a,this.width=0,this.height=0,this._onCharSizeChange=this.register(new d.EventEmitter),this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this.register(new s(this._optionsService))}catch{this._measureStrategy=this.register(new i(e,t,this._optionsService))}this.register(this._optionsService.onMultipleOptionChange(["fontFamily","fontSize"],()=>this.measure()))}measure(){const e=this._measureStrategy.measure();e.width===this.width&&e.height===this.height||(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};n.CharSizeService=u=c([_(2,r.IOptionsService)],u);class h extends f.Disposable{constructor(){super(...arguments),this._result={width:0,height:0}}_validateAndSet(t,a){t!==void 0&&t>0&&a!==void 0&&a>0&&(this._result.width=t,this._result.height=a)}}class i extends h{constructor(t,a,g){super(),this._document=t,this._parentElement=a,this._optionsService=g,this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W".repeat(32),this._measureElement.setAttribute("aria-hidden","true"),this._measureElement.style.whiteSpace="pre",this._measureElement.style.fontKerning="none",this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}}class s extends h{constructor(t){super(),this._optionsService=t,this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext("2d");const a=this._ctx.measureText("W");if(!("width"in a&&"fontBoundingBoxAscent"in a&&"fontBoundingBoxDescent"in a))throw new Error("Required font metrics not supported")}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;const t=this._ctx.measureText("W");return this._validateAndSet(t.width,t.fontBoundingBoxAscent+t.fontBoundingBoxDescent),this._result}}},4269:function(O,n,o){var c=this&&this.__decorate||function(s,e,t,a){var g,v=arguments.length,p=v<3?e:a===null?a=Object.getOwnPropertyDescriptor(e,t):a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")p=Reflect.decorate(s,e,t,a);else for(var l=s.length-1;l>=0;l--)(g=s[l])&&(p=(v<3?g(p):v>3?g(e,t,p):g(e,t))||p);return v>3&&p&&Object.defineProperty(e,t,p),p},_=this&&this.__param||function(s,e){return function(t,a){e(t,a,s)}};Object.defineProperty(n,"__esModule",{value:!0}),n.CharacterJoinerService=n.JoinedCellData=void 0;const r=o(3734),d=o(643),f=o(511),u=o(2585);class h extends r.AttributeData{constructor(e,t,a){super(),this.content=0,this.combinedData="",this.fg=e.fg,this.bg=e.bg,this.combinedData=t,this._width=a}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(e){throw new Error("not implemented")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}n.JoinedCellData=h;let i=n.CharacterJoinerService=class dt{constructor(e){this._bufferService=e,this._characterJoiners=[],this._nextCharacterJoinerId=0,this._workCell=new f.CellData}register(e){const t={id:this._nextCharacterJoinerId++,handler:e};return this._characterJoiners.push(t),t.id}deregister(e){for(let t=0;t1){const x=this._getJoinedRanges(g,l,p,t,v);for(let w=0;w1){const k=this._getJoinedRanges(g,l,p,t,v);for(let x=0;x{Object.defineProperty(n,"__esModule",{value:!0}),n.CoreBrowserService=void 0;const c=o(844),_=o(8460),r=o(3656);class d extends c.Disposable{constructor(h,i,s){super(),this._textarea=h,this._window=i,this.mainDocument=s,this._isFocused=!1,this._cachedIsFocused=void 0,this._screenDprMonitor=new f(this._window),this._onDprChange=this.register(new _.EventEmitter),this.onDprChange=this._onDprChange.event,this._onWindowChange=this.register(new _.EventEmitter),this.onWindowChange=this._onWindowChange.event,this.register(this.onWindowChange(e=>this._screenDprMonitor.setWindow(e))),this.register((0,_.forwardEvent)(this._screenDprMonitor.onDprChange,this._onDprChange)),this._textarea.addEventListener("focus",()=>this._isFocused=!0),this._textarea.addEventListener("blur",()=>this._isFocused=!1)}get window(){return this._window}set window(h){this._window!==h&&(this._window=h,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return this._cachedIsFocused===void 0&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask(()=>this._cachedIsFocused=void 0)),this._cachedIsFocused}}n.CoreBrowserService=d;class f extends c.Disposable{constructor(h){super(),this._parentWindow=h,this._windowResizeListener=this.register(new c.MutableDisposable),this._onDprChange=this.register(new _.EventEmitter),this.onDprChange=this._onDprChange.event,this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this.register((0,c.toDisposable)(()=>this.clearListener()))}setWindow(h){this._parentWindow=h,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=(0,r.addDisposableDomListener)(this._parentWindow,"resize",()=>this._setDprAndFireIfDiffers())}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){this._resolutionMediaMatchList&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}}},779:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.LinkProviderService=void 0;const c=o(844);class _ extends c.Disposable{constructor(){super(),this.linkProviders=[],this.register((0,c.toDisposable)(()=>this.linkProviders.length=0))}registerLinkProvider(d){return this.linkProviders.push(d),{dispose:()=>{const f=this.linkProviders.indexOf(d);f!==-1&&this.linkProviders.splice(f,1)}}}}n.LinkProviderService=_},8934:function(O,n,o){var c=this&&this.__decorate||function(u,h,i,s){var e,t=arguments.length,a=t<3?h:s===null?s=Object.getOwnPropertyDescriptor(h,i):s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")a=Reflect.decorate(u,h,i,s);else for(var g=u.length-1;g>=0;g--)(e=u[g])&&(a=(t<3?e(a):t>3?e(h,i,a):e(h,i))||a);return t>3&&a&&Object.defineProperty(h,i,a),a},_=this&&this.__param||function(u,h){return function(i,s){h(i,s,u)}};Object.defineProperty(n,"__esModule",{value:!0}),n.MouseService=void 0;const r=o(4725),d=o(9806);let f=n.MouseService=class{constructor(u,h){this._renderService=u,this._charSizeService=h}getCoords(u,h,i,s,e){return(0,d.getCoords)(window,u,h,i,s,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,e)}getMouseReportCoords(u,h){const i=(0,d.getCoordsRelativeToElement)(window,u,h);if(this._charSizeService.hasValidSize)return i[0]=Math.min(Math.max(i[0],0),this._renderService.dimensions.css.canvas.width-1),i[1]=Math.min(Math.max(i[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(i[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(i[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(i[0]),y:Math.floor(i[1])}}};n.MouseService=f=c([_(0,r.IRenderService),_(1,r.ICharSizeService)],f)},3230:function(O,n,o){var c=this&&this.__decorate||function(e,t,a,g){var v,p=arguments.length,l=p<3?t:g===null?g=Object.getOwnPropertyDescriptor(t,a):g;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")l=Reflect.decorate(e,t,a,g);else for(var S=e.length-1;S>=0;S--)(v=e[S])&&(l=(p<3?v(l):p>3?v(t,a,l):v(t,a))||l);return p>3&&l&&Object.defineProperty(t,a,l),l},_=this&&this.__param||function(e,t){return function(a,g){t(a,g,e)}};Object.defineProperty(n,"__esModule",{value:!0}),n.RenderService=void 0;const r=o(6193),d=o(4725),f=o(8460),u=o(844),h=o(7226),i=o(2585);let s=n.RenderService=class extends u.Disposable{get dimensions(){return this._renderer.value.dimensions}constructor(e,t,a,g,v,p,l,S){super(),this._rowCount=e,this._charSizeService=g,this._renderer=this.register(new u.MutableDisposable),this._pausedResizeTask=new h.DebouncedIdleTask,this._observerDisposable=this.register(new u.MutableDisposable),this._isPaused=!1,this._needsFullRefresh=!1,this._isNextRenderRedrawOnly=!0,this._needsSelectionRefresh=!1,this._canvasWidth=0,this._canvasHeight=0,this._selectionState={start:void 0,end:void 0,columnSelectMode:!1},this._onDimensionsChange=this.register(new f.EventEmitter),this.onDimensionsChange=this._onDimensionsChange.event,this._onRenderedViewportChange=this.register(new f.EventEmitter),this.onRenderedViewportChange=this._onRenderedViewportChange.event,this._onRender=this.register(new f.EventEmitter),this.onRender=this._onRender.event,this._onRefreshRequest=this.register(new f.EventEmitter),this.onRefreshRequest=this._onRefreshRequest.event,this._renderDebouncer=new r.RenderDebouncer((E,k)=>this._renderRows(E,k),l),this.register(this._renderDebouncer),this.register(l.onDprChange(()=>this.handleDevicePixelRatioChange())),this.register(p.onResize(()=>this._fullRefresh())),this.register(p.buffers.onBufferActivate(()=>this._renderer.value?.clear())),this.register(a.onOptionChange(()=>this._handleOptionsChanged())),this.register(this._charSizeService.onCharSizeChange(()=>this.handleCharSizeChanged())),this.register(v.onDecorationRegistered(()=>this._fullRefresh())),this.register(v.onDecorationRemoved(()=>this._fullRefresh())),this.register(a.onMultipleOptionChange(["customGlyphs","drawBoldTextInBrightColors","letterSpacing","lineHeight","fontFamily","fontSize","fontWeight","fontWeightBold","minimumContrastRatio","rescaleOverlappingGlyphs"],()=>{this.clear(),this.handleResize(p.cols,p.rows),this._fullRefresh()})),this.register(a.onMultipleOptionChange(["cursorBlink","cursorStyle"],()=>this.refreshRows(p.buffer.y,p.buffer.y,!0))),this.register(S.onChangeColors(()=>this._fullRefresh())),this._registerIntersectionObserver(l.window,t),this.register(l.onWindowChange(E=>this._registerIntersectionObserver(E,t)))}_registerIntersectionObserver(e,t){if("IntersectionObserver"in e){const a=new e.IntersectionObserver(g=>this._handleIntersectionChange(g[g.length-1]),{threshold:0});a.observe(t),this._observerDisposable.value=(0,u.toDisposable)(()=>a.disconnect())}}_handleIntersectionChange(e){this._isPaused=e.isIntersecting===void 0?e.intersectionRatio===0:!e.isIntersecting,this._isPaused||this._charSizeService.hasValidSize||this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(e,t,a=!1){this._isPaused?this._needsFullRefresh=!0:(a||(this._isNextRenderRedrawOnly=!1),this._renderDebouncer.refresh(e,t,this._rowCount))}_renderRows(e,t){this._renderer.value&&(e=Math.min(e,this._rowCount-1),t=Math.min(t,this._rowCount-1),this._renderer.value.renderRows(e,t),this._needsSelectionRefresh&&(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:e,end:t}),this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0)}resize(e,t){this._rowCount=t,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(e){this._renderer.value=e,this._renderer.value&&(this._renderer.value.onRequestRedraw(t=>this.refreshRows(t.start,t.end,!0)),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(e){return this._renderDebouncer.addRefreshCallback(e)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(e,t){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set(()=>this._renderer.value?.handleResize(e,t)):this._renderer.value.handleResize(e,t),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(e,t,a){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=a,this._renderer.value?.handleSelectionChanged(e,t,a)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};n.RenderService=s=c([_(2,i.IOptionsService),_(3,d.ICharSizeService),_(4,i.IDecorationService),_(5,i.IBufferService),_(6,d.ICoreBrowserService),_(7,d.IThemeService)],s)},9312:function(O,n,o){var c=this&&this.__decorate||function(l,S,E,k){var x,w=arguments.length,T=w<3?S:k===null?k=Object.getOwnPropertyDescriptor(S,E):k;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")T=Reflect.decorate(l,S,E,k);else for(var I=l.length-1;I>=0;I--)(x=l[I])&&(T=(w<3?x(T):w>3?x(S,E,T):x(S,E))||T);return w>3&&T&&Object.defineProperty(S,E,T),T},_=this&&this.__param||function(l,S){return function(E,k){S(E,k,l)}};Object.defineProperty(n,"__esModule",{value:!0}),n.SelectionService=void 0;const r=o(9806),d=o(9504),f=o(456),u=o(4725),h=o(8460),i=o(844),s=o(6114),e=o(4841),t=o(511),a=o(2585),g=" ",v=new RegExp(g,"g");let p=n.SelectionService=class extends i.Disposable{constructor(l,S,E,k,x,w,T,I,$){super(),this._element=l,this._screenElement=S,this._linkifier=E,this._bufferService=k,this._coreService=x,this._mouseService=w,this._optionsService=T,this._renderService=I,this._coreBrowserService=$,this._dragScrollAmount=0,this._enabled=!0,this._workCell=new t.CellData,this._mouseDownTimeStamp=0,this._oldHasSelection=!1,this._oldSelectionStart=void 0,this._oldSelectionEnd=void 0,this._onLinuxMouseSelection=this.register(new h.EventEmitter),this.onLinuxMouseSelection=this._onLinuxMouseSelection.event,this._onRedrawRequest=this.register(new h.EventEmitter),this.onRequestRedraw=this._onRedrawRequest.event,this._onSelectionChange=this.register(new h.EventEmitter),this.onSelectionChange=this._onSelectionChange.event,this._onRequestScrollLines=this.register(new h.EventEmitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this._mouseMoveListener=j=>this._handleMouseMove(j),this._mouseUpListener=j=>this._handleMouseUp(j),this._coreService.onUserInput(()=>{this.hasSelection&&this.clearSelection()}),this._trimListener=this._bufferService.buffer.lines.onTrim(j=>this._handleTrim(j)),this.register(this._bufferService.buffers.onBufferActivate(j=>this._handleBufferActivate(j))),this.enable(),this._model=new f.SelectionModel(this._bufferService),this._activeSelectionMode=0,this.register((0,i.toDisposable)(()=>{this._removeMouseDownListeners()}))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){const l=this._model.finalSelectionStart,S=this._model.finalSelectionEnd;return!(!l||!S||l[0]===S[0]&&l[1]===S[1])}get selectionText(){const l=this._model.finalSelectionStart,S=this._model.finalSelectionEnd;if(!l||!S)return"";const E=this._bufferService.buffer,k=[];if(this._activeSelectionMode===3){if(l[0]===S[0])return"";const x=l[0]x.replace(v," ")).join(s.isWindows?`\r +`:` +`)}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(l){this._refreshAnimationFrame||(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._refresh())),s.isLinux&&l&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:this._activeSelectionMode===3})}_isClickInSelection(l){const S=this._getMouseBufferCoords(l),E=this._model.finalSelectionStart,k=this._model.finalSelectionEnd;return!!(E&&k&&S)&&this._areCoordsInSelection(S,E,k)}isCellInSelection(l,S){const E=this._model.finalSelectionStart,k=this._model.finalSelectionEnd;return!(!E||!k)&&this._areCoordsInSelection([l,S],E,k)}_areCoordsInSelection(l,S,E){return l[1]>S[1]&&l[1]=S[0]&&l[0]=S[0]}_selectWordAtCursor(l,S){const E=this._linkifier.currentLink?.link?.range;if(E)return this._model.selectionStart=[E.start.x-1,E.start.y-1],this._model.selectionStartLength=(0,e.getRangeLength)(E,this._bufferService.cols),this._model.selectionEnd=void 0,!0;const k=this._getMouseBufferCoords(l);return!!k&&(this._selectWordAt(k,S),this._model.selectionEnd=void 0,!0)}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(l,S){this._model.clearSelection(),l=Math.max(l,0),S=Math.min(S,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,l],this._model.selectionEnd=[this._bufferService.cols,S],this.refresh(),this._onSelectionChange.fire()}_handleTrim(l){this._model.handleTrim(l)&&this.refresh()}_getMouseBufferCoords(l){const S=this._mouseService.getCoords(l,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(S)return S[0]--,S[1]--,S[1]+=this._bufferService.buffer.ydisp,S}_getMouseEventScrollAmount(l){let S=(0,r.getCoordsRelativeToElement)(this._coreBrowserService.window,l,this._screenElement)[1];const E=this._renderService.dimensions.css.canvas.height;return S>=0&&S<=E?0:(S>E&&(S-=E),S=Math.min(Math.max(S,-50),50),S/=50,S/Math.abs(S)+Math.round(14*S))}shouldForceSelection(l){return s.isMac?l.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:l.shiftKey}handleMouseDown(l){if(this._mouseDownTimeStamp=l.timeStamp,(l.button!==2||!this.hasSelection)&&l.button===0){if(!this._enabled){if(!this.shouldForceSelection(l))return;l.stopPropagation()}l.preventDefault(),this._dragScrollAmount=0,this._enabled&&l.shiftKey?this._handleIncrementalClick(l):l.detail===1?this._handleSingleClick(l):l.detail===2?this._handleDoubleClick(l):l.detail===3&&this._handleTripleClick(l),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup",this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval(()=>this._dragScroll(),50)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(l){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(l))}_handleSingleClick(l){if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(l)?3:0,this._model.selectionStart=this._getMouseBufferCoords(l),!this._model.selectionStart)return;this._model.selectionEnd=void 0;const S=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);S&&S.length!==this._model.selectionStart[0]&&S.hasWidth(this._model.selectionStart[0])===0&&this._model.selectionStart[0]++}_handleDoubleClick(l){this._selectWordAtCursor(l,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(l){const S=this._getMouseBufferCoords(l);S&&(this._activeSelectionMode=2,this._selectLineAt(S[1]))}shouldColumnSelect(l){return l.altKey&&!(s.isMac&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(l){if(l.stopImmediatePropagation(),!this._model.selectionStart)return;const S=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(l),!this._model.selectionEnd)return void this.refresh(!0);this._activeSelectionMode===2?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));const E=this._bufferService.buffer;if(this._model.selectionEnd[1]0?(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(l.ydisp+this._bufferService.rows,l.lines.length-1)):(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=l.ydisp),this.refresh()}}_handleMouseUp(l){const S=l.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&S<500&&l.altKey&&this._optionsService.rawOptions.altClickMovesCursor){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){const E=this._mouseService.getCoords(l,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(E&&E[0]!==void 0&&E[1]!==void 0){const k=(0,d.moveToCellSequence)(E[0]-1,E[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(k,!0)}}}else this._fireEventIfSelectionChanged()}_fireEventIfSelectionChanged(){const l=this._model.finalSelectionStart,S=this._model.finalSelectionEnd,E=!(!l||!S||l[0]===S[0]&&l[1]===S[1]);E?l&&S&&(this._oldSelectionStart&&this._oldSelectionEnd&&l[0]===this._oldSelectionStart[0]&&l[1]===this._oldSelectionStart[1]&&S[0]===this._oldSelectionEnd[0]&&S[1]===this._oldSelectionEnd[1]||this._fireOnSelectionChange(l,S,E)):this._oldHasSelection&&this._fireOnSelectionChange(l,S,E)}_fireOnSelectionChange(l,S,E){this._oldSelectionStart=l,this._oldSelectionEnd=S,this._oldHasSelection=E,this._onSelectionChange.fire()}_handleBufferActivate(l){this.clearSelection(),this._trimListener.dispose(),this._trimListener=l.activeBuffer.lines.onTrim(S=>this._handleTrim(S))}_convertViewportColToCharacterIndex(l,S){let E=S;for(let k=0;S>=k;k++){const x=l.loadCell(k,this._workCell).getChars().length;this._workCell.getWidth()===0?E--:x>1&&S!==k&&(E+=x-1)}return E}setSelection(l,S,E){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[l,S],this._model.selectionStartLength=E,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(l){this._isClickInSelection(l)||(this._selectWordAtCursor(l,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(l,S,E=!0,k=!0){if(l[0]>=this._bufferService.cols)return;const x=this._bufferService.buffer,w=x.lines.get(l[1]);if(!w)return;const T=x.translateBufferLineToString(l[1],!1);let I=this._convertViewportColToCharacterIndex(w,l[0]),$=I;const j=l[0]-I;let W=0,m=0,b=0,y=0;if(T.charAt(I)===" "){for(;I>0&&T.charAt(I-1)===" ";)I--;for(;$1&&(y+=K-1,$+=K-1);U>0&&I>0&&!this._isCharWordSeparator(w.loadCell(U-1,this._workCell));){w.loadCell(U-1,this._workCell);const A=this._workCell.getChars().length;this._workCell.getWidth()===0?(W++,U--):A>1&&(b+=A-1,I-=A-1),I--,U--}for(;q1&&(y+=A-1,$+=A-1),$++,q++}}$++;let L=I+j-W+b,P=Math.min(this._bufferService.cols,$-I+W+m-b-y);if(S||T.slice(I,$).trim()!==""){if(E&&L===0&&w.getCodePoint(0)!==32){const U=x.lines.get(l[1]-1);if(U&&w.isWrapped&&U.getCodePoint(this._bufferService.cols-1)!==32){const q=this._getWordAt([this._bufferService.cols-1,l[1]-1],!1,!0,!1);if(q){const K=this._bufferService.cols-q.start;L-=K,P+=K}}}if(k&&L+P===this._bufferService.cols&&w.getCodePoint(this._bufferService.cols-1)!==32){const U=x.lines.get(l[1]+1);if(U?.isWrapped&&U.getCodePoint(0)!==32){const q=this._getWordAt([0,l[1]+1],!1,!1,!0);q&&(P+=q.length)}}return{start:L,length:P}}}_selectWordAt(l,S){const E=this._getWordAt(l,S);if(E){for(;E.start<0;)E.start+=this._bufferService.cols,l[1]--;this._model.selectionStart=[E.start,l[1]],this._model.selectionStartLength=E.length}}_selectToWordAt(l){const S=this._getWordAt(l,!0);if(S){let E=l[1];for(;S.start<0;)S.start+=this._bufferService.cols,E--;if(!this._model.areSelectionValuesReversed())for(;S.start+S.length>this._bufferService.cols;)S.length-=this._bufferService.cols,E++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?S.start:S.start+S.length,E]}}_isCharWordSeparator(l){return l.getWidth()!==0&&this._optionsService.rawOptions.wordSeparator.indexOf(l.getChars())>=0}_selectLineAt(l){const S=this._bufferService.buffer.getWrappedRangeForLine(l),E={start:{x:0,y:S.first},end:{x:this._bufferService.cols-1,y:S.last}};this._model.selectionStart=[0,S.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=(0,e.getRangeLength)(E,this._bufferService.cols)}};n.SelectionService=p=c([_(3,a.IBufferService),_(4,a.ICoreService),_(5,u.IMouseService),_(6,a.IOptionsService),_(7,u.IRenderService),_(8,u.ICoreBrowserService)],p)},4725:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.ILinkProviderService=n.IThemeService=n.ICharacterJoinerService=n.ISelectionService=n.IRenderService=n.IMouseService=n.ICoreBrowserService=n.ICharSizeService=void 0;const c=o(8343);n.ICharSizeService=(0,c.createDecorator)("CharSizeService"),n.ICoreBrowserService=(0,c.createDecorator)("CoreBrowserService"),n.IMouseService=(0,c.createDecorator)("MouseService"),n.IRenderService=(0,c.createDecorator)("RenderService"),n.ISelectionService=(0,c.createDecorator)("SelectionService"),n.ICharacterJoinerService=(0,c.createDecorator)("CharacterJoinerService"),n.IThemeService=(0,c.createDecorator)("ThemeService"),n.ILinkProviderService=(0,c.createDecorator)("LinkProviderService")},6731:function(O,n,o){var c=this&&this.__decorate||function(p,l,S,E){var k,x=arguments.length,w=x<3?l:E===null?E=Object.getOwnPropertyDescriptor(l,S):E;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")w=Reflect.decorate(p,l,S,E);else for(var T=p.length-1;T>=0;T--)(k=p[T])&&(w=(x<3?k(w):x>3?k(l,S,w):k(l,S))||w);return x>3&&w&&Object.defineProperty(l,S,w),w},_=this&&this.__param||function(p,l){return function(S,E){l(S,E,p)}};Object.defineProperty(n,"__esModule",{value:!0}),n.ThemeService=n.DEFAULT_ANSI_COLORS=void 0;const r=o(7239),d=o(8055),f=o(8460),u=o(844),h=o(2585),i=d.css.toColor("#ffffff"),s=d.css.toColor("#000000"),e=d.css.toColor("#ffffff"),t=d.css.toColor("#000000"),a={css:"rgba(255, 255, 255, 0.3)",rgba:4294967117};n.DEFAULT_ANSI_COLORS=Object.freeze((()=>{const p=[d.css.toColor("#2e3436"),d.css.toColor("#cc0000"),d.css.toColor("#4e9a06"),d.css.toColor("#c4a000"),d.css.toColor("#3465a4"),d.css.toColor("#75507b"),d.css.toColor("#06989a"),d.css.toColor("#d3d7cf"),d.css.toColor("#555753"),d.css.toColor("#ef2929"),d.css.toColor("#8ae234"),d.css.toColor("#fce94f"),d.css.toColor("#729fcf"),d.css.toColor("#ad7fa8"),d.css.toColor("#34e2e2"),d.css.toColor("#eeeeec")],l=[0,95,135,175,215,255];for(let S=0;S<216;S++){const E=l[S/36%6|0],k=l[S/6%6|0],x=l[S%6];p.push({css:d.channels.toCss(E,k,x),rgba:d.channels.toRgba(E,k,x)})}for(let S=0;S<24;S++){const E=8+10*S;p.push({css:d.channels.toCss(E,E,E),rgba:d.channels.toRgba(E,E,E)})}return p})());let g=n.ThemeService=class extends u.Disposable{get colors(){return this._colors}constructor(p){super(),this._optionsService=p,this._contrastCache=new r.ColorContrastCache,this._halfContrastCache=new r.ColorContrastCache,this._onChangeColors=this.register(new f.EventEmitter),this.onChangeColors=this._onChangeColors.event,this._colors={foreground:i,background:s,cursor:e,cursorAccent:t,selectionForeground:void 0,selectionBackgroundTransparent:a,selectionBackgroundOpaque:d.color.blend(s,a),selectionInactiveBackgroundTransparent:a,selectionInactiveBackgroundOpaque:d.color.blend(s,a),ansi:n.DEFAULT_ANSI_COLORS.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this.register(this._optionsService.onSpecificOptionChange("minimumContrastRatio",()=>this._contrastCache.clear())),this.register(this._optionsService.onSpecificOptionChange("theme",()=>this._setTheme(this._optionsService.rawOptions.theme)))}_setTheme(p={}){const l=this._colors;if(l.foreground=v(p.foreground,i),l.background=v(p.background,s),l.cursor=v(p.cursor,e),l.cursorAccent=v(p.cursorAccent,t),l.selectionBackgroundTransparent=v(p.selectionBackground,a),l.selectionBackgroundOpaque=d.color.blend(l.background,l.selectionBackgroundTransparent),l.selectionInactiveBackgroundTransparent=v(p.selectionInactiveBackground,l.selectionBackgroundTransparent),l.selectionInactiveBackgroundOpaque=d.color.blend(l.background,l.selectionInactiveBackgroundTransparent),l.selectionForeground=p.selectionForeground?v(p.selectionForeground,d.NULL_COLOR):void 0,l.selectionForeground===d.NULL_COLOR&&(l.selectionForeground=void 0),d.color.isOpaque(l.selectionBackgroundTransparent)&&(l.selectionBackgroundTransparent=d.color.opacity(l.selectionBackgroundTransparent,.3)),d.color.isOpaque(l.selectionInactiveBackgroundTransparent)&&(l.selectionInactiveBackgroundTransparent=d.color.opacity(l.selectionInactiveBackgroundTransparent,.3)),l.ansi=n.DEFAULT_ANSI_COLORS.slice(),l.ansi[0]=v(p.black,n.DEFAULT_ANSI_COLORS[0]),l.ansi[1]=v(p.red,n.DEFAULT_ANSI_COLORS[1]),l.ansi[2]=v(p.green,n.DEFAULT_ANSI_COLORS[2]),l.ansi[3]=v(p.yellow,n.DEFAULT_ANSI_COLORS[3]),l.ansi[4]=v(p.blue,n.DEFAULT_ANSI_COLORS[4]),l.ansi[5]=v(p.magenta,n.DEFAULT_ANSI_COLORS[5]),l.ansi[6]=v(p.cyan,n.DEFAULT_ANSI_COLORS[6]),l.ansi[7]=v(p.white,n.DEFAULT_ANSI_COLORS[7]),l.ansi[8]=v(p.brightBlack,n.DEFAULT_ANSI_COLORS[8]),l.ansi[9]=v(p.brightRed,n.DEFAULT_ANSI_COLORS[9]),l.ansi[10]=v(p.brightGreen,n.DEFAULT_ANSI_COLORS[10]),l.ansi[11]=v(p.brightYellow,n.DEFAULT_ANSI_COLORS[11]),l.ansi[12]=v(p.brightBlue,n.DEFAULT_ANSI_COLORS[12]),l.ansi[13]=v(p.brightMagenta,n.DEFAULT_ANSI_COLORS[13]),l.ansi[14]=v(p.brightCyan,n.DEFAULT_ANSI_COLORS[14]),l.ansi[15]=v(p.brightWhite,n.DEFAULT_ANSI_COLORS[15]),p.extendedAnsi){const S=Math.min(l.ansi.length-16,p.extendedAnsi.length);for(let E=0;E{Object.defineProperty(n,"__esModule",{value:!0}),n.CircularList=void 0;const c=o(8460),_=o(844);class r extends _.Disposable{constructor(f){super(),this._maxLength=f,this.onDeleteEmitter=this.register(new c.EventEmitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this.register(new c.EventEmitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this.register(new c.EventEmitter),this.onTrim=this.onTrimEmitter.event,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}get maxLength(){return this._maxLength}set maxLength(f){if(this._maxLength===f)return;const u=new Array(f);for(let h=0;hthis._length)for(let u=this._length;u=f;i--)this._array[this._getCyclicIndex(i+h.length)]=this._array[this._getCyclicIndex(i)];for(let i=0;ithis._maxLength){const i=this._length+h.length-this._maxLength;this._startIndex+=i,this._length=this._maxLength,this.onTrimEmitter.fire(i)}else this._length+=h.length}trimStart(f){f>this._length&&(f=this._length),this._startIndex+=f,this._length-=f,this.onTrimEmitter.fire(f)}shiftElements(f,u,h){if(!(u<=0)){if(f<0||f>=this._length)throw new Error("start argument out of range");if(f+h<0)throw new Error("Cannot shift elements in list beyond index 0");if(h>0){for(let s=u-1;s>=0;s--)this.set(f+s+h,this.get(f+s));const i=f+u+h-this._length;if(i>0)for(this._length+=i;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let i=0;i{Object.defineProperty(n,"__esModule",{value:!0}),n.clone=void 0,n.clone=function o(c,_=5){if(typeof c!="object")return c;const r=Array.isArray(c)?[]:{};for(const d in c)r[d]=_<=1?c[d]:c[d]&&o(c[d],_-1);return r}},8055:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.contrastRatio=n.toPaddedHex=n.rgba=n.rgb=n.css=n.color=n.channels=n.NULL_COLOR=void 0;let o=0,c=0,_=0,r=0;var d,f,u,h,i;function s(t){const a=t.toString(16);return a.length<2?"0"+a:a}function e(t,a){return t>>0},t.toColor=function(a,g,v,p){return{css:t.toCss(a,g,v,p),rgba:t.toRgba(a,g,v,p)}}}(d||(n.channels=d={})),function(t){function a(g,v){return r=Math.round(255*v),[o,c,_]=i.toChannels(g.rgba),{css:d.toCss(o,c,_,r),rgba:d.toRgba(o,c,_,r)}}t.blend=function(g,v){if(r=(255&v.rgba)/255,r===1)return{css:v.css,rgba:v.rgba};const p=v.rgba>>24&255,l=v.rgba>>16&255,S=v.rgba>>8&255,E=g.rgba>>24&255,k=g.rgba>>16&255,x=g.rgba>>8&255;return o=E+Math.round((p-E)*r),c=k+Math.round((l-k)*r),_=x+Math.round((S-x)*r),{css:d.toCss(o,c,_),rgba:d.toRgba(o,c,_)}},t.isOpaque=function(g){return(255&g.rgba)==255},t.ensureContrastRatio=function(g,v,p){const l=i.ensureContrastRatio(g.rgba,v.rgba,p);if(l)return d.toColor(l>>24&255,l>>16&255,l>>8&255)},t.opaque=function(g){const v=(255|g.rgba)>>>0;return[o,c,_]=i.toChannels(v),{css:d.toCss(o,c,_),rgba:v}},t.opacity=a,t.multiplyOpacity=function(g,v){return r=255&g.rgba,a(g,r*v/255)},t.toColorRGB=function(g){return[g.rgba>>24&255,g.rgba>>16&255,g.rgba>>8&255]}}(f||(n.color=f={})),function(t){let a,g;try{const v=document.createElement("canvas");v.width=1,v.height=1;const p=v.getContext("2d",{willReadFrequently:!0});p&&(a=p,a.globalCompositeOperation="copy",g=a.createLinearGradient(0,0,1,1))}catch{}t.toColor=function(v){if(v.match(/#[\da-f]{3,8}/i))switch(v.length){case 4:return o=parseInt(v.slice(1,2).repeat(2),16),c=parseInt(v.slice(2,3).repeat(2),16),_=parseInt(v.slice(3,4).repeat(2),16),d.toColor(o,c,_);case 5:return o=parseInt(v.slice(1,2).repeat(2),16),c=parseInt(v.slice(2,3).repeat(2),16),_=parseInt(v.slice(3,4).repeat(2),16),r=parseInt(v.slice(4,5).repeat(2),16),d.toColor(o,c,_,r);case 7:return{css:v,rgba:(parseInt(v.slice(1),16)<<8|255)>>>0};case 9:return{css:v,rgba:parseInt(v.slice(1),16)>>>0}}const p=v.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(p)return o=parseInt(p[1]),c=parseInt(p[2]),_=parseInt(p[3]),r=Math.round(255*(p[5]===void 0?1:parseFloat(p[5]))),d.toColor(o,c,_,r);if(!a||!g)throw new Error("css.toColor: Unsupported css format");if(a.fillStyle=g,a.fillStyle=v,typeof a.fillStyle!="string")throw new Error("css.toColor: Unsupported css format");if(a.fillRect(0,0,1,1),[o,c,_,r]=a.getImageData(0,0,1,1).data,r!==255)throw new Error("css.toColor: Unsupported css format");return{rgba:d.toRgba(o,c,_,r),css:v}}}(u||(n.css=u={})),function(t){function a(g,v,p){const l=g/255,S=v/255,E=p/255;return .2126*(l<=.03928?l/12.92:Math.pow((l+.055)/1.055,2.4))+.7152*(S<=.03928?S/12.92:Math.pow((S+.055)/1.055,2.4))+.0722*(E<=.03928?E/12.92:Math.pow((E+.055)/1.055,2.4))}t.relativeLuminance=function(g){return a(g>>16&255,g>>8&255,255&g)},t.relativeLuminance2=a}(h||(n.rgb=h={})),function(t){function a(v,p,l){const S=v>>24&255,E=v>>16&255,k=v>>8&255;let x=p>>24&255,w=p>>16&255,T=p>>8&255,I=e(h.relativeLuminance2(x,w,T),h.relativeLuminance2(S,E,k));for(;I0||w>0||T>0);)x-=Math.max(0,Math.ceil(.1*x)),w-=Math.max(0,Math.ceil(.1*w)),T-=Math.max(0,Math.ceil(.1*T)),I=e(h.relativeLuminance2(x,w,T),h.relativeLuminance2(S,E,k));return(x<<24|w<<16|T<<8|255)>>>0}function g(v,p,l){const S=v>>24&255,E=v>>16&255,k=v>>8&255;let x=p>>24&255,w=p>>16&255,T=p>>8&255,I=e(h.relativeLuminance2(x,w,T),h.relativeLuminance2(S,E,k));for(;I>>0}t.blend=function(v,p){if(r=(255&p)/255,r===1)return p;const l=p>>24&255,S=p>>16&255,E=p>>8&255,k=v>>24&255,x=v>>16&255,w=v>>8&255;return o=k+Math.round((l-k)*r),c=x+Math.round((S-x)*r),_=w+Math.round((E-w)*r),d.toRgba(o,c,_)},t.ensureContrastRatio=function(v,p,l){const S=h.relativeLuminance(v>>8),E=h.relativeLuminance(p>>8);if(e(S,E)>8));if(Te(S,h.relativeLuminance(I>>8))?w:I}return w}const k=g(v,p,l),x=e(S,h.relativeLuminance(k>>8));if(xe(S,h.relativeLuminance(w>>8))?k:w}return k}},t.reduceLuminance=a,t.increaseLuminance=g,t.toChannels=function(v){return[v>>24&255,v>>16&255,v>>8&255,255&v]}}(i||(n.rgba=i={})),n.toPaddedHex=s,n.contrastRatio=e},8969:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CoreTerminal=void 0;const c=o(844),_=o(2585),r=o(4348),d=o(7866),f=o(744),u=o(7302),h=o(6975),i=o(8460),s=o(1753),e=o(1480),t=o(7994),a=o(9282),g=o(5435),v=o(5981),p=o(2660);let l=!1;class S extends c.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this.register(new i.EventEmitter),this._onScroll.event(k=>{this._onScrollApi?.fire(k.position)})),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(k){for(const x in k)this.optionsService.options[x]=k[x]}constructor(k){super(),this._windowsWrappingHeuristics=this.register(new c.MutableDisposable),this._onBinary=this.register(new i.EventEmitter),this.onBinary=this._onBinary.event,this._onData=this.register(new i.EventEmitter),this.onData=this._onData.event,this._onLineFeed=this.register(new i.EventEmitter),this.onLineFeed=this._onLineFeed.event,this._onResize=this.register(new i.EventEmitter),this.onResize=this._onResize.event,this._onWriteParsed=this.register(new i.EventEmitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this.register(new i.EventEmitter),this._instantiationService=new r.InstantiationService,this.optionsService=this.register(new u.OptionsService(k)),this._instantiationService.setService(_.IOptionsService,this.optionsService),this._bufferService=this.register(this._instantiationService.createInstance(f.BufferService)),this._instantiationService.setService(_.IBufferService,this._bufferService),this._logService=this.register(this._instantiationService.createInstance(d.LogService)),this._instantiationService.setService(_.ILogService,this._logService),this.coreService=this.register(this._instantiationService.createInstance(h.CoreService)),this._instantiationService.setService(_.ICoreService,this.coreService),this.coreMouseService=this.register(this._instantiationService.createInstance(s.CoreMouseService)),this._instantiationService.setService(_.ICoreMouseService,this.coreMouseService),this.unicodeService=this.register(this._instantiationService.createInstance(e.UnicodeService)),this._instantiationService.setService(_.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(t.CharsetService),this._instantiationService.setService(_.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(p.OscLinkService),this._instantiationService.setService(_.IOscLinkService,this._oscLinkService),this._inputHandler=this.register(new g.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.coreMouseService,this.unicodeService)),this.register((0,i.forwardEvent)(this._inputHandler.onLineFeed,this._onLineFeed)),this.register(this._inputHandler),this.register((0,i.forwardEvent)(this._bufferService.onResize,this._onResize)),this.register((0,i.forwardEvent)(this.coreService.onData,this._onData)),this.register((0,i.forwardEvent)(this.coreService.onBinary,this._onBinary)),this.register(this.coreService.onRequestScrollToBottom(()=>this.scrollToBottom())),this.register(this.coreService.onUserInput(()=>this._writeBuffer.handleUserInput())),this.register(this.optionsService.onMultipleOptionChange(["windowsMode","windowsPty"],()=>this._handleWindowsPtyOptionChange())),this.register(this._bufferService.onScroll(x=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp,source:0}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)})),this.register(this._inputHandler.onScroll(x=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp,source:0}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)})),this._writeBuffer=this.register(new v.WriteBuffer((x,w)=>this._inputHandler.parse(x,w))),this.register((0,i.forwardEvent)(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(k,x){this._writeBuffer.write(k,x)}writeSync(k,x){this._logService.logLevel<=_.LogLevelEnum.WARN&&!l&&(this._logService.warn("writeSync is unreliable and will be removed soon."),l=!0),this._writeBuffer.writeSync(k,x)}input(k,x=!0){this.coreService.triggerDataEvent(k,x)}resize(k,x){isNaN(k)||isNaN(x)||(k=Math.max(k,f.MINIMUM_COLS),x=Math.max(x,f.MINIMUM_ROWS),this._bufferService.resize(k,x))}scroll(k,x=!1){this._bufferService.scroll(k,x)}scrollLines(k,x,w){this._bufferService.scrollLines(k,x,w)}scrollPages(k){this.scrollLines(k*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(k){const x=k-this._bufferService.buffer.ydisp;x!==0&&this.scrollLines(x)}registerEscHandler(k,x){return this._inputHandler.registerEscHandler(k,x)}registerDcsHandler(k,x){return this._inputHandler.registerDcsHandler(k,x)}registerCsiHandler(k,x){return this._inputHandler.registerCsiHandler(k,x)}registerOscHandler(k,x){return this._inputHandler.registerOscHandler(k,x)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()}_handleWindowsPtyOptionChange(){let k=!1;const x=this.optionsService.rawOptions.windowsPty;x&&x.buildNumber!==void 0&&x.buildNumber!==void 0?k=x.backend==="conpty"&&x.buildNumber<21376:this.optionsService.rawOptions.windowsMode&&(k=!0),k?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){const k=[];k.push(this.onLineFeed(a.updateWindowsModeWrappedState.bind(null,this._bufferService))),k.push(this.registerCsiHandler({final:"H"},()=>((0,a.updateWindowsModeWrappedState)(this._bufferService),!1))),this._windowsWrappingHeuristics.value=(0,c.toDisposable)(()=>{for(const x of k)x.dispose()})}}}n.CoreTerminal=S},8460:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.runAndSubscribe=n.forwardEvent=n.EventEmitter=void 0,n.EventEmitter=class{constructor(){this._listeners=[],this._disposed=!1}get event(){return this._event||(this._event=o=>(this._listeners.push(o),{dispose:()=>{if(!this._disposed){for(let c=0;cc.fire(_))},n.runAndSubscribe=function(o,c){return c(void 0),o(_=>c(_))}},5435:function(O,n,o){var c=this&&this.__decorate||function(W,m,b,y){var L,P=arguments.length,U=P<3?m:y===null?y=Object.getOwnPropertyDescriptor(m,b):y;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")U=Reflect.decorate(W,m,b,y);else for(var q=W.length-1;q>=0;q--)(L=W[q])&&(U=(P<3?L(U):P>3?L(m,b,U):L(m,b))||U);return P>3&&U&&Object.defineProperty(m,b,U),U},_=this&&this.__param||function(W,m){return function(b,y){m(b,y,W)}};Object.defineProperty(n,"__esModule",{value:!0}),n.InputHandler=n.WindowsOptionsReportType=void 0;const r=o(2584),d=o(7116),f=o(2015),u=o(844),h=o(482),i=o(8437),s=o(8460),e=o(643),t=o(511),a=o(3734),g=o(2585),v=o(1480),p=o(6242),l=o(6351),S=o(5941),E={"(":0,")":1,"*":2,"+":3,"-":1,".":2},k=131072;function x(W,m){if(W>24)return m.setWinLines||!1;switch(W){case 1:return!!m.restoreWin;case 2:return!!m.minimizeWin;case 3:return!!m.setWinPosition;case 4:return!!m.setWinSizePixels;case 5:return!!m.raiseWin;case 6:return!!m.lowerWin;case 7:return!!m.refreshWin;case 8:return!!m.setWinSizeChars;case 9:return!!m.maximizeWin;case 10:return!!m.fullscreenWin;case 11:return!!m.getWinState;case 13:return!!m.getWinPosition;case 14:return!!m.getWinSizePixels;case 15:return!!m.getScreenSizePixels;case 16:return!!m.getCellSizePixels;case 18:return!!m.getWinSizeChars;case 19:return!!m.getScreenSizeChars;case 20:return!!m.getIconTitle;case 21:return!!m.getWinTitle;case 22:return!!m.pushTitle;case 23:return!!m.popTitle;case 24:return!!m.setWinLines}return!1}var w;(function(W){W[W.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",W[W.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"})(w||(n.WindowsOptionsReportType=w={}));let T=0;class I extends u.Disposable{getAttrData(){return this._curAttrData}constructor(m,b,y,L,P,U,q,K,A=new f.EscapeSequenceParser){super(),this._bufferService=m,this._charsetService=b,this._coreService=y,this._logService=L,this._optionsService=P,this._oscLinkService=U,this._coreMouseService=q,this._unicodeService=K,this._parser=A,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new h.StringToUtf32,this._utf8Decoder=new h.Utf8ToUtf32,this._workCell=new t.CellData,this._windowTitle="",this._iconName="",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=i.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=i.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this.register(new s.EventEmitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this.register(new s.EventEmitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this.register(new s.EventEmitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this.register(new s.EventEmitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this.register(new s.EventEmitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this.register(new s.EventEmitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this.register(new s.EventEmitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this.register(new s.EventEmitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this.register(new s.EventEmitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this.register(new s.EventEmitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this.register(new s.EventEmitter),this.onScroll=this._onScroll.event,this._onTitleChange=this.register(new s.EventEmitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this.register(new s.EventEmitter),this.onColor=this._onColor.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this.register(this._parser),this._dirtyRowTracker=new $(this._bufferService),this._activeBuffer=this._bufferService.buffer,this.register(this._bufferService.buffers.onBufferActivate(C=>this._activeBuffer=C.activeBuffer)),this._parser.setCsiHandlerFallback((C,M)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(C),params:M.toArray()})}),this._parser.setEscHandlerFallback(C=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(C)})}),this._parser.setExecuteHandlerFallback(C=>{this._logService.debug("Unknown EXECUTE code: ",{code:C})}),this._parser.setOscHandlerFallback((C,M,H)=>{this._logService.debug("Unknown OSC code: ",{identifier:C,action:M,data:H})}),this._parser.setDcsHandlerFallback((C,M,H)=>{M==="HOOK"&&(H=H.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(C),action:M,payload:H})}),this._parser.setPrintHandler((C,M,H)=>this.print(C,M,H)),this._parser.registerCsiHandler({final:"@"},C=>this.insertChars(C)),this._parser.registerCsiHandler({intermediates:" ",final:"@"},C=>this.scrollLeft(C)),this._parser.registerCsiHandler({final:"A"},C=>this.cursorUp(C)),this._parser.registerCsiHandler({intermediates:" ",final:"A"},C=>this.scrollRight(C)),this._parser.registerCsiHandler({final:"B"},C=>this.cursorDown(C)),this._parser.registerCsiHandler({final:"C"},C=>this.cursorForward(C)),this._parser.registerCsiHandler({final:"D"},C=>this.cursorBackward(C)),this._parser.registerCsiHandler({final:"E"},C=>this.cursorNextLine(C)),this._parser.registerCsiHandler({final:"F"},C=>this.cursorPrecedingLine(C)),this._parser.registerCsiHandler({final:"G"},C=>this.cursorCharAbsolute(C)),this._parser.registerCsiHandler({final:"H"},C=>this.cursorPosition(C)),this._parser.registerCsiHandler({final:"I"},C=>this.cursorForwardTab(C)),this._parser.registerCsiHandler({final:"J"},C=>this.eraseInDisplay(C,!1)),this._parser.registerCsiHandler({prefix:"?",final:"J"},C=>this.eraseInDisplay(C,!0)),this._parser.registerCsiHandler({final:"K"},C=>this.eraseInLine(C,!1)),this._parser.registerCsiHandler({prefix:"?",final:"K"},C=>this.eraseInLine(C,!0)),this._parser.registerCsiHandler({final:"L"},C=>this.insertLines(C)),this._parser.registerCsiHandler({final:"M"},C=>this.deleteLines(C)),this._parser.registerCsiHandler({final:"P"},C=>this.deleteChars(C)),this._parser.registerCsiHandler({final:"S"},C=>this.scrollUp(C)),this._parser.registerCsiHandler({final:"T"},C=>this.scrollDown(C)),this._parser.registerCsiHandler({final:"X"},C=>this.eraseChars(C)),this._parser.registerCsiHandler({final:"Z"},C=>this.cursorBackwardTab(C)),this._parser.registerCsiHandler({final:"`"},C=>this.charPosAbsolute(C)),this._parser.registerCsiHandler({final:"a"},C=>this.hPositionRelative(C)),this._parser.registerCsiHandler({final:"b"},C=>this.repeatPrecedingCharacter(C)),this._parser.registerCsiHandler({final:"c"},C=>this.sendDeviceAttributesPrimary(C)),this._parser.registerCsiHandler({prefix:">",final:"c"},C=>this.sendDeviceAttributesSecondary(C)),this._parser.registerCsiHandler({final:"d"},C=>this.linePosAbsolute(C)),this._parser.registerCsiHandler({final:"e"},C=>this.vPositionRelative(C)),this._parser.registerCsiHandler({final:"f"},C=>this.hVPosition(C)),this._parser.registerCsiHandler({final:"g"},C=>this.tabClear(C)),this._parser.registerCsiHandler({final:"h"},C=>this.setMode(C)),this._parser.registerCsiHandler({prefix:"?",final:"h"},C=>this.setModePrivate(C)),this._parser.registerCsiHandler({final:"l"},C=>this.resetMode(C)),this._parser.registerCsiHandler({prefix:"?",final:"l"},C=>this.resetModePrivate(C)),this._parser.registerCsiHandler({final:"m"},C=>this.charAttributes(C)),this._parser.registerCsiHandler({final:"n"},C=>this.deviceStatus(C)),this._parser.registerCsiHandler({prefix:"?",final:"n"},C=>this.deviceStatusPrivate(C)),this._parser.registerCsiHandler({intermediates:"!",final:"p"},C=>this.softReset(C)),this._parser.registerCsiHandler({intermediates:" ",final:"q"},C=>this.setCursorStyle(C)),this._parser.registerCsiHandler({final:"r"},C=>this.setScrollRegion(C)),this._parser.registerCsiHandler({final:"s"},C=>this.saveCursor(C)),this._parser.registerCsiHandler({final:"t"},C=>this.windowOptions(C)),this._parser.registerCsiHandler({final:"u"},C=>this.restoreCursor(C)),this._parser.registerCsiHandler({intermediates:"'",final:"}"},C=>this.insertColumns(C)),this._parser.registerCsiHandler({intermediates:"'",final:"~"},C=>this.deleteColumns(C)),this._parser.registerCsiHandler({intermediates:'"',final:"q"},C=>this.selectProtected(C)),this._parser.registerCsiHandler({intermediates:"$",final:"p"},C=>this.requestMode(C,!0)),this._parser.registerCsiHandler({prefix:"?",intermediates:"$",final:"p"},C=>this.requestMode(C,!1)),this._parser.setExecuteHandler(r.C0.BEL,()=>this.bell()),this._parser.setExecuteHandler(r.C0.LF,()=>this.lineFeed()),this._parser.setExecuteHandler(r.C0.VT,()=>this.lineFeed()),this._parser.setExecuteHandler(r.C0.FF,()=>this.lineFeed()),this._parser.setExecuteHandler(r.C0.CR,()=>this.carriageReturn()),this._parser.setExecuteHandler(r.C0.BS,()=>this.backspace()),this._parser.setExecuteHandler(r.C0.HT,()=>this.tab()),this._parser.setExecuteHandler(r.C0.SO,()=>this.shiftOut()),this._parser.setExecuteHandler(r.C0.SI,()=>this.shiftIn()),this._parser.setExecuteHandler(r.C1.IND,()=>this.index()),this._parser.setExecuteHandler(r.C1.NEL,()=>this.nextLine()),this._parser.setExecuteHandler(r.C1.HTS,()=>this.tabSet()),this._parser.registerOscHandler(0,new p.OscHandler(C=>(this.setTitle(C),this.setIconName(C),!0))),this._parser.registerOscHandler(1,new p.OscHandler(C=>this.setIconName(C))),this._parser.registerOscHandler(2,new p.OscHandler(C=>this.setTitle(C))),this._parser.registerOscHandler(4,new p.OscHandler(C=>this.setOrReportIndexedColor(C))),this._parser.registerOscHandler(8,new p.OscHandler(C=>this.setHyperlink(C))),this._parser.registerOscHandler(10,new p.OscHandler(C=>this.setOrReportFgColor(C))),this._parser.registerOscHandler(11,new p.OscHandler(C=>this.setOrReportBgColor(C))),this._parser.registerOscHandler(12,new p.OscHandler(C=>this.setOrReportCursorColor(C))),this._parser.registerOscHandler(104,new p.OscHandler(C=>this.restoreIndexedColor(C))),this._parser.registerOscHandler(110,new p.OscHandler(C=>this.restoreFgColor(C))),this._parser.registerOscHandler(111,new p.OscHandler(C=>this.restoreBgColor(C))),this._parser.registerOscHandler(112,new p.OscHandler(C=>this.restoreCursorColor(C))),this._parser.registerEscHandler({final:"7"},()=>this.saveCursor()),this._parser.registerEscHandler({final:"8"},()=>this.restoreCursor()),this._parser.registerEscHandler({final:"D"},()=>this.index()),this._parser.registerEscHandler({final:"E"},()=>this.nextLine()),this._parser.registerEscHandler({final:"H"},()=>this.tabSet()),this._parser.registerEscHandler({final:"M"},()=>this.reverseIndex()),this._parser.registerEscHandler({final:"="},()=>this.keypadApplicationMode()),this._parser.registerEscHandler({final:">"},()=>this.keypadNumericMode()),this._parser.registerEscHandler({final:"c"},()=>this.fullReset()),this._parser.registerEscHandler({final:"n"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"o"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"|"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"}"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"~"},()=>this.setgLevel(1)),this._parser.registerEscHandler({intermediates:"%",final:"@"},()=>this.selectDefaultCharset()),this._parser.registerEscHandler({intermediates:"%",final:"G"},()=>this.selectDefaultCharset());for(const C in d.CHARSETS)this._parser.registerEscHandler({intermediates:"(",final:C},()=>this.selectCharset("("+C)),this._parser.registerEscHandler({intermediates:")",final:C},()=>this.selectCharset(")"+C)),this._parser.registerEscHandler({intermediates:"*",final:C},()=>this.selectCharset("*"+C)),this._parser.registerEscHandler({intermediates:"+",final:C},()=>this.selectCharset("+"+C)),this._parser.registerEscHandler({intermediates:"-",final:C},()=>this.selectCharset("-"+C)),this._parser.registerEscHandler({intermediates:".",final:C},()=>this.selectCharset("."+C)),this._parser.registerEscHandler({intermediates:"/",final:C},()=>this.selectCharset("/"+C));this._parser.registerEscHandler({intermediates:"#",final:"8"},()=>this.screenAlignmentPattern()),this._parser.setErrorHandler(C=>(this._logService.error("Parsing error: ",C),C)),this._parser.registerDcsHandler({intermediates:"$",final:"q"},new l.DcsHandler((C,M)=>this.requestStatusString(C,M)))}_preserveStack(m,b,y,L){this._parseStack.paused=!0,this._parseStack.cursorStartX=m,this._parseStack.cursorStartY=b,this._parseStack.decodedLength=y,this._parseStack.position=L}_logSlowResolvingAsync(m){this._logService.logLevel<=g.LogLevelEnum.WARN&&Promise.race([m,new Promise((b,y)=>setTimeout(()=>y("#SLOW_TIMEOUT"),5e3))]).catch(b=>{if(b!=="#SLOW_TIMEOUT")throw b;console.warn("async parser handler taking longer than 5000 ms")})}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(m,b){let y,L=this._activeBuffer.x,P=this._activeBuffer.y,U=0;const q=this._parseStack.paused;if(q){if(y=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,b))return this._logSlowResolvingAsync(y),y;L=this._parseStack.cursorStartX,P=this._parseStack.cursorStartY,this._parseStack.paused=!1,m.length>k&&(U=this._parseStack.position+k)}if(this._logService.logLevel<=g.LogLevelEnum.DEBUG&&this._logService.debug("parsing data"+(typeof m=="string"?` "${m}"`:` "${Array.prototype.map.call(m,C=>String.fromCharCode(C)).join("")}"`),typeof m=="string"?m.split("").map(C=>C.charCodeAt(0)):m),this._parseBuffer.lengthk)for(let C=U;C0&&H.getWidth(this._activeBuffer.x-1)===2&&H.setCellFromCodepoint(this._activeBuffer.x-1,0,1,M);let z=this._parser.precedingJoinState;for(let N=b;NK){if(A){const le=H;let V=this._activeBuffer.x-ee;for(this._activeBuffer.x=ee,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),H=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),ee>0&&H instanceof i.BufferLine&&H.copyCellsFrom(le,V,0,ee,!1);V=0;)H.setCellFromCodepoint(this._activeBuffer.x++,0,0,M)}else if(C&&(H.insertCells(this._activeBuffer.x,P-ee,this._activeBuffer.getNullCell(M)),H.getWidth(K-1)===2&&H.setCellFromCodepoint(K-1,e.NULL_CELL_CODE,e.NULL_CELL_WIDTH,M)),H.setCellFromCodepoint(this._activeBuffer.x++,L,P,M),P>0)for(;--P;)H.setCellFromCodepoint(this._activeBuffer.x++,0,0,M)}this._parser.precedingJoinState=z,this._activeBuffer.x0&&H.getWidth(this._activeBuffer.x)===0&&!H.hasContent(this._activeBuffer.x)&&H.setCellFromCodepoint(this._activeBuffer.x,0,1,M),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(m,b){return m.final!=="t"||m.prefix||m.intermediates?this._parser.registerCsiHandler(m,b):this._parser.registerCsiHandler(m,y=>!x(y.params[0],this._optionsService.rawOptions.windowOptions)||b(y))}registerDcsHandler(m,b){return this._parser.registerDcsHandler(m,new l.DcsHandler(b))}registerEscHandler(m,b){return this._parser.registerEscHandler(m,b)}registerOscHandler(m,b){return this._parser.registerOscHandler(m,new p.OscHandler(b))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(this._activeBuffer.x===0&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;const m=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);m.hasWidth(this._activeBuffer.x)&&!m.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;const m=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-m),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(m=this._bufferService.cols-1){this._activeBuffer.x=Math.min(m,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(m,b){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=m,this._activeBuffer.y=this._activeBuffer.scrollTop+b):(this._activeBuffer.x=m,this._activeBuffer.y=b),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(m,b){this._restrictCursor(),this._setCursor(this._activeBuffer.x+m,this._activeBuffer.y+b)}cursorUp(m){const b=this._activeBuffer.y-this._activeBuffer.scrollTop;return b>=0?this._moveCursor(0,-Math.min(b,m.params[0]||1)):this._moveCursor(0,-(m.params[0]||1)),!0}cursorDown(m){const b=this._activeBuffer.scrollBottom-this._activeBuffer.y;return b>=0?this._moveCursor(0,Math.min(b,m.params[0]||1)):this._moveCursor(0,m.params[0]||1),!0}cursorForward(m){return this._moveCursor(m.params[0]||1,0),!0}cursorBackward(m){return this._moveCursor(-(m.params[0]||1),0),!0}cursorNextLine(m){return this.cursorDown(m),this._activeBuffer.x=0,!0}cursorPrecedingLine(m){return this.cursorUp(m),this._activeBuffer.x=0,!0}cursorCharAbsolute(m){return this._setCursor((m.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(m){return this._setCursor(m.length>=2?(m.params[1]||1)-1:0,(m.params[0]||1)-1),!0}charPosAbsolute(m){return this._setCursor((m.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(m){return this._moveCursor(m.params[0]||1,0),!0}linePosAbsolute(m){return this._setCursor(this._activeBuffer.x,(m.params[0]||1)-1),!0}vPositionRelative(m){return this._moveCursor(0,m.params[0]||1),!0}hVPosition(m){return this.cursorPosition(m),!0}tabClear(m){const b=m.params[0];return b===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:b===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(m){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let b=m.params[0]||1;for(;b--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(m){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let b=m.params[0]||1;for(;b--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(m){const b=m.params[0];return b===1&&(this._curAttrData.bg|=536870912),b!==2&&b!==0||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(m,b,y,L=!1,P=!1){const U=this._activeBuffer.lines.get(this._activeBuffer.ybase+m);U.replaceCells(b,y,this._activeBuffer.getNullCell(this._eraseAttrData()),P),L&&(U.isWrapped=!1)}_resetBufferLine(m,b=!1){const y=this._activeBuffer.lines.get(this._activeBuffer.ybase+m);y&&(y.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),b),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+m),y.isWrapped=!1)}eraseInDisplay(m,b=!1){let y;switch(this._restrictCursor(this._bufferService.cols),m.params[0]){case 0:for(y=this._activeBuffer.y,this._dirtyRowTracker.markDirty(y),this._eraseInBufferLine(y++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,b);y=this._bufferService.cols&&(this._activeBuffer.lines.get(y+1).isWrapped=!1);y--;)this._resetBufferLine(y,b);this._dirtyRowTracker.markDirty(0);break;case 2:for(y=this._bufferService.rows,this._dirtyRowTracker.markDirty(y-1);y--;)this._resetBufferLine(y,b);this._dirtyRowTracker.markDirty(0);break;case 3:const L=this._activeBuffer.lines.length-this._bufferService.rows;L>0&&(this._activeBuffer.lines.trimStart(L),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-L,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-L,0),this._onScroll.fire(0))}return!0}eraseInLine(m,b=!1){switch(this._restrictCursor(this._bufferService.cols),m.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,b);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,b);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,b)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(m){this._restrictCursor();let b=m.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.y65535?2:1}let A=K;for(let C=1;C0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent(r.C0.ESC+"[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent(r.C0.ESC+"[?6c")),!0}sendDeviceAttributesSecondary(m){return m.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent(r.C0.ESC+"[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent(r.C0.ESC+"[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(m.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent(r.C0.ESC+"[>83;40003;0c")),!0}_is(m){return(this._optionsService.rawOptions.termName+"").indexOf(m)===0}setMode(m){for(let b=0;bse?1:2,z=m.params[0];return N=z,J=b?z===2?4:z===4?H(U.modes.insertMode):z===12?3:z===20?H(M.convertEol):0:z===1?H(y.applicationCursorKeys):z===3?M.windowOptions.setWinLines?K===80?2:K===132?1:0:0:z===6?H(y.origin):z===7?H(y.wraparound):z===8?3:z===9?H(L==="X10"):z===12?H(M.cursorBlink):z===25?H(!U.isCursorHidden):z===45?H(y.reverseWraparound):z===66?H(y.applicationKeypad):z===67?4:z===1e3?H(L==="VT200"):z===1002?H(L==="DRAG"):z===1003?H(L==="ANY"):z===1004?H(y.sendFocus):z===1005?4:z===1006?H(P==="SGR"):z===1015?4:z===1016?H(P==="SGR_PIXELS"):z===1048?1:z===47||z===1047||z===1049?H(A===C):z===2004?H(y.bracketedPasteMode):0,U.triggerDataEvent(`${r.C0.ESC}[${b?"":"?"}${N};${J}$y`),!0;var N,J}_updateAttrColor(m,b,y,L,P){return b===2?(m|=50331648,m&=-16777216,m|=a.AttributeData.fromColorRGB([y,L,P])):b===5&&(m&=-50331904,m|=33554432|255&y),m}_extractColor(m,b,y){const L=[0,0,-1,0,0,0];let P=0,U=0;do{if(L[U+P]=m.params[b+U],m.hasSubParams(b+U)){const q=m.getSubParams(b+U);let K=0;do L[1]===5&&(P=1),L[U+K+1+P]=q[K];while(++K=2||L[1]===2&&U+P>=5)break;L[1]&&(P=1)}while(++U+b5)&&(m=1),b.extended.underlineStyle=m,b.fg|=268435456,m===0&&(b.fg&=-268435457),b.updateExtended()}_processSGR0(m){m.fg=i.DEFAULT_ATTR_DATA.fg,m.bg=i.DEFAULT_ATTR_DATA.bg,m.extended=m.extended.clone(),m.extended.underlineStyle=0,m.extended.underlineColor&=-67108864,m.updateExtended()}charAttributes(m){if(m.length===1&&m.params[0]===0)return this._processSGR0(this._curAttrData),!0;const b=m.length;let y;const L=this._curAttrData;for(let P=0;P=30&&y<=37?(L.fg&=-50331904,L.fg|=16777216|y-30):y>=40&&y<=47?(L.bg&=-50331904,L.bg|=16777216|y-40):y>=90&&y<=97?(L.fg&=-50331904,L.fg|=16777224|y-90):y>=100&&y<=107?(L.bg&=-50331904,L.bg|=16777224|y-100):y===0?this._processSGR0(L):y===1?L.fg|=134217728:y===3?L.bg|=67108864:y===4?(L.fg|=268435456,this._processUnderline(m.hasSubParams(P)?m.getSubParams(P)[0]:1,L)):y===5?L.fg|=536870912:y===7?L.fg|=67108864:y===8?L.fg|=1073741824:y===9?L.fg|=2147483648:y===2?L.bg|=134217728:y===21?this._processUnderline(2,L):y===22?(L.fg&=-134217729,L.bg&=-134217729):y===23?L.bg&=-67108865:y===24?(L.fg&=-268435457,this._processUnderline(0,L)):y===25?L.fg&=-536870913:y===27?L.fg&=-67108865:y===28?L.fg&=-1073741825:y===29?L.fg&=2147483647:y===39?(L.fg&=-67108864,L.fg|=16777215&i.DEFAULT_ATTR_DATA.fg):y===49?(L.bg&=-67108864,L.bg|=16777215&i.DEFAULT_ATTR_DATA.bg):y===38||y===48||y===58?P+=this._extractColor(m,P,L):y===53?L.bg|=1073741824:y===55?L.bg&=-1073741825:y===59?(L.extended=L.extended.clone(),L.extended.underlineColor=-1,L.updateExtended()):y===100?(L.fg&=-67108864,L.fg|=16777215&i.DEFAULT_ATTR_DATA.fg,L.bg&=-67108864,L.bg|=16777215&i.DEFAULT_ATTR_DATA.bg):this._logService.debug("Unknown SGR attribute: %d.",y);return!0}deviceStatus(m){switch(m.params[0]){case 5:this._coreService.triggerDataEvent(`${r.C0.ESC}[0n`);break;case 6:const b=this._activeBuffer.y+1,y=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${r.C0.ESC}[${b};${y}R`)}return!0}deviceStatusPrivate(m){if(m.params[0]===6){const b=this._activeBuffer.y+1,y=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${r.C0.ESC}[?${b};${y}R`)}return!0}softReset(m){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=i.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(m){const b=m.params[0]||1;switch(b){case 1:case 2:this._optionsService.options.cursorStyle="block";break;case 3:case 4:this._optionsService.options.cursorStyle="underline";break;case 5:case 6:this._optionsService.options.cursorStyle="bar"}const y=b%2==1;return this._optionsService.options.cursorBlink=y,!0}setScrollRegion(m){const b=m.params[0]||1;let y;return(m.length<2||(y=m.params[1])>this._bufferService.rows||y===0)&&(y=this._bufferService.rows),y>b&&(this._activeBuffer.scrollTop=b-1,this._activeBuffer.scrollBottom=y-1,this._setCursor(0,0)),!0}windowOptions(m){if(!x(m.params[0],this._optionsService.rawOptions.windowOptions))return!0;const b=m.length>1?m.params[1]:0;switch(m.params[0]){case 14:b!==2&&this._onRequestWindowsOptionsReport.fire(w.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(w.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`${r.C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:b!==0&&b!==2||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),b!==0&&b!==1||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:b!==0&&b!==2||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),b!==0&&b!==1||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(m){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,!0}restoreCursor(m){return this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg,this._charsetService.charset=this._savedCharset,this._activeBuffer.savedCharset&&(this._charsetService.charset=this._activeBuffer.savedCharset),this._restrictCursor(),!0}setTitle(m){return this._windowTitle=m,this._onTitleChange.fire(m),!0}setIconName(m){return this._iconName=m,!0}setOrReportIndexedColor(m){const b=[],y=m.split(";");for(;y.length>1;){const L=y.shift(),P=y.shift();if(/^\d+$/.exec(L)){const U=parseInt(L);if(j(U))if(P==="?")b.push({type:0,index:U});else{const q=(0,S.parseColor)(P);q&&b.push({type:1,index:U,color:q})}}}return b.length&&this._onColor.fire(b),!0}setHyperlink(m){const b=m.split(";");return!(b.length<2)&&(b[1]?this._createHyperlink(b[0],b[1]):!b[0]&&this._finishHyperlink())}_createHyperlink(m,b){this._getCurrentLinkId()&&this._finishHyperlink();const y=m.split(":");let L;const P=y.findIndex(U=>U.startsWith("id="));return P!==-1&&(L=y[P].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:L,uri:b}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(m,b){const y=m.split(";");for(let L=0;L=this._specialColors.length);++L,++b)if(y[L]==="?")this._onColor.fire([{type:0,index:this._specialColors[b]}]);else{const P=(0,S.parseColor)(y[L]);P&&this._onColor.fire([{type:1,index:this._specialColors[b],color:P}])}return!0}setOrReportFgColor(m){return this._setOrReportSpecialColor(m,0)}setOrReportBgColor(m){return this._setOrReportSpecialColor(m,1)}setOrReportCursorColor(m){return this._setOrReportSpecialColor(m,2)}restoreIndexedColor(m){if(!m)return this._onColor.fire([{type:2}]),!0;const b=[],y=m.split(";");for(let L=0;L=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){const m=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,m,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=i.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=i.DEFAULT_ATTR_DATA.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal}setgLevel(m){return this._charsetService.setgLevel(m),!0}screenAlignmentPattern(){const m=new t.CellData;m.content=4194373,m.fg=this._curAttrData.fg,m.bg=this._curAttrData.bg,this._setCursor(0,0);for(let b=0;b(this._coreService.triggerDataEvent(`${r.C0.ESC}${P}${r.C0.ESC}\\`),!0))(m==='"q'?`P1$r${this._curAttrData.isProtected()?1:0}"q`:m==='"p'?'P1$r61;1"p':m==="r"?`P1$r${y.scrollTop+1};${y.scrollBottom+1}r`:m==="m"?"P1$r0m":m===" q"?`P1$r${{block:2,underline:4,bar:6}[L.cursorStyle]-(L.cursorBlink?1:0)} q`:"P0$r")}markRangeDirty(m,b){this._dirtyRowTracker.markRangeDirty(m,b)}}n.InputHandler=I;let $=class{constructor(W){this._bufferService=W,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(W){Wthis.end&&(this.end=W)}markRangeDirty(W,m){W>m&&(T=W,W=m,m=T),Wthis.end&&(this.end=m)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function j(W){return 0<=W&&W<256}$=c([_(0,g.IBufferService)],$)},844:(O,n)=>{function o(c){for(const _ of c)_.dispose();c.length=0}Object.defineProperty(n,"__esModule",{value:!0}),n.getDisposeArrayDisposable=n.disposeArray=n.toDisposable=n.MutableDisposable=n.Disposable=void 0,n.Disposable=class{constructor(){this._disposables=[],this._isDisposed=!1}dispose(){this._isDisposed=!0;for(const c of this._disposables)c.dispose();this._disposables.length=0}register(c){return this._disposables.push(c),c}unregister(c){const _=this._disposables.indexOf(c);_!==-1&&this._disposables.splice(_,1)}},n.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(c){this._isDisposed||c===this._value||(this._value?.dispose(),this._value=c)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}},n.toDisposable=function(c){return{dispose:c}},n.disposeArray=o,n.getDisposeArrayDisposable=function(c){return{dispose:()=>o(c)}}},1505:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.FourKeyMap=n.TwoKeyMap=void 0;class o{constructor(){this._data={}}set(_,r,d){this._data[_]||(this._data[_]={}),this._data[_][r]=d}get(_,r){return this._data[_]?this._data[_][r]:void 0}clear(){this._data={}}}n.TwoKeyMap=o,n.FourKeyMap=class{constructor(){this._data=new o}set(c,_,r,d,f){this._data.get(c,_)||this._data.set(c,_,new o),this._data.get(c,_).set(r,d,f)}get(c,_,r,d){return this._data.get(c,_)?.get(r,d)}clear(){this._data.clear()}}},6114:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.isChromeOS=n.isLinux=n.isWindows=n.isIphone=n.isIpad=n.isMac=n.getSafariVersion=n.isSafari=n.isLegacyEdge=n.isFirefox=n.isNode=void 0,n.isNode=typeof process<"u"&&"title"in process;const o=n.isNode?"node":navigator.userAgent,c=n.isNode?"node":navigator.platform;n.isFirefox=o.includes("Firefox"),n.isLegacyEdge=o.includes("Edge"),n.isSafari=/^((?!chrome|android).)*safari/i.test(o),n.getSafariVersion=function(){if(!n.isSafari)return 0;const _=o.match(/Version\/(\d+)/);return _===null||_.length<2?0:parseInt(_[1])},n.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(c),n.isIpad=c==="iPad",n.isIphone=c==="iPhone",n.isWindows=["Windows","Win16","Win32","WinCE"].includes(c),n.isLinux=c.indexOf("Linux")>=0,n.isChromeOS=/\bCrOS\b/.test(o)},6106:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.SortedList=void 0;let o=0;n.SortedList=class{constructor(c){this._getKey=c,this._array=[]}clear(){this._array.length=0}insert(c){this._array.length!==0?(o=this._search(this._getKey(c)),this._array.splice(o,0,c)):this._array.push(c)}delete(c){if(this._array.length===0)return!1;const _=this._getKey(c);if(_===void 0||(o=this._search(_),o===-1)||this._getKey(this._array[o])!==_)return!1;do if(this._array[o]===c)return this._array.splice(o,1),!0;while(++o=this._array.length)&&this._getKey(this._array[o])===c))do yield this._array[o];while(++o=this._array.length)&&this._getKey(this._array[o])===c))do _(this._array[o]);while(++o=_;){let d=_+r>>1;const f=this._getKey(this._array[d]);if(f>c)r=d-1;else{if(!(f0&&this._getKey(this._array[d-1])===c;)d--;return d}_=d+1}}return _}}},7226:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.DebouncedIdleTask=n.IdleTaskQueue=n.PriorityTaskQueue=void 0;const c=o(6114);class _{constructor(){this._tasks=[],this._i=0}enqueue(f){this._tasks.push(f),this._start()}flush(){for(;this._is)return i-u<-20&&console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(i-u))}ms`),void this._start();i=s}this.clear()}}class r extends _{_requestCallback(f){return setTimeout(()=>f(this._createDeadline(16)))}_cancelCallback(f){clearTimeout(f)}_createDeadline(f){const u=Date.now()+f;return{timeRemaining:()=>Math.max(0,u-Date.now())}}}n.PriorityTaskQueue=r,n.IdleTaskQueue=!c.isNode&&"requestIdleCallback"in window?class extends _{_requestCallback(d){return requestIdleCallback(d)}_cancelCallback(d){cancelIdleCallback(d)}}:r,n.DebouncedIdleTask=class{constructor(){this._queue=new n.IdleTaskQueue}set(d){this._queue.clear(),this._queue.enqueue(d)}flush(){this._queue.flush()}}},9282:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.updateWindowsModeWrappedState=void 0;const c=o(643);n.updateWindowsModeWrappedState=function(_){const r=_.buffer.lines.get(_.buffer.ybase+_.buffer.y-1),d=r?.get(_.cols-1),f=_.buffer.lines.get(_.buffer.ybase+_.buffer.y);f&&d&&(f.isWrapped=d[c.CHAR_DATA_CODE_INDEX]!==c.NULL_CELL_CODE&&d[c.CHAR_DATA_CODE_INDEX]!==c.WHITESPACE_CELL_CODE)}},3734:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.ExtendedAttrs=n.AttributeData=void 0;class o{constructor(){this.fg=0,this.bg=0,this.extended=new c}static toColorRGB(r){return[r>>>16&255,r>>>8&255,255&r]}static fromColorRGB(r){return(255&r[0])<<16|(255&r[1])<<8|255&r[2]}clone(){const r=new o;return r.fg=this.fg,r.bg=this.bg,r.extended=this.extended.clone(),r}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return(50331648&this.fg)==50331648}isBgRGB(){return(50331648&this.bg)==50331648}isFgPalette(){return(50331648&this.fg)==16777216||(50331648&this.fg)==33554432}isBgPalette(){return(50331648&this.bg)==16777216||(50331648&this.bg)==33554432}isFgDefault(){return(50331648&this.fg)==0}isBgDefault(){return(50331648&this.bg)==0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?(50331648&this.extended.underlineColor)==50331648:this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?(50331648&this.extended.underlineColor)==16777216||(50331648&this.extended.underlineColor)==33554432:this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?(50331648&this.extended.underlineColor)==0:this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}n.AttributeData=o;class c{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(r){this._ext=r}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(r){this._ext&=-469762049,this._ext|=r<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(r){this._ext&=-67108864,this._ext|=67108863&r}get urlId(){return this._urlId}set urlId(r){this._urlId=r}get underlineVariantOffset(){const r=(3758096384&this._ext)>>29;return r<0?4294967288^r:r}set underlineVariantOffset(r){this._ext&=536870911,this._ext|=r<<29&3758096384}constructor(r=0,d=0){this._ext=0,this._urlId=0,this._ext=r,this._urlId=d}clone(){return new c(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}}n.ExtendedAttrs=c},9092:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Buffer=n.MAX_BUFFER_SIZE=void 0;const c=o(6349),_=o(7226),r=o(3734),d=o(8437),f=o(4634),u=o(511),h=o(643),i=o(4863),s=o(7116);n.MAX_BUFFER_SIZE=4294967295,n.Buffer=class{constructor(e,t,a){this._hasScrollback=e,this._optionsService=t,this._bufferService=a,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=d.DEFAULT_ATTR_DATA.clone(),this.savedCharset=s.DEFAULT_CHARSET,this.markers=[],this._nullCell=u.CellData.fromCharData([0,h.NULL_CELL_CHAR,h.NULL_CELL_WIDTH,h.NULL_CELL_CODE]),this._whitespaceCell=u.CellData.fromCharData([0,h.WHITESPACE_CELL_CHAR,h.WHITESPACE_CELL_WIDTH,h.WHITESPACE_CELL_CODE]),this._isClearing=!1,this._memoryCleanupQueue=new _.IdleTaskQueue,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new c.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}getNullCell(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new r.ExtendedAttrs),this._nullCell}getWhitespaceCell(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new r.ExtendedAttrs),this._whitespaceCell}getBlankLine(e,t){return new d.BufferLine(this._bufferService.cols,this.getNullCell(e),t)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){const e=this.ybase+this.y-this.ydisp;return e>=0&&en.MAX_BUFFER_SIZE?n.MAX_BUFFER_SIZE:t}fillViewportRows(e){if(this.lines.length===0){e===void 0&&(e=d.DEFAULT_ATTR_DATA);let t=this._rows;for(;t--;)this.lines.push(this.getBlankLine(e))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new c.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(e,t){const a=this.getNullCell(d.DEFAULT_ATTR_DATA);let g=0;const v=this._getCorrectBufferLength(t);if(v>this.lines.maxLength&&(this.lines.maxLength=v),this.lines.length>0){if(this._cols0&&this.lines.length<=this.ybase+this.y+p+1?(this.ybase--,p++,this.ydisp>0&&this.ydisp--):this.lines.push(new d.BufferLine(e,a)));else for(let l=this._rows;l>t;l--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(v0&&(this.lines.trimStart(l),this.ybase=Math.max(this.ybase-l,0),this.ydisp=Math.max(this.ydisp-l,0),this.savedY=Math.max(this.savedY-l,0)),this.lines.maxLength=v}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),p&&(this.y+=p),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(let p=0;p.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue(()=>this._batchedMemoryCleanup()))}_batchedMemoryCleanup(){let e=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,e=!1);let t=0;for(;this._memoryCleanupPosition100)return!0;return e}get _isReflowEnabled(){const e=this._optionsService.rawOptions.windowsPty;return e&&e.buildNumber?this._hasScrollback&&e.backend==="conpty"&&e.buildNumber>=21376:this._hasScrollback&&!this._optionsService.rawOptions.windowsMode}_reflow(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))}_reflowLarger(e,t){const a=(0,f.reflowLargerGetLinesToRemove)(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(d.DEFAULT_ATTR_DATA));if(a.length>0){const g=(0,f.reflowLargerCreateNewLayout)(this.lines,a);(0,f.reflowLargerApplyNewLayout)(this.lines,g.layout),this._reflowLargerAdjustViewport(e,t,g.countRemoved)}}_reflowLargerAdjustViewport(e,t,a){const g=this.getNullCell(d.DEFAULT_ATTR_DATA);let v=a;for(;v-- >0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length=0;p--){let l=this.lines.get(p);if(!l||!l.isWrapped&&l.getTrimmedLength()<=e)continue;const S=[l];for(;l.isWrapped&&p>0;)l=this.lines.get(--p),S.unshift(l);const E=this.ybase+this.y;if(E>=p&&E0&&(g.push({start:p+S.length+v,newLines:I}),v+=I.length),S.push(...I);let $=x.length-1,j=x[$];j===0&&($--,j=x[$]);let W=S.length-w-1,m=k;for(;W>=0;){const y=Math.min(m,j);if(S[$]===void 0)break;if(S[$].copyCellsFrom(S[W],m-y,j-y,y,!0),j-=y,j===0&&($--,j=x[$]),m-=y,m===0){W--;const L=Math.max(W,0);m=(0,f.getWrappedLineTrimmedLength)(S,L,this._cols)}}for(let y=0;y0;)this.ybase===0?this.y0){const p=[],l=[];for(let $=0;$=0;$--)if(x&&x.start>E+w){for(let j=x.newLines.length-1;j>=0;j--)this.lines.set($--,x.newLines[j]);$++,p.push({index:E+1,amount:x.newLines.length}),w+=x.newLines.length,x=g[++k]}else this.lines.set($,l[E--]);let T=0;for(let $=p.length-1;$>=0;$--)p[$].index+=T,this.lines.onInsertEmitter.fire(p[$]),T+=p[$].amount;const I=Math.max(0,S+v-this.lines.maxLength);I>0&&this.lines.onTrimEmitter.fire(I)}}translateBufferLineToString(e,t,a=0,g){const v=this.lines.get(e);return v?v.translateToString(t,a,g):""}getWrappedRangeForLine(e){let t=e,a=e;for(;t>0&&this.lines.get(t).isWrapped;)t--;for(;a+10;);return e>=this._cols?this._cols-1:e<0?0:e}nextStop(e){for(e==null&&(e=this.x);!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e}clearMarkers(e){this._isClearing=!0;for(let t=0;t{t.line-=a,t.line<0&&t.dispose()})),t.register(this.lines.onInsert(a=>{t.line>=a.index&&(t.line+=a.amount)})),t.register(this.lines.onDelete(a=>{t.line>=a.index&&t.linea.index&&(t.line-=a.amount)})),t.register(t.onDispose(()=>this._removeMarker(t))),t}_removeMarker(e){this._isClearing||this.markers.splice(this.markers.indexOf(e),1)}}},8437:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferLine=n.DEFAULT_ATTR_DATA=void 0;const c=o(3734),_=o(511),r=o(643),d=o(482);n.DEFAULT_ATTR_DATA=Object.freeze(new c.AttributeData);let f=0;class u{constructor(i,s,e=!1){this.isWrapped=e,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*i);const t=s||_.CellData.fromCharData([0,r.NULL_CELL_CHAR,r.NULL_CELL_WIDTH,r.NULL_CELL_CODE]);for(let a=0;a>22,2097152&s?this._combined[i].charCodeAt(this._combined[i].length-1):e]}set(i,s){this._data[3*i+1]=s[r.CHAR_DATA_ATTR_INDEX],s[r.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[i]=s[1],this._data[3*i+0]=2097152|i|s[r.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*i+0]=s[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|s[r.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(i){return this._data[3*i+0]>>22}hasWidth(i){return 12582912&this._data[3*i+0]}getFg(i){return this._data[3*i+1]}getBg(i){return this._data[3*i+2]}hasContent(i){return 4194303&this._data[3*i+0]}getCodePoint(i){const s=this._data[3*i+0];return 2097152&s?this._combined[i].charCodeAt(this._combined[i].length-1):2097151&s}isCombined(i){return 2097152&this._data[3*i+0]}getString(i){const s=this._data[3*i+0];return 2097152&s?this._combined[i]:2097151&s?(0,d.stringFromCodePoint)(2097151&s):""}isProtected(i){return 536870912&this._data[3*i+2]}loadCell(i,s){return f=3*i,s.content=this._data[f+0],s.fg=this._data[f+1],s.bg=this._data[f+2],2097152&s.content&&(s.combinedData=this._combined[i]),268435456&s.bg&&(s.extended=this._extendedAttrs[i]),s}setCell(i,s){2097152&s.content&&(this._combined[i]=s.combinedData),268435456&s.bg&&(this._extendedAttrs[i]=s.extended),this._data[3*i+0]=s.content,this._data[3*i+1]=s.fg,this._data[3*i+2]=s.bg}setCellFromCodepoint(i,s,e,t){268435456&t.bg&&(this._extendedAttrs[i]=t.extended),this._data[3*i+0]=s|e<<22,this._data[3*i+1]=t.fg,this._data[3*i+2]=t.bg}addCodepointToCell(i,s,e){let t=this._data[3*i+0];2097152&t?this._combined[i]+=(0,d.stringFromCodePoint)(s):2097151&t?(this._combined[i]=(0,d.stringFromCodePoint)(2097151&t)+(0,d.stringFromCodePoint)(s),t&=-2097152,t|=2097152):t=s|4194304,e&&(t&=-12582913,t|=e<<22),this._data[3*i+0]=t}insertCells(i,s,e){if((i%=this.length)&&this.getWidth(i-1)===2&&this.setCellFromCodepoint(i-1,0,1,e),s=0;--a)this.setCell(i+s+a,this.loadCell(i+a,t));for(let a=0;athis.length){if(this._data.buffer.byteLength>=4*e)this._data=new Uint32Array(this._data.buffer,0,e);else{const t=new Uint32Array(e);t.set(this._data),this._data=t}for(let t=this.length;t=i&&delete this._combined[v]}const a=Object.keys(this._extendedAttrs);for(let g=0;g=i&&delete this._extendedAttrs[v]}}return this.length=i,4*e*2=0;--i)if(4194303&this._data[3*i+0])return i+(this._data[3*i+0]>>22);return 0}getNoBgTrimmedLength(){for(let i=this.length-1;i>=0;--i)if(4194303&this._data[3*i+0]||50331648&this._data[3*i+2])return i+(this._data[3*i+0]>>22);return 0}copyCellsFrom(i,s,e,t,a){const g=i._data;if(a)for(let p=t-1;p>=0;p--){for(let l=0;l<3;l++)this._data[3*(e+p)+l]=g[3*(s+p)+l];268435456&g[3*(s+p)+2]&&(this._extendedAttrs[e+p]=i._extendedAttrs[s+p])}else for(let p=0;p=s&&(this._combined[l-s+e]=i._combined[l])}}translateToString(i,s,e,t){s=s??0,e=e??this.length,i&&(e=Math.min(e,this.getTrimmedLength())),t&&(t.length=0);let a="";for(;s>22||1}return t&&t.push(s),a}}n.BufferLine=u},4841:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.getRangeLength=void 0,n.getRangeLength=function(o,c){if(o.start.y>o.end.y)throw new Error(`Buffer range end (${o.end.x}, ${o.end.y}) cannot be before start (${o.start.x}, ${o.start.y})`);return c*(o.end.y-o.start.y)+(o.end.x-o.start.x+1)}},4634:(O,n)=>{function o(c,_,r){if(_===c.length-1)return c[_].getTrimmedLength();const d=!c[_].hasContent(r-1)&&c[_].getWidth(r-1)===1,f=c[_+1].getWidth(0)===2;return d&&f?r-1:r}Object.defineProperty(n,"__esModule",{value:!0}),n.getWrappedLineTrimmedLength=n.reflowSmallerGetNewLineLengths=n.reflowLargerApplyNewLayout=n.reflowLargerCreateNewLayout=n.reflowLargerGetLinesToRemove=void 0,n.reflowLargerGetLinesToRemove=function(c,_,r,d,f){const u=[];for(let h=0;h=h&&d0&&(l>t||e[l].getTrimmedLength()===0);l--)p++;p>0&&(u.push(h+e.length-p),u.push(p)),h+=e.length-1}return u},n.reflowLargerCreateNewLayout=function(c,_){const r=[];let d=0,f=_[d],u=0;for(let h=0;ho(c,e,_)).reduce((s,e)=>s+e);let u=0,h=0,i=0;for(;is&&(u-=s,h++);const e=c[h].getWidth(u-1)===2;e&&u--;const t=e?r-1:r;d.push(t),i+=t}return d},n.getWrappedLineTrimmedLength=o},5295:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferSet=void 0;const c=o(8460),_=o(844),r=o(9092);class d extends _.Disposable{constructor(u,h){super(),this._optionsService=u,this._bufferService=h,this._onBufferActivate=this.register(new c.EventEmitter),this.onBufferActivate=this._onBufferActivate.event,this.reset(),this.register(this._optionsService.onSpecificOptionChange("scrollback",()=>this.resize(this._bufferService.cols,this._bufferService.rows))),this.register(this._optionsService.onSpecificOptionChange("tabStopWidth",()=>this.setupTabStops()))}reset(){this._normal=new r.Buffer(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new r.Buffer(!1,this._optionsService,this._bufferService),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(u){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(u),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(u,h){this._normal.resize(u,h),this._alt.resize(u,h),this.setupTabStops(u)}setupTabStops(u){this._normal.setupTabStops(u),this._alt.setupTabStops(u)}}n.BufferSet=d},511:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CellData=void 0;const c=o(482),_=o(643),r=o(3734);class d extends r.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new r.ExtendedAttrs,this.combinedData=""}static fromCharData(u){const h=new d;return h.setFromCharData(u),h}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,c.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(u){this.fg=u[_.CHAR_DATA_ATTR_INDEX],this.bg=0;let h=!1;if(u[_.CHAR_DATA_CHAR_INDEX].length>2)h=!0;else if(u[_.CHAR_DATA_CHAR_INDEX].length===2){const i=u[_.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){const s=u[_.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=s&&s<=57343?this.content=1024*(i-55296)+s-56320+65536|u[_.CHAR_DATA_WIDTH_INDEX]<<22:h=!0}else h=!0}else this.content=u[_.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|u[_.CHAR_DATA_WIDTH_INDEX]<<22;h&&(this.combinedData=u[_.CHAR_DATA_CHAR_INDEX],this.content=2097152|u[_.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}n.CellData=d},643:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.WHITESPACE_CELL_CODE=n.WHITESPACE_CELL_WIDTH=n.WHITESPACE_CELL_CHAR=n.NULL_CELL_CODE=n.NULL_CELL_WIDTH=n.NULL_CELL_CHAR=n.CHAR_DATA_CODE_INDEX=n.CHAR_DATA_WIDTH_INDEX=n.CHAR_DATA_CHAR_INDEX=n.CHAR_DATA_ATTR_INDEX=n.DEFAULT_EXT=n.DEFAULT_ATTR=n.DEFAULT_COLOR=void 0,n.DEFAULT_COLOR=0,n.DEFAULT_ATTR=256|n.DEFAULT_COLOR<<9,n.DEFAULT_EXT=0,n.CHAR_DATA_ATTR_INDEX=0,n.CHAR_DATA_CHAR_INDEX=1,n.CHAR_DATA_WIDTH_INDEX=2,n.CHAR_DATA_CODE_INDEX=3,n.NULL_CELL_CHAR="",n.NULL_CELL_WIDTH=1,n.NULL_CELL_CODE=0,n.WHITESPACE_CELL_CHAR=" ",n.WHITESPACE_CELL_WIDTH=1,n.WHITESPACE_CELL_CODE=32},4863:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Marker=void 0;const c=o(8460),_=o(844);class r{get id(){return this._id}constructor(f){this.line=f,this.isDisposed=!1,this._disposables=[],this._id=r._nextId++,this._onDispose=this.register(new c.EventEmitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,_.disposeArray)(this._disposables),this._disposables.length=0)}register(f){return this._disposables.push(f),f}}n.Marker=r,r._nextId=1},7116:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.DEFAULT_CHARSET=n.CHARSETS=void 0,n.CHARSETS={},n.DEFAULT_CHARSET=n.CHARSETS.B,n.CHARSETS[0]={"`":"◆",a:"▒",b:"␉",c:"␌",d:"␍",e:"␊",f:"°",g:"±",h:"␤",i:"␋",j:"┘",k:"┐",l:"┌",m:"└",n:"┼",o:"⎺",p:"⎻",q:"─",r:"⎼",s:"⎽",t:"├",u:"┤",v:"┴",w:"┬",x:"│",y:"≤",z:"≥","{":"π","|":"≠","}":"£","~":"·"},n.CHARSETS.A={"#":"£"},n.CHARSETS.B=void 0,n.CHARSETS[4]={"#":"£","@":"¾","[":"ij","\\":"½","]":"|","{":"¨","|":"f","}":"¼","~":"´"},n.CHARSETS.C=n.CHARSETS[5]={"[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},n.CHARSETS.R={"#":"£","@":"à","[":"°","\\":"ç","]":"§","{":"é","|":"ù","}":"è","~":"¨"},n.CHARSETS.Q={"@":"à","[":"â","\\":"ç","]":"ê","^":"î","`":"ô","{":"é","|":"ù","}":"è","~":"û"},n.CHARSETS.K={"@":"§","[":"Ä","\\":"Ö","]":"Ü","{":"ä","|":"ö","}":"ü","~":"ß"},n.CHARSETS.Y={"#":"£","@":"§","[":"°","\\":"ç","]":"é","`":"ù","{":"à","|":"ò","}":"è","~":"ì"},n.CHARSETS.E=n.CHARSETS[6]={"@":"Ä","[":"Æ","\\":"Ø","]":"Å","^":"Ü","`":"ä","{":"æ","|":"ø","}":"å","~":"ü"},n.CHARSETS.Z={"#":"£","@":"§","[":"¡","\\":"Ñ","]":"¿","{":"°","|":"ñ","}":"ç"},n.CHARSETS.H=n.CHARSETS[7]={"@":"É","[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},n.CHARSETS["="]={"#":"ù","@":"à","[":"é","\\":"ç","]":"ê","^":"î",_:"è","`":"ô","{":"ä","|":"ö","}":"ü","~":"û"}},2584:(O,n)=>{var o,c,_;Object.defineProperty(n,"__esModule",{value:!0}),n.C1_ESCAPED=n.C1=n.C0=void 0,function(r){r.NUL="\0",r.SOH="",r.STX="",r.ETX="",r.EOT="",r.ENQ="",r.ACK="",r.BEL="\x07",r.BS="\b",r.HT=" ",r.LF=` +`,r.VT="\v",r.FF="\f",r.CR="\r",r.SO="",r.SI="",r.DLE="",r.DC1="",r.DC2="",r.DC3="",r.DC4="",r.NAK="",r.SYN="",r.ETB="",r.CAN="",r.EM="",r.SUB="",r.ESC="\x1B",r.FS="",r.GS="",r.RS="",r.US="",r.SP=" ",r.DEL=""}(o||(n.C0=o={})),function(r){r.PAD="€",r.HOP="",r.BPH="‚",r.NBH="ƒ",r.IND="„",r.NEL="…",r.SSA="†",r.ESA="‡",r.HTS="ˆ",r.HTJ="‰",r.VTS="Š",r.PLD="‹",r.PLU="Œ",r.RI="",r.SS2="Ž",r.SS3="",r.DCS="",r.PU1="‘",r.PU2="’",r.STS="“",r.CCH="”",r.MW="•",r.SPA="–",r.EPA="—",r.SOS="˜",r.SGCI="™",r.SCI="š",r.CSI="›",r.ST="œ",r.OSC="",r.PM="ž",r.APC="Ÿ"}(c||(n.C1=c={})),function(r){r.ST=`${o.ESC}\\`}(_||(n.C1_ESCAPED=_={}))},7399:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.evaluateKeyboardEvent=void 0;const c=o(2584),_={48:["0",")"],49:["1","!"],50:["2","@"],51:["3","#"],52:["4","$"],53:["5","%"],54:["6","^"],55:["7","&"],56:["8","*"],57:["9","("],186:[";",":"],187:["=","+"],188:[",","<"],189:["-","_"],190:[".",">"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']};n.evaluateKeyboardEvent=function(r,d,f,u){const h={type:0,cancel:!1,key:void 0},i=(r.shiftKey?1:0)|(r.altKey?2:0)|(r.ctrlKey?4:0)|(r.metaKey?8:0);switch(r.keyCode){case 0:r.key==="UIKeyInputUpArrow"?h.key=d?c.C0.ESC+"OA":c.C0.ESC+"[A":r.key==="UIKeyInputLeftArrow"?h.key=d?c.C0.ESC+"OD":c.C0.ESC+"[D":r.key==="UIKeyInputRightArrow"?h.key=d?c.C0.ESC+"OC":c.C0.ESC+"[C":r.key==="UIKeyInputDownArrow"&&(h.key=d?c.C0.ESC+"OB":c.C0.ESC+"[B");break;case 8:h.key=r.ctrlKey?"\b":c.C0.DEL,r.altKey&&(h.key=c.C0.ESC+h.key);break;case 9:if(r.shiftKey){h.key=c.C0.ESC+"[Z";break}h.key=c.C0.HT,h.cancel=!0;break;case 13:h.key=r.altKey?c.C0.ESC+c.C0.CR:c.C0.CR,h.cancel=!0;break;case 27:h.key=c.C0.ESC,r.altKey&&(h.key=c.C0.ESC+c.C0.ESC),h.cancel=!0;break;case 37:if(r.metaKey)break;i?(h.key=c.C0.ESC+"[1;"+(i+1)+"D",h.key===c.C0.ESC+"[1;3D"&&(h.key=c.C0.ESC+(f?"b":"[1;5D"))):h.key=d?c.C0.ESC+"OD":c.C0.ESC+"[D";break;case 39:if(r.metaKey)break;i?(h.key=c.C0.ESC+"[1;"+(i+1)+"C",h.key===c.C0.ESC+"[1;3C"&&(h.key=c.C0.ESC+(f?"f":"[1;5C"))):h.key=d?c.C0.ESC+"OC":c.C0.ESC+"[C";break;case 38:if(r.metaKey)break;i?(h.key=c.C0.ESC+"[1;"+(i+1)+"A",f||h.key!==c.C0.ESC+"[1;3A"||(h.key=c.C0.ESC+"[1;5A")):h.key=d?c.C0.ESC+"OA":c.C0.ESC+"[A";break;case 40:if(r.metaKey)break;i?(h.key=c.C0.ESC+"[1;"+(i+1)+"B",f||h.key!==c.C0.ESC+"[1;3B"||(h.key=c.C0.ESC+"[1;5B")):h.key=d?c.C0.ESC+"OB":c.C0.ESC+"[B";break;case 45:r.shiftKey||r.ctrlKey||(h.key=c.C0.ESC+"[2~");break;case 46:h.key=i?c.C0.ESC+"[3;"+(i+1)+"~":c.C0.ESC+"[3~";break;case 36:h.key=i?c.C0.ESC+"[1;"+(i+1)+"H":d?c.C0.ESC+"OH":c.C0.ESC+"[H";break;case 35:h.key=i?c.C0.ESC+"[1;"+(i+1)+"F":d?c.C0.ESC+"OF":c.C0.ESC+"[F";break;case 33:r.shiftKey?h.type=2:r.ctrlKey?h.key=c.C0.ESC+"[5;"+(i+1)+"~":h.key=c.C0.ESC+"[5~";break;case 34:r.shiftKey?h.type=3:r.ctrlKey?h.key=c.C0.ESC+"[6;"+(i+1)+"~":h.key=c.C0.ESC+"[6~";break;case 112:h.key=i?c.C0.ESC+"[1;"+(i+1)+"P":c.C0.ESC+"OP";break;case 113:h.key=i?c.C0.ESC+"[1;"+(i+1)+"Q":c.C0.ESC+"OQ";break;case 114:h.key=i?c.C0.ESC+"[1;"+(i+1)+"R":c.C0.ESC+"OR";break;case 115:h.key=i?c.C0.ESC+"[1;"+(i+1)+"S":c.C0.ESC+"OS";break;case 116:h.key=i?c.C0.ESC+"[15;"+(i+1)+"~":c.C0.ESC+"[15~";break;case 117:h.key=i?c.C0.ESC+"[17;"+(i+1)+"~":c.C0.ESC+"[17~";break;case 118:h.key=i?c.C0.ESC+"[18;"+(i+1)+"~":c.C0.ESC+"[18~";break;case 119:h.key=i?c.C0.ESC+"[19;"+(i+1)+"~":c.C0.ESC+"[19~";break;case 120:h.key=i?c.C0.ESC+"[20;"+(i+1)+"~":c.C0.ESC+"[20~";break;case 121:h.key=i?c.C0.ESC+"[21;"+(i+1)+"~":c.C0.ESC+"[21~";break;case 122:h.key=i?c.C0.ESC+"[23;"+(i+1)+"~":c.C0.ESC+"[23~";break;case 123:h.key=i?c.C0.ESC+"[24;"+(i+1)+"~":c.C0.ESC+"[24~";break;default:if(!r.ctrlKey||r.shiftKey||r.altKey||r.metaKey)if(f&&!u||!r.altKey||r.metaKey)!f||r.altKey||r.ctrlKey||r.shiftKey||!r.metaKey?r.key&&!r.ctrlKey&&!r.altKey&&!r.metaKey&&r.keyCode>=48&&r.key.length===1?h.key=r.key:r.key&&r.ctrlKey&&(r.key==="_"&&(h.key=c.C0.US),r.key==="@"&&(h.key=c.C0.NUL)):r.keyCode===65&&(h.type=1);else{const s=_[r.keyCode],e=s?.[r.shiftKey?1:0];if(e)h.key=c.C0.ESC+e;else if(r.keyCode>=65&&r.keyCode<=90){const t=r.ctrlKey?r.keyCode-64:r.keyCode+32;let a=String.fromCharCode(t);r.shiftKey&&(a=a.toUpperCase()),h.key=c.C0.ESC+a}else if(r.keyCode===32)h.key=c.C0.ESC+(r.ctrlKey?c.C0.NUL:" ");else if(r.key==="Dead"&&r.code.startsWith("Key")){let t=r.code.slice(3,4);r.shiftKey||(t=t.toLowerCase()),h.key=c.C0.ESC+t,h.cancel=!0}}else r.keyCode>=65&&r.keyCode<=90?h.key=String.fromCharCode(r.keyCode-64):r.keyCode===32?h.key=c.C0.NUL:r.keyCode>=51&&r.keyCode<=55?h.key=String.fromCharCode(r.keyCode-51+27):r.keyCode===56?h.key=c.C0.DEL:r.keyCode===219?h.key=c.C0.ESC:r.keyCode===220?h.key=c.C0.FS:r.keyCode===221&&(h.key=c.C0.GS)}return h}},482:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Utf8ToUtf32=n.StringToUtf32=n.utf32ToString=n.stringFromCodePoint=void 0,n.stringFromCodePoint=function(o){return o>65535?(o-=65536,String.fromCharCode(55296+(o>>10))+String.fromCharCode(o%1024+56320)):String.fromCharCode(o)},n.utf32ToString=function(o,c=0,_=o.length){let r="";for(let d=c;d<_;++d){let f=o[d];f>65535?(f-=65536,r+=String.fromCharCode(55296+(f>>10))+String.fromCharCode(f%1024+56320)):r+=String.fromCharCode(f)}return r},n.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(o,c){const _=o.length;if(!_)return 0;let r=0,d=0;if(this._interim){const f=o.charCodeAt(d++);56320<=f&&f<=57343?c[r++]=1024*(this._interim-55296)+f-56320+65536:(c[r++]=this._interim,c[r++]=f),this._interim=0}for(let f=d;f<_;++f){const u=o.charCodeAt(f);if(55296<=u&&u<=56319){if(++f>=_)return this._interim=u,r;const h=o.charCodeAt(f);56320<=h&&h<=57343?c[r++]=1024*(u-55296)+h-56320+65536:(c[r++]=u,c[r++]=h)}else u!==65279&&(c[r++]=u)}return r}},n.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(o,c){const _=o.length;if(!_)return 0;let r,d,f,u,h=0,i=0,s=0;if(this.interim[0]){let a=!1,g=this.interim[0];g&=(224&g)==192?31:(240&g)==224?15:7;let v,p=0;for(;(v=63&this.interim[++p])&&p<4;)g<<=6,g|=v;const l=(224&this.interim[0])==192?2:(240&this.interim[0])==224?3:4,S=l-p;for(;s=_)return 0;if(v=o[s++],(192&v)!=128){s--,a=!0;break}this.interim[p++]=v,g<<=6,g|=63&v}a||(l===2?g<128?s--:c[h++]=g:l===3?g<2048||g>=55296&&g<=57343||g===65279||(c[h++]=g):g<65536||g>1114111||(c[h++]=g)),this.interim.fill(0)}const e=_-4;let t=s;for(;t<_;){for(;!(!(t=_)return this.interim[0]=r,h;if(d=o[t++],(192&d)!=128){t--;continue}if(i=(31&r)<<6|63&d,i<128){t--;continue}c[h++]=i}else if((240&r)==224){if(t>=_)return this.interim[0]=r,h;if(d=o[t++],(192&d)!=128){t--;continue}if(t>=_)return this.interim[0]=r,this.interim[1]=d,h;if(f=o[t++],(192&f)!=128){t--;continue}if(i=(15&r)<<12|(63&d)<<6|63&f,i<2048||i>=55296&&i<=57343||i===65279)continue;c[h++]=i}else if((248&r)==240){if(t>=_)return this.interim[0]=r,h;if(d=o[t++],(192&d)!=128){t--;continue}if(t>=_)return this.interim[0]=r,this.interim[1]=d,h;if(f=o[t++],(192&f)!=128){t--;continue}if(t>=_)return this.interim[0]=r,this.interim[1]=d,this.interim[2]=f,h;if(u=o[t++],(192&u)!=128){t--;continue}if(i=(7&r)<<18|(63&d)<<12|(63&f)<<6|63&u,i<65536||i>1114111)continue;c[h++]=i}}return h}}},225:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.UnicodeV6=void 0;const c=o(1480),_=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],r=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];let d;n.UnicodeV6=class{constructor(){if(this.version="6",!d){d=new Uint8Array(65536),d.fill(1),d[0]=0,d.fill(0,1,32),d.fill(0,127,160),d.fill(2,4352,4448),d[9001]=2,d[9002]=2,d.fill(2,11904,42192),d[12351]=1,d.fill(2,44032,55204),d.fill(2,63744,64256),d.fill(2,65040,65050),d.fill(2,65072,65136),d.fill(2,65280,65377),d.fill(2,65504,65511);for(let f=0;f<_.length;++f)d.fill(0,_[f][0],_[f][1]+1)}}wcwidth(f){return f<32?0:f<127?1:f<65536?d[f]:function(u,h){let i,s=0,e=h.length-1;if(uh[e][1])return!1;for(;e>=s;)if(i=s+e>>1,u>h[i][1])s=i+1;else{if(!(u=131072&&f<=196605||f>=196608&&f<=262141?2:1}charProperties(f,u){let h=this.wcwidth(f),i=h===0&&u!==0;if(i){const s=c.UnicodeService.extractWidth(u);s===0?i=!1:s>h&&(h=s)}return c.UnicodeService.createPropertyValue(0,h,i)}}},5981:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.WriteBuffer=void 0;const c=o(8460),_=o(844);class r extends _.Disposable{constructor(f){super(),this._action=f,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0,this._didUserInput=!1,this._onWriteParsed=this.register(new c.EventEmitter),this.onWriteParsed=this._onWriteParsed.event}handleUserInput(){this._didUserInput=!0}writeSync(f,u){if(u!==void 0&&this._syncCalls>u)return void(this._syncCalls=0);if(this._pendingData+=f.length,this._writeBuffer.push(f),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;let h;for(this._isSyncWriting=!0;h=this._writeBuffer.shift();){this._action(h);const i=this._callbacks.shift();i&&i()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(f,u){if(this._pendingData>5e7)throw new Error("write data discarded, use flow control to avoid losing data");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput)return this._didUserInput=!1,this._pendingData+=f.length,this._writeBuffer.push(f),this._callbacks.push(u),void this._innerWrite();setTimeout(()=>this._innerWrite())}this._pendingData+=f.length,this._writeBuffer.push(f),this._callbacks.push(u)}_innerWrite(f=0,u=!0){const h=f||Date.now();for(;this._writeBuffer.length>this._bufferOffset;){const i=this._writeBuffer[this._bufferOffset],s=this._action(i,u);if(s){const t=a=>Date.now()-h>=12?setTimeout(()=>this._innerWrite(0,a)):this._innerWrite(h,a);return void s.catch(a=>(queueMicrotask(()=>{throw a}),Promise.resolve(!1))).then(t)}const e=this._callbacks[this._bufferOffset];if(e&&e(),this._bufferOffset++,this._pendingData-=i.length,Date.now()-h>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),setTimeout(()=>this._innerWrite())):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}}n.WriteBuffer=r},5941:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.toRgbString=n.parseColor=void 0;const o=/^([\da-f])\/([\da-f])\/([\da-f])$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,c=/^[\da-f]+$/;function _(r,d){const f=r.toString(16),u=f.length<2?"0"+f:f;switch(d){case 4:return f[0];case 8:return u;case 12:return(u+u).slice(0,3);default:return u+u}}n.parseColor=function(r){if(!r)return;let d=r.toLowerCase();if(d.indexOf("rgb:")===0){d=d.slice(4);const f=o.exec(d);if(f){const u=f[1]?15:f[4]?255:f[7]?4095:65535;return[Math.round(parseInt(f[1]||f[4]||f[7]||f[10],16)/u*255),Math.round(parseInt(f[2]||f[5]||f[8]||f[11],16)/u*255),Math.round(parseInt(f[3]||f[6]||f[9]||f[12],16)/u*255)]}}else if(d.indexOf("#")===0&&(d=d.slice(1),c.exec(d)&&[3,6,9,12].includes(d.length))){const f=d.length/3,u=[0,0,0];for(let h=0;h<3;++h){const i=parseInt(d.slice(f*h,f*h+f),16);u[h]=f===1?i<<4:f===2?i:f===3?i>>4:i>>8}return u}},n.toRgbString=function(r,d=16){const[f,u,h]=r;return`rgb:${_(f,d)}/${_(u,d)}/${_(h,d)}`}},5770:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.PAYLOAD_LIMIT=void 0,n.PAYLOAD_LIMIT=1e7},6351:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.DcsHandler=n.DcsParser=void 0;const c=o(482),_=o(8742),r=o(5770),d=[];n.DcsParser=class{constructor(){this._handlers=Object.create(null),this._active=d,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=d}registerHandler(u,h){this._handlers[u]===void 0&&(this._handlers[u]=[]);const i=this._handlers[u];return i.push(h),{dispose:()=>{const s=i.indexOf(h);s!==-1&&i.splice(s,1)}}}clearHandler(u){this._handlers[u]&&delete this._handlers[u]}setHandlerFallback(u){this._handlerFb=u}reset(){if(this._active.length)for(let u=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;u>=0;--u)this._active[u].unhook(!1);this._stack.paused=!1,this._active=d,this._ident=0}hook(u,h){if(this.reset(),this._ident=u,this._active=this._handlers[u]||d,this._active.length)for(let i=this._active.length-1;i>=0;i--)this._active[i].hook(h);else this._handlerFb(this._ident,"HOOK",h)}put(u,h,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(u,h,i);else this._handlerFb(this._ident,"PUT",(0,c.utf32ToString)(u,h,i))}unhook(u,h=!0){if(this._active.length){let i=!1,s=this._active.length-1,e=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=h,e=this._stack.fallThrough,this._stack.paused=!1),!e&&i===!1){for(;s>=0&&(i=this._active[s].unhook(u),i!==!0);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].unhook(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._ident,"UNHOOK",u);this._active=d,this._ident=0}};const f=new _.Params;f.addParam(0),n.DcsHandler=class{constructor(u){this._handler=u,this._data="",this._params=f,this._hitLimit=!1}hook(u){this._params=u.length>1||u.params[0]?u.clone():f,this._data="",this._hitLimit=!1}put(u,h,i){this._hitLimit||(this._data+=(0,c.utf32ToString)(u,h,i),this._data.length>r.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))}unhook(u){let h=!1;if(this._hitLimit)h=!1;else if(u&&(h=this._handler(this._data,this._params),h instanceof Promise))return h.then(i=>(this._params=f,this._data="",this._hitLimit=!1,i));return this._params=f,this._data="",this._hitLimit=!1,h}}},2015:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.EscapeSequenceParser=n.VT500_TRANSITION_TABLE=n.TransitionTable=void 0;const c=o(844),_=o(8742),r=o(6242),d=o(6351);class f{constructor(s){this.table=new Uint8Array(s)}setDefault(s,e){this.table.fill(s<<4|e)}add(s,e,t,a){this.table[e<<8|s]=t<<4|a}addMany(s,e,t,a){for(let g=0;gl),e=(p,l)=>s.slice(p,l),t=e(32,127),a=e(0,24);a.push(25),a.push.apply(a,e(28,32));const g=e(0,14);let v;for(v in i.setDefault(1,0),i.addMany(t,0,2,0),g)i.addMany([24,26,153,154],v,3,0),i.addMany(e(128,144),v,3,0),i.addMany(e(144,152),v,3,0),i.add(156,v,0,0),i.add(27,v,11,1),i.add(157,v,4,8),i.addMany([152,158,159],v,0,7),i.add(155,v,11,3),i.add(144,v,11,9);return i.addMany(a,0,3,0),i.addMany(a,1,3,1),i.add(127,1,0,1),i.addMany(a,8,0,8),i.addMany(a,3,3,3),i.add(127,3,0,3),i.addMany(a,4,3,4),i.add(127,4,0,4),i.addMany(a,6,3,6),i.addMany(a,5,3,5),i.add(127,5,0,5),i.addMany(a,2,3,2),i.add(127,2,0,2),i.add(93,1,4,8),i.addMany(t,8,5,8),i.add(127,8,5,8),i.addMany([156,27,24,26,7],8,6,0),i.addMany(e(28,32),8,0,8),i.addMany([88,94,95],1,0,7),i.addMany(t,7,0,7),i.addMany(a,7,0,7),i.add(156,7,0,0),i.add(127,7,0,7),i.add(91,1,11,3),i.addMany(e(64,127),3,7,0),i.addMany(e(48,60),3,8,4),i.addMany([60,61,62,63],3,9,4),i.addMany(e(48,60),4,8,4),i.addMany(e(64,127),4,7,0),i.addMany([60,61,62,63],4,0,6),i.addMany(e(32,64),6,0,6),i.add(127,6,0,6),i.addMany(e(64,127),6,0,0),i.addMany(e(32,48),3,9,5),i.addMany(e(32,48),5,9,5),i.addMany(e(48,64),5,0,6),i.addMany(e(64,127),5,7,0),i.addMany(e(32,48),4,9,5),i.addMany(e(32,48),1,9,2),i.addMany(e(32,48),2,9,2),i.addMany(e(48,127),2,10,0),i.addMany(e(48,80),1,10,0),i.addMany(e(81,88),1,10,0),i.addMany([89,90,92],1,10,0),i.addMany(e(96,127),1,10,0),i.add(80,1,11,9),i.addMany(a,9,0,9),i.add(127,9,0,9),i.addMany(e(28,32),9,0,9),i.addMany(e(32,48),9,9,12),i.addMany(e(48,60),9,8,10),i.addMany([60,61,62,63],9,9,10),i.addMany(a,11,0,11),i.addMany(e(32,128),11,0,11),i.addMany(e(28,32),11,0,11),i.addMany(a,10,0,10),i.add(127,10,0,10),i.addMany(e(28,32),10,0,10),i.addMany(e(48,60),10,8,10),i.addMany([60,61,62,63],10,0,11),i.addMany(e(32,48),10,9,12),i.addMany(a,12,0,12),i.add(127,12,0,12),i.addMany(e(28,32),12,0,12),i.addMany(e(32,48),12,9,12),i.addMany(e(48,64),12,0,11),i.addMany(e(64,127),12,12,13),i.addMany(e(64,127),10,12,13),i.addMany(e(64,127),9,12,13),i.addMany(a,13,13,13),i.addMany(t,13,13,13),i.add(127,13,0,13),i.addMany([27,156,24,26],13,14,0),i.add(u,0,2,0),i.add(u,8,5,8),i.add(u,6,0,6),i.add(u,11,0,11),i.add(u,13,13,13),i}();class h extends c.Disposable{constructor(s=n.VT500_TRANSITION_TABLE){super(),this._transitions=s,this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},this.initialState=0,this.currentState=this.initialState,this._params=new _.Params,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(e,t,a)=>{},this._executeHandlerFb=e=>{},this._csiHandlerFb=(e,t)=>{},this._escHandlerFb=e=>{},this._errorHandlerFb=e=>e,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this.register((0,c.toDisposable)(()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._escHandlers=Object.create(null)})),this._oscParser=this.register(new r.OscParser),this._dcsParser=this.register(new d.DcsParser),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:"\\"},()=>!0)}_identifier(s,e=[64,126]){let t=0;if(s.prefix){if(s.prefix.length>1)throw new Error("only one byte as prefix supported");if(t=s.prefix.charCodeAt(0),t&&60>t||t>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(s.intermediates){if(s.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(let g=0;gv||v>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");t<<=8,t|=v}}if(s.final.length!==1)throw new Error("final must be a single byte");const a=s.final.charCodeAt(0);if(e[0]>a||a>e[1])throw new Error(`final must be in range ${e[0]} .. ${e[1]}`);return t<<=8,t|=a,t}identToString(s){const e=[];for(;s;)e.push(String.fromCharCode(255&s)),s>>=8;return e.reverse().join("")}setPrintHandler(s){this._printHandler=s}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(s,e){const t=this._identifier(s,[48,126]);this._escHandlers[t]===void 0&&(this._escHandlers[t]=[]);const a=this._escHandlers[t];return a.push(e),{dispose:()=>{const g=a.indexOf(e);g!==-1&&a.splice(g,1)}}}clearEscHandler(s){this._escHandlers[this._identifier(s,[48,126])]&&delete this._escHandlers[this._identifier(s,[48,126])]}setEscHandlerFallback(s){this._escHandlerFb=s}setExecuteHandler(s,e){this._executeHandlers[s.charCodeAt(0)]=e}clearExecuteHandler(s){this._executeHandlers[s.charCodeAt(0)]&&delete this._executeHandlers[s.charCodeAt(0)]}setExecuteHandlerFallback(s){this._executeHandlerFb=s}registerCsiHandler(s,e){const t=this._identifier(s);this._csiHandlers[t]===void 0&&(this._csiHandlers[t]=[]);const a=this._csiHandlers[t];return a.push(e),{dispose:()=>{const g=a.indexOf(e);g!==-1&&a.splice(g,1)}}}clearCsiHandler(s){this._csiHandlers[this._identifier(s)]&&delete this._csiHandlers[this._identifier(s)]}setCsiHandlerFallback(s){this._csiHandlerFb=s}registerDcsHandler(s,e){return this._dcsParser.registerHandler(this._identifier(s),e)}clearDcsHandler(s){this._dcsParser.clearHandler(this._identifier(s))}setDcsHandlerFallback(s){this._dcsParser.setHandlerFallback(s)}registerOscHandler(s,e){return this._oscParser.registerHandler(s,e)}clearOscHandler(s){this._oscParser.clearHandler(s)}setOscHandlerFallback(s){this._oscParser.setHandlerFallback(s)}setErrorHandler(s){this._errorHandler=s}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._parseStack.state!==0&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(s,e,t,a,g){this._parseStack.state=s,this._parseStack.handlers=e,this._parseStack.handlerPos=t,this._parseStack.transition=a,this._parseStack.chunkPos=g}parse(s,e,t){let a,g=0,v=0,p=0;if(this._parseStack.state)if(this._parseStack.state===2)this._parseStack.state=0,p=this._parseStack.chunkPos+1;else{if(t===void 0||this._parseStack.state===1)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");const l=this._parseStack.handlers;let S=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(t===!1&&S>-1){for(;S>=0&&(a=l[S](this._params),a!==!0);S--)if(a instanceof Promise)return this._parseStack.handlerPos=S,a}this._parseStack.handlers=[];break;case 4:if(t===!1&&S>-1){for(;S>=0&&(a=l[S](),a!==!0);S--)if(a instanceof Promise)return this._parseStack.handlerPos=S,a}this._parseStack.handlers=[];break;case 6:if(g=s[this._parseStack.chunkPos],a=this._dcsParser.unhook(g!==24&&g!==26,t),a)return a;g===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break;case 5:if(g=s[this._parseStack.chunkPos],a=this._oscParser.end(g!==24&&g!==26,t),a)return a;g===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0}this._parseStack.state=0,p=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=15&this._parseStack.transition}for(let l=p;l>4){case 2:for(let w=l+1;;++w){if(w>=e||(g=s[w])<32||g>126&&g=e||(g=s[w])<32||g>126&&g=e||(g=s[w])<32||g>126&&g=e||(g=s[w])<32||g>126&&g=0&&(a=S[E](this._params),a!==!0);E--)if(a instanceof Promise)return this._preserveStack(3,S,E,v,l),a;E<0&&this._csiHandlerFb(this._collect<<8|g,this._params),this.precedingJoinState=0;break;case 8:do switch(g){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(g-48)}while(++l47&&g<60);l--;break;case 9:this._collect<<=8,this._collect|=g;break;case 10:const k=this._escHandlers[this._collect<<8|g];let x=k?k.length-1:-1;for(;x>=0&&(a=k[x](),a!==!0);x--)if(a instanceof Promise)return this._preserveStack(4,k,x,v,l),a;x<0&&this._escHandlerFb(this._collect<<8|g),this.precedingJoinState=0;break;case 11:this._params.reset(),this._params.addParam(0),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|g,this._params);break;case 13:for(let w=l+1;;++w)if(w>=e||(g=s[w])===24||g===26||g===27||g>127&&g=e||(g=s[w])<32||g>127&&g{Object.defineProperty(n,"__esModule",{value:!0}),n.OscHandler=n.OscParser=void 0;const c=o(5770),_=o(482),r=[];n.OscParser=class{constructor(){this._state=0,this._active=r,this._id=-1,this._handlers=Object.create(null),this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(d,f){this._handlers[d]===void 0&&(this._handlers[d]=[]);const u=this._handlers[d];return u.push(f),{dispose:()=>{const h=u.indexOf(f);h!==-1&&u.splice(h,1)}}}clearHandler(d){this._handlers[d]&&delete this._handlers[d]}setHandlerFallback(d){this._handlerFb=d}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=r}reset(){if(this._state===2)for(let d=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;d>=0;--d)this._active[d].end(!1);this._stack.paused=!1,this._active=r,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||r,this._active.length)for(let d=this._active.length-1;d>=0;d--)this._active[d].start();else this._handlerFb(this._id,"START")}_put(d,f,u){if(this._active.length)for(let h=this._active.length-1;h>=0;h--)this._active[h].put(d,f,u);else this._handlerFb(this._id,"PUT",(0,_.utf32ToString)(d,f,u))}start(){this.reset(),this._state=1}put(d,f,u){if(this._state!==3){if(this._state===1)for(;f0&&this._put(d,f,u)}}end(d,f=!0){if(this._state!==0){if(this._state!==3)if(this._state===1&&this._start(),this._active.length){let u=!1,h=this._active.length-1,i=!1;if(this._stack.paused&&(h=this._stack.loopPosition-1,u=f,i=this._stack.fallThrough,this._stack.paused=!1),!i&&u===!1){for(;h>=0&&(u=this._active[h].end(d),u!==!0);h--)if(u instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=h,this._stack.fallThrough=!1,u;h--}for(;h>=0;h--)if(u=this._active[h].end(!1),u instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=h,this._stack.fallThrough=!0,u}else this._handlerFb(this._id,"END",d);this._active=r,this._id=-1,this._state=0}}},n.OscHandler=class{constructor(d){this._handler=d,this._data="",this._hitLimit=!1}start(){this._data="",this._hitLimit=!1}put(d,f,u){this._hitLimit||(this._data+=(0,_.utf32ToString)(d,f,u),this._data.length>c.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))}end(d){let f=!1;if(this._hitLimit)f=!1;else if(d&&(f=this._handler(this._data),f instanceof Promise))return f.then(u=>(this._data="",this._hitLimit=!1,u));return this._data="",this._hitLimit=!1,f}}},8742:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Params=void 0;const o=2147483647;class c{static fromArray(r){const d=new c;if(!r.length)return d;for(let f=Array.isArray(r[0])?1:0;f256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(r),this.length=0,this._subParams=new Int32Array(d),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(r),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}clone(){const r=new c(this.maxLength,this.maxSubParamsLength);return r.params.set(this.params),r.length=this.length,r._subParams.set(this._subParams),r._subParamsLength=this._subParamsLength,r._subParamsIdx.set(this._subParamsIdx),r._rejectDigits=this._rejectDigits,r._rejectSubDigits=this._rejectSubDigits,r._digitIsSub=this._digitIsSub,r}toArray(){const r=[];for(let d=0;d>8,u=255&this._subParamsIdx[d];u-f>0&&r.push(Array.prototype.slice.call(this._subParams,f,u))}return r}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}addParam(r){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(r<-1)throw new Error("values lesser than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=r>o?o:r}}addSubParam(r){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(r<-1)throw new Error("values lesser than -1 are not allowed");this._subParams[this._subParamsLength++]=r>o?o:r,this._subParamsIdx[this.length-1]++}}hasSubParams(r){return(255&this._subParamsIdx[r])-(this._subParamsIdx[r]>>8)>0}getSubParams(r){const d=this._subParamsIdx[r]>>8,f=255&this._subParamsIdx[r];return f-d>0?this._subParams.subarray(d,f):null}getSubParamsAll(){const r={};for(let d=0;d>8,u=255&this._subParamsIdx[d];u-f>0&&(r[d]=this._subParams.slice(f,u))}return r}addDigit(r){let d;if(this._rejectDigits||!(d=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;const f=this._digitIsSub?this._subParams:this.params,u=f[d-1];f[d-1]=~u?Math.min(10*u+r,o):r}}n.Params=c},5741:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.AddonManager=void 0,n.AddonManager=class{constructor(){this._addons=[]}dispose(){for(let o=this._addons.length-1;o>=0;o--)this._addons[o].instance.dispose()}loadAddon(o,c){const _={instance:c,dispose:c.dispose,isDisposed:!1};this._addons.push(_),c.dispose=()=>this._wrappedAddonDispose(_),c.activate(o)}_wrappedAddonDispose(o){if(o.isDisposed)return;let c=-1;for(let _=0;_{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferApiView=void 0;const c=o(3785),_=o(511);n.BufferApiView=class{constructor(r,d){this._buffer=r,this.type=d}init(r){return this._buffer=r,this}get cursorY(){return this._buffer.y}get cursorX(){return this._buffer.x}get viewportY(){return this._buffer.ydisp}get baseY(){return this._buffer.ybase}get length(){return this._buffer.lines.length}getLine(r){const d=this._buffer.lines.get(r);if(d)return new c.BufferLineApiView(d)}getNullCell(){return new _.CellData}}},3785:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferLineApiView=void 0;const c=o(511);n.BufferLineApiView=class{constructor(_){this._line=_}get isWrapped(){return this._line.isWrapped}get length(){return this._line.length}getCell(_,r){if(!(_<0||_>=this._line.length))return r?(this._line.loadCell(_,r),r):this._line.loadCell(_,new c.CellData)}translateToString(_,r,d){return this._line.translateToString(_,r,d)}}},8285:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferNamespaceApi=void 0;const c=o(8771),_=o(8460),r=o(844);class d extends r.Disposable{constructor(u){super(),this._core=u,this._onBufferChange=this.register(new _.EventEmitter),this.onBufferChange=this._onBufferChange.event,this._normal=new c.BufferApiView(this._core.buffers.normal,"normal"),this._alternate=new c.BufferApiView(this._core.buffers.alt,"alternate"),this._core.buffers.onBufferActivate(()=>this._onBufferChange.fire(this.active))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error("Active buffer is neither normal nor alternate")}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}}n.BufferNamespaceApi=d},7975:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.ParserApi=void 0,n.ParserApi=class{constructor(o){this._core=o}registerCsiHandler(o,c){return this._core.registerCsiHandler(o,_=>c(_.toArray()))}addCsiHandler(o,c){return this.registerCsiHandler(o,c)}registerDcsHandler(o,c){return this._core.registerDcsHandler(o,(_,r)=>c(_,r.toArray()))}addDcsHandler(o,c){return this.registerDcsHandler(o,c)}registerEscHandler(o,c){return this._core.registerEscHandler(o,c)}addEscHandler(o,c){return this.registerEscHandler(o,c)}registerOscHandler(o,c){return this._core.registerOscHandler(o,c)}addOscHandler(o,c){return this.registerOscHandler(o,c)}}},7090:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.UnicodeApi=void 0,n.UnicodeApi=class{constructor(o){this._core=o}register(o){this._core.unicodeService.register(o)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(o){this._core.unicodeService.activeVersion=o}}},744:function(O,n,o){var c=this&&this.__decorate||function(i,s,e,t){var a,g=arguments.length,v=g<3?s:t===null?t=Object.getOwnPropertyDescriptor(s,e):t;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")v=Reflect.decorate(i,s,e,t);else for(var p=i.length-1;p>=0;p--)(a=i[p])&&(v=(g<3?a(v):g>3?a(s,e,v):a(s,e))||v);return g>3&&v&&Object.defineProperty(s,e,v),v},_=this&&this.__param||function(i,s){return function(e,t){s(e,t,i)}};Object.defineProperty(n,"__esModule",{value:!0}),n.BufferService=n.MINIMUM_ROWS=n.MINIMUM_COLS=void 0;const r=o(8460),d=o(844),f=o(5295),u=o(2585);n.MINIMUM_COLS=2,n.MINIMUM_ROWS=1;let h=n.BufferService=class extends d.Disposable{get buffer(){return this.buffers.active}constructor(i){super(),this.isUserScrolling=!1,this._onResize=this.register(new r.EventEmitter),this.onResize=this._onResize.event,this._onScroll=this.register(new r.EventEmitter),this.onScroll=this._onScroll.event,this.cols=Math.max(i.rawOptions.cols||0,n.MINIMUM_COLS),this.rows=Math.max(i.rawOptions.rows||0,n.MINIMUM_ROWS),this.buffers=this.register(new f.BufferSet(i,this))}resize(i,s){this.cols=i,this.rows=s,this.buffers.resize(i,s),this._onResize.fire({cols:i,rows:s})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(i,s=!1){const e=this.buffer;let t;t=this._cachedBlankLine,t&&t.length===this.cols&&t.getFg(0)===i.fg&&t.getBg(0)===i.bg||(t=e.getBlankLine(i,s),this._cachedBlankLine=t),t.isWrapped=s;const a=e.ybase+e.scrollTop,g=e.ybase+e.scrollBottom;if(e.scrollTop===0){const v=e.lines.isFull;g===e.lines.length-1?v?e.lines.recycle().copyFrom(t):e.lines.push(t.clone()):e.lines.splice(g+1,0,t.clone()),v?this.isUserScrolling&&(e.ydisp=Math.max(e.ydisp-1,0)):(e.ybase++,this.isUserScrolling||e.ydisp++)}else{const v=g-a+1;e.lines.shiftElements(a+1,v-1,-1),e.lines.set(g,t.clone())}this.isUserScrolling||(e.ydisp=e.ybase),this._onScroll.fire(e.ydisp)}scrollLines(i,s,e){const t=this.buffer;if(i<0){if(t.ydisp===0)return;this.isUserScrolling=!0}else i+t.ydisp>=t.ybase&&(this.isUserScrolling=!1);const a=t.ydisp;t.ydisp=Math.max(Math.min(t.ydisp+i,t.ybase),0),a!==t.ydisp&&(s||this._onScroll.fire(t.ydisp))}};n.BufferService=h=c([_(0,u.IOptionsService)],h)},7994:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CharsetService=void 0,n.CharsetService=class{constructor(){this.glevel=0,this._charsets=[]}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(o){this.glevel=o,this.charset=this._charsets[o]}setgCharset(o,c){this._charsets[o]=c,this.glevel===o&&(this.charset=c)}}},1753:function(O,n,o){var c=this&&this.__decorate||function(t,a,g,v){var p,l=arguments.length,S=l<3?a:v===null?v=Object.getOwnPropertyDescriptor(a,g):v;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")S=Reflect.decorate(t,a,g,v);else for(var E=t.length-1;E>=0;E--)(p=t[E])&&(S=(l<3?p(S):l>3?p(a,g,S):p(a,g))||S);return l>3&&S&&Object.defineProperty(a,g,S),S},_=this&&this.__param||function(t,a){return function(g,v){a(g,v,t)}};Object.defineProperty(n,"__esModule",{value:!0}),n.CoreMouseService=void 0;const r=o(2585),d=o(8460),f=o(844),u={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:t=>t.button!==4&&t.action===1&&(t.ctrl=!1,t.alt=!1,t.shift=!1,!0)},VT200:{events:19,restrict:t=>t.action!==32},DRAG:{events:23,restrict:t=>t.action!==32||t.button!==3},ANY:{events:31,restrict:t=>!0}};function h(t,a){let g=(t.ctrl?16:0)|(t.shift?4:0)|(t.alt?8:0);return t.button===4?(g|=64,g|=t.action):(g|=3&t.button,4&t.button&&(g|=64),8&t.button&&(g|=128),t.action===32?g|=32:t.action!==0||a||(g|=3)),g}const i=String.fromCharCode,s={DEFAULT:t=>{const a=[h(t,!1)+32,t.col+32,t.row+32];return a[0]>255||a[1]>255||a[2]>255?"":`\x1B[M${i(a[0])}${i(a[1])}${i(a[2])}`},SGR:t=>{const a=t.action===0&&t.button!==4?"m":"M";return`\x1B[<${h(t,!0)};${t.col};${t.row}${a}`},SGR_PIXELS:t=>{const a=t.action===0&&t.button!==4?"m":"M";return`\x1B[<${h(t,!0)};${t.x};${t.y}${a}`}};let e=n.CoreMouseService=class extends f.Disposable{constructor(t,a){super(),this._bufferService=t,this._coreService=a,this._protocols={},this._encodings={},this._activeProtocol="",this._activeEncoding="",this._lastEvent=null,this._onProtocolChange=this.register(new d.EventEmitter),this.onProtocolChange=this._onProtocolChange.event;for(const g of Object.keys(u))this.addProtocol(g,u[g]);for(const g of Object.keys(s))this.addEncoding(g,s[g]);this.reset()}addProtocol(t,a){this._protocols[t]=a}addEncoding(t,a){this._encodings[t]=a}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return this._protocols[this._activeProtocol].events!==0}set activeProtocol(t){if(!this._protocols[t])throw new Error(`unknown protocol "${t}"`);this._activeProtocol=t,this._onProtocolChange.fire(this._protocols[t].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(t){if(!this._encodings[t])throw new Error(`unknown encoding "${t}"`);this._activeEncoding=t}reset(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT",this._lastEvent=null}triggerMouseEvent(t){if(t.col<0||t.col>=this._bufferService.cols||t.row<0||t.row>=this._bufferService.rows||t.button===4&&t.action===32||t.button===3&&t.action!==32||t.button!==4&&(t.action===2||t.action===3)||(t.col++,t.row++,t.action===32&&this._lastEvent&&this._equalEvents(this._lastEvent,t,this._activeEncoding==="SGR_PIXELS"))||!this._protocols[this._activeProtocol].restrict(t))return!1;const a=this._encodings[this._activeEncoding](t);return a&&(this._activeEncoding==="DEFAULT"?this._coreService.triggerBinaryEvent(a):this._coreService.triggerDataEvent(a,!0)),this._lastEvent=t,!0}explainEvents(t){return{down:!!(1&t),up:!!(2&t),drag:!!(4&t),move:!!(8&t),wheel:!!(16&t)}}_equalEvents(t,a,g){if(g){if(t.x!==a.x||t.y!==a.y)return!1}else if(t.col!==a.col||t.row!==a.row)return!1;return t.button===a.button&&t.action===a.action&&t.ctrl===a.ctrl&&t.alt===a.alt&&t.shift===a.shift}};n.CoreMouseService=e=c([_(0,r.IBufferService),_(1,r.ICoreService)],e)},6975:function(O,n,o){var c=this&&this.__decorate||function(e,t,a,g){var v,p=arguments.length,l=p<3?t:g===null?g=Object.getOwnPropertyDescriptor(t,a):g;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")l=Reflect.decorate(e,t,a,g);else for(var S=e.length-1;S>=0;S--)(v=e[S])&&(l=(p<3?v(l):p>3?v(t,a,l):v(t,a))||l);return p>3&&l&&Object.defineProperty(t,a,l),l},_=this&&this.__param||function(e,t){return function(a,g){t(a,g,e)}};Object.defineProperty(n,"__esModule",{value:!0}),n.CoreService=void 0;const r=o(1439),d=o(8460),f=o(844),u=o(2585),h=Object.freeze({insertMode:!1}),i=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,origin:!1,reverseWraparound:!1,sendFocus:!1,wraparound:!0});let s=n.CoreService=class extends f.Disposable{constructor(e,t,a){super(),this._bufferService=e,this._logService=t,this._optionsService=a,this.isCursorInitialized=!1,this.isCursorHidden=!1,this._onData=this.register(new d.EventEmitter),this.onData=this._onData.event,this._onUserInput=this.register(new d.EventEmitter),this.onUserInput=this._onUserInput.event,this._onBinary=this.register(new d.EventEmitter),this.onBinary=this._onBinary.event,this._onRequestScrollToBottom=this.register(new d.EventEmitter),this.onRequestScrollToBottom=this._onRequestScrollToBottom.event,this.modes=(0,r.clone)(h),this.decPrivateModes=(0,r.clone)(i)}reset(){this.modes=(0,r.clone)(h),this.decPrivateModes=(0,r.clone)(i)}triggerDataEvent(e,t=!1){if(this._optionsService.rawOptions.disableStdin)return;const a=this._bufferService.buffer;t&&this._optionsService.rawOptions.scrollOnUserInput&&a.ybase!==a.ydisp&&this._onRequestScrollToBottom.fire(),t&&this._onUserInput.fire(),this._logService.debug(`sending data "${e}"`,()=>e.split("").map(g=>g.charCodeAt(0))),this._onData.fire(e)}triggerBinaryEvent(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${e}"`,()=>e.split("").map(t=>t.charCodeAt(0))),this._onBinary.fire(e))}};n.CoreService=s=c([_(0,u.IBufferService),_(1,u.ILogService),_(2,u.IOptionsService)],s)},9074:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.DecorationService=void 0;const c=o(8055),_=o(8460),r=o(844),d=o(6106);let f=0,u=0;class h extends r.Disposable{get decorations(){return this._decorations.values()}constructor(){super(),this._decorations=new d.SortedList(e=>e?.marker.line),this._onDecorationRegistered=this.register(new _.EventEmitter),this.onDecorationRegistered=this._onDecorationRegistered.event,this._onDecorationRemoved=this.register(new _.EventEmitter),this.onDecorationRemoved=this._onDecorationRemoved.event,this.register((0,r.toDisposable)(()=>this.reset()))}registerDecoration(e){if(e.marker.isDisposed)return;const t=new i(e);if(t){const a=t.marker.onDispose(()=>t.dispose());t.onDispose(()=>{t&&(this._decorations.delete(t)&&this._onDecorationRemoved.fire(t),a.dispose())}),this._decorations.insert(t),this._onDecorationRegistered.fire(t)}return t}reset(){for(const e of this._decorations.values())e.dispose();this._decorations.clear()}*getDecorationsAtCell(e,t,a){let g=0,v=0;for(const p of this._decorations.getKeyIterator(t))g=p.options.x??0,v=g+(p.options.width??1),e>=g&&e{f=v.options.x??0,u=f+(v.options.width??1),e>=f&&e{Object.defineProperty(n,"__esModule",{value:!0}),n.InstantiationService=n.ServiceCollection=void 0;const c=o(2585),_=o(8343);class r{constructor(...f){this._entries=new Map;for(const[u,h]of f)this.set(u,h)}set(f,u){const h=this._entries.get(f);return this._entries.set(f,u),h}forEach(f){for(const[u,h]of this._entries.entries())f(u,h)}has(f){return this._entries.has(f)}get(f){return this._entries.get(f)}}n.ServiceCollection=r,n.InstantiationService=class{constructor(){this._services=new r,this._services.set(c.IInstantiationService,this)}setService(d,f){this._services.set(d,f)}getService(d){return this._services.get(d)}createInstance(d,...f){const u=(0,_.getServiceDependencies)(d).sort((s,e)=>s.index-e.index),h=[];for(const s of u){const e=this._services.get(s.id);if(!e)throw new Error(`[createInstance] ${d.name} depends on UNKNOWN service ${s.id}.`);h.push(e)}const i=u.length>0?u[0].index:f.length;if(f.length!==i)throw new Error(`[createInstance] First service dependency of ${d.name} at position ${i+1} conflicts with ${f.length} static arguments`);return new d(...f,...h)}}},7866:function(O,n,o){var c=this&&this.__decorate||function(i,s,e,t){var a,g=arguments.length,v=g<3?s:t===null?t=Object.getOwnPropertyDescriptor(s,e):t;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")v=Reflect.decorate(i,s,e,t);else for(var p=i.length-1;p>=0;p--)(a=i[p])&&(v=(g<3?a(v):g>3?a(s,e,v):a(s,e))||v);return g>3&&v&&Object.defineProperty(s,e,v),v},_=this&&this.__param||function(i,s){return function(e,t){s(e,t,i)}};Object.defineProperty(n,"__esModule",{value:!0}),n.traceCall=n.setTraceLogger=n.LogService=void 0;const r=o(844),d=o(2585),f={trace:d.LogLevelEnum.TRACE,debug:d.LogLevelEnum.DEBUG,info:d.LogLevelEnum.INFO,warn:d.LogLevelEnum.WARN,error:d.LogLevelEnum.ERROR,off:d.LogLevelEnum.OFF};let u,h=n.LogService=class extends r.Disposable{get logLevel(){return this._logLevel}constructor(i){super(),this._optionsService=i,this._logLevel=d.LogLevelEnum.OFF,this._updateLogLevel(),this.register(this._optionsService.onSpecificOptionChange("logLevel",()=>this._updateLogLevel())),u=this}_updateLogLevel(){this._logLevel=f[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(i){for(let s=0;sJSON.stringify(v)).join(", ")})`);const g=t.apply(this,a);return u.trace(`GlyphRenderer#${t.name} return`,g),g}}},7302:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.OptionsService=n.DEFAULT_OPTIONS=void 0;const c=o(8460),_=o(844),r=o(6114);n.DEFAULT_OPTIONS={cols:80,rows:24,cursorBlink:!1,cursorStyle:"block",cursorWidth:1,cursorInactiveStyle:"outline",customGlyphs:!0,drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollModifier:"alt",fastScrollSensitivity:5,fontFamily:"courier-new, courier, monospace",fontSize:15,fontWeight:"normal",fontWeightBold:"bold",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:"info",logger:null,scrollback:1e3,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},rescaleOverlappingGlyphs:!1,rightClickSelectsWord:r.isMac,windowOptions:{},windowsMode:!1,windowsPty:{},wordSeparator:" ()[]{}',\"`",altClickMovesCursor:!0,convertEol:!1,termName:"xterm",cancelEvents:!1,overviewRulerWidth:0};const d=["normal","bold","100","200","300","400","500","600","700","800","900"];class f extends _.Disposable{constructor(h){super(),this._onOptionChange=this.register(new c.EventEmitter),this.onOptionChange=this._onOptionChange.event;const i={...n.DEFAULT_OPTIONS};for(const s in h)if(s in i)try{const e=h[s];i[s]=this._sanitizeAndValidateOption(s,e)}catch(e){console.error(e)}this.rawOptions=i,this.options={...i},this._setupOptions(),this.register((0,_.toDisposable)(()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null}))}onSpecificOptionChange(h,i){return this.onOptionChange(s=>{s===h&&i(this.rawOptions[h])})}onMultipleOptionChange(h,i){return this.onOptionChange(s=>{h.indexOf(s)!==-1&&i()})}_setupOptions(){const h=s=>{if(!(s in n.DEFAULT_OPTIONS))throw new Error(`No option with key "${s}"`);return this.rawOptions[s]},i=(s,e)=>{if(!(s in n.DEFAULT_OPTIONS))throw new Error(`No option with key "${s}"`);e=this._sanitizeAndValidateOption(s,e),this.rawOptions[s]!==e&&(this.rawOptions[s]=e,this._onOptionChange.fire(s))};for(const s in this.rawOptions){const e={get:h.bind(this,s),set:i.bind(this,s)};Object.defineProperty(this.options,s,e)}}_sanitizeAndValidateOption(h,i){switch(h){case"cursorStyle":if(i||(i=n.DEFAULT_OPTIONS[h]),!function(s){return s==="block"||s==="underline"||s==="bar"}(i))throw new Error(`"${i}" is not a valid value for ${h}`);break;case"wordSeparator":i||(i=n.DEFAULT_OPTIONS[h]);break;case"fontWeight":case"fontWeightBold":if(typeof i=="number"&&1<=i&&i<=1e3)break;i=d.includes(i)?i:n.DEFAULT_OPTIONS[h];break;case"cursorWidth":i=Math.floor(i);case"lineHeight":case"tabStopWidth":if(i<1)throw new Error(`${h} cannot be less than 1, value: ${i}`);break;case"minimumContrastRatio":i=Math.max(1,Math.min(21,Math.round(10*i)/10));break;case"scrollback":if((i=Math.min(i,4294967295))<0)throw new Error(`${h} cannot be less than 0, value: ${i}`);break;case"fastScrollSensitivity":case"scrollSensitivity":if(i<=0)throw new Error(`${h} cannot be less than or equal to 0, value: ${i}`);break;case"rows":case"cols":if(!i&&i!==0)throw new Error(`${h} must be numeric, value: ${i}`);break;case"windowsPty":i=i??{}}return i}}n.OptionsService=f},2660:function(O,n,o){var c=this&&this.__decorate||function(f,u,h,i){var s,e=arguments.length,t=e<3?u:i===null?i=Object.getOwnPropertyDescriptor(u,h):i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")t=Reflect.decorate(f,u,h,i);else for(var a=f.length-1;a>=0;a--)(s=f[a])&&(t=(e<3?s(t):e>3?s(u,h,t):s(u,h))||t);return e>3&&t&&Object.defineProperty(u,h,t),t},_=this&&this.__param||function(f,u){return function(h,i){u(h,i,f)}};Object.defineProperty(n,"__esModule",{value:!0}),n.OscLinkService=void 0;const r=o(2585);let d=n.OscLinkService=class{constructor(f){this._bufferService=f,this._nextId=1,this._entriesWithId=new Map,this._dataByLinkId=new Map}registerLink(f){const u=this._bufferService.buffer;if(f.id===void 0){const a=u.addMarker(u.ybase+u.y),g={data:f,id:this._nextId++,lines:[a]};return a.onDispose(()=>this._removeMarkerFromLink(g,a)),this._dataByLinkId.set(g.id,g),g.id}const h=f,i=this._getEntryIdKey(h),s=this._entriesWithId.get(i);if(s)return this.addLineToLink(s.id,u.ybase+u.y),s.id;const e=u.addMarker(u.ybase+u.y),t={id:this._nextId++,key:this._getEntryIdKey(h),data:h,lines:[e]};return e.onDispose(()=>this._removeMarkerFromLink(t,e)),this._entriesWithId.set(t.key,t),this._dataByLinkId.set(t.id,t),t.id}addLineToLink(f,u){const h=this._dataByLinkId.get(f);if(h&&h.lines.every(i=>i.line!==u)){const i=this._bufferService.buffer.addMarker(u);h.lines.push(i),i.onDispose(()=>this._removeMarkerFromLink(h,i))}}getLinkData(f){return this._dataByLinkId.get(f)?.data}_getEntryIdKey(f){return`${f.id};;${f.uri}`}_removeMarkerFromLink(f,u){const h=f.lines.indexOf(u);h!==-1&&(f.lines.splice(h,1),f.lines.length===0&&(f.data.id!==void 0&&this._entriesWithId.delete(f.key),this._dataByLinkId.delete(f.id)))}};n.OscLinkService=d=c([_(0,r.IBufferService)],d)},8343:(O,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.createDecorator=n.getServiceDependencies=n.serviceRegistry=void 0;const o="di$target",c="di$dependencies";n.serviceRegistry=new Map,n.getServiceDependencies=function(_){return _[c]||[]},n.createDecorator=function(_){if(n.serviceRegistry.has(_))return n.serviceRegistry.get(_);const r=function(d,f,u){if(arguments.length!==3)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");(function(h,i,s){i[o]===i?i[c].push({id:h,index:s}):(i[c]=[{id:h,index:s}],i[o]=i)})(r,d,u)};return r.toString=()=>_,n.serviceRegistry.set(_,r),r}},2585:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.IDecorationService=n.IUnicodeService=n.IOscLinkService=n.IOptionsService=n.ILogService=n.LogLevelEnum=n.IInstantiationService=n.ICharsetService=n.ICoreService=n.ICoreMouseService=n.IBufferService=void 0;const c=o(8343);var _;n.IBufferService=(0,c.createDecorator)("BufferService"),n.ICoreMouseService=(0,c.createDecorator)("CoreMouseService"),n.ICoreService=(0,c.createDecorator)("CoreService"),n.ICharsetService=(0,c.createDecorator)("CharsetService"),n.IInstantiationService=(0,c.createDecorator)("InstantiationService"),function(r){r[r.TRACE=0]="TRACE",r[r.DEBUG=1]="DEBUG",r[r.INFO=2]="INFO",r[r.WARN=3]="WARN",r[r.ERROR=4]="ERROR",r[r.OFF=5]="OFF"}(_||(n.LogLevelEnum=_={})),n.ILogService=(0,c.createDecorator)("LogService"),n.IOptionsService=(0,c.createDecorator)("OptionsService"),n.IOscLinkService=(0,c.createDecorator)("OscLinkService"),n.IUnicodeService=(0,c.createDecorator)("UnicodeService"),n.IDecorationService=(0,c.createDecorator)("DecorationService")},1480:(O,n,o)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.UnicodeService=void 0;const c=o(8460),_=o(225);class r{static extractShouldJoin(f){return(1&f)!=0}static extractWidth(f){return f>>1&3}static extractCharKind(f){return f>>3}static createPropertyValue(f,u,h=!1){return(16777215&f)<<3|(3&u)<<1|(h?1:0)}constructor(){this._providers=Object.create(null),this._active="",this._onChange=new c.EventEmitter,this.onChange=this._onChange.event;const f=new _.UnicodeV6;this.register(f),this._active=f.version,this._activeProvider=f}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(f){if(!this._providers[f])throw new Error(`unknown Unicode version "${f}"`);this._active=f,this._activeProvider=this._providers[f],this._onChange.fire(f)}register(f){this._providers[f.version]=f}wcwidth(f){return this._activeProvider.wcwidth(f)}getStringCellWidth(f){let u=0,h=0;const i=f.length;for(let s=0;s=i)return u+this.wcwidth(e);const g=f.charCodeAt(s);56320<=g&&g<=57343?e=1024*(e-55296)+g-56320+65536:u+=this.wcwidth(g)}const t=this.charProperties(e,h);let a=r.extractWidth(t);r.extractShouldJoin(t)&&(a-=r.extractWidth(h)),u+=a,h=t}return u}charProperties(f,u){return this._activeProvider.charProperties(f,u)}}n.UnicodeService=r}},Y={};function Z(O){var n=Y[O];if(n!==void 0)return n.exports;var o=Y[O]={exports:{}};return X[O].call(o.exports,o,o.exports,Z),o.exports}var he={};return(()=>{var O=he;Object.defineProperty(O,"__esModule",{value:!0}),O.Terminal=void 0;const n=Z(9042),o=Z(3236),c=Z(844),_=Z(5741),r=Z(8285),d=Z(7975),f=Z(7090),u=["cols","rows"];class h extends c.Disposable{constructor(s){super(),this._core=this.register(new o.Terminal(s)),this._addonManager=this.register(new _.AddonManager),this._publicOptions={...this._core.options};const e=a=>this._core.options[a],t=(a,g)=>{this._checkReadonlyOptions(a),this._core.options[a]=g};for(const a in this._core.options){const g={get:e.bind(this,a),set:t.bind(this,a)};Object.defineProperty(this._publicOptions,a,g)}}_checkReadonlyOptions(s){if(u.includes(s))throw new Error(`Option "${s}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw new Error("You must set the allowProposedApi option to true to use proposed API")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get element(){return this._core.element}get parser(){return this._parser||(this._parser=new d.ParserApi(this._core)),this._parser}get unicode(){return this._checkProposedApi(),new f.UnicodeApi(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer||(this._buffer=this.register(new r.BufferNamespaceApi(this._core))),this._buffer}get markers(){return this._checkProposedApi(),this._core.markers}get modes(){const s=this._core.coreService.decPrivateModes;let e="none";switch(this._core.coreMouseService.activeProtocol){case"X10":e="x10";break;case"VT200":e="vt200";break;case"DRAG":e="drag";break;case"ANY":e="any"}return{applicationCursorKeysMode:s.applicationCursorKeys,applicationKeypadMode:s.applicationKeypad,bracketedPasteMode:s.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:e,originMode:s.origin,reverseWraparoundMode:s.reverseWraparound,sendFocusMode:s.sendFocus,wraparoundMode:s.wraparound}}get options(){return this._publicOptions}set options(s){for(const e in s)this._publicOptions[e]=s[e]}blur(){this._core.blur()}focus(){this._core.focus()}input(s,e=!0){this._core.input(s,e)}resize(s,e){this._verifyIntegers(s,e),this._core.resize(s,e)}open(s){this._core.open(s)}attachCustomKeyEventHandler(s){this._core.attachCustomKeyEventHandler(s)}attachCustomWheelEventHandler(s){this._core.attachCustomWheelEventHandler(s)}registerLinkProvider(s){return this._core.registerLinkProvider(s)}registerCharacterJoiner(s){return this._checkProposedApi(),this._core.registerCharacterJoiner(s)}deregisterCharacterJoiner(s){this._checkProposedApi(),this._core.deregisterCharacterJoiner(s)}registerMarker(s=0){return this._verifyIntegers(s),this._core.registerMarker(s)}registerDecoration(s){return this._checkProposedApi(),this._verifyPositiveIntegers(s.x??0,s.width??0,s.height??0),this._core.registerDecoration(s)}hasSelection(){return this._core.hasSelection()}select(s,e,t){this._verifyIntegers(s,e,t),this._core.select(s,e,t)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(s,e){this._verifyIntegers(s,e),this._core.selectLines(s,e)}dispose(){super.dispose()}scrollLines(s){this._verifyIntegers(s),this._core.scrollLines(s)}scrollPages(s){this._verifyIntegers(s),this._core.scrollPages(s)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(s){this._verifyIntegers(s),this._core.scrollToLine(s)}clear(){this._core.clear()}write(s,e){this._core.write(s,e)}writeln(s,e){this._core.write(s),this._core.write(`\r +`,e)}paste(s){this._core.paste(s)}refresh(s,e){this._verifyIntegers(s,e),this._core.refresh(s,e)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(s){this._addonManager.loadAddon(this,s)}static get strings(){return n}_verifyIntegers(...s){for(const e of s)if(e===1/0||isNaN(e)||e%1!=0)throw new Error("This API only accepts integers")}_verifyPositiveIntegers(...s){for(const e of s)if(e&&(e===1/0||isNaN(e)||e%1!=0||e<0))throw new Error("This API only accepts positive integers")}}O.Terminal=h})(),he})())}(Ye)),Ye.exports}var at=zt(),Je={exports:{}},ht;function jt(){return ht||(ht=1,function(oe,re){(function(X,Y){oe.exports=Y()})(self,()=>(()=>{var X={};return(()=>{var Y=X;Object.defineProperty(Y,"__esModule",{value:!0}),Y.FitAddon=void 0,Y.FitAddon=class{activate(Z){this._terminal=Z}dispose(){}fit(){const Z=this.proposeDimensions();if(!Z||!this._terminal||isNaN(Z.cols)||isNaN(Z.rows))return;const he=this._terminal._core;this._terminal.rows===Z.rows&&this._terminal.cols===Z.cols||(he._renderService.clear(),this._terminal.resize(Z.cols,Z.rows))}proposeDimensions(){if(!this._terminal||!this._terminal.element||!this._terminal.element.parentElement)return;const Z=this._terminal._core,he=Z._renderService.dimensions;if(he.css.cell.width===0||he.css.cell.height===0)return;const O=this._terminal.options.scrollback===0?0:Z.viewport.scrollBarWidth,n=window.getComputedStyle(this._terminal.element.parentElement),o=parseInt(n.getPropertyValue("height")),c=Math.max(0,parseInt(n.getPropertyValue("width"))),_=window.getComputedStyle(this._terminal.element),r=o-(parseInt(_.getPropertyValue("padding-top"))+parseInt(_.getPropertyValue("padding-bottom"))),d=c-(parseInt(_.getPropertyValue("padding-right"))+parseInt(_.getPropertyValue("padding-left")))-O;return{cols:Math.max(2,Math.floor(d/he.css.cell.width)),rows:Math.max(1,Math.floor(r/he.css.cell.height))}}}})(),X})())}(Je)),Je.exports}var Ze=jt(),qt=lt(''),Kt=lt(''),Vt=We('
'),Gt=We('
Connecting to shell...
'),Xt=We('

Connection Error

'),Yt=We("
"),Jt=We('
'),Zt=We('
');function ai(oe,re){Et(re,!1);const X=we(),Y=we(),Z=we(),he=we(),O=we(),n=we(),o=we();let c=st(re,"runnerName",8),_=st(re,"onClose",8),r=we(new Map),d=we(""),f=1,u=we(),h=we(!1),i=!1,s=!1,e=0,t=0,a=0,g=0,v=0,p=0,l=800,S=500,E=0,k=0,x=!1;const w="garm-terminal-dimensions",T="garm-terminal-container-size";function I(){try{const D=localStorage.getItem(w);if(D){const{cols:B,rows:F}=JSON.parse(D);if(B>=50&&F>=15)return{cols:B,rows:F}}}catch(D){console.warn("Failed to load stored terminal dimensions:",D)}return{cols:107,rows:29}}function $(){try{const D=localStorage.getItem(T);if(D){const{width:B,height:F}=JSON.parse(D);if(B>=300&&F>=200&&B<=1400&&F<=800)return{width:B,height:F}}}catch(D){console.warn("Failed to load stored container size:",D)}return{width:800,height:500}}function j(D,B){if(D>=300&&B>=200&&D<=1400&&B<=800)try{localStorage.setItem(T,JSON.stringify({width:D,height:B})),console.log(`saveContainerSize: Saved ${D}x${B}px to localStorage`)}catch(F){console.warn("Failed to save container size:",F)}else console.warn(`saveContainerSize: Rejecting invalid size ${D}x${B}`)}function W(D,B){if(D>=50&&B>=15&&D<=200&&B<=60){const F=I();if(F.cols!==D||F.rows!==B)try{localStorage.setItem(w,JSON.stringify({cols:D,rows:B})),console.log(`saveDimensions: Saved ${D}x${B} to localStorage (was ${F.cols}x${F.rows})`)}catch(G){console.warn("Failed to save terminal dimensions:",G)}else console.log(`saveDimensions: Skipping save - ${D}x${B} already stored`)}else console.warn(`saveDimensions: Rejecting invalid dimensions ${D}x${B}`)}let{cols:m,rows:b}=I();console.log(`ShellTerminal: Loaded stored dimensions ${m}x${b} from localStorage`);function y(){const D=`shell-${f}`,B={id:f,key:D,title:`Shell ${f}`,connection:null,terminal:null,fitAddon:null,isInitialized:!1,isConnecting:!0,isConnected:!1,error:"",isClosing:!1};return R(r).set(D,B),ne(r,R(r)),f++,D}function L(D){R(d)!==D&&(console.log(`switchToTab: Switching from ${R(d)} to ${D} (z-index stacking)`),ne(d,D))}function P(D){console.log(`closeTab: Closing tab ${D}`);const B=R(r).get(D);if(!B){console.error(`closeTab: Tab ${D} not found`);return}const F=m,G=b;if(console.log(`closeTab: Preserving dimensions ${F}x${G} during tab close`),R(d)===D)if(R(r).size>1){const ue=Array.from(R(r).values()).sort((be,fe)=>be.id-fe.id),ce=B;let Q;const ae=ue.find(be=>be.id>ce.id);ae?Q=ae:Q=ue.filter(fe=>fe.idye.id-fe.id)[0],Q?(console.log(`closeTab: Switching from active tab ${D} (ID: ${ce.id}) to ${Q.key} (ID: ${Q.id}) before cleanup`),L(Q.key),B.isClosing=!0,R(r).set(D,B),ne(r,R(r)),m=F,b=G,console.log(`closeTab: Preserved dimensions ${m}x${b} for future use`)):(console.log("closeTab: No other tabs left, closing terminal"),_()())}else console.log("closeTab: No other tabs left, closing terminal"),_()();else console.log(`closeTab: Closing inactive tab ${D}`),U(B),R(r).delete(D),ne(r,R(r))}function U(D){if(console.log(`cleanupTab: Cleaning up tab ${D.key}`),D.connection&&(console.log(`cleanupTab: Closing connection for tab ${D.key}`),D.connection.close(),D.connection=null),D.terminal){console.log(`cleanupTab: Disposing terminal for tab ${D.key}`);try{D.terminal.dispose()}catch(B){console.error(`cleanupTab: Error disposing terminal for tab ${D.key}:`,B)}D.terminal=null}D.fitAddon=null,D.isInitialized=!1,D.isConnected=!1,D.isConnecting=!1}async function q(D){const B=R(r).get(D);if(B)try{const F=await Nt(c(),G=>z(D,G),()=>N(D),()=>J(D),G=>se(D,G));B.connection=F,R(r).set(D,B),ne(r,R(r))}catch(F){B.error=F instanceof Error?F.message:"Failed to connect",B.isConnecting=!1,R(r).set(D,B),ne(r,R(r))}}function K(D,B){if(console.log(`initializeTerminalElement: Action called for ${B.key}, hasTerminal=${!!B.terminal}, isInitialized=${B.isInitialized}`),B.terminal&&!B.isInitialized){console.log(`initializeTerminalElement: Initializing terminal for ${B.key} via Svelte action`),B.fitAddon||(B.fitAddon=new Ze.FitAddon,B.terminal.loadAddon(B.fitAddon));try{B.terminal.open(D),console.log(`initializeTerminalElement: Successfully opened terminal ${B.key} in DOM element`)}catch(F){console.error(`initializeTerminalElement: Failed to open terminal ${B.key}:`,F);return}B.terminal.onData(F=>{if(B.connection&&B.isConnected){const G=new TextEncoder;B.connection.sendData(G.encode(F))}}),B.terminal.onResize(({cols:F,rows:G})=>{B.connection&&B.isConnected&&B.connection.resize(F,G)}),B.isInitialized=!0,R(r).set(B.key,B),ne(r,R(r)),B.key===R(d)&&B.terminal.focus(),console.log(`initializeTerminalElement: Terminal ${B.key} fully initialized and opened in DOM`)}else console.log(`initializeTerminalElement: Skipping ${B.key} - no terminal object or already initialized`);return{destroy(){console.log(`initializeTerminalElement: DOM element being destroyed for ${B.key}`)}}}function A(){const D=R(r).get(R(d));if(D?.terminal&&D.fitAddon&&D.terminal.element){D.fitAddon.fit();const B=D.terminal.cols,F=D.terminal.rows;if(B>=50&&F>=15){m=B,b=F,console.log(`fitAllTerminals: Active terminal ${D.key} is ${B}x${F}, applying to all tabs`);for(const G of R(r).values())G.terminal&&G.connection&&G.isConnected&&(G.key===R(d)?(console.log(`fitAllTerminals: Notifying active terminal ${G.key} connection about resize to ${m}x${b}`),G.connection.resize(m,b)):(console.log(`fitAllTerminals: Resizing hidden terminal ${G.key} buffer and connection to ${m}x${b}`),G.terminal.resize(m,b),G.connection.resize(m,b)))}else console.warn(`fitAllTerminals: Active terminal has tiny dimensions ${B}x${F}, skipping update`)}}const C={background:"#002b36",foreground:"#839496",cursor:"#93a1a1",black:"#073642",red:"#dc322f",green:"#859900",yellow:"#b58900",blue:"#268bd2",magenta:"#d33682",cyan:"#2aa198",white:"#eee8d5",brightBlack:"#586e75",brightRed:"#cb4b16",brightGreen:"#859900",brightYellow:"#b58900",brightBlue:"#268bd2",brightMagenta:"#d33682",brightCyan:"#2aa198",brightWhite:"#fdf6e3"},M={background:"#2d3748",foreground:"#e2e8f0",cursor:"#cbd5e0",black:"#1a202c",red:"#e53e3e",green:"#38a169",yellow:"#d69e2e",blue:"#3182ce",magenta:"#9f7aea",cyan:"#0bc5ea",white:"#f7fafc",brightBlack:"#4a5568",brightRed:"#fc8181",brightGreen:"#68d391",brightYellow:"#f6e05e",brightBlue:"#63b3ed",brightMagenta:"#b794f6",brightCyan:"#76e4f7",brightWhite:"#ffffff"};function H(){const B=document.documentElement.classList.contains("dark")?C:M;for(const F of R(r).values())F.terminal&&(F.terminal.options.theme=B,F.fitAddon&&setTimeout(()=>F.fitAddon?.fit(),0))}kt(()=>{const D=I(),B=$();m=D.cols,b=D.rows,console.log(`ShellTerminal onMount: Using dimensions ${m}x${b} and container size ${B.width}x${B.height}`);const F=B.width,G=B.height;R(u)&&(te(u,R(u).style.width=`${F}px`),te(u,R(u).style.height=`${G}px`));const ce=document.documentElement.classList.contains("dark")?C:M,Q=y();ne(d,Q);const ae=new at.Terminal({cursorBlink:!0,theme:ce,fontSize:13,fontFamily:'Monaco, "Menlo", "Ubuntu Mono", monospace',allowTransparency:!0}),be=new Ze.FitAddon;ae.loadAddon(be);const fe=R(r).get(Q);fe&&(fe.terminal=ae,fe.fitAddon=be,R(r).set(Q,fe),ne(r,R(r))),q(Q);function ye(){clearTimeout(ee),ee=setTimeout(()=>{A()},100)}const Ae=new MutationObserver(()=>H());return Ae.observe(document.documentElement,{attributes:!0,attributeFilter:["class"]}),window.addEventListener("resize",ye),document.addEventListener("fullscreenchange",Pe),document.addEventListener("keydown",Oe),()=>{window.removeEventListener("resize",ye),document.removeEventListener("fullscreenchange",Pe),document.removeEventListener("keydown",Oe),Ae.disconnect()}}),Lt(()=>{for(const D of R(r).values())U(D)});function z(D,B){const F=R(r).get(D);if(F?.terminal){const G=new TextDecoder().decode(B);F.terminal.write(G)}}function N(D){const B=R(r).get(D);if(B&&(B.isConnecting=!1,B.isConnected=!0,R(r).set(D,B),ne(r,R(r)),B.connection&&B.terminal&&B.fitAddon)){console.log(`handleReady: Terminal ${D} connected, fitting to restored container`),B.fitAddon.fit();const F=B.terminal.cols,G=B.terminal.rows;console.log(`handleReady: Terminal fitted to ${F}x${G}, sending to server`),B.connection.resize(F,G),F>=50&&G>=15&&(m=F,b=G)}}function J(D){const B=R(r).get(D);B&&(B.isConnected=!1,R(r).set(D,B),ne(r,R(r)),B.terminal&&B.terminal.write(`\r +[Shell session ended]`))}function se(D,B){const F=R(r).get(D);F&&(F.error=B,F.isConnecting=!1,F.isConnected=!1,R(r).set(D,F),ne(r,R(r)))}let ee;function le(){if(R(r).size>=5){console.log("addNewTab: Maximum number of tabs (5) reached");return}const B=document.documentElement.classList.contains("dark")?C:M,F=y(),G=new at.Terminal({cursorBlink:!0,theme:B,fontSize:13,fontFamily:'Monaco, "Menlo", "Ubuntu Mono", monospace',allowTransparency:!0}),ue=new Ze.FitAddon;G.loadAddon(ue);const ce=R(r).get(F);ce&&(ce.terminal=G,ce.fitAddon=ue,R(r).set(F,ce),ne(r,R(r))),L(F),q(F)}function V(){R(h)?(x=!0,Me(),document.exitFullscreen?.()):(Ee(),R(u).requestFullscreen?.())}function Ee(){const D=R(u).getBoundingClientRect();l=D.width,S=D.height,E=D.left,k=D.top}function Me(){te(u,R(u).style.position="absolute"),te(u,R(u).style.width=`${l}px`),te(u,R(u).style.height=`${S}px`),te(u,R(u).style.left=`${E}px`),te(u,R(u).style.top=`${k}px`),te(u,R(u).style.margin="0"),te(u,R(u).style.zIndex="1000")}function Oe(D){D.key==="Escape"&&R(h)&&!x&&(x=!0,Me())}function Pe(){const D=R(h);ne(h,!!document.fullscreenElement),D&&!R(h)?(x||Me(),x=!1,setTimeout(()=>{A()},10)):!D&&R(h)&&(te(u,R(u).style.position=""),te(u,R(u).style.width=""),te(u,R(u).style.height=""),te(u,R(u).style.left=""),te(u,R(u).style.top=""),te(u,R(u).style.margin=""),te(u,R(u).style.zIndex=""),x=!1,setTimeout(()=>{A()},10))}function Ie(D){R(h)||(i=!0,e=D.clientX,t=D.clientY,a=R(u).offsetWidth,g=R(u).offsetHeight,D.preventDefault(),document.addEventListener("mousemove",de),document.addEventListener("mouseup",Re),document.body.style.userSelect="none",document.body.style.cursor="nw-resize")}function de(D){if(!i)return;const B=D.clientX-e,F=D.clientY-t,ae=R(X).filter(Ne=>!Ne.isClosing).length*120+50+40,be=Math.max(ae,300),fe=window.innerWidth-32,ye=window.innerHeight-32,Ae=Math.max(be,Math.min(fe,a+B)),Ue=Math.max(200,Math.min(ye,g+F));te(u,R(u).style.width=`${Ae}px`),te(u,R(u).style.height=`${Ue}px`),clearTimeout(ee),ee=setTimeout(()=>{A()},50)}function Re(){if(i=!1,document.removeEventListener("mousemove",de),document.removeEventListener("mouseup",Re),document.body.style.userSelect="",document.body.style.cursor="",!R(h)){Ee();const D=R(u).offsetWidth,B=R(u).offsetHeight;j(D,B)}setTimeout(()=>{const D=R(r).get(R(d));if(D?.terminal&&D.fitAddon&&D.terminal.element){D.fitAddon.fit();const B=D.terminal.cols,F=D.terminal.rows;B>=50&&F>=15&&(console.log(`stopResize: Saving new dimensions from manual resize: ${B}x${F}`),m=B,b=F,W(B,F))}A()},100)}function pe(D){if(R(h))return;const B=D.target;if(B.tagName==="BUTTON"||B.closest("button"))return;s=!0,e=D.clientX,t=D.clientY;const F=R(u).getBoundingClientRect();v=F.left,p=F.top,D.preventDefault(),D.stopPropagation(),document.addEventListener("mousemove",xe),document.addEventListener("mouseup",He),document.body.style.userSelect="none",document.body.style.cursor="move",te(u,R(u).style.position="absolute"),te(u,R(u).style.left=`${v}px`),te(u,R(u).style.top=`${p}px`),te(u,R(u).style.margin="0"),te(u,R(u).style.zIndex="1000")}function xe(D){if(!s)return;const B=D.clientX-e,F=D.clientY-t,G=Math.max(0,Math.min(window.innerWidth-R(u).offsetWidth,v+B)),ue=Math.max(0,Math.min(window.innerHeight-R(u).offsetHeight,p+F));te(u,R(u).style.left=`${G}px`),te(u,R(u).style.top=`${ue}px`)}function He(){s=!1,document.removeEventListener("mousemove",xe),document.removeEventListener("mouseup",He),document.body.style.userSelect="",document.body.style.cursor="",R(h)||Ee()}me(()=>(R(r),R(d)),()=>{const D=Array.from(R(r).entries()).filter(([B,F])=>F.isClosing&&F.key!==R(d));if(D.length>0){const[B,F]=D[0];console.log(`Reactive cleanup: Cleaning up tab ${F.key} that is closing and inactive`),U(F),R(r).delete(B),ne(r,R(r))}}),me(()=>R(r),()=>{ne(X,Array.from(R(r).values()).sort((D,B)=>D.id-B.id))}),me(()=>(R(X),R(u),R(h)),()=>{const D=R(X).filter(ae=>!ae.isClosing).length,ue=D*120+50+40,Q=Math.max(ue,300);if(R(u)&&!R(h)){const ae=R(u).offsetWidth;ae{A()},10))}}),me(()=>(R(X),R(r)),()=>{console.log(`Reactive tabs array updated: ${R(X).length} tabs`,R(X).map(D=>({key:D.key,id:D.id,title:D.title,isClosing:D.isClosing}))),console.log(`Map has ${R(r).size} entries:`,Array.from(R(r).keys())),console.log(`Filtered tabs for rendering: ${R(X).filter(D=>!D.isClosing).length} tabs`,R(X).filter(D=>!D.isClosing).map(D=>({key:D.key,title:D.title})))}),me(()=>(R(r),R(d)),()=>{ne(Y,R(r).get(R(d))||null)}),me(()=>R(Y),()=>{ne(Z,R(Y)?.connection||null)}),me(()=>R(Y),()=>{ne(he,R(Y)?.terminal||null)}),me(()=>R(Y),()=>{ne(O,R(Y)?.isConnecting||!1)}),me(()=>R(Y),()=>{ne(n,R(Y)?.isConnected||!1)}),me(()=>R(Y),()=>{ne(o,R(Y)?.error||"")}),me(()=>R(d),()=>{R(d)&&console.log(`Reactive: activeTabKey changed to ${R(d)}, this should bring tab to front`)}),me(()=>(R(d),R(r),it),()=>{if(R(d)&&R(r).size>0){const D=R(r).get(R(d));D?.terminal&&D.isInitialized&&D.isConnected&&(console.log(`Reactive focus: Bringing terminal ${R(d)} to front`),it().then(()=>{D.terminal&&(console.log(`Reactive focus: Focusing terminal ${R(d)}`),D.terminal.focus())}))}}),Dt(),St();var ge=Zt(),ke=ve(ge),Ce=ve(ke),Le=ve(Ce),ie=ve(Le);_e(Le);var $e=Be(Le,2),Fe=ve($e),ut=ve(Fe);{var _t=D=>{var B=qt();De(D,B)},ft=D=>{var B=Kt();De(D,B)};je(ut,D=>{R(h)?D(_t):D(ft,!1)})}_e(Fe);var vt=Be(Fe,4);_e($e),_e(Ce),_e(ke);var Ke=Be(ke,2),et=ve(Ke),tt=ve(et);rt(tt,1,()=>(R(X),Se(()=>R(X).filter(D=>!D.isClosing))),D=>D.key,(D,B)=>{var F=Vt(),G=ve(F),ue=ve(G,!0);_e(G);var ce=Be(G,2);_e(F),ze(()=>{nt(F,1,`tab ${R(B),R(d),Se(()=>R(B).key===R(d)?"active":"")??""}`,"svelte-oanjs5"),Xe(ue,(R(B),Se(()=>R(B).title)))}),Te("click",ce,Tt(()=>P(R(B).key))),Te("click",F,()=>L(R(B).key)),Te("keydown",F,Q=>{(Q.key==="Enter"||Q.key===" ")&&(Q.preventDefault(),L(R(B).key))}),De(D,F)});var Ve=Be(tt,2);_e(et),_e(Ke);var Ge=Be(Ke,2);rt(Ge,5,()=>(R(X),Se(()=>R(X).filter(D=>!D.isClosing))),D=>D.key,(D,B)=>{var F=Yt(),G=ve(F);{var ue=Q=>{var ae=Gt();De(Q,ae)},ce=Q=>{var ae=Rt(),be=xt(ae);{var fe=ye=>{var Ae=Xt(),Ue=ve(Ae),Ne=Be(ve(Ue),4),mt=ve(Ne,!0);_e(Ne),_e(Ue),_e(Ae),ze(()=>Xe(mt,(R(B),Se(()=>R(B).error)))),De(ye,Ae)};je(be,ye=>{R(B),Se(()=>R(B).error)&&ye(fe)},!0)}De(Q,ae)};je(G,Q=>{R(B),Se(()=>R(B).isConnecting)?Q(ue):Q(ce,!1)})}_e(F),Mt(F,(Q,ae)=>K?.(Q,ae),()=>R(B)),ze(()=>{nt(F,1,`terminal-tab ${R(B),R(d),Se(()=>R(B).key===R(d)?"active":"")??""}`,"svelte-oanjs5"),qe(F,"data-tab-key",(R(B),Se(()=>R(B).key)))}),De(D,F)}),_e(Ge);var gt=Be(Ge,2);{var pt=D=>{var B=Jt();Te("mousedown",B,Ie),De(D,B)};je(gt,D=>{R(h)||D(pt)})}_e(ge),Bt(ge,D=>ne(u,D),()=>R(u)),ze(()=>{Xe(ie,`Shell - ${c()??""}`),qe(Fe,"title",R(h)?"Restore":"Maximize"),qe(Fe,"aria-label",R(h)?"Restore":"Maximize"),Ve.disabled=(R(r),Se(()=>R(r).size>=5)),qe(Ve,"title",(R(r),Se(()=>R(r).size>=5?"Maximum 5 tabs allowed":"New tab")))}),Te("click",Fe,V),Te("click",vt,function(...D){_()?.apply(this,D)}),Te("mousedown",ke,pe),Te("click",Ve,le),De(oe,ge),At()}export{ai as S}; diff --git a/webapp/assets/_app/immutable/chunks/C-xTH-sp.js b/webapp/assets/_app/immutable/chunks/BLHP-Xk3.js similarity index 79% rename from webapp/assets/_app/immutable/chunks/C-xTH-sp.js rename to webapp/assets/_app/immutable/chunks/BLHP-Xk3.js index 2efe15aa..5f27e31e 100644 --- a/webapp/assets/_app/immutable/chunks/C-xTH-sp.js +++ b/webapp/assets/_app/immutable/chunks/BLHP-Xk3.js @@ -1 +1 @@ -import{ag as h,ah as t,u as b,ae as k,ai as S}from"./DniTuB_0.js";function u(r,a){return r===a||r?.[S]===a}function d(r={},a,f,T){return h(()=>{var i,s;return t(()=>{i=s,s=[],b(()=>{r!==f(...s)&&(a(r,...s),i&&u(f(...i),r)&&a(null,...i))})}),()=>{k(()=>{s&&u(f(...s),r)&&a(null,...s)})}}),r}export{d as b}; +import{ag as h,ah as t,u as b,ae as k,ai as S}from"./BIqNNOMq.js";function u(r,a){return r===a||r?.[S]===a}function d(r={},a,f,T){return h(()=>{var i,s;return t(()=>{i=s,s=[],b(()=>{r!==f(...s)&&(a(r,...s),i&&u(f(...i),r)&&a(null,...i))})}),()=>{k(()=>{s&&u(f(...s),r)&&a(null,...s)})}}),r}export{d as b}; diff --git a/webapp/assets/_app/immutable/chunks/BLWgJqKz.js b/webapp/assets/_app/immutable/chunks/BLWgJqKz.js new file mode 100644 index 00000000..07bf2a82 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/BLWgJqKz.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as F}from"./De-I_rkH.js";import{p as q,l,k as u,m as c,q as d,g as t,h as B,f as b,d as m,v as G,s as L,r as g,b as _,c as T,u as D,t as H,e as N}from"./BIqNNOMq.js";import{p as v,i as V}from"./CfI2BFUj.js";import{c as j}from"./CQh-7xkh.js";import{B as z}from"./CwE4al8R.js";var A=b(' '),E=b('
');function Q(h,n){q(n,!1);const r=c(),a=c(),f=c();let s=v(n,"item",8),x=v(n,"showUrl",8,!0);function k(e){switch(e?.toLowerCase()){case"github":return"gray";case"gitea":return"green";default:return"secondary"}}function w(e){switch(e?.toLowerCase()){case"github":return"GitHub";case"gitea":return"Gitea";default:return e||"Unknown"}}l(()=>d(s()),()=>{u(r,s()?.endpoint?.endpoint_type||"Unknown")}),l(()=>d(s()),()=>{u(a,s()?.endpoint?.base_url)}),l(()=>t(r),()=>{u(f,k(t(r)))}),B(),F();var i=E(),p=m(i);{let e=G(()=>(t(r),D(()=>w(t(r)))));z(p,{get variant(){return t(f)},get text(){return t(e)}})}var y=L(p,2);{var U=e=>{var o=A(),C=m(o,!0);g(o),H(()=>{j(o,"href",t(a)),N(C,t(a))}),_(e,o)};V(y,e=>{x()&&t(a)&&e(U)})}g(i),_(h,i),T()}export{Q as F}; diff --git a/webapp/assets/_app/immutable/chunks/CplfXZxg.js b/webapp/assets/_app/immutable/chunks/BOcC5fx5.js similarity index 93% rename from webapp/assets/_app/immutable/chunks/CplfXZxg.js rename to webapp/assets/_app/immutable/chunks/BOcC5fx5.js index 9eb347ad..33e52955 100644 --- a/webapp/assets/_app/immutable/chunks/CplfXZxg.js +++ b/webapp/assets/_app/immutable/chunks/BOcC5fx5.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import{i as ae}from"./TJn6xDN9.js";import{p as se,E as re,l as M,q as ie,k as r,g as t,m as k,h as le,f as p,d as v,s as A,r as f,b as l,c as oe,A as T,a as B,z as q,D as V,t as E,e as F,u as ne}from"./DniTuB_0.js";import{p as N,i as m}from"./DbNhg6mG.js";import{g as h,B as G}from"./DD3srElq.js";import{t as y}from"./CBJzOE8U.js";import{e as de}from"./BZiHL9L3.js";var ce=p('
Checking...
'),ve=p('
'),fe=p('
Webhook installed
',1),he=p('
No webhook installed
'),ue=p('

Webhook Status

');function _e(H,g){se(g,!1);const x=k();let u=N(g,"entityType",8),s=N(g,"entityId",8),R=N(g,"entityName",8),i=k(null),o=k(!1),b=k(!0);const O=re();async function _(){if(s())try{r(b,!0),u()==="repository"?r(i,await h.getRepositoryWebhookInfo(s())):r(i,await h.getOrganizationWebhookInfo(s()))}catch(e){e&&typeof e=="object"&&"response"in e&&e.response?.status===404?r(i,null):(console.warn("Failed to check webhook status:",e),r(i,null))}finally{r(b,!1)}}async function J(){if(s())try{r(o,!0),u()==="repository"?await h.installRepositoryWebhook(s()):await h.installOrganizationWebhook(s()),y.success("Webhook Installed",`Webhook for ${u()} ${R()} has been installed successfully.`),await _(),O("webhookStatusChanged",{installed:!0})}catch(e){y.error("Webhook Installation Failed",e instanceof Error?e.message:"Failed to install webhook.")}finally{r(o,!1)}}async function K(){if(s())try{r(o,!0),u()==="repository"?await h.uninstallRepositoryWebhook(s()):await h.uninstallOrganizationWebhook(s()),y.success("Webhook Uninstalled",`Webhook for ${u()} ${R()} has been uninstalled successfully.`),await _(),O("webhookStatusChanged",{installed:!1})}catch(e){y.error("Webhook Uninstall Failed",de(e))}finally{r(o,!1)}}M(()=>ie(s()),()=>{s()&&_()}),M(()=>t(i),()=>{r(x,t(i)&&t(i).active)}),le(),ae();var w=ue(),P=v(w),j=v(P),W=v(j),D=A(v(W),2),Q=v(D);{var X=e=>{var d=ce();l(e,d)},Y=e=>{var d=T(),z=B(d);{var I=a=>{var n=fe(),C=A(B(n),2);{var c=U=>{var $=ve(),te=v($);f($),E(()=>F(te,`URL: ${t(i),ne(()=>t(i).url||"N/A")??""}`)),l(U,$)};m(C,U=>{t(i)&&U(c)})}l(a,n)},S=a=>{var n=he();l(a,n)};m(z,a=>{t(x)?a(I):a(S,!1)},!0)}l(e,d)};m(Q,e=>{t(b)?e(X):e(Y,!1)})}f(D),f(W);var L=A(W,2),Z=v(L);{var ee=e=>{var d=T(),z=B(d);{var I=a=>{G(a,{variant:"danger",size:"sm",get disabled(){return t(o)},$$events:{click:K},children:(n,C)=>{q();var c=V();E(()=>F(c,t(o)?"Uninstalling...":"Uninstall")),l(n,c)},$$slots:{default:!0}})},S=a=>{G(a,{variant:"primary",size:"sm",get disabled(){return t(o)},$$events:{click:J},children:(n,C)=>{q();var c=V();E(()=>F(c,t(o)?"Installing...":"Install Webhook")),l(n,c)},$$slots:{default:!0}})};m(z,a=>{t(x)?a(I):a(S,!1)})}l(e,d)};m(Z,e=>{t(b)||e(ee)})}f(L),f(j),f(P),f(w),l(H,w),oe()}export{_e as W}; +import"./DsnmJJEf.js";import{i as ae}from"./De-I_rkH.js";import{p as se,E as re,l as M,q as ie,k as r,g as t,m as k,h as le,f as p,d as v,s as A,r as f,b as l,c as oe,A as T,a as B,z as q,D as V,t as E,e as F,u as ne}from"./BIqNNOMq.js";import{p as N,i as m}from"./CfI2BFUj.js";import{g as h,B as G}from"./CQh-7xkh.js";import{t as y}from"./DgRPqjXE.js";import{e as de}from"./BZiHL9L3.js";var ce=p('
Checking...
'),ve=p('
'),fe=p('
Webhook installed
',1),he=p('
No webhook installed
'),ue=p('

Webhook Status

');function _e(H,g){se(g,!1);const x=k();let u=N(g,"entityType",8),s=N(g,"entityId",8),R=N(g,"entityName",8),i=k(null),o=k(!1),b=k(!0);const O=re();async function _(){if(s())try{r(b,!0),u()==="repository"?r(i,await h.getRepositoryWebhookInfo(s())):r(i,await h.getOrganizationWebhookInfo(s()))}catch(e){e&&typeof e=="object"&&"response"in e&&e.response?.status===404?r(i,null):(console.warn("Failed to check webhook status:",e),r(i,null))}finally{r(b,!1)}}async function J(){if(s())try{r(o,!0),u()==="repository"?await h.installRepositoryWebhook(s()):await h.installOrganizationWebhook(s()),y.success("Webhook Installed",`Webhook for ${u()} ${R()} has been installed successfully.`),await _(),O("webhookStatusChanged",{installed:!0})}catch(e){y.error("Webhook Installation Failed",e instanceof Error?e.message:"Failed to install webhook.")}finally{r(o,!1)}}async function K(){if(s())try{r(o,!0),u()==="repository"?await h.uninstallRepositoryWebhook(s()):await h.uninstallOrganizationWebhook(s()),y.success("Webhook Uninstalled",`Webhook for ${u()} ${R()} has been uninstalled successfully.`),await _(),O("webhookStatusChanged",{installed:!1})}catch(e){y.error("Webhook Uninstall Failed",de(e))}finally{r(o,!1)}}M(()=>ie(s()),()=>{s()&&_()}),M(()=>t(i),()=>{r(x,t(i)&&t(i).active)}),le(),ae();var w=ue(),P=v(w),j=v(P),W=v(j),D=A(v(W),2),Q=v(D);{var X=e=>{var d=ce();l(e,d)},Y=e=>{var d=T(),z=B(d);{var I=a=>{var n=fe(),C=A(B(n),2);{var c=U=>{var $=ve(),te=v($);f($),E(()=>F(te,`URL: ${t(i),ne(()=>t(i).url||"N/A")??""}`)),l(U,$)};m(C,U=>{t(i)&&U(c)})}l(a,n)},S=a=>{var n=he();l(a,n)};m(z,a=>{t(x)?a(I):a(S,!1)},!0)}l(e,d)};m(Q,e=>{t(b)?e(X):e(Y,!1)})}f(D),f(W);var L=A(W,2),Z=v(L);{var ee=e=>{var d=T(),z=B(d);{var I=a=>{G(a,{variant:"danger",size:"sm",get disabled(){return t(o)},$$events:{click:K},children:(n,C)=>{q();var c=V();E(()=>F(c,t(o)?"Uninstalling...":"Uninstall")),l(n,c)},$$slots:{default:!0}})},S=a=>{G(a,{variant:"primary",size:"sm",get disabled(){return t(o)},$$events:{click:J},children:(n,C)=>{q();var c=V();E(()=>F(c,t(o)?"Installing...":"Install Webhook")),l(n,c)},$$slots:{default:!0}})};m(z,a=>{t(x)?a(I):a(S,!1)})}l(e,d)};m(Z,e=>{t(b)||e(ee)})}f(L),f(j),f(P),f(w),l(H,w),oe()}export{_e as W}; diff --git a/webapp/assets/_app/immutable/chunks/DeKGyprh.js b/webapp/assets/_app/immutable/chunks/BSYpqPvJ.js similarity index 98% rename from webapp/assets/_app/immutable/chunks/DeKGyprh.js rename to webapp/assets/_app/immutable/chunks/BSYpqPvJ.js index 6dd813b2..6e6c8f09 100644 --- a/webapp/assets/_app/immutable/chunks/DeKGyprh.js +++ b/webapp/assets/_app/immutable/chunks/BSYpqPvJ.js @@ -1,3 +1,3 @@ -import{F as Ae,o as De,aR as L,g as P,k as N,bf as mt,aS as $e}from"./DniTuB_0.js";import{p as _t,e as yt,a as wt,b as I}from"./BSR16q_V.js";class le{constructor(t,n){this.status=t,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class Ee{constructor(t,n){this.status=t,this.location=n}}class Se extends Error{constructor(t,n,r){super(r),this.status=t,this.text=n}}new URL("sveltekit-internal://");function vt(e,t){return e==="/"||t==="ignore"?e:t==="never"?e.endsWith("/")?e.slice(0,-1):e:t==="always"&&!e.endsWith("/")?e+"/":e}function bt(e){return e.split("%25").map(decodeURI).join("%25")}function kt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function me({href:e}){return e.split("#")[0]}function At(e,t,n,r=!1){const a=new URL(e);Object.defineProperty(a,"searchParams",{value:new Proxy(a.searchParams,{get(i,o){if(o==="get"||o==="getAll"||o==="has")return f=>(n(f),i[o](f));t();const l=Reflect.get(i,o);return typeof l=="function"?l.bind(i):l}}),enumerable:!0,configurable:!0});const s=["href","pathname","search","toString","toJSON"];r&&s.push("hash");for(const i of s)Object.defineProperty(a,i,{get(){return t(),e[i]},enumerable:!0,configurable:!0});return a}function Et(...e){let t=5381;for(const n of e)if(typeof n=="string"){let r=n.length;for(;r;)t=t*33^n.charCodeAt(--r)}else if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let a=r.length;for(;a;)t=t*33^r[--a]}else throw new TypeError("value must be a string or TypedArray");return(t>>>0).toString(36)}function St(e){const t=atob(e),n=new Uint8Array(t.length);for(let r=0;r((e instanceof Request?e.method:t?.method||"GET")!=="GET"&&G.delete(Re(e)),Rt(e,t));const G=new Map;function Tt(e,t){const n=Re(e,t),r=document.querySelector(n);if(r?.textContent){let{body:a,...s}=JSON.parse(r.textContent);const i=r.getAttribute("data-ttl");return i&&G.set(n,{body:a,init:s,ttl:1e3*Number(i)}),r.getAttribute("data-b64")!==null&&(a=St(a)),Promise.resolve(new Response(a,s))}return window.fetch(e,t)}function Ut(e,t,n){if(G.size>0){const r=Re(e,n),a=G.get(r);if(a){if(performance.now(){const{pattern:g,params:u}=_t(o),c={id:o,exec:h=>{const _=g.exec(h);if(_)return yt(_,u,r)},errors:[1,...d||[]].map(h=>e[h]),layouts:[0,...f||[]].map(i),leaf:s(l)};return c.errors.length=c.layouts.length=Math.max(c.errors.length,c.layouts.length),c});function s(o){const l=o<0;return l&&(o=~o),[l,e[o]]}function i(o){return o===void 0?o:[a.has(o),e[o]]}}function Je(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function Be(e,t,n=JSON.stringify){const r=n(t);try{sessionStorage[e]=r}catch{}}const Lt="1760009955548",We="sveltekit:snapshot",ze="sveltekit:scroll",Xe="sveltekit:states",Pt="sveltekit:pageurl",V="sveltekit:history",J="sveltekit:navigation",j={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},Z=location.origin;function Te(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function fe(){return{x:pageXOffset,y:pageYOffset}}function B(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const Ve={...j,"":j.hover};function Ze(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function Qe(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=Ze(e)}}function we(e,t,n){let r;try{if(r=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){const o=location.hash.split("#")[1]||"/";r.hash=`#${o}${r.hash}`}}catch{}const a=e instanceof SVGAElement?e.target.baseVal:e.target,s=!r||!!a||ue(r,t,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),i=r?.origin===Z&&e.hasAttribute("download");return{url:r,external:s,target:a,download:i}}function te(e){let t=null,n=null,r=null,a=null,s=null,i=null,o=e;for(;o&&o!==document.documentElement;)r===null&&(r=B(o,"preload-code")),a===null&&(a=B(o,"preload-data")),t===null&&(t=B(o,"keepfocus")),n===null&&(n=B(o,"noscroll")),s===null&&(s=B(o,"reload")),i===null&&(i=B(o,"replacestate")),o=Ze(o);function l(f){switch(f){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:Ve[r??"off"],preload_data:Ve[a??"off"],keepfocus:l(t),noscroll:l(n),reload:l(s),replace_state:l(i)}}function Fe(e){const t=Ae(e);let n=!0;function r(){n=!0,t.update(i=>i)}function a(i){n=!1,t.set(i)}function s(i){let o;return t.subscribe(l=>{(o===void 0||n&&l!==o)&&i(o=l)})}return{notify:r,set:a,subscribe:s}}const et={v:()=>{}};function Nt(){const{set:e,subscribe:t}=Ae(!1);let n;async function r(){clearTimeout(n);try{const a=await fetch(`${wt}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!a.ok)return!1;const i=(await a.json()).version!==Lt;return i&&(e(!0),et.v(),clearTimeout(n)),i}catch{return!1}}return{subscribe:t,check:r}}function ue(e,t,n){return e.origin!==Z||!e.pathname.startsWith(t)?!0:n?!(e.pathname===t+"/"||e.pathname===t+"/index.html"||e.protocol==="file:"&&e.pathname.replace(/\/[^/]+\.html?$/,"")===t):!1}function yn(e){}function Ot(e){const t=xt(e),n=new ArrayBuffer(t.length),r=new DataView(n);for(let a=0;a>16),t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255),n=r=0);return r===12?(n>>=4,t+=String.fromCharCode(n)):r===18&&(n>>=2,t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255)),t}const jt=-1,Dt=-2,$t=-3,Bt=-4,Vt=-5,Ft=-6;function Mt(e,t){if(typeof e=="number")return a(e,!0);if(!Array.isArray(e)||e.length===0)throw new Error("Invalid input");const n=e,r=Array(n.length);function a(s,i=!1){if(s===jt)return;if(s===$t)return NaN;if(s===Bt)return 1/0;if(s===Vt)return-1/0;if(s===Ft)return-0;if(i||typeof s!="number")throw new Error("Invalid input");if(s in r)return r[s];const o=n[s];if(!o||typeof o!="object")r[s]=o;else if(Array.isArray(o))if(typeof o[0]=="string"){const l=o[0],f=t?.[l];if(f)return r[s]=f(a(o[1]));switch(l){case"Date":r[s]=new Date(o[1]);break;case"Set":const d=new Set;r[s]=d;for(let c=1;ct!=null)}const Ht="x-sveltekit-invalidated",Kt="x-sveltekit-trailing-slash";function ne(e){return e instanceof le||e instanceof Se?e.status:500}function Yt(e){return e instanceof Se?e.text:"Internal Error"}let E,W,_e;const Jt=De.toString().includes("$$")||/function \w+\(\) \{\}/.test(De.toString());Jt?(E={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL("https://example.com")},W={current:null},_e={current:!1}):(E=new class{#e=L({});get data(){return P(this.#e)}set data(t){N(this.#e,t)}#t=L(null);get form(){return P(this.#t)}set form(t){N(this.#t,t)}#n=L(null);get error(){return P(this.#n)}set error(t){N(this.#n,t)}#r=L({});get params(){return P(this.#r)}set params(t){N(this.#r,t)}#a=L({id:null});get route(){return P(this.#a)}set route(t){N(this.#a,t)}#o=L({});get state(){return P(this.#o)}set state(t){N(this.#o,t)}#s=L(-1);get status(){return P(this.#s)}set status(t){N(this.#s,t)}#i=L(new URL("https://example.com"));get url(){return P(this.#i)}set url(t){N(this.#i,t)}},W=new class{#e=L(null);get current(){return P(this.#e)}set current(t){N(this.#e,t)}},_e=new class{#e=L(!1);get current(){return P(this.#e)}set current(t){N(this.#e,t)}},et.v=()=>_e.current=!0);function Wt(e){Object.assign(E,e)}const zt="/__data.json",Xt=".html__data.json";function Zt(e){return e.endsWith(".html")?e.replace(/\.html$/,Xt):e.replace(/\/$/,"")+zt}const{tick:Qt}=mt,en=new Set(["icon","shortcut icon","apple-touch-icon"]),$=Je(ze)??{},z=Je(We)??{},x={url:Fe({}),page:Fe({}),navigating:Ae(null),updated:Nt()};function Ue(e){$[e]=fe()}function tn(e,t){let n=e+1;for(;$[n];)delete $[n],n+=1;for(n=t+1;z[n];)delete z[n],n+=1}function M(e){return location.href=e.href,new Promise(()=>{})}async function nt(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistration(I||"/");e&&await e.update()}}function Me(){}let Ie,ve,re,O,be,v;globalThis.__sveltekit_mlwef0.data;const ae=[],oe=[];let C=null;const ee=new Map,rt=new Set,nn=new Set,H=new Set;let w={branch:[],error:null,url:null},Le=!1,se=!1,qe=!0,X=!1,q=!1,at=!1,Pe=!1,ot,k,T,D;const K=new Set,Ge=new Map;async function kn(e,t,n){document.URL!==location.href&&(location.href=location.href),v=e,await e.hooks.init?.(),Ie=It(e),O=document.documentElement,be=t,ve=e.nodes[0],re=e.nodes[1],ve(),re(),k=history.state?.[V],T=history.state?.[J],k||(k=T=Date.now(),history.replaceState({...history.state,[V]:k,[J]:T},""));const r=$[k];function a(){r&&(history.scrollRestoration="manual",scrollTo(r.x,r.y))}n?(a(),await hn(be,n)):(await Y({type:"enter",url:Te(v.hash?gn(new URL(location.href)):location.href),replace_state:!0}),a()),dn()}function rn(){ae.length=0,Pe=!1}function st(e){oe.some(t=>t?.snapshot)&&(z[e]=oe.map(t=>t?.snapshot?.capture()))}function it(e){z[e]?.forEach((t,n)=>{oe[n]?.snapshot?.restore(t)})}function He(){Ue(k),Be(ze,$),st(T),Be(We,z)}async function Ne(e,t,n,r){let a;const s=await Y({type:"goto",url:Te(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:r,accept:()=>{t.invalidateAll&&(Pe=!0,a=[...Ge.keys()]),t.invalidate&&t.invalidate.forEach(un)}});return t.invalidateAll&&$e().then($e).then(()=>{Ge.forEach(({resource:i},o)=>{a?.includes(o)&&i.refresh?.()})}),s}async function an(e){if(e.id!==C?.id){const t={};K.add(t),C={id:e.id,token:t,promise:ft({...e,preload:t}).then(n=>(K.delete(t),n.type==="loaded"&&n.state.error&&(C=null),n))}}return C.promise}async function ye(e){const t=(await he(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].map(n=>n?.[1]()))}function ct(e,t,n){w=e.state;const r=document.querySelector("style[data-sveltekit]");if(r&&r.remove(),Object.assign(E,e.props.page),ot=new v.root({target:t,props:{...e.props,stores:x,components:oe},hydrate:n,sync:!1}),it(T),n){const a={from:null,to:{params:w.params,route:{id:w.route?.id??null},url:new URL(location.href)},willUnload:!1,type:"enter",complete:Promise.resolve()};H.forEach(s=>s(a))}se=!0}function ie({url:e,params:t,branch:n,status:r,error:a,route:s,form:i}){let o="never";if(I&&(e.pathname===I||e.pathname===I+"/"))o="always";else for(const c of n)c?.slash!==void 0&&(o=c.slash);e.pathname=vt(e.pathname,o),e.search=e.search;const l={type:"loaded",state:{url:e,params:t,branch:n,error:a,route:s},props:{constructors:Gt(n).map(c=>c.node.component),page:je(E)}};i!==void 0&&(l.props.form=i);let f={},d=!E,g=0;for(let c=0;c(o&&(l.route=!0),u[c])}),params:new Proxy(r,{get:(u,c)=>(o&&l.params.add(c),u[c])}),data:s?.data??null,url:At(n,()=>{o&&(l.url=!0)},u=>{o&&l.search_params.add(u)},v.hash),async fetch(u,c){u instanceof Request&&(c={body:u.method==="GET"||u.method==="HEAD"?void 0:await u.blob(),cache:u.cache,credentials:u.credentials,headers:[...u.headers].length>0?u?.headers:void 0,integrity:u.integrity,keepalive:u.keepalive,method:u.method,mode:u.mode,redirect:u.redirect,referrer:u.referrer,referrerPolicy:u.referrerPolicy,signal:u.signal,...c});const{resolved:h,promise:_}=lt(u,c,n);return o&&d(h.href),_},setHeaders:()=>{},depends:d,parent(){return o&&(l.parent=!0),t()},untrack(u){o=!1;try{return u()}finally{o=!0}}};i=await f.universal.load.call(null,g)??null}return{node:f,loader:e,server:s,universal:f.universal?.load?{type:"data",data:i,uses:l}:null,data:i??s?.data??null,slash:f.universal?.trailingSlash??s?.slash}}function lt(e,t,n){let r=e instanceof Request?e.url:e;const a=new URL(r,n);a.origin===n.origin&&(r=a.href.slice(n.origin.length));const s=se?Ut(r,a.href,t):Tt(r,t);return{resolved:a,promise:s}}function Ke(e,t,n,r,a,s){if(Pe)return!0;if(!a)return!1;if(a.parent&&e||a.route&&t||a.url&&n)return!0;for(const i of a.search_params)if(r.has(i))return!0;for(const i of a.params)if(s[i]!==w.params[i])return!0;for(const i of a.dependencies)if(ae.some(o=>o(new URL(i))))return!0;return!1}function Ce(e,t){return e?.type==="data"?e:e?.type==="skip"?t??null:null}function on(e,t){if(!e)return new Set(t.searchParams.keys());const n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const r of n){const a=e.searchParams.getAll(r),s=t.searchParams.getAll(r);a.every(i=>s.includes(i))&&s.every(i=>a.includes(i))&&n.delete(r)}return n}function Ye({error:e,url:t,route:n,params:r}){return{type:"loaded",state:{error:e,url:t,route:n,params:r,branch:[]},props:{page:je(E),constructors:[]}}}async function ft({id:e,invalidating:t,url:n,params:r,route:a,preload:s}){if(C?.id===e)return K.delete(C.token),C.promise;const{errors:i,layouts:o,leaf:l}=a,f=[...o,l];i.forEach(p=>p?.().catch(()=>{})),f.forEach(p=>p?.[1]().catch(()=>{}));let d=null;const g=w.url?e!==ce(w.url):!1,u=w.route?a.id!==w.route.id:!1,c=on(w.url,n);let h=!1;const _=f.map((p,y)=>{const b=w.branch[y],A=!!p?.[0]&&(b?.loader!==p[1]||Ke(h,u,g,c,b.server?.uses,r));return A&&(h=!0),A});if(_.some(Boolean)){try{d=await ht(n,_)}catch(p){const y=await F(p,{url:n,params:r,route:{id:e}});return K.has(s)?Ye({error:y,url:n,params:r,route:a}):de({status:ne(p),error:y,url:n,route:a})}if(d.type==="redirect")return d}const m=d?.nodes;let R=!1;const S=f.map(async(p,y)=>{if(!p)return;const b=w.branch[y],A=m?.[y];if((!A||A.type==="skip")&&p[1]===b?.loader&&!Ke(R,u,g,c,b.universal?.uses,r))return b;if(R=!0,A?.type==="error")throw A;return Oe({loader:p[1],url:n,params:r,route:a,parent:async()=>{const pe={};for(let ge=0;ge{});const U=[];for(let p=0;pPromise.resolve({}),server_data_node:Ce(s)}),l={node:await re(),loader:re,universal:null,server:null,data:null};return ie({url:n,params:a,branch:[o,l],status:e,error:t,route:null})}catch(o){if(o instanceof Ee)return Ne(new URL(o.location,location.href),{},0);throw o}}async function cn(e){const t=e.href;if(ee.has(t))return ee.get(t);let n;try{const r=(async()=>{let a=await v.hooks.reroute({url:new URL(e),fetch:async(s,i)=>lt(s,i,e).promise})??e;if(typeof a=="string"){const s=new URL(e);v.hash?s.hash=a:s.pathname=a,a=s}return a})();ee.set(t,r),n=await r}catch{ee.delete(t);return}return n}async function he(e,t){if(e&&!ue(e,I,v.hash)){const n=await cn(e);if(!n)return;const r=ln(n);for(const a of Ie){const s=a.exec(r);if(s)return{id:ce(e),invalidating:t,route:a,params:kt(s),url:e}}}}function ln(e){return bt(v.hash?e.hash.replace(/^#/,"").replace(/[?#].+/,""):e.pathname.slice(I.length))||"/"}function ce(e){return(v.hash?e.hash.replace(/^#/,""):e.pathname)+e.search}function ut({url:e,type:t,intent:n,delta:r}){let a=!1;const s=xe(w,n,e,t);r!==void 0&&(s.navigation.delta=r);const i={...s.navigation,cancel:()=>{a=!0,s.reject(new Error("navigation cancelled"))}};return X||rt.forEach(o=>o(i)),a?null:s}async function Y({type:e,url:t,popped:n,keepfocus:r,noscroll:a,replace_state:s,state:i={},redirect_count:o=0,nav_token:l={},accept:f=Me,block:d=Me}){const g=D;D=l;const u=await he(t,!1),c=e==="enter"?xe(w,u,t,e):ut({url:t,type:e,delta:n?.delta,intent:u});if(!c){d(),D===l&&(D=g);return}const h=k,_=T;f(),X=!0,se&&c.navigation.type!=="enter"&&x.navigating.set(W.current=c.navigation);let m=u&&await ft(u);if(!m){if(ue(t,I,v.hash))return await M(t);m=await dt(t,{id:null},await F(new Se(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404)}if(t=u?.url||t,D!==l)return c.reject(new Error("navigation aborted")),!1;if(m.type==="redirect")if(o>=20)m=await de({status:500,error:await F(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}});else return await Ne(new URL(m.location,t).href,{},o+1,l),!1;else m.props.page.status>=400&&await x.updated.check()&&(await nt(),await M(t));if(rn(),Ue(h),st(_),m.props.page.url.pathname!==t.pathname&&(t.pathname=m.props.page.url.pathname),i=n?n.state:i,!n){const p=s?0:1,y={[V]:k+=p,[J]:T+=p,[Xe]:i};(s?history.replaceState:history.pushState).call(history,y,"",t),s||tn(k,T)}if(C=null,m.props.page.state=i,se){const p=(await Promise.all(Array.from(nn,y=>y(c.navigation)))).filter(y=>typeof y=="function");if(p.length>0){let y=function(){p.forEach(b=>{H.delete(b)})};p.push(y),p.forEach(b=>{H.add(b)})}w=m.state,m.props.page&&(m.props.page.url=t),ot.$set(m.props),Wt(m.props.page),at=!0}else ct(m,be,!1);const{activeElement:R}=document;await Qt();const S=n?n.scroll:a?fe():null;if(qe){const p=t.hash&&document.getElementById(gt(t));S?scrollTo(S.x,S.y):p?p.scrollIntoView():scrollTo(0,0)}const U=document.activeElement!==R&&document.activeElement!==document.body;!r&&!U&&pn(t),qe=!0,m.props.page&&Object.assign(E,m.props.page),X=!1,e==="popstate"&&it(T),c.fulfil(void 0),H.forEach(p=>p(c.navigation)),x.navigating.set(W.current=null)}async function dt(e,t,n,r){return e.origin===Z&&e.pathname===location.pathname&&!Le?await de({status:r,error:n,url:e,route:t}):await M(e)}function fn(){let e,t,n;O.addEventListener("mousemove",o=>{const l=o.target;clearTimeout(e),e=setTimeout(()=>{s(l,j.hover)},20)});function r(o){o.defaultPrevented||s(o.composedPath()[0],j.tap)}O.addEventListener("mousedown",r),O.addEventListener("touchstart",r,{passive:!0});const a=new IntersectionObserver(o=>{for(const l of o)l.isIntersecting&&(ye(new URL(l.target.href)),a.unobserve(l.target))},{threshold:0});async function s(o,l){const f=Qe(o,O),d=f===t&&l>=n;if(!f||d)return;const{url:g,external:u,download:c}=we(f,I,v.hash);if(u||c)return;const h=te(f),_=g&&ce(w.url)===ce(g);if(!(h.reload||_))if(l<=h.preload_data){t=f,n=j.tap;const m=await he(g,!1);if(!m)return;an(m)}else l<=h.preload_code&&(t=f,n=l,ye(g))}function i(){a.disconnect();for(const o of O.querySelectorAll("a")){const{url:l,external:f,download:d}=we(o,I,v.hash);if(f||d)continue;const g=te(o);g.reload||(g.preload_code===j.viewport&&a.observe(o),g.preload_code===j.eager&&ye(l))}}H.add(i),i()}function F(e,t){if(e instanceof le)return e.body;const n=ne(e),r=Yt(e);return v.hooks.handleError({error:e,event:t,status:n,message:r})??{message:r}}function An(e,t={}){return e=new URL(Te(e)),e.origin!==Z?Promise.reject(new Error("goto: invalid URL")):Ne(e,t,0)}function un(e){if(typeof e=="function")ae.push(e);else{const{href:t}=new URL(e,location.href);ae.push(n=>n.href===t)}}function dn(){history.scrollRestoration="manual",addEventListener("beforeunload",t=>{let n=!1;if(He(),!X){const r=xe(w,void 0,null,"leave"),a={...r.navigation,cancel:()=>{n=!0,r.reject(new Error("navigation cancelled"))}};rt.forEach(s=>s(a))}n?(t.preventDefault(),t.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&He()}),navigator.connection?.saveData||fn(),O.addEventListener("click",async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;const n=Qe(t.composedPath()[0],O);if(!n)return;const{url:r,external:a,target:s,download:i}=we(n,I,v.hash);if(!r)return;if(s==="_parent"||s==="_top"){if(window.parent!==window)return}else if(s&&s!=="_self")return;const o=te(n);if(!(n instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol==="https:"||r.protocol==="http:")||i)return;const[f,d]=(v.hash?r.hash.replace(/^#/,""):r.href).split("#"),g=f===me(location);if(a||o.reload&&(!g||!d)){ut({url:r,type:"link"})?X=!0:t.preventDefault();return}if(d!==void 0&&g){const[,u]=w.url.href.split("#");if(u===d){if(t.preventDefault(),d===""||d==="top"&&n.ownerDocument.getElementById("top")===null)window.scrollTo({top:0});else{const c=n.ownerDocument.getElementById(decodeURIComponent(d));c&&(c.scrollIntoView(),c.focus())}return}if(q=!0,Ue(k),e(r),!o.replace_state)return;q=!1}t.preventDefault(),await new Promise(u=>{requestAnimationFrame(()=>{setTimeout(u,0)}),setTimeout(u,100)}),await Y({type:"link",url:r,keepfocus:o.keepfocus,noscroll:o.noscroll,replace_state:o.replace_state??r.href===location.href})}),O.addEventListener("submit",t=>{if(t.defaultPrevented)return;const n=HTMLFormElement.prototype.cloneNode.call(t.target),r=t.submitter;if((r?.formTarget||n.target)==="_blank"||(r?.formMethod||n.method)!=="get")return;const i=new URL(r?.hasAttribute("formaction")&&r?.formAction||n.action);if(ue(i,I,!1))return;const o=t.target,l=te(o);if(l.reload)return;t.preventDefault(),t.stopPropagation();const f=new FormData(o),d=r?.getAttribute("name");d&&f.append(d,r?.getAttribute("value")??""),i.search=new URLSearchParams(f).toString(),Y({type:"form",url:i,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??i.href===location.href})}),addEventListener("popstate",async t=>{if(!ke){if(t.state?.[V]){const n=t.state[V];if(D={},n===k)return;const r=$[n],a=t.state[Xe]??{},s=new URL(t.state[Pt]??location.href),i=t.state[J],o=w.url?me(location)===me(w.url):!1;if(i===T&&(at||o)){a!==E.state&&(E.state=a),e(s),$[k]=fe(),r&&scrollTo(r.x,r.y),k=n;return}const f=n-k;await Y({type:"popstate",url:s,popped:{state:a,scroll:r,delta:f},accept:()=>{k=n,T=i},block:()=>{history.go(-f)},nav_token:D})}else if(!q){const n=new URL(location.href);e(n),v.hash&&location.reload()}}}),addEventListener("hashchange",()=>{q&&(q=!1,history.replaceState({...history.state,[V]:++k,[J]:T},"",location.href))});for(const t of document.querySelectorAll("link"))en.has(t.rel)&&(t.href=t.href);addEventListener("pageshow",t=>{t.persisted&&x.navigating.set(W.current=null)});function e(t){w.url=E.url=t,x.page.set(je(E)),x.page.notify()}}async function hn(e,{status:t=200,error:n,node_ids:r,params:a,route:s,server_route:i,data:o,form:l}){Le=!0;const f=new URL(location.href);let d;({params:a={},route:s={id:null}}=await he(f,!1)||{}),d=Ie.find(({id:c})=>c===s.id);let g,u=!0;try{const c=r.map(async(_,m)=>{const R=o[m];return R?.uses&&(R.uses=pt(R.uses)),Oe({loader:v.nodes[_],url:f,params:a,route:s,parent:async()=>{const S={};for(let U=0;Us?"1":"0").join(""));const r=window.fetch,a=await r(n.href,{});if(!a.ok){let s;throw a.headers.get("content-type")?.includes("application/json")?s=await a.json():a.status===404?s="Not Found":a.status===500&&(s="Internal Error"),new le(a.status,s)}return new Promise(async s=>{const i=new Map,o=a.body.getReader(),l=new TextDecoder;function f(g){return Mt(g,{...v.decoders,Promise:u=>new Promise((c,h)=>{i.set(u,{fulfil:c,reject:h})})})}let d="";for(;;){const{done:g,value:u}=await o.read();if(g&&!d)break;for(d+=!u&&d?` +import{F as Ae,o as De,aR as L,g as P,k as N,bf as mt,aS as $e}from"./BIqNNOMq.js";import{p as _t,e as yt,a as wt,b as I}from"./CYb6_lpF.js";class le{constructor(t,n){this.status=t,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class Ee{constructor(t,n){this.status=t,this.location=n}}class Se extends Error{constructor(t,n,r){super(r),this.status=t,this.text=n}}new URL("sveltekit-internal://");function vt(e,t){return e==="/"||t==="ignore"?e:t==="never"?e.endsWith("/")?e.slice(0,-1):e:t==="always"&&!e.endsWith("/")?e+"/":e}function bt(e){return e.split("%25").map(decodeURI).join("%25")}function kt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function me({href:e}){return e.split("#")[0]}function At(e,t,n,r=!1){const a=new URL(e);Object.defineProperty(a,"searchParams",{value:new Proxy(a.searchParams,{get(i,o){if(o==="get"||o==="getAll"||o==="has")return f=>(n(f),i[o](f));t();const l=Reflect.get(i,o);return typeof l=="function"?l.bind(i):l}}),enumerable:!0,configurable:!0});const s=["href","pathname","search","toString","toJSON"];r&&s.push("hash");for(const i of s)Object.defineProperty(a,i,{get(){return t(),e[i]},enumerable:!0,configurable:!0});return a}function Et(...e){let t=5381;for(const n of e)if(typeof n=="string"){let r=n.length;for(;r;)t=t*33^n.charCodeAt(--r)}else if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let a=r.length;for(;a;)t=t*33^r[--a]}else throw new TypeError("value must be a string or TypedArray");return(t>>>0).toString(36)}function St(e){const t=atob(e),n=new Uint8Array(t.length);for(let r=0;r((e instanceof Request?e.method:t?.method||"GET")!=="GET"&&G.delete(Re(e)),Rt(e,t));const G=new Map;function Tt(e,t){const n=Re(e,t),r=document.querySelector(n);if(r?.textContent){let{body:a,...s}=JSON.parse(r.textContent);const i=r.getAttribute("data-ttl");return i&&G.set(n,{body:a,init:s,ttl:1e3*Number(i)}),r.getAttribute("data-b64")!==null&&(a=St(a)),Promise.resolve(new Response(a,s))}return window.fetch(e,t)}function Ut(e,t,n){if(G.size>0){const r=Re(e,n),a=G.get(r);if(a){if(performance.now(){const{pattern:g,params:u}=_t(o),c={id:o,exec:h=>{const _=g.exec(h);if(_)return yt(_,u,r)},errors:[1,...d||[]].map(h=>e[h]),layouts:[0,...f||[]].map(i),leaf:s(l)};return c.errors.length=c.layouts.length=Math.max(c.errors.length,c.layouts.length),c});function s(o){const l=o<0;return l&&(o=~o),[l,e[o]]}function i(o){return o===void 0?o:[a.has(o),e[o]]}}function Je(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function Be(e,t,n=JSON.stringify){const r=n(t);try{sessionStorage[e]=r}catch{}}const Lt="1767862076257",We="sveltekit:snapshot",ze="sveltekit:scroll",Xe="sveltekit:states",Pt="sveltekit:pageurl",V="sveltekit:history",J="sveltekit:navigation",j={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},Z=location.origin;function Te(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function fe(){return{x:pageXOffset,y:pageYOffset}}function B(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const Ve={...j,"":j.hover};function Ze(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function Qe(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=Ze(e)}}function we(e,t,n){let r;try{if(r=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){const o=location.hash.split("#")[1]||"/";r.hash=`#${o}${r.hash}`}}catch{}const a=e instanceof SVGAElement?e.target.baseVal:e.target,s=!r||!!a||ue(r,t,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),i=r?.origin===Z&&e.hasAttribute("download");return{url:r,external:s,target:a,download:i}}function te(e){let t=null,n=null,r=null,a=null,s=null,i=null,o=e;for(;o&&o!==document.documentElement;)r===null&&(r=B(o,"preload-code")),a===null&&(a=B(o,"preload-data")),t===null&&(t=B(o,"keepfocus")),n===null&&(n=B(o,"noscroll")),s===null&&(s=B(o,"reload")),i===null&&(i=B(o,"replacestate")),o=Ze(o);function l(f){switch(f){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:Ve[r??"off"],preload_data:Ve[a??"off"],keepfocus:l(t),noscroll:l(n),reload:l(s),replace_state:l(i)}}function Fe(e){const t=Ae(e);let n=!0;function r(){n=!0,t.update(i=>i)}function a(i){n=!1,t.set(i)}function s(i){let o;return t.subscribe(l=>{(o===void 0||n&&l!==o)&&i(o=l)})}return{notify:r,set:a,subscribe:s}}const et={v:()=>{}};function Nt(){const{set:e,subscribe:t}=Ae(!1);let n;async function r(){clearTimeout(n);try{const a=await fetch(`${wt}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!a.ok)return!1;const i=(await a.json()).version!==Lt;return i&&(e(!0),et.v(),clearTimeout(n)),i}catch{return!1}}return{subscribe:t,check:r}}function ue(e,t,n){return e.origin!==Z||!e.pathname.startsWith(t)?!0:n?!(e.pathname===t+"/"||e.pathname===t+"/index.html"||e.protocol==="file:"&&e.pathname.replace(/\/[^/]+\.html?$/,"")===t):!1}function yn(e){}function Ot(e){const t=xt(e),n=new ArrayBuffer(t.length),r=new DataView(n);for(let a=0;a>16),t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255),n=r=0);return r===12?(n>>=4,t+=String.fromCharCode(n)):r===18&&(n>>=2,t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255)),t}const jt=-1,Dt=-2,$t=-3,Bt=-4,Vt=-5,Ft=-6;function Mt(e,t){if(typeof e=="number")return a(e,!0);if(!Array.isArray(e)||e.length===0)throw new Error("Invalid input");const n=e,r=Array(n.length);function a(s,i=!1){if(s===jt)return;if(s===$t)return NaN;if(s===Bt)return 1/0;if(s===Vt)return-1/0;if(s===Ft)return-0;if(i||typeof s!="number")throw new Error("Invalid input");if(s in r)return r[s];const o=n[s];if(!o||typeof o!="object")r[s]=o;else if(Array.isArray(o))if(typeof o[0]=="string"){const l=o[0],f=t?.[l];if(f)return r[s]=f(a(o[1]));switch(l){case"Date":r[s]=new Date(o[1]);break;case"Set":const d=new Set;r[s]=d;for(let c=1;ct!=null)}const Ht="x-sveltekit-invalidated",Kt="x-sveltekit-trailing-slash";function ne(e){return e instanceof le||e instanceof Se?e.status:500}function Yt(e){return e instanceof Se?e.text:"Internal Error"}let E,W,_e;const Jt=De.toString().includes("$$")||/function \w+\(\) \{\}/.test(De.toString());Jt?(E={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL("https://example.com")},W={current:null},_e={current:!1}):(E=new class{#e=L({});get data(){return P(this.#e)}set data(t){N(this.#e,t)}#t=L(null);get form(){return P(this.#t)}set form(t){N(this.#t,t)}#n=L(null);get error(){return P(this.#n)}set error(t){N(this.#n,t)}#r=L({});get params(){return P(this.#r)}set params(t){N(this.#r,t)}#a=L({id:null});get route(){return P(this.#a)}set route(t){N(this.#a,t)}#o=L({});get state(){return P(this.#o)}set state(t){N(this.#o,t)}#s=L(-1);get status(){return P(this.#s)}set status(t){N(this.#s,t)}#i=L(new URL("https://example.com"));get url(){return P(this.#i)}set url(t){N(this.#i,t)}},W=new class{#e=L(null);get current(){return P(this.#e)}set current(t){N(this.#e,t)}},_e=new class{#e=L(!1);get current(){return P(this.#e)}set current(t){N(this.#e,t)}},et.v=()=>_e.current=!0);function Wt(e){Object.assign(E,e)}const zt="/__data.json",Xt=".html__data.json";function Zt(e){return e.endsWith(".html")?e.replace(/\.html$/,Xt):e.replace(/\/$/,"")+zt}const{tick:Qt}=mt,en=new Set(["icon","shortcut icon","apple-touch-icon"]),$=Je(ze)??{},z=Je(We)??{},x={url:Fe({}),page:Fe({}),navigating:Ae(null),updated:Nt()};function Ue(e){$[e]=fe()}function tn(e,t){let n=e+1;for(;$[n];)delete $[n],n+=1;for(n=t+1;z[n];)delete z[n],n+=1}function M(e){return location.href=e.href,new Promise(()=>{})}async function nt(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistration(I||"/");e&&await e.update()}}function Me(){}let Ie,ve,re,O,be,v;globalThis.__sveltekit_kn00vz.data;const ae=[],oe=[];let C=null;const ee=new Map,rt=new Set,nn=new Set,H=new Set;let w={branch:[],error:null,url:null},Le=!1,se=!1,qe=!0,X=!1,q=!1,at=!1,Pe=!1,ot,k,T,D;const K=new Set,Ge=new Map;async function kn(e,t,n){document.URL!==location.href&&(location.href=location.href),v=e,await e.hooks.init?.(),Ie=It(e),O=document.documentElement,be=t,ve=e.nodes[0],re=e.nodes[1],ve(),re(),k=history.state?.[V],T=history.state?.[J],k||(k=T=Date.now(),history.replaceState({...history.state,[V]:k,[J]:T},""));const r=$[k];function a(){r&&(history.scrollRestoration="manual",scrollTo(r.x,r.y))}n?(a(),await hn(be,n)):(await Y({type:"enter",url:Te(v.hash?gn(new URL(location.href)):location.href),replace_state:!0}),a()),dn()}function rn(){ae.length=0,Pe=!1}function st(e){oe.some(t=>t?.snapshot)&&(z[e]=oe.map(t=>t?.snapshot?.capture()))}function it(e){z[e]?.forEach((t,n)=>{oe[n]?.snapshot?.restore(t)})}function He(){Ue(k),Be(ze,$),st(T),Be(We,z)}async function Ne(e,t,n,r){let a;const s=await Y({type:"goto",url:Te(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:r,accept:()=>{t.invalidateAll&&(Pe=!0,a=[...Ge.keys()]),t.invalidate&&t.invalidate.forEach(un)}});return t.invalidateAll&&$e().then($e).then(()=>{Ge.forEach(({resource:i},o)=>{a?.includes(o)&&i.refresh?.()})}),s}async function an(e){if(e.id!==C?.id){const t={};K.add(t),C={id:e.id,token:t,promise:ft({...e,preload:t}).then(n=>(K.delete(t),n.type==="loaded"&&n.state.error&&(C=null),n))}}return C.promise}async function ye(e){const t=(await he(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].map(n=>n?.[1]()))}function ct(e,t,n){w=e.state;const r=document.querySelector("style[data-sveltekit]");if(r&&r.remove(),Object.assign(E,e.props.page),ot=new v.root({target:t,props:{...e.props,stores:x,components:oe},hydrate:n,sync:!1}),it(T),n){const a={from:null,to:{params:w.params,route:{id:w.route?.id??null},url:new URL(location.href)},willUnload:!1,type:"enter",complete:Promise.resolve()};H.forEach(s=>s(a))}se=!0}function ie({url:e,params:t,branch:n,status:r,error:a,route:s,form:i}){let o="never";if(I&&(e.pathname===I||e.pathname===I+"/"))o="always";else for(const c of n)c?.slash!==void 0&&(o=c.slash);e.pathname=vt(e.pathname,o),e.search=e.search;const l={type:"loaded",state:{url:e,params:t,branch:n,error:a,route:s},props:{constructors:Gt(n).map(c=>c.node.component),page:je(E)}};i!==void 0&&(l.props.form=i);let f={},d=!E,g=0;for(let c=0;c(o&&(l.route=!0),u[c])}),params:new Proxy(r,{get:(u,c)=>(o&&l.params.add(c),u[c])}),data:s?.data??null,url:At(n,()=>{o&&(l.url=!0)},u=>{o&&l.search_params.add(u)},v.hash),async fetch(u,c){u instanceof Request&&(c={body:u.method==="GET"||u.method==="HEAD"?void 0:await u.blob(),cache:u.cache,credentials:u.credentials,headers:[...u.headers].length>0?u?.headers:void 0,integrity:u.integrity,keepalive:u.keepalive,method:u.method,mode:u.mode,redirect:u.redirect,referrer:u.referrer,referrerPolicy:u.referrerPolicy,signal:u.signal,...c});const{resolved:h,promise:_}=lt(u,c,n);return o&&d(h.href),_},setHeaders:()=>{},depends:d,parent(){return o&&(l.parent=!0),t()},untrack(u){o=!1;try{return u()}finally{o=!0}}};i=await f.universal.load.call(null,g)??null}return{node:f,loader:e,server:s,universal:f.universal?.load?{type:"data",data:i,uses:l}:null,data:i??s?.data??null,slash:f.universal?.trailingSlash??s?.slash}}function lt(e,t,n){let r=e instanceof Request?e.url:e;const a=new URL(r,n);a.origin===n.origin&&(r=a.href.slice(n.origin.length));const s=se?Ut(r,a.href,t):Tt(r,t);return{resolved:a,promise:s}}function Ke(e,t,n,r,a,s){if(Pe)return!0;if(!a)return!1;if(a.parent&&e||a.route&&t||a.url&&n)return!0;for(const i of a.search_params)if(r.has(i))return!0;for(const i of a.params)if(s[i]!==w.params[i])return!0;for(const i of a.dependencies)if(ae.some(o=>o(new URL(i))))return!0;return!1}function Ce(e,t){return e?.type==="data"?e:e?.type==="skip"?t??null:null}function on(e,t){if(!e)return new Set(t.searchParams.keys());const n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const r of n){const a=e.searchParams.getAll(r),s=t.searchParams.getAll(r);a.every(i=>s.includes(i))&&s.every(i=>a.includes(i))&&n.delete(r)}return n}function Ye({error:e,url:t,route:n,params:r}){return{type:"loaded",state:{error:e,url:t,route:n,params:r,branch:[]},props:{page:je(E),constructors:[]}}}async function ft({id:e,invalidating:t,url:n,params:r,route:a,preload:s}){if(C?.id===e)return K.delete(C.token),C.promise;const{errors:i,layouts:o,leaf:l}=a,f=[...o,l];i.forEach(p=>p?.().catch(()=>{})),f.forEach(p=>p?.[1]().catch(()=>{}));let d=null;const g=w.url?e!==ce(w.url):!1,u=w.route?a.id!==w.route.id:!1,c=on(w.url,n);let h=!1;const _=f.map((p,y)=>{const b=w.branch[y],A=!!p?.[0]&&(b?.loader!==p[1]||Ke(h,u,g,c,b.server?.uses,r));return A&&(h=!0),A});if(_.some(Boolean)){try{d=await ht(n,_)}catch(p){const y=await F(p,{url:n,params:r,route:{id:e}});return K.has(s)?Ye({error:y,url:n,params:r,route:a}):de({status:ne(p),error:y,url:n,route:a})}if(d.type==="redirect")return d}const m=d?.nodes;let R=!1;const S=f.map(async(p,y)=>{if(!p)return;const b=w.branch[y],A=m?.[y];if((!A||A.type==="skip")&&p[1]===b?.loader&&!Ke(R,u,g,c,b.universal?.uses,r))return b;if(R=!0,A?.type==="error")throw A;return Oe({loader:p[1],url:n,params:r,route:a,parent:async()=>{const pe={};for(let ge=0;ge{});const U=[];for(let p=0;pPromise.resolve({}),server_data_node:Ce(s)}),l={node:await re(),loader:re,universal:null,server:null,data:null};return ie({url:n,params:a,branch:[o,l],status:e,error:t,route:null})}catch(o){if(o instanceof Ee)return Ne(new URL(o.location,location.href),{},0);throw o}}async function cn(e){const t=e.href;if(ee.has(t))return ee.get(t);let n;try{const r=(async()=>{let a=await v.hooks.reroute({url:new URL(e),fetch:async(s,i)=>lt(s,i,e).promise})??e;if(typeof a=="string"){const s=new URL(e);v.hash?s.hash=a:s.pathname=a,a=s}return a})();ee.set(t,r),n=await r}catch{ee.delete(t);return}return n}async function he(e,t){if(e&&!ue(e,I,v.hash)){const n=await cn(e);if(!n)return;const r=ln(n);for(const a of Ie){const s=a.exec(r);if(s)return{id:ce(e),invalidating:t,route:a,params:kt(s),url:e}}}}function ln(e){return bt(v.hash?e.hash.replace(/^#/,"").replace(/[?#].+/,""):e.pathname.slice(I.length))||"/"}function ce(e){return(v.hash?e.hash.replace(/^#/,""):e.pathname)+e.search}function ut({url:e,type:t,intent:n,delta:r}){let a=!1;const s=xe(w,n,e,t);r!==void 0&&(s.navigation.delta=r);const i={...s.navigation,cancel:()=>{a=!0,s.reject(new Error("navigation cancelled"))}};return X||rt.forEach(o=>o(i)),a?null:s}async function Y({type:e,url:t,popped:n,keepfocus:r,noscroll:a,replace_state:s,state:i={},redirect_count:o=0,nav_token:l={},accept:f=Me,block:d=Me}){const g=D;D=l;const u=await he(t,!1),c=e==="enter"?xe(w,u,t,e):ut({url:t,type:e,delta:n?.delta,intent:u});if(!c){d(),D===l&&(D=g);return}const h=k,_=T;f(),X=!0,se&&c.navigation.type!=="enter"&&x.navigating.set(W.current=c.navigation);let m=u&&await ft(u);if(!m){if(ue(t,I,v.hash))return await M(t);m=await dt(t,{id:null},await F(new Se(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404)}if(t=u?.url||t,D!==l)return c.reject(new Error("navigation aborted")),!1;if(m.type==="redirect")if(o>=20)m=await de({status:500,error:await F(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}});else return await Ne(new URL(m.location,t).href,{},o+1,l),!1;else m.props.page.status>=400&&await x.updated.check()&&(await nt(),await M(t));if(rn(),Ue(h),st(_),m.props.page.url.pathname!==t.pathname&&(t.pathname=m.props.page.url.pathname),i=n?n.state:i,!n){const p=s?0:1,y={[V]:k+=p,[J]:T+=p,[Xe]:i};(s?history.replaceState:history.pushState).call(history,y,"",t),s||tn(k,T)}if(C=null,m.props.page.state=i,se){const p=(await Promise.all(Array.from(nn,y=>y(c.navigation)))).filter(y=>typeof y=="function");if(p.length>0){let y=function(){p.forEach(b=>{H.delete(b)})};p.push(y),p.forEach(b=>{H.add(b)})}w=m.state,m.props.page&&(m.props.page.url=t),ot.$set(m.props),Wt(m.props.page),at=!0}else ct(m,be,!1);const{activeElement:R}=document;await Qt();const S=n?n.scroll:a?fe():null;if(qe){const p=t.hash&&document.getElementById(gt(t));S?scrollTo(S.x,S.y):p?p.scrollIntoView():scrollTo(0,0)}const U=document.activeElement!==R&&document.activeElement!==document.body;!r&&!U&&pn(t),qe=!0,m.props.page&&Object.assign(E,m.props.page),X=!1,e==="popstate"&&it(T),c.fulfil(void 0),H.forEach(p=>p(c.navigation)),x.navigating.set(W.current=null)}async function dt(e,t,n,r){return e.origin===Z&&e.pathname===location.pathname&&!Le?await de({status:r,error:n,url:e,route:t}):await M(e)}function fn(){let e,t,n;O.addEventListener("mousemove",o=>{const l=o.target;clearTimeout(e),e=setTimeout(()=>{s(l,j.hover)},20)});function r(o){o.defaultPrevented||s(o.composedPath()[0],j.tap)}O.addEventListener("mousedown",r),O.addEventListener("touchstart",r,{passive:!0});const a=new IntersectionObserver(o=>{for(const l of o)l.isIntersecting&&(ye(new URL(l.target.href)),a.unobserve(l.target))},{threshold:0});async function s(o,l){const f=Qe(o,O),d=f===t&&l>=n;if(!f||d)return;const{url:g,external:u,download:c}=we(f,I,v.hash);if(u||c)return;const h=te(f),_=g&&ce(w.url)===ce(g);if(!(h.reload||_))if(l<=h.preload_data){t=f,n=j.tap;const m=await he(g,!1);if(!m)return;an(m)}else l<=h.preload_code&&(t=f,n=l,ye(g))}function i(){a.disconnect();for(const o of O.querySelectorAll("a")){const{url:l,external:f,download:d}=we(o,I,v.hash);if(f||d)continue;const g=te(o);g.reload||(g.preload_code===j.viewport&&a.observe(o),g.preload_code===j.eager&&ye(l))}}H.add(i),i()}function F(e,t){if(e instanceof le)return e.body;const n=ne(e),r=Yt(e);return v.hooks.handleError({error:e,event:t,status:n,message:r})??{message:r}}function An(e,t={}){return e=new URL(Te(e)),e.origin!==Z?Promise.reject(new Error("goto: invalid URL")):Ne(e,t,0)}function un(e){if(typeof e=="function")ae.push(e);else{const{href:t}=new URL(e,location.href);ae.push(n=>n.href===t)}}function dn(){history.scrollRestoration="manual",addEventListener("beforeunload",t=>{let n=!1;if(He(),!X){const r=xe(w,void 0,null,"leave"),a={...r.navigation,cancel:()=>{n=!0,r.reject(new Error("navigation cancelled"))}};rt.forEach(s=>s(a))}n?(t.preventDefault(),t.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&He()}),navigator.connection?.saveData||fn(),O.addEventListener("click",async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;const n=Qe(t.composedPath()[0],O);if(!n)return;const{url:r,external:a,target:s,download:i}=we(n,I,v.hash);if(!r)return;if(s==="_parent"||s==="_top"){if(window.parent!==window)return}else if(s&&s!=="_self")return;const o=te(n);if(!(n instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol==="https:"||r.protocol==="http:")||i)return;const[f,d]=(v.hash?r.hash.replace(/^#/,""):r.href).split("#"),g=f===me(location);if(a||o.reload&&(!g||!d)){ut({url:r,type:"link"})?X=!0:t.preventDefault();return}if(d!==void 0&&g){const[,u]=w.url.href.split("#");if(u===d){if(t.preventDefault(),d===""||d==="top"&&n.ownerDocument.getElementById("top")===null)window.scrollTo({top:0});else{const c=n.ownerDocument.getElementById(decodeURIComponent(d));c&&(c.scrollIntoView(),c.focus())}return}if(q=!0,Ue(k),e(r),!o.replace_state)return;q=!1}t.preventDefault(),await new Promise(u=>{requestAnimationFrame(()=>{setTimeout(u,0)}),setTimeout(u,100)}),await Y({type:"link",url:r,keepfocus:o.keepfocus,noscroll:o.noscroll,replace_state:o.replace_state??r.href===location.href})}),O.addEventListener("submit",t=>{if(t.defaultPrevented)return;const n=HTMLFormElement.prototype.cloneNode.call(t.target),r=t.submitter;if((r?.formTarget||n.target)==="_blank"||(r?.formMethod||n.method)!=="get")return;const i=new URL(r?.hasAttribute("formaction")&&r?.formAction||n.action);if(ue(i,I,!1))return;const o=t.target,l=te(o);if(l.reload)return;t.preventDefault(),t.stopPropagation();const f=new FormData(o),d=r?.getAttribute("name");d&&f.append(d,r?.getAttribute("value")??""),i.search=new URLSearchParams(f).toString(),Y({type:"form",url:i,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??i.href===location.href})}),addEventListener("popstate",async t=>{if(!ke){if(t.state?.[V]){const n=t.state[V];if(D={},n===k)return;const r=$[n],a=t.state[Xe]??{},s=new URL(t.state[Pt]??location.href),i=t.state[J],o=w.url?me(location)===me(w.url):!1;if(i===T&&(at||o)){a!==E.state&&(E.state=a),e(s),$[k]=fe(),r&&scrollTo(r.x,r.y),k=n;return}const f=n-k;await Y({type:"popstate",url:s,popped:{state:a,scroll:r,delta:f},accept:()=>{k=n,T=i},block:()=>{history.go(-f)},nav_token:D})}else if(!q){const n=new URL(location.href);e(n),v.hash&&location.reload()}}}),addEventListener("hashchange",()=>{q&&(q=!1,history.replaceState({...history.state,[V]:++k,[J]:T},"",location.href))});for(const t of document.querySelectorAll("link"))en.has(t.rel)&&(t.href=t.href);addEventListener("pageshow",t=>{t.persisted&&x.navigating.set(W.current=null)});function e(t){w.url=E.url=t,x.page.set(je(E)),x.page.notify()}}async function hn(e,{status:t=200,error:n,node_ids:r,params:a,route:s,server_route:i,data:o,form:l}){Le=!0;const f=new URL(location.href);let d;({params:a={},route:s={id:null}}=await he(f,!1)||{}),d=Ie.find(({id:c})=>c===s.id);let g,u=!0;try{const c=r.map(async(_,m)=>{const R=o[m];return R?.uses&&(R.uses=pt(R.uses)),Oe({loader:v.nodes[_],url:f,params:a,route:s,parent:async()=>{const S={};for(let U=0;Us?"1":"0").join(""));const r=window.fetch,a=await r(n.href,{});if(!a.ok){let s;throw a.headers.get("content-type")?.includes("application/json")?s=await a.json():a.status===404?s="Not Found":a.status===500&&(s="Internal Error"),new le(a.status,s)}return new Promise(async s=>{const i=new Map,o=a.body.getReader(),l=new TextDecoder;function f(g){return Mt(g,{...v.decoders,Promise:u=>new Promise((c,h)=>{i.set(u,{fulfil:c,reject:h})})})}let d="";for(;;){const{done:g,value:u}=await o.read();if(g&&!d)break;for(d+=!u&&d?` `:l.decode(u,{stream:!0});;){const c=d.indexOf(` `);if(c===-1)break;const h=JSON.parse(d.slice(0,c));if(d=d.slice(c+1),h.type==="redirect")return s(h);if(h.type==="data")h.nodes?.forEach(_=>{_?.type==="data"&&(_.uses=pt(_.uses),_.data=f(_.data))}),s(h);else if(h.type==="chunk"){const{id:_,data:m,error:R}=h,S=i.get(_);i.delete(_),R?S.reject(f(R)):S.fulfil(f(m))}}}})}function pt(e){return{dependencies:new Set(e?.dependencies??[]),params:new Set(e?.params??[]),parent:!!e?.parent,route:!!e?.route,url:!!e?.url,search_params:new Set(e?.search_params??[])}}let ke=!1;function pn(e){const t=document.querySelector("[autofocus]");if(t)t.focus();else{const n=gt(e);if(n&&document.getElementById(n)){const{x:a,y:s}=fe();setTimeout(()=>{const i=history.state;ke=!0,location.replace(`#${n}`),v.hash&&location.replace(e.hash),history.replaceState(i,"",e.hash),scrollTo(a,s),ke=!1})}else{const a=document.body,s=a.getAttribute("tabindex");a.tabIndex=-1,a.focus({preventScroll:!0,focusVisible:!1}),s!==null?a.setAttribute("tabindex",s):a.removeAttribute("tabindex")}const r=getSelection();if(r&&r.type!=="None"){const a=[];for(let s=0;s{if(r.rangeCount===a.length){for(let s=0;s{a=l,s=f});return i.catch(()=>{}),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url},to:n&&{params:t?.params??null,route:{id:t?.route?.id??null},url:n},willUnload:!t,type:r,complete:i},fulfil:a,reject:s}}function je(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function gn(e){const t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function gt(e){let t;if(v.hash){const[,,n]=e.hash.split("#",3);t=n??""}else t=e.hash.slice(1);return decodeURIComponent(t)}export{kn as a,An as g,yn as l,E as p,x as s}; diff --git a/webapp/assets/_app/immutable/chunks/B_3mRBsj.js b/webapp/assets/_app/immutable/chunks/B_3mRBsj.js deleted file mode 100644 index 3789ea78..00000000 --- a/webapp/assets/_app/immutable/chunks/B_3mRBsj.js +++ /dev/null @@ -1 +0,0 @@ -import{F as w}from"./DniTuB_0.js";import{g as r}from"./DD3srElq.js";const m=!0,z=m,I=()=>window.location.port==="5173",b={isAuthenticated:!1,user:null,loading:!0,needsInitialization:!1},n=w(b);function f(t,a,e=7){const i=new Date;i.setTime(i.getTime()+e*24*60*60*1e3),document.cookie=`${t}=${a};expires=${i.toUTCString()};path=/;SameSite=Lax`}function d(t){const a=t+"=",e=document.cookie.split(";");for(let i=0;i({...i,loading:!0}));const e=await r.login({username:t,password:a});z&&(f("garm_token",e.token),f("garm_user",t)),r.setToken(e.token),n.set({isAuthenticated:!0,user:t,loading:!1,needsInitialization:!1})}catch(e){throw n.update(i=>({...i,loading:!1})),e}},logout(){g("garm_token"),g("garm_user"),n.set({isAuthenticated:!1,user:null,loading:!1,needsInitialization:!1})},async init(){try{n.update(e=>({...e,loading:!0})),await c.checkInitializationStatus();const t=d("garm_token"),a=d("garm_user");if(t&&a&&(r.setToken(t),await c.checkAuth())){n.set({isAuthenticated:!0,user:a,loading:!1,needsInitialization:!1});return}n.update(e=>({...e,loading:!1,needsInitialization:!1}))}catch{n.update(a=>({...a,loading:!1}))}},async checkInitializationStatus(){try{const t={Accept:"application/json"},a=d("garm_token"),e=I();e&&a&&(t.Authorization=`Bearer ${a}`);const i=await fetch("/api/v1/login",{method:"GET",headers:t,credentials:e?"omit":"include"});if(!i.ok){if(i.status===409&&(await i.json()).error==="init_required")throw n.update(s=>({...s,needsInitialization:!0,loading:!1})),new Error("Initialization required");return}return}catch(t){if(t instanceof Error&&t.message==="Initialization required")throw t;return}},async checkAuth(){try{return await c.checkInitializationStatus(),await r.getControllerInfo(),!0}catch(t){return t instanceof Error&&t.message==="Initialization required"?!1:t?.response?.status===409&&t?.response?.data?.error==="init_required"?(n.update(a=>({...a,needsInitialization:!0,loading:!1})),!1):(c.logout(),!1)}},async initialize(t,a,e,i,o){try{n.update(u=>({...u,loading:!0}));const s=await r.firstRun({username:t,email:a,password:e,full_name:i||t});await c.login(t,e);const l=window.location.origin,h=o?.metadataUrl||`${l}/api/v1/metadata`,p=o?.callbackUrl||`${l}/api/v1/callbacks`,k=o?.webhookUrl||`${l}/webhooks`;await r.updateController({metadata_url:h,callback_url:p,webhook_url:k}),n.update(u=>({...u,needsInitialization:!1}))}catch(s){throw n.update(l=>({...l,loading:!1})),s}}};export{n as a,c as b}; diff --git a/webapp/assets/_app/immutable/chunks/BjNB1vhO.js b/webapp/assets/_app/immutable/chunks/BjNB1vhO.js new file mode 100644 index 00000000..87b7a05f --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/BjNB1vhO.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as pe}from"./De-I_rkH.js";import{aj as _t,aV as bt,aU as wt,J as Pt,L as Mt,M as Ct,N as Tt,O as jt,at as zt,H as rt,I as St,Q as It,P as Ht,a1 as Lt,p as ue,l as Ie,k as He,m as Le,q as h,h as Ve,C as Ce,d as o,g as e,r as l,t as q,b as n,c as ge,f as H,s as C,e as F,z as De,D as Se,A as O,a as N,E as Te,i as Ke,y as Bt,v as Z,u}from"./BIqNNOMq.js";import{p as i,i as M,b as at}from"./CfI2BFUj.js";import{e as ve,i as ce}from"./D8ZtP9JD.js";import{h as Qe,s as Me,B as Pe,r as At,c as Ee,b as Dt,d as Et,f as nt,i as Vt}from"./CQh-7xkh.js";import{c as lt}from"./D4ORNjyB.js";import{b as Nt}from"./Gs5uNKRr.js";import{A as ot}from"./Dbr2TLcG.js";import{B as Rt}from"./CwE4al8R.js";import{g as it,b as Ut}from"./B7If18kh.js";function st(A,t,c){rt&&St();var a=A,r=zt,y,k,f=null,s=_t()?bt:wt;function m(){y&&It(y),f!==null&&(f.lastChild.remove(),a.before(f),f=null),y=k}Pt(()=>{if(s(r,r=t())){var b=a,j=jt();j&&(f=document.createDocumentFragment(),f.append(b=Mt())),k=Ct(()=>c(b)),j?Tt.add_callback(m):m()}}),rt&&(a=Ht)}function ze(A,t){var c=A.$$events?.[t.type],a=Lt(c)?c.slice():c==null?[]:[c];for(var r of a)r.call(this,t)}var Ot=Ce('');function qt(A,t){ue(t,!1);const c=Le();let a=i(t,"name",8),r=i(t,"class",8,"h-5 w-5");const y={plus:'',edit:'',delete:'',view:'',close:'',check:'',x:'',"chevron-left":'',"chevron-right":'',"chevron-down":'',"chevron-up":'',search:'',refresh:'',menu:'',settings:'',"check-circle":'',"x-circle":'',"exclamation-circle":'',"information-circle":'',loading:'',sun:'',moon:'',document:'',folder:'',"git-branch":''};Ie(()=>h(a()),()=>{He(c,y[a()]||"")}),Ve();var k=Ot(),f=o(k);Qe(f,()=>e(c),!0),l(k),q(()=>Me(k,0,`${r()}`)),n(A,k),ge()}var Ft=H('

');function Gt(A,t){let c=i(t,"message",8,"Loading...");var a=Ft(),r=C(o(a),2),y=o(r,!0);l(r),l(a),q(()=>F(y,c())),n(A,a)}var Jt=H('
'),Kt=H('

');function Qt(A,t){let c=i(t,"title",8,"Error"),a=i(t,"message",8),r=i(t,"showRetry",8,!1),y=i(t,"onRetry",8,void 0);var k=Kt(),f=o(k),s=o(f),m=C(o(s),2),b=o(m),j=o(b,!0);l(b);var R=C(b,2),E=o(R,!0);l(R);var B=C(R,2);{var J=K=>{var z=Jt(),P=o(z);Pe(P,{variant:"secondary",size:"sm",icon:"",class:"text-red-700 dark:text-red-200 bg-red-100 dark:bg-red-800 hover:bg-red-200 dark:hover:bg-red-700 focus:outline-none focus:bg-red-200 dark:focus:bg-red-700",$$events:{click(...V){y()?.apply(this,V)}},children:(V,S)=>{De();var X=Se("Retry");n(V,X)},$$slots:{default:!0}}),l(z),n(K,z)};M(B,K=>{r()&&y()&&K(J)})}l(m),l(s),l(f),l(k),q(()=>{F(j,c()),F(E,a())}),n(A,k)}var Zt=Ce(''),Wt=Ce(''),Xt=Ce(''),Yt=Ce(''),$t=Ce(''),er=Ce(''),tr=H('

');function rr(A,t){let c=i(t,"title",8),a=i(t,"message",8),r=i(t,"iconType",8,"document");var y=tr(),k=o(y);{var f=E=>{var B=Zt();n(E,B)},s=E=>{var B=O(),J=N(B);{var K=P=>{var V=Wt();n(P,V)},z=P=>{var V=O(),S=N(V);{var X=v=>{var g=Xt();n(v,g)},d=v=>{var g=O(),p=N(g);{var U=x=>{var D=Yt();n(x,D)},Y=x=>{var D=O(),I=N(D);{var T=L=>{var W=$t();n(L,W)},w=L=>{var W=O(),ee=N(W);{var te=le=>{var fe=er();n(le,fe)};M(ee,le=>{r()==="settings"&&le(te)},!0)}n(L,W)};M(I,L=>{r()==="key"?L(T):L(w,!1)},!0)}n(x,D)};M(p,x=>{r()==="cog"?x(U):x(Y,!1)},!0)}n(v,g)};M(S,v=>{r()==="users"?v(X):v(d,!1)},!0)}n(P,V)};M(J,P=>{r()==="building"?P(K):P(z,!1)},!0)}n(E,B)};M(k,E=>{r()==="document"?E(f):E(s,!1)})}var m=C(k,2),b=o(m,!0);l(m);var j=C(m,2),R=o(j,!0);l(j),l(y),q(()=>{F(b,c()),F(R,a())}),n(A,y)}var ar=H('
');function dt(A,t){ue(t,!1);let c=i(t,"value",12,""),a=i(t,"placeholder",8,"Search..."),r=i(t,"disabled",8,!1);const y=Te();function k(){y("input",c())}pe();var f=ar(),s=o(f),m=o(s);qt(m,{name:"search",class:"h-5 w-5 text-gray-400"}),l(s);var b=C(s,2);At(b),l(f),q(()=>{Ee(b,"placeholder",a()),b.disabled=r()}),Nt(b,c),Ke("input",b,k),Ke("keydown",b,function(j){ze.call(this,t,j)}),n(A,f),ge()}var nr=H(""),lr=H('
'),ir=H('
');function sr(A,t){ue(t,!1);let c=i(t,"searchTerm",12,""),a=i(t,"perPage",12,25),r=i(t,"placeholder",8,"Search..."),y=i(t,"showPerPageSelector",8,!0),k=i(t,"perPageOptions",24,()=>[25,50,100]);const f=Te();function s(){f("search",{term:c()})}function m(){f("perPageChange",{perPage:a()})}pe();var b=ir(),j=o(b),R=o(j),E=o(R),B=C(o(E),2);dt(B,{get placeholder(){return r()},get value(){return c()},set value(z){c(z)},$$events:{input:s},$$legacy:!0}),l(E),l(R);var J=C(R,2);{var K=z=>{var P=lr(),V=o(P),S=C(o(V),2);q(()=>{a(),Bt(()=>{k()})}),ve(S,5,k,ce,(X,d)=>{var v=nr(),g=o(v,!0);l(v);var p={};q(()=>{F(g,e(d)),p!==(p=e(d))&&(v.value=(v.__value=e(d))??"")}),n(X,v)}),l(S),l(V),l(P),Dt(S,a),Ke("change",S,m),n(z,P)};M(J,z=>{y()&&z(K)})}l(j),l(b),n(A,b),ge()}var or=H('

'),dr=H('
');function vr(A,t){ue(t,!1);let c=i(t,"value",12,""),a=i(t,"placeholder",8,"Search..."),r=i(t,"disabled",8,!1),y=i(t,"helpText",8,""),k=i(t,"showButton",8,!0);const f=Te();function s(){f("search",c())}function m(){f("search",c())}function b(S){S.key==="Enter"&&s()}pe();var j=dr(),R=o(j),E=o(R),B=o(E),J=o(B);dt(J,{get placeholder(){return a()},get disabled(){return r()},get value(){return c()},set value(S){c(S)},$$events:{input:m,keydown:b},$$legacy:!0}),l(B);var K=C(B,2);{var z=S=>{Pe(S,{variant:"secondary",get disabled(){return r()},$$events:{click:s},children:(X,d)=>{De();var v=Se("Search");n(X,v)},$$slots:{default:!0}})};M(K,S=>{k()&&S(z)})}l(E);var P=C(E,2);{var V=S=>{var X=or(),d=o(X,!0);l(X),q(()=>F(d,y())),n(S,X)};M(P,S=>{y()&&S(V)})}l(R),l(j),n(A,j),ge()}var cr=H('Showing to of ',1),ur=H('
');function gr(A,t){ue(t,!1);const c=Le(),a=Le();let r=i(t,"currentPage",8,1),y=i(t,"totalPages",8,1),k=i(t,"perPage",8,25),f=i(t,"totalItems",8,0),s=i(t,"itemName",8,"results");const m=Te();function b(B){B>=1&&B<=y()&&B!==r()&&m("pageChange",{page:B})}Ie(()=>(h(f()),h(r()),h(k())),()=>{He(c,f()===0?0:(r()-1)*k()+1)}),Ie(()=>(h(r()),h(k()),h(f())),()=>{He(a,Math.min(r()*k(),f()))}),Ve(),pe();var j=O(),R=N(j);{var E=B=>{var J=ur(),K=o(J),z=o(K);{let I=Z(()=>r()===1);Pe(z,{variant:"secondary",get disabled(){return e(I)},$$events:{click:()=>b(r()-1)},children:(T,w)=>{De();var L=Se("Previous");n(T,L)},$$slots:{default:!0}})}var P=C(z,2);{let I=Z(()=>r()===y());Pe(P,{variant:"secondary",get disabled(){return e(I)},class:"ml-3",$$events:{click:()=>b(r()+1)},children:(T,w)=>{De();var L=Se("Next");n(T,L)},$$slots:{default:!0}})}l(K);var V=C(K,2),S=o(V),X=o(S),d=o(X);{var v=I=>{var T=Se();q(()=>F(T,`No ${s()??""}`)),n(I,T)},g=I=>{var T=cr(),w=C(N(T)),L=o(w,!0);l(w);var W=C(w,2),ee=o(W,!0);l(W);var te=C(W,2),le=o(te,!0);l(te);var fe=C(te);q(()=>{F(L,e(c)),F(ee,e(a)),F(le,f()),F(fe,` ${s()??""}`)}),n(I,T)};M(d,I=>{f()===0?I(v):I(g,!1)})}l(X),l(S);var p=C(S,2),U=o(p),Y=o(U);{let I=Z(()=>r()===1);Pe(Y,{variant:"secondary",size:"sm",get disabled(){return e(I)},class:"rounded-r-none","aria-label":"Previous page",icon:"",$$events:{click:()=>b(r()-1)}})}var x=C(Y,2);ve(x,1,()=>(h(y()),u(()=>Array(y()))),ce,(I,T,w)=>{const L=Z(()=>w+1);{let W=Z(()=>e(L)===r()?"primary":"secondary");Pe(I,{get variant(){return e(W)},size:"sm",class:"rounded-none border-l-0 first:border-l first:rounded-l-md",$$events:{click:()=>b(e(L))},children:(ee,te)=>{De();var le=Se();q(()=>F(le,e(L))),n(ee,le)},$$slots:{default:!0}})}});var D=C(x,2);{let I=Z(()=>r()===y());Pe(D,{variant:"secondary",size:"sm",get disabled(){return e(I)},class:"rounded-l-none","aria-label":"Next page",icon:"",$$events:{click:()=>b(r()+1)}})}l(U),l(p),l(V),l(J),n(B,J)};M(R,B=>{y()>1&&B(E)})}n(A,j),ge()}var fr=H('

'),hr=H('

'),mr=H('

'),pr=H('

'),xr=H('
'),yr=H('
'),kr=H('
'),_r=H(" "),br=H('
'),wr=H('
');function Pr(A,t){ue(t,!1);const c=Te();let a=i(t,"item",8),r=i(t,"config",8);function y(){if(!a())return"Unknown";const{field:d,useId:v,showOwner:g}=r().primaryText,p=a()[d];return v&&p?`${p.slice(0,8)}...`:g&&a().owner&&a().name?`${a().owner}/${a().name}`:p||"Unknown"}function k(){if(!r().secondaryText)return"";const{field:d,computedValue:v}=r().secondaryText;return v!==void 0?typeof v=="function"?v(a()):v:a()?.[d]||""}function f(){if(!r().primaryText.href||!a())return"#";let d=r().primaryText.href;return d=d.replace("{id}",a().id||""),d=d.replace("{name}",encodeURIComponent(a().name||"")),Et(d)}function s(d){if(!a())return;const v=r().actions?.find(g=>g.type===d);v&&v.handler(a()),d==="edit"?c("edit",{item:a()}):d==="delete"?c("delete",{item:a()}):d==="clone"?c("clone",{item:a()}):c("action",{type:d,item:a()})}function m(d){switch(d.type){case"status":if(r().entityType==="instance"){const g=a()?.[d.field]||"unknown";let p="neutral",U=g.charAt(0).toUpperCase()+g.slice(1);return d.field==="status"?p=g==="running"?"success":g==="pending"||g==="creating"?"info":g==="failed"||g==="error"?"error":"neutral":d.field==="runner_status"&&(p=g==="idle"?"info":g==="active"||g==="running"?"success":g==="failed"||g==="error"?"error":"neutral"),{variant:p,text:U}}return{variant:"neutral",text:a()?.[d.field]||"Unknown"};case"forge":return{variant:"neutral",text:a()?.[d.field]||"unknown"};case"auth":const v=a()?.[d.field]||"pat";return{variant:v==="pat"?"success":"info",text:v.toUpperCase()};case"custom":if(typeof d.value=="function"){const g=d.value(a());return{variant:g?.variant||"neutral",text:g?.text||""}}return{variant:d.value?.variant||"neutral",text:d.value?.text||""};default:return{variant:"neutral",text:""}}}pe();var b=wr(),j=o(b),R=o(j);{var E=d=>{var v=hr(),g=o(v),p=o(g,!0);l(g);var U=C(g,2);{var Y=x=>{var D=fr(),I=o(D,!0);l(D),q(T=>F(I,T),[()=>u(k)]),n(x,D)};M(U,x=>{h(r()),u(()=>r().secondaryText)&&x(Y)})}l(v),q((x,D)=>{Ee(v,"href",x),Me(g,1,`text-sm font-medium text-blue-600 dark:text-blue-400 hover:text-blue-500 dark:hover:text-blue-300 truncate${h(r()),u(()=>r().primaryText.isMonospace?" font-mono":"")??""}`),F(p,D)},[()=>u(f),()=>u(y)]),n(d,v)},B=d=>{var v=pr(),g=o(v),p=o(g,!0);l(g);var U=C(g,2);{var Y=x=>{var D=mr(),I=o(D,!0);l(D),q(T=>F(I,T),[()=>u(k)]),n(x,D)};M(U,x=>{h(r()),u(()=>r().secondaryText)&&x(Y)})}l(v),q(x=>F(p,x),[()=>u(y)]),n(d,v)};M(R,d=>{h(r()),u(()=>r().primaryText.isClickable)?d(E):d(B,!1)})}var J=C(R,2);{var K=d=>{var v=kr(),g=o(v);{var p=x=>{var D=O(),I=N(D);ve(I,1,()=>(h(r()),u(()=>r().customInfo)),ce,(T,w)=>{const L=Z(()=>(e(w),h(a()),u(()=>typeof e(w).icon=="function"?e(w).icon(a()):e(w).icon))),W=Z(()=>(e(w),h(a()),u(()=>typeof e(w).text=="function"?e(w).text(a()):e(w).text)));var ee=xr(),te=o(ee);{var le=xe=>{var Be=O(),Re=N(Be);Qe(Re,()=>e(L)),n(xe,Be)};M(te,xe=>{e(L)&&xe(le)})}var fe=C(te,2),Ne=o(fe,!0);l(fe),l(ee),q(()=>F(Ne,e(W))),n(T,ee)}),n(x,D)};M(g,x=>{h(r()),u(()=>r().customInfo)&&x(p)})}var U=C(g,2);{var Y=x=>{var D=O(),I=N(D);ve(I,1,()=>(h(r()),u(()=>r().badges.filter(T=>T.type==="forge"))),ce,(T,w)=>{var L=yr(),W=o(L);Qe(W,()=>(h(it),e(w),h(a()),u(()=>it(e(w).field?a()?.[e(w).field]||"unknown":a()?.endpoint?.endpoint_type||"unknown"))));var ee=C(W,2),te=o(ee,!0);l(ee),l(L),q(()=>F(te,(h(a()),u(()=>a()?.endpoint?.name||"Unknown")))),n(T,L)}),n(x,D)};M(U,x=>{h(r()),u(()=>r().badges)&&x(Y)})}l(v),n(d,v)};M(J,d=>{h(r()),u(()=>r().customInfo||r().badges?.some(v=>v.type==="forge"))&&d(K)})}l(j);var z=C(j,2),P=o(z);{var V=d=>{var v=O(),g=N(v);ve(g,1,()=>(h(r()),u(()=>r().badges.filter(p=>p.type!=="forge"))),ce,(p,U)=>{var Y=O(),x=N(Y);{var D=T=>{const w=Z(()=>(e(U),u(()=>m(e(U)))));var L=_r(),W=o(L,!0);l(L),q(()=>{Me(L,1,`inline-flex items-center rounded-full px-2 py-1 text-xs font-medium ring-1 ring-inset ${h(e(w)),u(()=>e(w).variant==="success"?"bg-green-50 text-green-700 ring-green-600/20 dark:bg-green-900/50 dark:text-green-300 dark:ring-green-400/20":e(w).variant==="info"?"bg-blue-50 text-blue-700 ring-blue-600/20 dark:bg-blue-900/50 dark:text-blue-300 dark:ring-blue-400/20":e(w).variant==="error"?"bg-red-50 text-red-700 ring-red-600/20 dark:bg-red-900/50 dark:text-red-300 dark:ring-red-400/20":"bg-gray-50 text-gray-700 ring-gray-600/20 dark:bg-gray-900/50 dark:text-gray-300 dark:ring-gray-400/20")??""}`),F(W,(h(e(w)),u(()=>e(w).text)))}),n(T,L)},I=T=>{const w=Z(()=>(e(U),u(()=>m(e(U)))));Rt(T,{get variant(){return h(e(w)),u(()=>e(w).variant)},get text(){return h(e(w)),u(()=>e(w).text)}})};M(x,T=>{e(U),u(()=>e(U).type==="status")?T(D):T(I,!1)})}n(p,Y)}),n(d,v)};M(P,d=>{h(r()),u(()=>r().badges)&&d(V)})}var S=C(P,2);{var X=d=>{var v=br();ve(v,5,()=>(h(r()),u(()=>r().actions)),ce,(g,p)=>{{let U=Z(()=>(e(p),u(()=>e(p).type==="clone"?"copy":e(p).type))),Y=Z(()=>(e(p),h(r()),u(()=>e(p).type==="edit"?`Edit ${r().entityType}`:e(p).type==="delete"?`Delete ${r().entityType}`:e(p).type==="clone"?`Clone ${r().entityType}`:e(p).type))),x=Z(()=>(e(p),h(r()),u(()=>e(p).type==="edit"?`Edit ${r().entityType}`:e(p).type==="delete"?`Delete ${r().entityType}`:e(p).type==="clone"?`Clone ${r().entityType}`:e(p).type)));ot(g,{get action(){return e(U)},size:"sm",get title(){return e(Y)},get ariaLabel(){return e(x)},$$events:{click:()=>s(e(p).type)}})}}),l(v),n(d,v)};M(S,d=>{h(r()),u(()=>r().actions)&&d(X)})}l(z),l(b),n(A,b),ge()}var Mr=H('
'),Cr=H('
'),Tr=H("
"),jr=H("
"),zr=H(' ',1),Sr=H('
');function Gr(A,t){ue(t,!1);const c=Le();let a=i(t,"columns",24,()=>[]),r=i(t,"data",24,()=>[]),y=i(t,"loading",8,!1),k=i(t,"error",8,""),f=i(t,"totalItems",8,0),s=i(t,"itemName",8,"results"),m=i(t,"searchTerm",12,""),b=i(t,"searchPlaceholder",8,"Search..."),j=i(t,"showSearch",8,!0),R=i(t,"searchType",8,"client"),E=i(t,"searchHelpText",8,""),B=i(t,"currentPage",8,1),J=i(t,"perPage",12,25),K=i(t,"totalPages",8,1),z=i(t,"showPagination",8,!0),P=i(t,"showPerPageSelector",8,!0),V=i(t,"paginationComponent",8,null),S=i(t,"paginationProps",24,()=>({})),X=i(t,"emptyTitle",8,"No items found"),d=i(t,"emptyMessage",8,""),v=i(t,"emptyIconType",8,"document"),g=i(t,"errorTitle",8,"Error loading data"),p=i(t,"showRetry",8,!1),U=i(t,"showMobileCards",8,!0),Y=i(t,"mobileCardConfig",8,null);const x=Te();function D(_){const re=typeof _.detail=="string"?_.detail:_.detail.term;x("search",{term:re})}function I(_){x("pageChange",_.detail)}function T(_){x("perPageChange",_.detail)}function w(){x("retry")}function L(_){x("edit",_.detail)}function W(_){x("delete",_.detail)}function ee(_){x("clone",_.detail)}function te(_){x("shell",_.detail)}function le(_){x("action",_.detail)}function fe(_){const re="px-6 py-4 text-sm",ye=_.align==="right"?"text-right":_.align==="center"?"text-center":"text-left",ke=_.key==="actions"?"font-medium":"text-gray-900 dark:text-white",_e=_.flexible?"min-w-0":"";return`${re} ${ye} ${ke} ${_e}`.trim()}function Ne(){return a().map(_=>_.flexible?`${_.flexRatio||1}fr`:"auto").join(" ")}Ie(()=>(h(d()),h(m()),h(s())),()=>{He(c,d()||(m()?`No items found matching "${m()}"`:`No ${s()} found`))}),Ve(),pe();var xe=Sr(),Be=o(xe);{var Re=_=>{var re=O(),ye=N(re);{var ke=Q=>{vr(Q,{get placeholder(){return b()},get helpText(){return E()},showButton:!1,get value(){return m()},set value(ae){m(ae)},$$events:{search:D},$$legacy:!0})},_e=Q=>{sr(Q,{get placeholder(){return b()},get showPerPageSelector(){return P()},get searchTerm(){return m()},set searchTerm(ae){m(ae)},get perPage(){return J()},set perPage(ae){J(ae)},$$events:{search:D,perPageChange:T},$$legacy:!0})};M(ye,Q=>{R()==="backend"?Q(ke):Q(_e,!1)})}n(_,re)};M(Be,_=>{j()&&_(Re)})}var Ze=C(Be,2),We=o(Ze);{var vt=_=>{Gt(_,{get message(){return`Loading ${s()??""}...`}})},ct=_=>{var re=O(),ye=N(re);{var ke=Q=>{{let ae=Z(()=>p()?w:void 0);Qt(Q,{get title(){return g()},get message(){return k()},get showRetry(){return p()},get onRetry(){return e(ae)}})}},_e=Q=>{var ae=O(),Ue=N(ae);{var Oe=he=>{rr(he,{get title(){return X()},get message(){return e(c)},get iconType(){return v()}})},qe=he=>{var Xe=zr(),Ye=N(Xe);{var ft=ie=>{var G=Cr();ve(G,7,r,(oe,ne)=>oe.id||oe.name||ne,(oe,ne,Ge)=>{var Ae=Mr(),$=o(Ae);{var je=me=>{var be=O(),se=N(be);st(se,()=>(e(ne),u(()=>`${e(ne).id||e(ne).name}-${e(ne).updated_at}-mobile`)),we=>{Pr(we,{get item(){return e(ne)},get config(){return Y()},$$events:{edit(de){ze.call(this,t,de)},delete(de){ze.call(this,t,de)},clone(de){ze.call(this,t,de)},action(de){ze.call(this,t,de)}}})}),n(me,be)},Je=me=>{var be=O(),se=N(be);nt(se,t,"mobile-card",{get item(){return e(ne)},get index(){return e(Ge)}}),n(me,be)};M($,me=>{Y()?me(je):me(Je,!1)})}l(Ae),n(oe,Ae)}),l(G),n(ie,G)};M(Ye,ie=>{U()&&ie(ft)})}var $e=C(Ye,2),Fe=o($e),et=o(Fe);ve(et,1,a,ce,(ie,G)=>{var oe=Tr(),ne=o(oe,!0);l(oe),q(()=>{Me(oe,1,`px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider bg-gray-50 dark:bg-gray-700 border-b border-gray-200 dark:border-gray-600 ${e(G),u(()=>e(G).align==="right"?"text-right":e(G).align==="center"?"text-center":"text-left")??""}`),F(ne,(e(G),u(()=>e(G).title)))}),n(ie,oe)});var ht=C(et,2);ve(ht,3,r,(ie,G)=>ie.id||ie.name||G,(ie,G,oe)=>{var ne=O(),Ge=N(ne);ve(Ge,1,a,ce,(Ae,$)=>{var je=jr(),Je=o(je);{var me=se=>{var we=O(),de=N(we);st(de,()=>(e(G),e($),u(()=>`${e(G).id||e(G).name}-${e(G).updated_at}-${e($).key}`)),mt=>{var tt=O(),pt=N(tt);{let xt=Z(()=>typeof e($).cellProps=="function"?e($).cellProps(e(G)):e($).cellProps);lt(pt,()=>e($).cellComponent,(yt,kt)=>{kt(yt,at({get item(){return e(G)}},()=>e(xt),{$$events:{edit:L,delete:W,clone:ee,shell:te,action:le}}))})}n(mt,tt)}),n(se,we)},be=se=>{var we=O(),de=N(we);nt(de,t,"cell",{get item(){return e(G)},get column(){return e($)},get index(){return e(oe)},get value(){return e(G),e($),u(()=>e(G)[e($).key])}}),n(se,we)};M(Je,se=>{e($),u(()=>e($).cellComponent)?se(me):se(be,!1)})}l(je),q(se=>Me(je,1,`${se??""} border-b border-gray-200 dark:border-gray-700`),[()=>(e($),u(()=>fe(e($))))]),n(Ae,je)}),n(ie,ne)}),l(Fe),l($e),q(ie=>Vt(Fe,`grid-template-columns: ${ie??""}`),[()=>u(Ne)]),n(he,Xe)};M(Ue,he=>{h(r()),u(()=>r().length===0)?he(Oe):he(qe,!1)},!0)}n(Q,ae)};M(ye,Q=>{k()?Q(ke):Q(_e,!1)},!0)}n(_,re)};M(We,_=>{y()?_(vt):_(ct,!1)})}var ut=C(We,2);{var gt=_=>{var re=O(),ye=N(re);{var ke=Q=>{var ae=O(),Ue=N(ae);lt(Ue,V,(Oe,qe)=>{qe(Oe,at({get currentPage(){return B()},get totalPages(){return K()},get totalItems(){return f()},get pageSize(){return J()},get loading(){return y()},get itemName(){return s()}},S,{$$events:{pageChange:I,pageSizeChange:T,prefetch(he){ze.call(this,t,he)}}}))}),n(Q,ae)},_e=Q=>{gr(Q,{get currentPage(){return B()},get totalPages(){return K()},get perPage(){return J()},get totalItems(){return f()},get itemName(){return s()},$$events:{pageChange:I}})};M(ye,Q=>{V()?Q(ke):Q(_e,!1)})}n(_,re)};M(ut,_=>{h(z()),h(y()),h(k()),h(r()),u(()=>z()&&!y()&&!k()&&r().length>0)&&_(gt)})}l(Ze),l(xe),n(A,xe),ge()}var Ir=H('
');function Jr(A,t){ue(t,!1);const c=Te();let a=i(t,"item",8),r=i(t,"actions",24,()=>[{type:"edit",title:"Edit",ariaLabel:"Edit item",action:"edit"},{type:"delete",title:"Delete",ariaLabel:"Delete item",action:"delete"}]);function y(f,s){if(!a())return;const m=s||f;m==="edit"?c("edit",{item:a()}):m==="delete"?c("delete",{item:a()}):m==="copy"||m==="clone"?c("clone",{item:a()}):f==="shell"?c("shell",{item:a()}):c("action",{type:m,item:a()})}pe();var k=Ir();ve(k,5,r,ce,(f,s)=>{const m=Z(()=>(e(s),h(a()),u(()=>e(s).isDisabled?e(s).isDisabled(a()):!1))),b=Z(()=>(e(s),u(()=>e(s).action==="clone"?"copy":e(s).action||(e(s).type==="edit"?"edit":e(s).type==="delete"?"delete":e(s).type==="copy"?"copy":e(s).type==="shell"?"shell":"view")))),j=Z(()=>(e(s),h(a()),u(()=>typeof e(s).disabledTitle=="function"?e(s).disabledTitle(a()):e(s).disabledTitle))),R=Z(()=>(h(e(m)),h(e(j)),e(s),u(()=>e(m)&&e(j)?e(j):e(s).title||(e(s).type==="edit"?"Edit":e(s).type==="delete"?"Delete":e(s).type==="copy"?"Clone":e(s).type==="shell"?"Shell":e(s).label))));{let E=Z(()=>(e(s),u(()=>e(s).ariaLabel||(e(s).type==="edit"?"Edit item":e(s).type==="delete"?"Delete item":e(s).type==="copy"?"Clone item":e(s).type==="shell"?"Open shell":e(s).label))));ot(f,{get action(){return e(b)},get title(){return e(R)},get ariaLabel(){return e(E)},get disabled(){return e(m)},$$events:{click:()=>y(e(s).type,e(s).action)}})}}),l(k),n(A,k),ge()}var Hr=H(" "),Lr=H(" ");function Kr(A,t){ue(t,!1);const c=Le(),a=Le();let r=i(t,"item",8),y=i(t,"field",8,void 0),k=i(t,"getValue",8,void 0),f=i(t,"type",8,"text"),s=i(t,"truncateLength",8,50),m=i(t,"showTitle",8,!1);function b(){return r()?k()?k()(r()):y()&&y().split(".").reduce((z,P)=>z?.[P],r())||"":""}function j(){return f()==="date"?Ut(e(c)):f()==="truncated"&&e(c).length>s()?`${e(c).slice(0,s())}...`:e(c)}function R(){switch(f()){case"code":return"inline-block max-w-full truncate bg-gray-100 dark:bg-gray-700 px-2 py-1 rounded text-xs font-mono";case"description":return"block w-full truncate text-sm text-gray-500 dark:text-gray-300";case"date":return"block w-full truncate text-sm text-gray-900 dark:text-white font-mono";default:return"block w-full truncate text-sm text-gray-900 dark:text-white"}}Ie(()=>{},()=>{He(c,b())}),Ie(()=>{},()=>{He(a,j())}),Ve(),pe();var E=O(),B=N(E);{var J=z=>{var P=Hr(),V=o(P,!0);l(P),q(S=>{Me(P,1,`${S??""} ${m()?"cursor-default":""}`),Ee(P,"title",m()?e(c):""),F(V,e(a))},[()=>u(R)]),n(z,P)},K=z=>{var P=Lr(),V=o(P,!0);l(P),q(S=>{Me(P,1,`${S??""} ${m()?"cursor-default":""}`),Ee(P,"title",m()?e(c):""),F(V,e(a))},[()=>u(R)]),n(z,P)};M(B,z=>{f()==="code"?z(J):z(K,!1)})}n(A,E),ge()}export{Jr as A,Gr as D,Kr as G,Gt as L,st as k}; diff --git a/webapp/assets/_app/immutable/chunks/BlYHwhWl.js b/webapp/assets/_app/immutable/chunks/BlYHwhWl.js deleted file mode 100644 index dc418564..00000000 --- a/webapp/assets/_app/immutable/chunks/BlYHwhWl.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as F}from"./TJn6xDN9.js";import{p as G,E as I,f as x,t as _,b as r,c as J,d as s,r as i,s as k,u as K,e as f,A as N,a as O,z as Q,D as R}from"./DniTuB_0.js";import{p as o,i as b}from"./DbNhg6mG.js";import{e as S,f as T,B as U}from"./DD3srElq.js";var V=x('
'),W=x('
'),X=x('

');function st(g,t){const w=S(t);G(t,!1);const y=I();let A=o(t,"title",8),P=o(t,"description",8),h=o(t,"actionLabel",8,null),j=o(t,"showAction",8,!0);function z(){y("action")}F();var n=X(),l=s(n),c=s(l),B=s(c,!0);i(c);var p=k(c,2),D=s(p,!0);i(p),i(l);var E=k(l,2);{var H=e=>{var a=V(),v=s(a);T(v,t,"actions",{}),i(a),r(e,a)},L=e=>{var a=N(),v=O(a);{var M=d=>{var m=W(),q=s(m);U(q,{variant:"primary",icon:'',$$events:{click:z},children:(C,Y)=>{Q();var u=R();_(()=>f(u,h())),r(C,u)},$$slots:{default:!0}}),i(m),r(d,m)};b(v,d=>{j()&&h()&&d(M)},!0)}r(e,a)};b(E,e=>{K(()=>w.actions)?e(H):e(L,!1)})}i(n),_(()=>{f(B,A()),f(D,P())}),r(g,n),J()}export{st as P}; diff --git a/webapp/assets/_app/immutable/chunks/C0wSEYM-.js b/webapp/assets/_app/immutable/chunks/C0wSEYM-.js deleted file mode 100644 index 00aa1fcd..00000000 --- a/webapp/assets/_app/immutable/chunks/C0wSEYM-.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as Oe}from"./TJn6xDN9.js";import{p as Fe,E as Ke,o as Ge,f as x,d as t,r,s,g as e,m,z as B,t as y,y as ue,u as l,e as v,q as T,k as i,i as be,b as u,D as He,c as Je}from"./DniTuB_0.js";import{p as ge,i as U}from"./DbNhg6mG.js";import{e as Qe,i as Ve}from"./Ck5PkeSc.js";import{r as me,b as ye,g as Xe}from"./DD3srElq.js";import{a as Ye,b as Ze}from"./CCQwxxp9.js";import{p as ea}from"./D4Caz1gY.js";import{e as xe}from"./BZiHL9L3.js";import{M as aa}from"./PC4wJWhj.js";var ta=x('

'),ra=x('
Owner:
'),oa=x('
'),sa=x(""),na=x(''),ia=x('

Leave empty to auto-generate a new secret

'),da=x('
Updating...
'),la=x('

Name:
Endpoint:
Current Credentials:
Current Pool Balancer:

Leave unchanged to keep current credentials

Round Robin distributes jobs evenly across pools, Pack fills pools in order

');function _a(fe,D){Fe(D,!1);let d=ge(D,"entity",8),w=ge(D,"entityType",8);const $=Ke();let C=m(!1),k=m(""),M=m([]),R=m(!1),f=m(""),_=m(""),h=m(""),b=m(!1);function _e(){if(w()==="repository"){const c=d();return`${c.owner}/${c.name}`}return d().name||""}function W(){return w().charAt(0).toUpperCase()+w().slice(1)}function he(){return w()==="repository"&&d().owner||""}async function ke(){try{i(R,!0),i(M,await Xe.listCredentials())}catch(c){i(k,xe(c))}finally{i(R,!1)}}function we(){i(f,d().credentials_name||""),i(_,d().pool_balancing_type||"roundrobin"),i(h,""),i(b,!1)}async function Ce(){try{i(C,!0),i(k,"");const c={};let E=!1;if(e(f)&&e(f)!==d().credentials_name&&(c.credentials_name=e(f),E=!0),e(_)&&e(_)!==d().pool_balancing_type&&(c.pool_balancer_type=e(_),E=!0),e(b)){if(!e(h).trim()){i(k,"Please enter a webhook secret or uncheck the option to change it");return}c.webhook_secret=e(h),E=!0}if(!E){$("close");return}$("submit",c)}catch(c){i(k,xe(c))}finally{i(C,!1)}}Ge(()=>{ke(),we()}),Oe(),aa(fe,{$$events:{close:()=>$("close")},children:(c,E)=>{var A=la(),N=t(A),j=t(N),Ee=t(j);r(j);var Y=s(j,2),Se=t(Y,!0);r(Y),r(N);var q=s(N,2),Z=t(q);{var Pe=a=>{var o=ta(),n=t(o),p=t(n,!0);r(n),r(o),y(()=>v(p,e(k))),u(a,o)};U(Z,a=>{e(k)&&a(Pe)})}var z=s(Z,2),I=t(z),Ue=t(I);r(I);var ee=s(I,2),ae=t(ee);{var $e=a=>{var o=ra(),n=s(t(o),2),p=t(n,!0);r(n),r(o),y(S=>v(p,S),[()=>l(he)]),u(a,o)};U(ae,a=>{w()==="repository"&&a($e)})}var L=s(ae,2),te=s(t(L),2),Be=t(te,!0);r(te),r(L);var O=s(L,2),re=s(t(O),2),Te=t(re,!0);r(re),r(O);var F=s(O,2),oe=s(t(F),2),De=t(oe,!0);r(oe),r(F);var se=s(F,2),ne=s(t(se),2),Me=t(ne,!0);r(ne),r(se),r(ee),r(z);var K=s(z,2),G=t(K),Re=s(t(G),2);{var We=a=>{var o=oa();u(a,o)},Ae=a=>{var o=na();y(()=>{e(f),ue(()=>{e(M)})});var n=t(o);n.value=n.__value="";var p=s(n);Qe(p,1,()=>e(M),Ve,(S,g)=>{var P=sa(),Le=t(P);r(P);var pe={};y(()=>{v(Le,`${e(g),l(()=>e(g).name)??""} (${e(g),l(()=>e(g).endpoint?.name||"Unknown")??""})`),pe!==(pe=(e(g),l(()=>e(g).name)))&&(P.value=(P.__value=(e(g),l(()=>e(g).name)))??"")}),u(S,P)}),r(o),ye(o,()=>e(f),S=>i(f,S)),u(a,o)};U(Re,a=>{e(R)?a(We):a(Ae,!1)})}B(2),r(G);var H=s(G,2),J=s(t(H),2);y(()=>{e(_),ue(()=>{})});var Q=t(J);Q.value=Q.__value="roundrobin";var ie=s(Q);ie.value=ie.__value="pack",r(J),B(2),r(H);var de=s(H,2),V=t(de),le=t(V);me(le),B(2),r(V);var Ne=s(V,2);{var je=a=>{var o=ia(),n=s(t(o),2);me(n),B(2),r(o),y(()=>n.required=e(b)),Ze(n,()=>e(h),p=>i(h,p)),u(a,o)};U(Ne,a=>{e(b)&&a(je)})}r(de),r(K);var ce=s(K,2),ve=t(ce),X=s(ve,2),qe=t(X);{var ze=a=>{var o=da();u(a,o)},Ie=a=>{var o=He();y(n=>v(o,`Update ${n??""}`),[()=>l(W)]),u(a,o)};U(qe,a=>{e(C)?a(ze):a(Ie,!1)})}r(X),r(ce),r(q),r(A),y((a,o,n,p)=>{v(Ee,`Update ${a??""}`),v(Se,o),v(Ue,`${n??""} Information`),v(Be,(T(d()),l(()=>d().name))),v(Te,(T(d()),l(()=>d().endpoint?.name))),v(De,(T(d()),l(()=>d().credentials_name))),v(Me,(T(d()),l(()=>d().pool_balancing_type||"roundrobin"))),X.disabled=p},[()=>l(W),()=>l(_e),()=>l(W),()=>(e(C),e(b),e(h),l(()=>e(C)||e(b)&&!e(h).trim()))]),ye(J,()=>e(_),a=>i(_,a)),Ye(le,()=>e(b),a=>i(b,a)),be("click",ve,()=>$("close")),be("submit",q,ea(Ce)),u(c,A)},$$slots:{default:!0}}),Je()}export{_a as U}; diff --git a/webapp/assets/_app/immutable/chunks/DmHFwzWx.js b/webapp/assets/_app/immutable/chunks/C4VNo_Nu.js similarity index 97% rename from webapp/assets/_app/immutable/chunks/DmHFwzWx.js rename to webapp/assets/_app/immutable/chunks/C4VNo_Nu.js index a35e98a5..84c1abff 100644 --- a/webapp/assets/_app/immutable/chunks/DmHFwzWx.js +++ b/webapp/assets/_app/immutable/chunks/C4VNo_Nu.js @@ -1 +1 @@ -import{F as C}from"./DniTuB_0.js";function x(){const{subscribe:E,set:L,update:s}=C({connected:!1,connecting:!1,error:null,lastEvent:null});let e=null,b=0,W=50,k=1e3,f=1e3,m=3e4,d=null,r=[],i=!1;const l=new Map;function N(){const t=window.location.protocol==="https:"?"wss:":"ws:",n=window.location.host;return`${t}//${n}/api/v1/ws/events`}function u(){if(!(e&&(e.readyState===WebSocket.CONNECTING||e.readyState===WebSocket.OPEN))){i=!1,s(t=>({...t,connecting:!0,error:null}));try{const t=N();e=new WebSocket(t);const n=setTimeout(()=>{e&&e.readyState===WebSocket.CONNECTING&&e.close()},1e4);e.onopen=()=>{clearTimeout(n),b=0,f=k,s(a=>({...a,connected:!0,connecting:!1,error:null})),r.length>0&&g(r)},e.onmessage=a=>{try{const c=JSON.parse(a.data);s(o=>({...o,lastEvent:c})),(l.get(c["entity-type"])||[]).forEach(o=>{try{o(c)}catch(w){console.error("[WebSocket] Error in event callback:",w)}})}catch(c){console.error("[WebSocket] Error parsing message:",c)}},e.onclose=a=>{clearTimeout(n);const c=a.code===1e3&&i,S=a.code!==1e3?`Connection closed: ${a.reason||"Unknown reason"}`:null;s(o=>({...o,connected:!1,connecting:!1,error:S})),c||h()},e.onerror=a=>{clearTimeout(n),s(c=>({...c,connected:!1,connecting:!1,error:"WebSocket connection error"})),i||h()}}catch(t){s(n=>({...n,connected:!1,connecting:!1,error:t instanceof Error?t.message:"Failed to connect"}))}}}function M(){}function F(){}function h(){if(i)return;d&&clearTimeout(d),b++,b>W&&(b=1,f=k);const t=Math.min(f,m);d=window.setTimeout(()=>{if(!i){u();const n=Math.random()*1e3;f=Math.min(f*1.5+n,m)}},t)}function g(t){if(e&&e.readyState===WebSocket.OPEN){const n={"send-everything":!1,filters:t};e.send(JSON.stringify(n)),r=[...t]}}function y(){i=!0,d&&(clearTimeout(d),d=null),e&&(e.close(1e3,"Manual disconnect"),e=null),l.clear(),r=[],s(t=>({...t,connected:!1,connecting:!1,error:null,lastEvent:null}))}function O(){navigator.onLine&&!i&&setTimeout(()=>{(!e||e.readyState===WebSocket.CLOSED||e.readyState===WebSocket.CLOSING)&&(b=0,f=k,u())},2e3)}typeof window<"u"&&(window.addEventListener("online",O),window.addEventListener("offline",()=>{s(t=>({...t,error:"Network offline"}))}),setInterval(()=>{i||(!e||e.readyState===WebSocket.CLOSED||e.readyState===WebSocket.CLOSING)&&u()},1e4));function v(t,n,a){l.has(t)||l.set(t,[]),l.get(t).push(a);const c=r.findIndex(o=>o["entity-type"]===t),S={"entity-type":t,operations:n};if(c>=0){const o=r[c].operations;S.operations=Array.from(new Set([...o,...n])),r[c]=S}else r.push(S);return e&&e.readyState===WebSocket.OPEN&&g(r),(!e||e.readyState===WebSocket.CLOSED||e.readyState===WebSocket.CLOSING)&&u(),()=>{const o=l.get(t);if(o){const w=o.indexOf(a);if(w>-1&&o.splice(w,1),o.length===0){l.delete(t);const p=r.findIndex(I=>I["entity-type"]===t);p>-1&&(r.splice(p,1),e&&e.readyState===WebSocket.OPEN&&g(r))}}}}return typeof window<"u"&&u(),{subscribe:E,connect:u,disconnect:y,subscribeToEntity:v}}const D=x();export{D as w}; +import{F as C}from"./BIqNNOMq.js";function x(){const{subscribe:E,set:L,update:s}=C({connected:!1,connecting:!1,error:null,lastEvent:null});let e=null,b=0,W=50,k=1e3,f=1e3,m=3e4,d=null,r=[],i=!1;const l=new Map;function N(){const t=window.location.protocol==="https:"?"wss:":"ws:",n=window.location.host;return`${t}//${n}/api/v1/ws/events`}function u(){if(!(e&&(e.readyState===WebSocket.CONNECTING||e.readyState===WebSocket.OPEN))){i=!1,s(t=>({...t,connecting:!0,error:null}));try{const t=N();e=new WebSocket(t);const n=setTimeout(()=>{e&&e.readyState===WebSocket.CONNECTING&&e.close()},1e4);e.onopen=()=>{clearTimeout(n),b=0,f=k,s(a=>({...a,connected:!0,connecting:!1,error:null})),r.length>0&&g(r)},e.onmessage=a=>{try{const c=JSON.parse(a.data);s(o=>({...o,lastEvent:c})),(l.get(c["entity-type"])||[]).forEach(o=>{try{o(c)}catch(w){console.error("[WebSocket] Error in event callback:",w)}})}catch(c){console.error("[WebSocket] Error parsing message:",c)}},e.onclose=a=>{clearTimeout(n);const c=a.code===1e3&&i,S=a.code!==1e3?`Connection closed: ${a.reason||"Unknown reason"}`:null;s(o=>({...o,connected:!1,connecting:!1,error:S})),c||h()},e.onerror=a=>{clearTimeout(n),s(c=>({...c,connected:!1,connecting:!1,error:"WebSocket connection error"})),i||h()}}catch(t){s(n=>({...n,connected:!1,connecting:!1,error:t instanceof Error?t.message:"Failed to connect"}))}}}function M(){}function F(){}function h(){if(i)return;d&&clearTimeout(d),b++,b>W&&(b=1,f=k);const t=Math.min(f,m);d=window.setTimeout(()=>{if(!i){u();const n=Math.random()*1e3;f=Math.min(f*1.5+n,m)}},t)}function g(t){if(e&&e.readyState===WebSocket.OPEN){const n={"send-everything":!1,filters:t};e.send(JSON.stringify(n)),r=[...t]}}function y(){i=!0,d&&(clearTimeout(d),d=null),e&&(e.close(1e3,"Manual disconnect"),e=null),l.clear(),r=[],s(t=>({...t,connected:!1,connecting:!1,error:null,lastEvent:null}))}function O(){navigator.onLine&&!i&&setTimeout(()=>{(!e||e.readyState===WebSocket.CLOSED||e.readyState===WebSocket.CLOSING)&&(b=0,f=k,u())},2e3)}typeof window<"u"&&(window.addEventListener("online",O),window.addEventListener("offline",()=>{s(t=>({...t,error:"Network offline"}))}),setInterval(()=>{i||(!e||e.readyState===WebSocket.CLOSED||e.readyState===WebSocket.CLOSING)&&u()},1e4));function v(t,n,a){l.has(t)||l.set(t,[]),l.get(t).push(a);const c=r.findIndex(o=>o["entity-type"]===t),S={"entity-type":t,operations:n};if(c>=0){const o=r[c].operations;S.operations=Array.from(new Set([...o,...n])),r[c]=S}else r.push(S);return e&&e.readyState===WebSocket.OPEN&&g(r),(!e||e.readyState===WebSocket.CLOSED||e.readyState===WebSocket.CLOSING)&&u(),()=>{const o=l.get(t);if(o){const w=o.indexOf(a);if(w>-1&&o.splice(w,1),o.length===0){l.delete(t);const p=r.findIndex(I=>I["entity-type"]===t);p>-1&&(r.splice(p,1),e&&e.readyState===WebSocket.OPEN&&g(r))}}}}return typeof window<"u"&&u(),{subscribe:E,connect:u,disconnect:y,subscribeToEntity:v}}const D=x();export{D as w}; diff --git a/webapp/assets/_app/immutable/chunks/C6HeU_02.js b/webapp/assets/_app/immutable/chunks/C6HeU_02.js new file mode 100644 index 00000000..8857753b --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/C6HeU_02.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as Z}from"./De-I_rkH.js";import{p as ee,o as te,B as ne,l as T,h as re,f as x,a as ae,t as j,b as k,c as se,s as b,d as i,k as a,m as v,r as l,q as c,u as f,g as r,e as B,i as $}from"./BIqNNOMq.js";import{p as w,i as L}from"./CfI2BFUj.js";import{c as D,s as oe,d,i as ie}from"./CQh-7xkh.js";import{b as le}from"./BLHP-Xk3.js";var ce=x('
'),de=x('
'),ve=x('
Description:
'),ue=x(' ',1);function ge(N,u){ee(u,!1);const y=v(),C=v();let t=w(u,"item",8),s=w(u,"entityType",8,"repository"),O=w(u,"showOwner",8,!1),R=w(u,"showId",8,!1),Y=w(u,"fontMono",8,!1),h=v(null),_=v(!1),H=v(0),U=v(0),E=v(!1);function p(){if(r(h)){const e=r(h).getBoundingClientRect();a(H,e.left),window.innerHeight-e.bottom<150?(a(E,!0),a(U,e.top)):(a(E,!1),a(U,e.bottom+4))}}function q(){a(_,!0),p()}function A(){a(_,!1)}te(()=>{window.addEventListener("scroll",p,!0),window.addEventListener("resize",p)}),ne(()=>{window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p)});function P(){if(!t())return"Unknown";switch(s()){case"repository":return O()?`${t().owner||"Unknown"}/${t().name||"Unknown"}`:t().name||"Unknown";case"organization":case"enterprise":return t().name||"Unknown";case"pool":return R()?t().id||"Unknown":t().name||"Unknown";case"scaleset":return t().name||"Unknown";case"instance":return t().name||"Unknown";case"template":return t().name||"Unknown";case"object":return t().name||"Unknown";default:return t().name||t().id||"Unknown"}}function X(){if(!t())return"#";let e;switch(s()){case"instance":e=t().name;break;default:e=t().id||t().name;break}if(!e)return"#";switch(s()){case"repository":return d(`/repositories/${e}`);case"organization":return d(`/organizations/${e}`);case"enterprise":return d(`/enterprises/${e}`);case"pool":return d(`/pools/${e}`);case"scaleset":return d(`/scalesets/${e}`);case"instance":return d(`/instances/${encodeURIComponent(e)}`);case"template":return d(`/templates/${e}`);case"object":return d(`/objects/${e}`);default:return"#"}}T(()=>{},()=>{a(y,P())}),T(()=>{},()=>{a(C,X())}),re(),Z();var I=ue(),z=ae(I),M=i(z),m=i(M),F=i(m,!0);l(m);var G=b(m,2);{var J=e=>{var n=ce(),o=i(n);le(o,g=>a(h,g),()=>r(h)),l(n),$("mouseenter",o,q),$("mouseleave",o,A),k(e,n)};L(G,e=>{c(s()),c(t()),f(()=>s()==="object"&&t()?.description)&&e(J)})}l(M);var K=b(M,2);{var Q=e=>{var n=de(),o=i(n,!0);l(n),j(()=>B(o,(c(t()),f(()=>t().provider_id)))),k(e,n)};L(K,e=>{c(s()),c(t()),f(()=>s()==="instance"&&t()?.provider_id)&&e(Q)})}l(z);var S=b(z,2);{var V=e=>{var n=ve(),o=i(n),g=b(i(o),2),W=i(g,!0);l(g),l(o),l(n),j(()=>{ie(n,`left: ${r(H)??""}px; top: ${r(U)??""}px; transform: translateY(${r(E)?"-100%":"0"});`),B(W,(c(t()),f(()=>t().description)))}),k(e,n)};L(S,e=>{c(s()),c(t()),r(_),f(()=>s()==="object"&&t()?.description&&r(_))&&e(V)})}j(()=>{D(m,"href",r(C)),oe(m,1,`truncate text-blue-600 dark:text-blue-400 hover:text-blue-500 dark:hover:text-blue-300 ${Y()?"font-mono":""}`),D(m,"title",r(y)),B(F,r(y))}),k(N,I),se()}export{ge as E}; diff --git a/webapp/assets/_app/immutable/chunks/DxDw7UWv.js b/webapp/assets/_app/immutable/chunks/CBbBPkpt.js similarity index 87% rename from webapp/assets/_app/immutable/chunks/DxDw7UWv.js rename to webapp/assets/_app/immutable/chunks/CBbBPkpt.js index 85e10d95..44333748 100644 --- a/webapp/assets/_app/immutable/chunks/DxDw7UWv.js +++ b/webapp/assets/_app/immutable/chunks/CBbBPkpt.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import"./TJn6xDN9.js";import{f as l,s as h,d as n,r as f,t as N,e as w,b as r,A as x,a as y}from"./DniTuB_0.js";import{p,i as b}from"./DbNhg6mG.js";import{s as O}from"./DD3srElq.js";var P=l('
'),Q=l('
'),R=l('
'),S=l('
'),U=l('
');function $(k,s){let z=p(s,"title",8),M=p(s,"content",8),t=p(s,"position",8,"top"),T=p(s,"width",8,"w-80");var m=U(),u=h(n(m),2),_=n(u),j=n(_,!0);f(_);var c=h(_,2),A=n(c,!0);f(c);var B=h(c,2);{var C=a=>{var i=P();r(a,i)},q=a=>{var i=x(),D=y(i);{var E=o=>{var v=Q();r(o,v)},F=o=>{var v=x(),G=y(v);{var H=e=>{var d=R();r(e,d)},I=e=>{var d=x(),J=y(d);{var K=g=>{var L=S();r(g,L)};b(J,g=>{t()==="right"&&g(K)},!0)}r(e,d)};b(G,e=>{t()==="left"?e(H):e(I,!1)},!0)}r(o,v)};b(D,o=>{t()==="bottom"?o(E):o(F,!1)},!0)}r(a,i)};b(B,a=>{t()==="top"?a(C):a(q,!1)})}f(u),f(m),N(()=>{O(u,1,`absolute ${t()==="top"?"bottom-full":t()==="bottom"?"top-full":t()==="left"?"right-full top-1/2 -translate-y-1/2":"left-full top-1/2 -translate-y-1/2"} left-1/2 transform -translate-x-1/2 ${t()==="top"?"mb-2":t()==="bottom"?"mt-2":"mx-2"} ${T()??""} p-3 bg-gray-900 text-white text-xs rounded-lg shadow-lg opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 z-50`),w(j,z()),w(A,M())}),r(k,m)}export{$ as T}; +import"./DsnmJJEf.js";import"./De-I_rkH.js";import{f as l,s as h,d as n,r as f,t as N,e as w,b as r,A as x,a as y}from"./BIqNNOMq.js";import{p,i as b}from"./CfI2BFUj.js";import{s as O}from"./CQh-7xkh.js";var P=l('
'),Q=l('
'),R=l('
'),S=l('
'),U=l('
');function $(k,s){let z=p(s,"title",8),M=p(s,"content",8),t=p(s,"position",8,"top"),T=p(s,"width",8,"w-80");var m=U(),u=h(n(m),2),_=n(u),j=n(_,!0);f(_);var c=h(_,2),A=n(c,!0);f(c);var B=h(c,2);{var C=a=>{var i=P();r(a,i)},q=a=>{var i=x(),D=y(i);{var E=o=>{var v=Q();r(o,v)},F=o=>{var v=x(),G=y(v);{var H=e=>{var d=R();r(e,d)},I=e=>{var d=x(),J=y(d);{var K=g=>{var L=S();r(g,L)};b(J,g=>{t()==="right"&&g(K)},!0)}r(e,d)};b(G,e=>{t()==="left"?e(H):e(I,!1)},!0)}r(o,v)};b(D,o=>{t()==="bottom"?o(E):o(F,!1)},!0)}r(a,i)};b(B,a=>{t()==="top"?a(C):a(q,!1)})}f(u),f(m),N(()=>{O(u,1,`absolute ${t()==="top"?"bottom-full":t()==="bottom"?"top-full":t()==="left"?"right-full top-1/2 -translate-y-1/2":"left-full top-1/2 -translate-y-1/2"} left-1/2 transform -translate-x-1/2 ${t()==="top"?"mb-2":t()==="bottom"?"mt-2":"mx-2"} ${T()??""} p-3 bg-gray-900 text-white text-xs rounded-lg shadow-lg opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 z-50`),w(j,z()),w(A,M())}),r(k,m)}export{$ as T}; diff --git a/webapp/assets/_app/immutable/chunks/2CDqnvrp.js b/webapp/assets/_app/immutable/chunks/CBy1Js1f.js similarity index 88% rename from webapp/assets/_app/immutable/chunks/2CDqnvrp.js rename to webapp/assets/_app/immutable/chunks/CBy1Js1f.js index f7156aba..a3a9b624 100644 --- a/webapp/assets/_app/immutable/chunks/2CDqnvrp.js +++ b/webapp/assets/_app/immutable/chunks/CBy1Js1f.js @@ -1 +1 @@ -import{F as l}from"./DniTuB_0.js";function c(){const{subscribe:a,set:s,update:r}=l(!1);return{subscribe:a,init:()=>{const t=localStorage.getItem("theme");let e=!1;t==="dark"?e=!0:t==="light"?e=!1:e=window.matchMedia("(prefers-color-scheme: dark)").matches,s(e),o(e)},toggle:()=>r(t=>{const e=!t;return localStorage.setItem("theme",e?"dark":"light"),o(e),e}),set:t=>{localStorage.setItem("theme",t?"dark":"light"),o(t),s(t)}}}function o(a){a?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")}const d=c();export{d as t}; +import{F as l}from"./BIqNNOMq.js";function c(){const{subscribe:a,set:s,update:r}=l(!1);return{subscribe:a,init:()=>{const t=localStorage.getItem("theme");let e=!1;t==="dark"?e=!0:t==="light"?e=!1:e=window.matchMedia("(prefers-color-scheme: dark)").matches,s(e),o(e)},toggle:()=>r(t=>{const e=!t;return localStorage.setItem("theme",e?"dark":"light"),o(e),e}),set:t=>{localStorage.setItem("theme",t?"dark":"light"),o(t),s(t)}}}function o(a){a?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")}const d=c();export{d as t}; diff --git a/webapp/assets/_app/immutable/chunks/CCF1V3nS.js b/webapp/assets/_app/immutable/chunks/CIekn_9e.js similarity index 88% rename from webapp/assets/_app/immutable/chunks/CCF1V3nS.js rename to webapp/assets/_app/immutable/chunks/CIekn_9e.js index b51f1d15..42178f54 100644 --- a/webapp/assets/_app/immutable/chunks/CCF1V3nS.js +++ b/webapp/assets/_app/immutable/chunks/CIekn_9e.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import"./TJn6xDN9.js";import{f as k,d as a,s as m,r as i,t as g,e as f,b as v,z as p,D as z}from"./DniTuB_0.js";import{p as t,i as u}from"./DbNhg6mG.js";import{s as Y,h as Z,B as H}from"./DD3srElq.js";var $=k('
'),ee=k('
'),te=k('

');function se(j,e){let E=t(e,"title",8),M=t(e,"subtitle",8),D=t(e,"forgeIcon",8,""),h=t(e,"onEdit",8,null),x=t(e,"onDelete",8,null),B=t(e,"editLabel",8,"Edit"),C=t(e,"deleteLabel",8,"Delete"),P=t(e,"editVariant",8,"secondary"),A=t(e,"deleteVariant",8,"danger"),q=t(e,"editDisabled",8,!1),F=t(e,"deleteDisabled",8,!1),G=t(e,"editIcon",8,""),J=t(e,"deleteIcon",8,""),K=t(e,"titleClass",8,"");var _=te(),y=a(_),w=a(y),b=a(w),I=a(b);{var N=l=>{var d=$(),c=a(d);Z(c,D),i(d),v(l,d)};u(I,l=>{D()&&l(N)})}var L=m(I,2),o=a(L),O=a(o,!0);i(o);var V=m(o,2),Q=a(V,!0);i(V),i(L),i(b);var R=m(b,2);{var S=l=>{var d=ee(),c=a(d);{var T=r=>{H(r,{get variant(){return P()},size:"md",get disabled(){return q()},get icon(){return G()},$$events:{click(...s){h()?.apply(this,s)}},children:(s,X)=>{p();var n=z();g(()=>f(n,B())),v(s,n)},$$slots:{default:!0}})};u(c,r=>{h()&&r(T)})}var U=m(c,2);{var W=r=>{H(r,{get variant(){return A()},size:"md",get disabled(){return F()},get icon(){return J()},$$events:{click(...s){x()?.apply(this,s)}},children:(s,X)=>{p();var n=z();g(()=>f(n,C())),v(s,n)},$$slots:{default:!0}})};u(U,r=>{x()&&r(W)})}i(d),v(l,d)};u(R,l=>{(h()||x())&&l(S)})}i(w),i(y),i(_),g(()=>{Y(o,1,`text-2xl font-bold text-gray-900 dark:text-white ${K()??""}`),f(O,E()),f(Q,M())}),v(j,_)}export{se as D}; +import"./DsnmJJEf.js";import"./De-I_rkH.js";import{f as k,d as a,s as m,r as i,t as g,e as f,b as v,z as p,D as z}from"./BIqNNOMq.js";import{p as t,i as u}from"./CfI2BFUj.js";import{s as Y,h as Z,B as H}from"./CQh-7xkh.js";var $=k('
'),ee=k('
'),te=k('

');function se(j,e){let E=t(e,"title",8),M=t(e,"subtitle",8),D=t(e,"forgeIcon",8,""),h=t(e,"onEdit",8,null),x=t(e,"onDelete",8,null),B=t(e,"editLabel",8,"Edit"),C=t(e,"deleteLabel",8,"Delete"),P=t(e,"editVariant",8,"secondary"),A=t(e,"deleteVariant",8,"danger"),q=t(e,"editDisabled",8,!1),F=t(e,"deleteDisabled",8,!1),G=t(e,"editIcon",8,""),J=t(e,"deleteIcon",8,""),K=t(e,"titleClass",8,"");var _=te(),y=a(_),w=a(y),b=a(w),I=a(b);{var N=l=>{var d=$(),c=a(d);Z(c,D),i(d),v(l,d)};u(I,l=>{D()&&l(N)})}var L=m(I,2),o=a(L),O=a(o,!0);i(o);var V=m(o,2),Q=a(V,!0);i(V),i(L),i(b);var R=m(b,2);{var S=l=>{var d=ee(),c=a(d);{var T=r=>{H(r,{get variant(){return P()},size:"md",get disabled(){return q()},get icon(){return G()},$$events:{click(...s){h()?.apply(this,s)}},children:(s,X)=>{p();var n=z();g(()=>f(n,B())),v(s,n)},$$slots:{default:!0}})};u(c,r=>{h()&&r(T)})}var U=m(c,2);{var W=r=>{H(r,{get variant(){return A()},size:"md",get disabled(){return F()},get icon(){return J()},$$events:{click(...s){x()?.apply(this,s)}},children:(s,X)=>{p();var n=z();g(()=>f(n,C())),v(s,n)},$$slots:{default:!0}})};u(U,r=>{x()&&r(W)})}i(d),v(l,d)};u(R,l=>{(h()||x())&&l(S)})}i(w),i(y),i(_),g(()=>{Y(o,1,`text-2xl font-bold text-gray-900 dark:text-white ${K()??""}`),f(O,E()),f(Q,M())}),v(j,_)}export{se as D}; diff --git a/webapp/assets/_app/immutable/chunks/COXBdepE.js b/webapp/assets/_app/immutable/chunks/COXBdepE.js new file mode 100644 index 00000000..d545f145 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/COXBdepE.js @@ -0,0 +1,4 @@ +import"./DsnmJJEf.js";import{i as ze}from"./De-I_rkH.js";import{p as Ce,l as Me,k as o,m as p,q as J,h as Ee,f,d as t,x as Ie,s as a,g as e,r,t as M,b as m,c as Ue,E as Re,z as H,u as w,e as A,i as _e,D as Le,o as De,y as Se,w as he}from"./BIqNNOMq.js";import{p as pe,i as D}from"./CfI2BFUj.js";import{c as Oe,s as Je,r as G,b as $e,g as qe}from"./CQh-7xkh.js";import{b as Ae,a as de}from"./Gs5uNKRr.js";import{p as We}from"./CdEA5IGF.js";import{e as we}from"./BZiHL9L3.js";import{M as je}from"./BFX8vI-4.js";import{e as Be,i as Ge}from"./D8ZtP9JD.js";var He=f('
'),Ne=f('
');function wt(le,P){Ce(P,!1);let i=pe(P,"value",12,""),S=pe(P,"placeholder",8,"{}"),y=pe(P,"rows",8,4),x=pe(P,"disabled",8,!1),l=p(!0);Me(()=>J(i()),()=>{if(i().trim())try{JSON.parse(i()),o(l,!0)}catch{o(l,!1)}else o(l,!0)}),Ee(),ze();var v=Ne(),s=t(v);Ie(s);var n=a(s,2);{var c=k=>{var O=He();m(k,O)};D(n,k=>{e(l)||k(c)})}r(v),M(()=>{Oe(s,"placeholder",S()),Oe(s,"rows",y()),s.disabled=x(),Je(s,1,`w-full px-3 py-2 border rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 font-mono text-sm resize-none + ${e(l)?"border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-white":"border-red-300 dark:border-red-600 bg-red-50 dark:bg-red-900/20 text-red-900 dark:text-red-100"} + ${x()?"opacity-50 cursor-not-allowed":""} + `)}),Ae(s,i),m(le,v),Ue()}var Ve=f('

'),Fe=f('

Leave empty to auto-generate a new secret

'),Ke=f('
Updating...
'),Qe=f('

Update Repository

Repository Information

Owner:
Name:
Endpoint:
Credentials:
');function Mt(le,P){Ce(P,!1);let i=pe(P,"repository",8);const S=Re();let y=p(!1),x=p(""),l=p(""),v=p(!1),s=p(i().agent_mode??!1);async function n(){try{o(y,!0),o(x,"");const c={};if(e(v)){if(!e(l).trim()){o(x,"Please enter a webhook secret or uncheck the option to change it");return}c.webhook_secret=e(l)}if(e(s)!==i().agent_mode&&(c.agent_mode=e(s)),Object.keys(c).length===0){S("close");return}S("submit",c)}catch(c){o(x,we(c))}finally{o(y,!1)}}ze(),je(le,{$$events:{close:()=>S("close")},children:(c,k)=>{var O=Qe(),ne=t(O),$=a(t(ne),2),C=t($);r($),r(ne);var Q=a(ne,2),T=t(Q);{var X=u=>{var d=Ve(),g=t(d),U=t(g,!0);r(g),r(d),M(()=>A(U,e(x))),m(u,d)};D(T,u=>{e(x)&&u(X)})}var Y=a(T,2),ie=a(t(Y),2),N=t(ie),ce=a(t(N),2),ke=t(ce,!0);r(ce),r(N);var be=a(N,2),me=a(t(be),2),E=t(me,!0);r(me),r(be);var b=a(be,2),h=a(t(b),2),R=t(h,!0);r(h),r(b);var W=a(b,2),Z=a(t(W),2),ue=t(Z,!0);r(Z),r(W),r(ie),r(Y);var I=a(Y,2),ee=t(I);G(ee),H(4),r(I);var L=a(I,2),q=t(L),V=t(q);G(V),H(2),r(q);var te=a(q,2);{var F=u=>{var d=Fe(),g=a(t(d),2);G(g),H(2),r(d),M(()=>g.required=e(v)),Ae(g,()=>e(l),U=>o(l,U)),m(u,d)};D(te,u=>{e(v)&&u(F)})}r(L);var re=a(L,2),ae=t(re),K=a(ae,2),ve=t(K);{var fe=u=>{var d=Ke();m(u,d)},ge=u=>{var d=Le("Update Repository");m(u,d)};D(ve,u=>{e(y)?u(fe):u(ge,!1)})}r(K),r(re),r(Q),r(O),M(u=>{A(C,`${J(i()),w(()=>i().owner)??""}/${J(i()),w(()=>i().name)??""}`),A(ke,(J(i()),w(()=>i().owner))),A(E,(J(i()),w(()=>i().name))),A(R,(J(i()),w(()=>i().endpoint?.name))),A(ue,(J(i()),w(()=>i().credentials_name))),K.disabled=u},[()=>(e(y),e(v),e(l),w(()=>e(y)||e(v)&&!e(l).trim()))]),de(ee,()=>e(s),u=>o(s,u)),de(V,()=>e(v),u=>o(v,u)),_e("click",ae,()=>S("close")),_e("submit",Q,We(n)),m(c,O)},$$slots:{default:!0}}),Ue()}var Xe=f('

'),Ye=f('

Loading...

'),Ze=f(""),et=f(''),tt=f('

A new webhook secret will be automatically generated

'),rt=f('
'),at=f('

'),ot=f('

Update Organization

');function St(le,P){Ce(P,!1);const i=p(),S=p();let y=pe(P,"organization",8);const x=Re();let l=p(!1),v=p(""),s=p([]),n=p({credentials_name:y().credentials_name||"",webhook_secret:"",pool_balancer_type:y().pool_balancing_type||"roundrobin"}),c=p(!1),k=p(!0),O=p(y().agent_mode??!1);async function ne(){try{o(l,!0),o(s,await qe.listAllCredentials())}catch(C){o(v,we(C))}finally{o(l,!1)}}async function $(){if(!e(n).credentials_name){o(v,"Please select credentials");return}if(e(c)&&!e(k)&&!e(n).webhook_secret?.trim()){o(v,"Please enter a webhook secret or uncheck the change webhook secret option");return}try{o(l,!0),o(v,"");const C={...e(n)};e(c)?e(k)&&(C.webhook_secret=""):delete C.webhook_secret,e(O)!==y().agent_mode&&(C.agent_mode=e(O)),x("submit",C)}catch(C){o(v,we(C)),o(l,!1)}}De(()=>{ne()}),Me(()=>J(y()),()=>{o(i,y().endpoint?.endpoint_type)}),Me(()=>(e(s),e(i)),()=>{o(S,e(s).filter(C=>C.forge_type===e(i)))}),Ee(),ze(),je(le,{$$events:{close:()=>x("close")},children:(C,Q)=>{var T=ot(),X=t(T),Y=a(t(X),2),ie=t(Y,!0);r(Y),r(X);var N=a(X,2),ce=t(N);{var ke=b=>{var h=Xe(),R=t(h),W=t(R,!0);r(R),r(h),M(()=>A(W,e(v))),m(b,h)};D(ce,b=>{e(v)&&b(ke)})}var be=a(ce,2);{var me=b=>{var h=Ye();m(b,h)},E=b=>{var h=at(),R=t(h),W=a(t(R),2);M(()=>{e(n),Se(()=>{e(S)})});var Z=t(W);Z.value=Z.__value="";var ue=a(Z);Be(ue,1,()=>e(S),Ge,(_,z)=>{var B=Ze(),xe=t(B);r(B);var j={};M(()=>{A(xe,`${e(z),w(()=>e(z).name)??""} (${e(z),w(()=>e(z).endpoint?.name||"Unknown endpoint")??""})`),j!==(j=(e(z),w(()=>e(z).name)))&&(B.value=(B.__value=(e(z),w(()=>e(z).name)))??"")}),m(_,B)}),r(W);var I=a(W,2),ee=t(I);r(I),r(R);var L=a(R,2),q=a(t(L),2);M(()=>{e(n),Se(()=>{})});var V=t(q);V.value=V.__value="roundrobin";var te=a(V);te.value=te.__value="pack",r(q),r(L);var F=a(L,2),re=t(F);G(re),H(4),r(F);var ae=a(F,2),K=t(ae),ve=t(K);G(ve),H(2),r(K);var fe=a(K,2);{var ge=_=>{var z=rt(),B=t(z),xe=t(B);G(xe),H(2),r(B);var j=a(B,2);{var oe=se=>{var ye=et();G(ye),M(()=>ye.required=e(c)&&!e(k)),Ae(ye,()=>e(n).webhook_secret,Te=>he(n,e(n).webhook_secret=Te)),m(se,ye)},Pe=se=>{var ye=tt();m(se,ye)};D(j,se=>{e(k)?se(Pe,!1):se(oe)})}r(z),de(xe,()=>e(k),se=>o(k,se)),m(_,z)};D(fe,_=>{e(c)&&_(ge)})}r(ae);var u=a(ae,2),d=t(u),g=a(d,2),U=t(g,!0);r(g),r(u),r(h),M(_=>{A(ee,`Only showing credentials for ${e(i)??""} endpoints`),g.disabled=_,A(U,e(l)?"Updating...":"Update Organization")},[()=>(e(l),e(c),e(k),e(n),w(()=>e(l)||e(c)&&!e(k)&&!e(n).webhook_secret?.trim()))]),$e(W,()=>e(n).credentials_name,_=>he(n,e(n).credentials_name=_)),$e(q,()=>e(n).pool_balancer_type,_=>he(n,e(n).pool_balancer_type=_)),de(re,()=>e(O),_=>o(O,_)),de(ve,()=>e(c),_=>o(c,_)),_e("click",d,()=>x("close")),_e("submit",h,We($)),m(b,h)};D(be,b=>{e(l)?b(me):b(E,!1)})}r(N),r(T),M(()=>A(ie,(J(y()),w(()=>y().name)))),m(C,T)},$$slots:{default:!0}}),Ue()}var st=f('

'),dt=f('

Loading...

'),lt=f(""),nt=f(''),it=f('

A new webhook secret will be automatically generated

'),ct=f('
'),bt=f('

Only showing credentials for GitHub endpoints

'),ut=f('

Update Enterprise

');function $t(le,P){Ce(P,!1);const i=p();let S=pe(P,"enterprise",8);const y=Re();let x=p(!1),l=p(""),v=p([]),s=p({credentials_name:S().credentials_name||"",webhook_secret:"",pool_balancer_type:S().pool_balancing_type||"roundrobin"}),n=p(!1),c=p(!0),k=p(S().agent_mode??!1);async function O(){try{o(x,!0),o(v,await qe.listAllCredentials())}catch($){o(l,we($))}finally{o(x,!1)}}async function ne(){if(!e(s).credentials_name){o(l,"Please select credentials");return}if(e(n)&&!e(c)&&!e(s).webhook_secret?.trim()){o(l,"Please enter a webhook secret or uncheck the change webhook secret option");return}try{o(x,!0),o(l,"");const $={...e(s)};e(n)?e(c)&&($.webhook_secret=""):delete $.webhook_secret,e(k)!==S().agent_mode&&($.agent_mode=e(k)),y("submit",$)}catch($){o(l,we($)),o(x,!1)}}De(()=>{O()}),Me(()=>e(v),()=>{o(i,e(v).filter($=>$.forge_type==="github"))}),Ee(),ze(),je(le,{$$events:{close:()=>y("close")},children:($,C)=>{var Q=ut(),T=t(Q),X=a(t(T),2),Y=t(X,!0);r(X),r(T);var ie=a(T,2),N=t(ie);{var ce=E=>{var b=st(),h=t(b),R=t(h,!0);r(h),r(b),M(()=>A(R,e(l))),m(E,b)};D(N,E=>{e(l)&&E(ce)})}var ke=a(N,2);{var be=E=>{var b=dt();m(E,b)},me=E=>{var b=bt(),h=t(b),R=a(t(h),2);M(()=>{e(s),Se(()=>{e(i)})});var W=t(R);W.value=W.__value="";var Z=a(W);Be(Z,1,()=>e(i),Ge,(d,g)=>{var U=lt(),_=t(U);r(U);var z={};M(()=>{A(_,`${e(g),w(()=>e(g).name)??""} (${e(g),w(()=>e(g).endpoint?.name||"Unknown endpoint")??""})`),z!==(z=(e(g),w(()=>e(g).name)))&&(U.value=(U.__value=(e(g),w(()=>e(g).name)))??"")}),m(d,U)}),r(R),H(2),r(h);var ue=a(h,2),I=a(t(ue),2);M(()=>{e(s),Se(()=>{})});var ee=t(I);ee.value=ee.__value="roundrobin";var L=a(ee);L.value=L.__value="pack",r(I),r(ue);var q=a(ue,2),V=t(q);G(V),H(4),r(q);var te=a(q,2),F=t(te),re=t(F);G(re),H(2),r(F);var ae=a(F,2);{var K=d=>{var g=ct(),U=t(g),_=t(U);G(_),H(2),r(U);var z=a(U,2);{var B=j=>{var oe=nt();G(oe),M(()=>oe.required=e(n)&&!e(c)),Ae(oe,()=>e(s).webhook_secret,Pe=>he(s,e(s).webhook_secret=Pe)),m(j,oe)},xe=j=>{var oe=it();m(j,oe)};D(z,j=>{e(c)?j(xe,!1):j(B)})}r(g),de(_,()=>e(c),j=>o(c,j)),m(d,g)};D(ae,d=>{e(n)&&d(K)})}r(te);var ve=a(te,2),fe=t(ve),ge=a(fe,2),u=t(ge,!0);r(ge),r(ve),r(b),M(d=>{ge.disabled=d,A(u,e(x)?"Updating...":"Update Enterprise")},[()=>(e(x),e(n),e(c),e(s),w(()=>e(x)||e(n)&&!e(c)&&!e(s).webhook_secret?.trim()))]),$e(R,()=>e(s).credentials_name,d=>he(s,e(s).credentials_name=d)),$e(I,()=>e(s).pool_balancer_type,d=>he(s,e(s).pool_balancer_type=d)),de(V,()=>e(k),d=>o(k,d)),de(re,()=>e(n),d=>o(n,d)),_e("click",fe,()=>y("close")),_e("submit",b,We(ne)),m(E,b)};D(ke,E=>{e(x)?E(be):E(me,!1)})}r(ie),r(Q),M(()=>A(Y,(J(S()),w(()=>S().name)))),m($,Q)},$$slots:{default:!0}}),Ue()}export{wt as J,Mt as U,St as a,$t as b}; diff --git a/webapp/assets/_app/immutable/chunks/CQ6bqX5o.js b/webapp/assets/_app/immutable/chunks/CQ6bqX5o.js deleted file mode 100644 index 85ffd34f..00000000 --- a/webapp/assets/_app/immutable/chunks/CQ6bqX5o.js +++ /dev/null @@ -1,2 +0,0 @@ -import"./DsnmJJEf.js";import{i as Hr}from"./TJn6xDN9.js";import{p as Kr,E as Wr,m as u,o as Qr,k as n,l as pr,g as e,h as Vr,f as w,d,r as t,s as o,t as v,y as Pe,u as b,z as br,q as B,e as h,i as G,b as c,A as Xr,a as gr,D as cr,c as Yr}from"./DniTuB_0.js";import{p as Zr,i as I,s as et,a as rt}from"./DbNhg6mG.js";import{e as fr,i as vr}from"./Ck5PkeSc.js";import{r as k,s as mr,b as Ae,c as yr,g as tt,d as xr}from"./DD3srElq.js";import{b as S,a as at}from"./CCQwxxp9.js";import{p as dt}from"./D4Caz1gY.js";import{M as ot}from"./PC4wJWhj.js";import{J as it}from"./DcEwzE5l.js";import{e as _r}from"./BZiHL9L3.js";import{e as nt}from"./C-ow2qSP.js";var st=w('

'),lt=w('

'),ut=w('
Loading templates...
'),pt=w(""),bt=w('

',1),gt=w('

Create a template first or proceed without a template to use default behavior.

'),ct=w(' '),ft=w('
'),vt=w('
Updating...
'),mt=w('

Pool Information (Read-only)

Provider:
Entity:

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Tags
Extra Specs (JSON)
');function Pt(hr,Je){Kr(Je,!1);const[kr,wr]=et(),U=()=>rt(nt,"$eagerCache",kr);let a=Zr(Je,"pool",8);const Z=Wr();let z=u(!1),D=u(""),T=u(""),m=u([]),ee=u(!1),L=u(a().image||""),F=u(a().flavor||""),O=u(a().max_runners),P=u(a().min_idle_runners),q=u(a().runner_bootstrap_timeout),H=u(a().priority),K=u(a().runner_prefix||""),y=u(a().os_type||"linux"),j=u(a().os_arch||"amd64"),W=u(a()["github-runner-group"]||""),Q=u(a().enabled),x=u((a().tags||[]).map(i=>i.name||"").filter(Boolean)),C=u(""),A=u("{}"),$=u(a().template_id);function Tr(i){if(i.repo_id){const s=U().repositories.find(p=>p.id===i.repo_id);return s?`${s.owner}/${s.name}`:"Unknown Entity"}if(i.org_id){const s=U().organizations.find(p=>p.id===i.org_id);return s&&s.name?s.name:"Unknown Entity"}if(i.enterprise_id){const s=U().enterprises.find(p=>p.id===i.enterprise_id);return s&&s.name?s.name:"Unknown Entity"}return"Unknown Entity"}function $r(i){return i.repo_id?"Repository":i.org_id?"Organization":i.enterprise_id?"Enterprise":"Unknown"}function re(){if(a().endpoint?.endpoint_type)return a().endpoint.endpoint_type;if(a().repo_id){const i=U().repositories.find(s=>s.id===a().repo_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}if(a().org_id){const i=U().organizations.find(s=>s.id===a().org_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}if(a().enterprise_id){const i=U().enterprises.find(s=>s.id===a().enterprise_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}return null}async function Me(){try{n(ee,!0);const i=re();if(!i){n(m,[]);return}if(n(m,await tt.listTemplates(e(y),void 0,i)),!e($)||!e(m).find(s=>s.id===e($))){const s=e(m).find(p=>p.owner_id==="system");s?n($,s.id):e(m).length>0&&n($,e(m)[0].id)}}catch(i){n(D,_r(i))}finally{n(ee,!1)}}Qr(()=>{if(a().extra_specs)try{if(typeof a().extra_specs=="object")n(A,JSON.stringify(a().extra_specs,null,2));else{const i=JSON.parse(a().extra_specs);n(A,JSON.stringify(i,null,2))}}catch{n(A,a().extra_specs||"{}")}Me()});function Ne(){e(C).trim()&&!e(x).includes(e(C).trim())&&(n(x,[...e(x),e(C).trim()]),n(C,""))}function Er(i){n(x,e(x).filter((s,p)=>p!==i))}function Rr(i){i.key==="Enter"&&(i.preventDefault(),Ne())}async function Sr(){try{if(n(z,!0),n(D,""),e(T))throw new Error(e(T));let i={};if(e(A).trim())try{i=JSON.parse(e(A))}catch{throw new Error("Invalid JSON in extra specs")}const s={image:e(L)!==a().image?e(L):void 0,flavor:e(F)!==a().flavor?e(F):void 0,max_runners:e(O)!==a().max_runners?e(O):void 0,min_idle_runners:e(P)!==a().min_idle_runners?e(P):void 0,runner_bootstrap_timeout:e(q)!==a().runner_bootstrap_timeout?e(q):void 0,priority:e(H)!==a().priority?e(H):void 0,runner_prefix:e(K)!==a().runner_prefix?e(K):void 0,os_type:e(y)!==a().os_type?e(y):void 0,os_arch:e(j)!==a().os_arch?e(j):void 0,"github-runner-group":e(W)!==a()["github-runner-group"]&&e(W)||void 0,enabled:e(Q)!==a().enabled?e(Q):void 0,tags:JSON.stringify(e(x))!==JSON.stringify((a().tags||[]).map(p=>p.name||"").filter(Boolean))?e(x):void 0,extra_specs:e(A).trim()!==JSON.stringify(a().extra_specs||{},null,2).trim()?i:void 0,template_id:e($)!==a().template_id?e($):void 0};Object.keys(s).forEach(p=>{s[p]===void 0&&delete s[p]}),Z("submit",s)}catch(i){n(D,_r(i))}finally{n(z,!1)}}pr(()=>e(y),()=>{e(y)&&Me()}),pr(()=>(e(P),e(O)),()=>{e(P)!==null&&e(P)!==void 0&&e(O)!==null&&e(O)!==void 0&&e(P)>e(O)?n(T,"Min idle runners cannot be greater than max runners"):n(T,"")}),Vr(),Hr(),ot(hr,{$$events:{close:()=>Z("close")},children:(i,s)=>{var p=mt(),te=d(p),Ie=d(te),Or=d(Ie);t(Ie),t(te);var ae=o(te,2),Ue=d(ae);{var Pr=r=>{var l=st(),E=d(l),J=d(E,!0);t(E),t(l),v(()=>h(J,e(D))),c(r,l)};I(Ue,r=>{e(D)&&r(Pr)})}var Ce=o(Ue,2);{var Ar=r=>{var l=lt(),E=d(l),J=d(E,!0);t(E),t(l),v(()=>h(J,e(T))),c(r,l)};I(Ce,r=>{e(T)&&r(Ar)})}var de=o(Ce,2),De=o(d(de),2),oe=d(De),je=o(d(oe),2),Jr=d(je,!0);t(je),t(oe);var Be=o(oe,2),Ge=o(d(Be),2),Mr=d(Ge);t(Ge),t(Be),t(De),t(de);var ie=o(de,2),ze=o(d(ie),2),ne=d(ze),Le=o(d(ne),2);k(Le),t(ne);var se=o(ne,2),Fe=o(d(se),2);k(Fe),t(se);var le=o(se,2),ue=o(d(le),2);v(()=>{e(y),Pe(()=>{})});var pe=d(ue);pe.value=pe.__value="linux";var qe=o(pe);qe.value=qe.__value="windows",t(ue),t(le);var be=o(le,2),ge=o(d(be),2);v(()=>{e(j),Pe(()=>{})});var ce=d(ge);ce.value=ce.__value="amd64";var He=o(ce);He.value=He.__value="arm64",t(ge),t(be);var Ke=o(be,2),Nr=o(d(Ke),2);{var Ir=r=>{var l=ut();c(r,l)},Ur=r=>{var l=Xr(),E=gr(l);{var J=_=>{var R=bt(),f=gr(R);v(()=>{e($),Pe(()=>{e(m)})}),fr(f,5,()=>e(m),vr,(M,g)=>{var N=pt(),sr=d(N),Fr=o(sr);{var qr=Oe=>{var ur=cr();v(()=>h(ur,`- ${e(g),b(()=>e(g).description)??""}`)),c(Oe,ur)};I(Fr,Oe=>{e(g),b(()=>e(g).description)&&Oe(qr)})}t(N);var lr={};v(()=>{h(sr,`${e(g),b(()=>e(g).name)??""} ${e(g),b(()=>e(g).owner_id==="system"?"(System)":"")??""} `),lr!==(lr=(e(g),b(()=>e(g).id)))&&(N.value=(N.__value=(e(g),b(()=>e(g).id)))??"")}),c(M,N)}),t(f);var X=o(f,2),Y=d(X);t(X),v(M=>h(Y,`Templates define how the runner software is installed and configured. - Showing templates for ${M??""} ${e(y)??""}.`),[()=>b(re)]),Ae(f,()=>e($),M=>n($,M)),c(_,R)},Se=_=>{var R=gt(),f=d(R),X=d(f);t(f);var Y=o(f,2),M=d(Y);br(),t(Y),t(R),v((g,N)=>{h(X,`No templates found for ${g??""} ${e(y)??""}.`),yr(M,"href",N)},[()=>b(re),()=>(B(xr),b(()=>xr("/templates")))]),c(_,R)};I(E,_=>{e(m),b(()=>e(m).length>0)?_(J):_(Se,!1)},!0)}c(r,l)};I(Nr,r=>{e(ee)?r(Ir):r(Ur,!1)})}t(Ke),t(ze),t(ie);var fe=o(ie,2),We=o(d(fe),2),ve=d(We),me=o(d(ve),2);k(me),t(ve);var ye=o(ve,2),xe=o(d(ye),2);k(xe),t(ye);var Qe=o(ye,2),Ve=o(d(Qe),2);k(Ve),t(Qe),t(We),t(fe);var _e=o(fe,2),he=o(d(_e),2),ke=d(he),Xe=o(d(ke),2);k(Xe),t(ke);var we=o(ke,2),Ye=o(d(we),2);k(Ye),t(we);var Ze=o(we,2),er=o(d(Ze),2);k(er),t(Ze),t(he);var Te=o(he,2),rr=d(Te),tr=o(d(rr),2),$e=d(tr),V=d($e);k(V);var Cr=o(V,2);t($e);var Dr=o($e,2);{var jr=r=>{var l=ft();fr(l,5,()=>e(x),vr,(E,J,Se)=>{var _=ct(),R=d(_),f=o(R);t(_),v(()=>{h(R,`${e(J)??""} `),yr(f,"aria-label",`Remove tag ${e(J)??""}`)}),G("click",f,()=>Er(Se)),c(E,_)}),t(l),c(r,l)};I(Dr,r=>{e(x),b(()=>e(x).length>0)&&r(jr)})}t(tr),t(rr),t(Te);var Ee=o(Te,2),ar=d(Ee),Br=o(d(ar),2);it(Br,{rows:4,placeholder:"{}",get value(){return e(A)},set value(r){n(A,r)},$$legacy:!0}),t(ar),t(Ee);var dr=o(Ee,2),or=d(dr);k(or),br(2),t(dr),t(_e);var ir=o(_e,2),nr=d(ir),Re=o(nr,2),Gr=d(Re);{var zr=r=>{var l=vt();c(r,l)},Lr=r=>{var l=cr("Update Pool");c(r,l)};I(Gr,r=>{e(z)?r(zr):r(Lr,!1)})}t(Re),t(ir),t(ae),t(p),v((r,l)=>{h(Or,`Update Pool ${B(a()),b(()=>a().id)??""}`),h(Jr,(B(a()),b(()=>a().provider_name))),h(Mr,`${r??""}: ${l??""}`),mr(me,1,`w-full px-3 py-2 border ${e(T)?"border-red-300 dark:border-red-500":"border-gray-300 dark:border-gray-600"} rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white`),mr(xe,1,`w-full px-3 py-2 border ${e(T)?"border-red-300 dark:border-red-500":"border-gray-300 dark:border-gray-600"} rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white`),Re.disabled=e(z)||e(T)!==""},[()=>(B(a()),b(()=>$r(a()))),()=>(B(a()),b(()=>Tr(a())))]),S(Le,()=>e(L),r=>n(L,r)),S(Fe,()=>e(F),r=>n(F,r)),Ae(ue,()=>e(y),r=>n(y,r)),Ae(ge,()=>e(j),r=>n(j,r)),S(me,()=>e(P),r=>n(P,r)),S(xe,()=>e(O),r=>n(O,r)),S(Ve,()=>e(q),r=>n(q,r)),S(Xe,()=>e(K),r=>n(K,r)),S(Ye,()=>e(H),r=>n(H,r)),S(er,()=>e(W),r=>n(W,r)),S(V,()=>e(C),r=>n(C,r)),G("keydown",V,Rr),G("click",Cr,Ne),at(or,()=>e(Q),r=>n(Q,r)),G("click",nr,()=>Z("close")),G("submit",ae,dt(Sr)),c(i,p)},$$slots:{default:!0}}),Yr(),wr()}export{Pt as U}; diff --git a/webapp/assets/_app/immutable/chunks/DD3srElq.js b/webapp/assets/_app/immutable/chunks/CQh-7xkh.js similarity index 87% rename from webapp/assets/_app/immutable/chunks/DD3srElq.js rename to webapp/assets/_app/immutable/chunks/CQh-7xkh.js index ea93d235..736022b7 100644 --- a/webapp/assets/_app/immutable/chunks/DD3srElq.js +++ b/webapp/assets/_app/immutable/chunks/CQh-7xkh.js @@ -1,7 +1,7 @@ -import{b as Gr,r as _r}from"./BSR16q_V.js";import"./DsnmJJEf.js";import{i as qr}from"./TJn6xDN9.js";import{t as ze,H as ee,I as nt,ac as Hr,aW as $r,P as yt,X as Nr,a8 as Wr,aX as Qr,aY as Mr,aZ as Rt,R as Jr,a_ as Kr,S as je,J as lr,a7 as lt,M as ir,ag as Ot,a1 as Xr,a$ as Yr,b0 as Zr,aw as es,ak as ts,b1 as rs,b2 as ss,b3 as as,b4 as os,g as z,b5 as ns,b6 as ls,W as ft,b7 as is,b8 as cs,b9 as ps,ba as ds,bb as hs,at as us,bc as Os,bd as Ps,be as ms,p as bs,E as Vs,l as se,h as Ss,f as As,i as ys,b as Re,c as Rs,q as ce,m as ae,k as oe,d as Ye,s as wt,r as Ze,C as Pt,A as fs,a as ws}from"./DniTuB_0.js";import{l as It,p as ne,i as et}from"./DbNhg6mG.js";function Et(r,e,t=!1,s=!1,o=!1){var a=r,n="";ze(()=>{var l=Hr;if(n===(n=e()??"")){ee&&nt();return}if(l.nodes_start!==null&&($r(l.nodes_start,l.nodes_end),l.nodes_start=l.nodes_end=null),n!==""){if(ee){yt.data;for(var i=nt(),c=i;i!==null&&(i.nodeType!==Nr||i.data!=="");)c=i,i=Wr(i);if(i===null)throw Qr(),Mr;Rt(yt,c),a=Jr(i);return}var p=n+"";t?p=`${p}`:s&&(p=`${p}`);var y=Kr(p);if((t||s)&&(y=je(y)),Rt(je(y),y.lastChild),t||s)for(;je(y);)a.before(je(y));else a.before(y)}})}function Is(r,e,t,s,o){ee&&nt();var a=e.$$slots?.[t],n=!1;a===!0&&(a=e[t==="default"?"children":t],n=!0),a===void 0||a(r,n?()=>s:s)}function $o(r){const e={};r.children&&(e.default=!0);for(const t in r.$$slots)e[t]=!0;return e}function Es(r,e){var t=void 0,s;lr(()=>{t!==(t=e())&&(s&&(lt(s),s=null),t&&(s=ir(()=>{Ot(()=>t(r))})))})}function cr(r){var e,t,s="";if(typeof r=="string"||typeof r=="number")s+=r;else if(typeof r=="object")if(Array.isArray(r)){var o=r.length;for(e=0;e=0;){var l=n+a;(n===0||xt.includes(s[n-1]))&&(l===s.length||xt.includes(s[l]))?s=(n===0?"":s.substring(0,n))+s.substring(l+1):n=l}}return s===""?null:s}function gt(r,e=!1){var t=e?" !important;":";",s="";for(var o in r){var a=r[o];a!=null&&a!==""&&(s+=" "+o+": "+a+t)}return s}function tt(r){return r[0]!=="-"||r[1]!=="-"?r.toLowerCase():r}function Us(r,e){if(e){var t="",s,o;if(Array.isArray(e)?(s=e[0],o=e[1]):s=e,r){r=String(r).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var a=!1,n=0,l=!1,i=[];s&&i.push(...Object.keys(s).map(tt)),o&&i.push(...Object.keys(o).map(tt));var c=0,p=-1;const f=r.length;for(var y=0;y{He(r,r.__value)});e.observe(r,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),es(()=>{e.disconnect()})}function No(r,e,t=e){var s=!0;ts(r,"change",o=>{var a=o?"[selected]":":checked",n;if(r.multiple)n=[].map.call(r.querySelectorAll(a),xe);else{var l=r.querySelector(a)??r.querySelector("option:not([disabled])");n=l&&xe(l)}t(n)}),Ot(()=>{var o=e();if(He(r,o,s),s&&o===void 0){var a=r.querySelector(":checked");a!==null&&(o=xe(a),t(o))}r.__value=o,s=!1}),pr(r)}function xe(r){return"__value"in r?r.__value:r.value}const fe=Symbol("class"),we=Symbol("style"),dr=Symbol("is custom element"),hr=Symbol("is html");function Wo(r){if(ee){var e=!1,t=()=>{if(!e){if(e=!0,r.hasAttribute("value")){var s=r.value;$e(r,"value",null),r.value=s}if(r.hasAttribute("checked")){var o=r.checked;$e(r,"checked",null),r.checked=o}}};r.__on_r=t,Os(t),Ps()}}function Qo(r,e){var t=mt(r);t.value===(t.value=e??void 0)||r.value===e&&(e!==0||r.nodeName!=="PROGRESS")||(r.value=e??"")}function Ts(r,e){e?r.hasAttribute("selected")||r.setAttribute("selected",""):r.removeAttribute("selected")}function $e(r,e,t,s){var o=mt(r);ee&&(o[e]=r.getAttribute(e),e==="src"||e==="srcset"||e==="href"&&r.nodeName==="LINK")||o[e]!==(o[e]=t)&&(e==="loading"&&(r[ss]=t),t==null?r.removeAttribute(e):typeof t!="string"&&ur(r).includes(e)?r[e]=t:r.setAttribute(e,t))}function Bs(r,e,t,s,o=!1){var a=mt(r),n=a[dr],l=!a[hr];let i=ee&&n;i&&ft(!1);var c=e||{},p=r.tagName==="OPTION";for(var y in e)y in t||(t[y]=null);t.class?t.class=gs(t.class):t[fe]&&(t.class=null),t[we]&&(t.style??=null);var I=ur(r);for(const E in t){let x=t[E];if(p&&E==="value"&&x==null){r.value=r.__value="",c[E]=x;continue}if(E==="class"){var B=r.namespaceURI==="http://www.w3.org/1999/xhtml";ke(r,B,x,s,e?.[fe],t[fe]),c[E]=x,c[fe]=t[fe];continue}if(E==="style"){Cs(r,x,e?.[we],t[we]),c[E]=x,c[we]=t[we];continue}var R=c[E];if(!(x===R&&!(x===void 0&&r.hasAttribute(E)))){c[E]=x;var f=E[0]+E[1];if(f!=="$$")if(f==="on"){const T={},D="$$"+E;let C=E.slice(2);var w=ms(C);if(is(C)&&(C=C.slice(0,-7),T.capture=!0),!w&&R){if(x!=null)continue;r.removeEventListener(C,c[D],T),c[D]=null}if(x!=null)if(w)r[`__${C}`]=x,ps([C]);else{let ie=function(te){c[E].call(this,te)};c[D]=cs(C,r,ie,T)}else w&&(r[`__${C}`]=void 0)}else if(E==="style")$e(r,E,x);else if(E==="autofocus")ds(r,!!x);else if(!n&&(E==="__value"||E==="value"&&x!=null))r.value=r.__value=x;else if(E==="selected"&&p)Ts(r,x);else{var U=E;l||(U=hs(U));var F=U==="defaultValue"||U==="defaultChecked";if(x==null&&!n&&!F)if(a[E]=null,U==="value"||U==="checked"){let T=r;const D=e===void 0;if(U==="value"){let C=T.defaultValue;T.removeAttribute(U),T.defaultValue=C,T.value=T.__value=D?C:null}else{let C=T.defaultChecked;T.removeAttribute(U),T.defaultChecked=C,T.checked=D?C:!1}}else r.removeAttribute(E);else F||I.includes(U)&&(n||typeof x!="string")?(r[U]=x,U in a&&(a[U]=us)):typeof x!="function"&&$e(r,U,x)}}}return i&&ft(!0),c}function Ds(r,e,t=[],s=[],o,a=!1){rs(t,s,n=>{var l=void 0,i={},c=r.nodeName==="SELECT",p=!1;if(lr(()=>{var I=e(...n.map(z)),B=Bs(r,l,I,o,a);p&&c&&"value"in I&&He(r,I.value);for(let f of Object.getOwnPropertySymbols(i))I[f]||lt(i[f]);for(let f of Object.getOwnPropertySymbols(I)){var R=I[f];f.description===ns&&(!l||R!==l[f])&&(i[f]&<(i[f]),i[f]=ir(()=>Es(r,()=>R))),B[f]=R}l=B}),c){var y=r;Ot(()=>{He(y,l.value,!0),pr(y)})}p=!0})}function mt(r){return r.__attributes??={[dr]:r.nodeName.includes("-"),[hr]:r.namespaceURI===as}}var vt=new Map;function ur(r){var e=vt.get(r.nodeName);if(e)return e;vt.set(r.nodeName,e=[]);for(var t,s=r,o=Element.prototype;o!==s;){t=ls(s);for(var a in t)t[a].set&&e.push(a);s=os(s)}return e}function Mo(r,e){return Gr+_r(r,e)}function Or(r,e){return function(){return r.apply(e,arguments)}}const{toString:js}=Object.prototype,{getPrototypeOf:bt}=Object,{iterator:We,toStringTag:Pr}=Symbol,Qe=(r=>e=>{const t=js.call(e);return r[t]||(r[t]=t.slice(8,-1).toLowerCase())})(Object.create(null)),J=r=>(r=r.toLowerCase(),e=>Qe(e)===r),Me=r=>e=>typeof e===r,{isArray:Se}=Array,Ve=Me("undefined");function ge(r){return r!==null&&!Ve(r)&&r.constructor!==null&&!Ve(r.constructor)&&$(r.constructor.isBuffer)&&r.constructor.isBuffer(r)}const mr=J("ArrayBuffer");function Fs(r){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(r):e=r&&r.buffer&&mr(r.buffer),e}const Ls=Me("string"),$=Me("function"),br=Me("number"),ve=r=>r!==null&&typeof r=="object",zs=r=>r===!0||r===!1,Ge=r=>{if(Qe(r)!=="object")return!1;const e=bt(r);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Pr in r)&&!(We in r)},ks=r=>{if(!ve(r)||ge(r))return!1;try{return Object.keys(r).length===0&&Object.getPrototypeOf(r)===Object.prototype}catch{return!1}},Gs=J("Date"),_s=J("File"),qs=J("Blob"),Hs=J("FileList"),$s=r=>ve(r)&&$(r.pipe),Ns=r=>{let e;return r&&(typeof FormData=="function"&&r instanceof FormData||$(r.append)&&((e=Qe(r))==="formdata"||e==="object"&&$(r.toString)&&r.toString()==="[object FormData]"))},Ws=J("URLSearchParams"),[Qs,Ms,Js,Ks]=["ReadableStream","Request","Response","Headers"].map(J),Xs=r=>r.trim?r.trim():r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Ue(r,e,{allOwnKeys:t=!1}={}){if(r===null||typeof r>"u")return;let s,o;if(typeof r!="object"&&(r=[r]),Se(r))for(s=0,o=r.length;s0;)if(o=t[s],e===o.toLowerCase())return o;return null}const pe=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Sr=r=>!Ve(r)&&r!==pe;function it(){const{caseless:r,skipUndefined:e}=Sr(this)&&this||{},t={},s=(o,a)=>{const n=r&&Vr(t,a)||a;Ge(t[n])&&Ge(o)?t[n]=it(t[n],o):Ge(o)?t[n]=it({},o):Se(o)?t[n]=o.slice():(!e||!Ve(o))&&(t[n]=o)};for(let o=0,a=arguments.length;o(Ue(e,(o,a)=>{t&&$(o)?r[a]=Or(o,t):r[a]=o},{allOwnKeys:s}),r),Zs=r=>(r.charCodeAt(0)===65279&&(r=r.slice(1)),r),ea=(r,e,t,s)=>{r.prototype=Object.create(e.prototype,s),r.prototype.constructor=r,Object.defineProperty(r,"super",{value:e.prototype}),t&&Object.assign(r.prototype,t)},ta=(r,e,t,s)=>{let o,a,n;const l={};if(e=e||{},r==null)return e;do{for(o=Object.getOwnPropertyNames(r),a=o.length;a-- >0;)n=o[a],(!s||s(n,r,e))&&!l[n]&&(e[n]=r[n],l[n]=!0);r=t!==!1&&bt(r)}while(r&&(!t||t(r,e))&&r!==Object.prototype);return e},ra=(r,e,t)=>{r=String(r),(t===void 0||t>r.length)&&(t=r.length),t-=e.length;const s=r.indexOf(e,t);return s!==-1&&s===t},sa=r=>{if(!r)return null;if(Se(r))return r;let e=r.length;if(!br(e))return null;const t=new Array(e);for(;e-- >0;)t[e]=r[e];return t},aa=(r=>e=>r&&e instanceof r)(typeof Uint8Array<"u"&&bt(Uint8Array)),oa=(r,e)=>{const s=(r&&r[We]).call(r);let o;for(;(o=s.next())&&!o.done;){const a=o.value;e.call(r,a[0],a[1])}},na=(r,e)=>{let t;const s=[];for(;(t=r.exec(e))!==null;)s.push(t);return s},la=J("HTMLFormElement"),ia=r=>r.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(t,s,o){return s.toUpperCase()+o}),Ut=(({hasOwnProperty:r})=>(e,t)=>r.call(e,t))(Object.prototype),ca=J("RegExp"),Ar=(r,e)=>{const t=Object.getOwnPropertyDescriptors(r),s={};Ue(t,(o,a)=>{let n;(n=e(o,a,r))!==!1&&(s[a]=n||o)}),Object.defineProperties(r,s)},pa=r=>{Ar(r,(e,t)=>{if($(r)&&["arguments","caller","callee"].indexOf(t)!==-1)return!1;const s=r[t];if($(s)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+t+"'")})}})},da=(r,e)=>{const t={},s=o=>{o.forEach(a=>{t[a]=!0})};return Se(r)?s(r):s(String(r).split(e)),t},ha=()=>{},ua=(r,e)=>r!=null&&Number.isFinite(r=+r)?r:e;function Oa(r){return!!(r&&$(r.append)&&r[Pr]==="FormData"&&r[We])}const Pa=r=>{const e=new Array(10),t=(s,o)=>{if(ve(s)){if(e.indexOf(s)>=0)return;if(ge(s))return s;if(!("toJSON"in s)){e[o]=s;const a=Se(s)?[]:{};return Ue(s,(n,l)=>{const i=t(n,o+1);!Ve(i)&&(a[l]=i)}),e[o]=void 0,a}}return s};return t(r,0)},ma=J("AsyncFunction"),ba=r=>r&&(ve(r)||$(r))&&$(r.then)&&$(r.catch),yr=((r,e)=>r?setImmediate:e?((t,s)=>(pe.addEventListener("message",({source:o,data:a})=>{o===pe&&a===t&&s.length&&s.shift()()},!1),o=>{s.push(o),pe.postMessage(t,"*")}))(`axios@${Math.random()}`,[]):t=>setTimeout(t))(typeof setImmediate=="function",$(pe.postMessage)),Va=typeof queueMicrotask<"u"?queueMicrotask.bind(pe):typeof process<"u"&&process.nextTick||yr,Sa=r=>r!=null&&$(r[We]),u={isArray:Se,isArrayBuffer:mr,isBuffer:ge,isFormData:Ns,isArrayBufferView:Fs,isString:Ls,isNumber:br,isBoolean:zs,isObject:ve,isPlainObject:Ge,isEmptyObject:ks,isReadableStream:Qs,isRequest:Ms,isResponse:Js,isHeaders:Ks,isUndefined:Ve,isDate:Gs,isFile:_s,isBlob:qs,isRegExp:ca,isFunction:$,isStream:$s,isURLSearchParams:Ws,isTypedArray:aa,isFileList:Hs,forEach:Ue,merge:it,extend:Ys,trim:Xs,stripBOM:Zs,inherits:ea,toFlatObject:ta,kindOf:Qe,kindOfTest:J,endsWith:ra,toArray:sa,forEachEntry:oa,matchAll:na,isHTMLForm:la,hasOwnProperty:Ut,hasOwnProp:Ut,reduceDescriptors:Ar,freezeMethods:pa,toObjectSet:da,toCamelCase:ia,noop:ha,toFiniteNumber:ua,findKey:Vr,global:pe,isContextDefined:Sr,isSpecCompliantForm:Oa,toJSONObject:Pa,isAsyncFn:ma,isThenable:ba,setImmediate:yr,asap:Va,isIterable:Sa};function v(r,e,t,s,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=r,this.name="AxiosError",e&&(this.code=e),t&&(this.config=t),s&&(this.request=s),o&&(this.response=o,this.status=o.status?o.status:null)}u.inherits(v,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:u.toJSONObject(this.config),code:this.code,status:this.status}}});const Rr=v.prototype,fr={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(r=>{fr[r]={value:r}});Object.defineProperties(v,fr);Object.defineProperty(Rr,"isAxiosError",{value:!0});v.from=(r,e,t,s,o,a)=>{const n=Object.create(Rr);u.toFlatObject(r,n,function(p){return p!==Error.prototype},c=>c!=="isAxiosError");const l=r&&r.message?r.message:"Error",i=e==null&&r?r.code:e;return v.call(n,l,i,t,s,o),r&&n.cause==null&&Object.defineProperty(n,"cause",{value:r,configurable:!0}),n.name=r&&r.name||"Error",a&&Object.assign(n,a),n};const Aa=null;function ct(r){return u.isPlainObject(r)||u.isArray(r)}function wr(r){return u.endsWith(r,"[]")?r.slice(0,-2):r}function Ct(r,e,t){return r?r.concat(e).map(function(o,a){return o=wr(o),!t&&a?"["+o+"]":o}).join(t?".":""):e}function ya(r){return u.isArray(r)&&!r.some(ct)}const Ra=u.toFlatObject(u,{},null,function(e){return/^is[A-Z]/.test(e)});function Je(r,e,t){if(!u.isObject(r))throw new TypeError("target must be an object");e=e||new FormData,t=u.toFlatObject(t,{metaTokens:!0,dots:!1,indexes:!1},!1,function(f,w){return!u.isUndefined(w[f])});const s=t.metaTokens,o=t.visitor||p,a=t.dots,n=t.indexes,i=(t.Blob||typeof Blob<"u"&&Blob)&&u.isSpecCompliantForm(e);if(!u.isFunction(o))throw new TypeError("visitor must be a function");function c(R){if(R===null)return"";if(u.isDate(R))return R.toISOString();if(u.isBoolean(R))return R.toString();if(!i&&u.isBlob(R))throw new v("Blob is not supported. Use a Buffer instead.");return u.isArrayBuffer(R)||u.isTypedArray(R)?i&&typeof Blob=="function"?new Blob([R]):Buffer.from(R):R}function p(R,f,w){let U=R;if(R&&!w&&typeof R=="object"){if(u.endsWith(f,"{}"))f=s?f:f.slice(0,-2),R=JSON.stringify(R);else if(u.isArray(R)&&ya(R)||(u.isFileList(R)||u.endsWith(f,"[]"))&&(U=u.toArray(R)))return f=wr(f),U.forEach(function(E,x){!(u.isUndefined(E)||E===null)&&e.append(n===!0?Ct([f],x,a):n===null?f:f+"[]",c(E))}),!1}return ct(R)?!0:(e.append(Ct(w,f,a),c(R)),!1)}const y=[],I=Object.assign(Ra,{defaultVisitor:p,convertValue:c,isVisitable:ct});function B(R,f){if(!u.isUndefined(R)){if(y.indexOf(R)!==-1)throw Error("Circular reference detected in "+f.join("."));y.push(R),u.forEach(R,function(U,F){(!(u.isUndefined(U)||U===null)&&o.call(e,U,u.isString(F)?F.trim():F,f,I))===!0&&B(U,f?f.concat(F):[F])}),y.pop()}}if(!u.isObject(r))throw new TypeError("data must be an object");return B(r),e}function Tt(r){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(r).replace(/[!'()~]|%20|%00/g,function(s){return e[s]})}function Vt(r,e){this._pairs=[],r&&Je(r,this,e)}const Ir=Vt.prototype;Ir.append=function(e,t){this._pairs.push([e,t])};Ir.toString=function(e){const t=e?function(s){return e.call(this,s,Tt)}:Tt;return this._pairs.map(function(o){return t(o[0])+"="+t(o[1])},"").join("&")};function fa(r){return encodeURIComponent(r).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Er(r,e,t){if(!e)return r;const s=t&&t.encode||fa;u.isFunction(t)&&(t={serialize:t});const o=t&&t.serialize;let a;if(o?a=o(e,t):a=u.isURLSearchParams(e)?e.toString():new Vt(e,t).toString(s),a){const n=r.indexOf("#");n!==-1&&(r=r.slice(0,n)),r+=(r.indexOf("?")===-1?"?":"&")+a}return r}class Bt{constructor(){this.handlers=[]}use(e,t,s){return this.handlers.push({fulfilled:e,rejected:t,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){u.forEach(this.handlers,function(s){s!==null&&e(s)})}}const xr={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},wa=typeof URLSearchParams<"u"?URLSearchParams:Vt,Ia=typeof FormData<"u"?FormData:null,Ea=typeof Blob<"u"?Blob:null,xa={isBrowser:!0,classes:{URLSearchParams:wa,FormData:Ia,Blob:Ea},protocols:["http","https","file","blob","url","data"]},St=typeof window<"u"&&typeof document<"u",pt=typeof navigator=="object"&&navigator||void 0,ga=St&&(!pt||["ReactNative","NativeScript","NS"].indexOf(pt.product)<0),va=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Ua=St&&window.location.href||"http://localhost",Ca=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:St,hasStandardBrowserEnv:ga,hasStandardBrowserWebWorkerEnv:va,navigator:pt,origin:Ua},Symbol.toStringTag,{value:"Module"})),q={...Ca,...xa};function Ta(r,e){return Je(r,new q.classes.URLSearchParams,{visitor:function(t,s,o,a){return q.isNode&&u.isBuffer(t)?(this.append(s,t.toString("base64")),!1):a.defaultVisitor.apply(this,arguments)},...e})}function Ba(r){return u.matchAll(/\w+|\[(\w*)]/g,r).map(e=>e[0]==="[]"?"":e[1]||e[0])}function Da(r){const e={},t=Object.keys(r);let s;const o=t.length;let a;for(s=0;s=t.length;return n=!n&&u.isArray(o)?o.length:n,i?(u.hasOwnProp(o,n)?o[n]=[o[n],s]:o[n]=s,!l):((!o[n]||!u.isObject(o[n]))&&(o[n]=[]),e(t,s,o[n],a)&&u.isArray(o[n])&&(o[n]=Da(o[n])),!l)}if(u.isFormData(r)&&u.isFunction(r.entries)){const t={};return u.forEachEntry(r,(s,o)=>{e(Ba(s),o,t,0)}),t}return null}function ja(r,e,t){if(u.isString(r))try{return(e||JSON.parse)(r),u.trim(r)}catch(s){if(s.name!=="SyntaxError")throw s}return(t||JSON.stringify)(r)}const Ce={transitional:xr,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const s=t.getContentType()||"",o=s.indexOf("application/json")>-1,a=u.isObject(e);if(a&&u.isHTMLForm(e)&&(e=new FormData(e)),u.isFormData(e))return o?JSON.stringify(gr(e)):e;if(u.isArrayBuffer(e)||u.isBuffer(e)||u.isStream(e)||u.isFile(e)||u.isBlob(e)||u.isReadableStream(e))return e;if(u.isArrayBufferView(e))return e.buffer;if(u.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let l;if(a){if(s.indexOf("application/x-www-form-urlencoded")>-1)return Ta(e,this.formSerializer).toString();if((l=u.isFileList(e))||s.indexOf("multipart/form-data")>-1){const i=this.env&&this.env.FormData;return Je(l?{"files[]":e}:e,i&&new i,this.formSerializer)}}return a||o?(t.setContentType("application/json",!1),ja(e)):e}],transformResponse:[function(e){const t=this.transitional||Ce.transitional,s=t&&t.forcedJSONParsing,o=this.responseType==="json";if(u.isResponse(e)||u.isReadableStream(e))return e;if(e&&u.isString(e)&&(s&&!this.responseType||o)){const n=!(t&&t.silentJSONParsing)&&o;try{return JSON.parse(e,this.parseReviver)}catch(l){if(n)throw l.name==="SyntaxError"?v.from(l,v.ERR_BAD_RESPONSE,this,null,this.response):l}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:q.classes.FormData,Blob:q.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};u.forEach(["delete","get","head","post","put","patch"],r=>{Ce.headers[r]={}});const Fa=u.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),La=r=>{const e={};let t,s,o;return r&&r.split(` -`).forEach(function(n){o=n.indexOf(":"),t=n.substring(0,o).trim().toLowerCase(),s=n.substring(o+1).trim(),!(!t||e[t]&&Fa[t])&&(t==="set-cookie"?e[t]?e[t].push(s):e[t]=[s]:e[t]=e[t]?e[t]+", "+s:s)}),e},Dt=Symbol("internals");function Ie(r){return r&&String(r).trim().toLowerCase()}function _e(r){return r===!1||r==null?r:u.isArray(r)?r.map(_e):String(r)}function za(r){const e=Object.create(null),t=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=t.exec(r);)e[s[1]]=s[2];return e}const ka=r=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(r.trim());function st(r,e,t,s,o){if(u.isFunction(s))return s.call(this,e,t);if(o&&(e=t),!!u.isString(e)){if(u.isString(s))return e.indexOf(s)!==-1;if(u.isRegExp(s))return s.test(e)}}function Ga(r){return r.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,s)=>t.toUpperCase()+s)}function _a(r,e){const t=u.toCamelCase(" "+e);["get","set","has"].forEach(s=>{Object.defineProperty(r,s+t,{value:function(o,a,n){return this[s].call(this,e,o,a,n)},configurable:!0})})}let N=class{constructor(e){e&&this.set(e)}set(e,t,s){const o=this;function a(l,i,c){const p=Ie(i);if(!p)throw new Error("header name must be a non-empty string");const y=u.findKey(o,p);(!y||o[y]===void 0||c===!0||c===void 0&&o[y]!==!1)&&(o[y||i]=_e(l))}const n=(l,i)=>u.forEach(l,(c,p)=>a(c,p,i));if(u.isPlainObject(e)||e instanceof this.constructor)n(e,t);else if(u.isString(e)&&(e=e.trim())&&!ka(e))n(La(e),t);else if(u.isObject(e)&&u.isIterable(e)){let l={},i,c;for(const p of e){if(!u.isArray(p))throw TypeError("Object iterator must return a key-value pair");l[c=p[0]]=(i=l[c])?u.isArray(i)?[...i,p[1]]:[i,p[1]]:p[1]}n(l,t)}else e!=null&&a(t,e,s);return this}get(e,t){if(e=Ie(e),e){const s=u.findKey(this,e);if(s){const o=this[s];if(!t)return o;if(t===!0)return za(o);if(u.isFunction(t))return t.call(this,o,s);if(u.isRegExp(t))return t.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Ie(e),e){const s=u.findKey(this,e);return!!(s&&this[s]!==void 0&&(!t||st(this,this[s],s,t)))}return!1}delete(e,t){const s=this;let o=!1;function a(n){if(n=Ie(n),n){const l=u.findKey(s,n);l&&(!t||st(s,s[l],l,t))&&(delete s[l],o=!0)}}return u.isArray(e)?e.forEach(a):a(e),o}clear(e){const t=Object.keys(this);let s=t.length,o=!1;for(;s--;){const a=t[s];(!e||st(this,this[a],a,e,!0))&&(delete this[a],o=!0)}return o}normalize(e){const t=this,s={};return u.forEach(this,(o,a)=>{const n=u.findKey(s,a);if(n){t[n]=_e(o),delete t[a];return}const l=e?Ga(a):String(a).trim();l!==a&&delete t[a],t[l]=_e(o),s[l]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return u.forEach(this,(s,o)=>{s!=null&&s!==!1&&(t[o]=e&&u.isArray(s)?s.join(", "):s)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join(` -`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const s=new this(e);return t.forEach(o=>s.set(o)),s}static accessor(e){const s=(this[Dt]=this[Dt]={accessors:{}}).accessors,o=this.prototype;function a(n){const l=Ie(n);s[l]||(_a(o,n),s[l]=!0)}return u.isArray(e)?e.forEach(a):a(e),this}};N.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);u.reduceDescriptors(N.prototype,({value:r},e)=>{let t=e[0].toUpperCase()+e.slice(1);return{get:()=>r,set(s){this[t]=s}}});u.freezeMethods(N);function at(r,e){const t=this||Ce,s=e||t,o=N.from(s.headers);let a=s.data;return u.forEach(r,function(l){a=l.call(t,a,o.normalize(),e?e.status:void 0)}),o.normalize(),a}function vr(r){return!!(r&&r.__CANCEL__)}function Ae(r,e,t){v.call(this,r??"canceled",v.ERR_CANCELED,e,t),this.name="CanceledError"}u.inherits(Ae,v,{__CANCEL__:!0});function Ur(r,e,t){const s=t.config.validateStatus;!t.status||!s||s(t.status)?r(t):e(new v("Request failed with status code "+t.status,[v.ERR_BAD_REQUEST,v.ERR_BAD_RESPONSE][Math.floor(t.status/100)-4],t.config,t.request,t))}function qa(r){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(r);return e&&e[1]||""}function Ha(r,e){r=r||10;const t=new Array(r),s=new Array(r);let o=0,a=0,n;return e=e!==void 0?e:1e3,function(i){const c=Date.now(),p=s[a];n||(n=c),t[o]=i,s[o]=c;let y=a,I=0;for(;y!==o;)I+=t[y++],y=y%r;if(o=(o+1)%r,o===a&&(a=(a+1)%r),c-n{t=p,o=null,a&&(clearTimeout(a),a=null),r(...c)};return[(...c)=>{const p=Date.now(),y=p-t;y>=s?n(c,p):(o=c,a||(a=setTimeout(()=>{a=null,n(o)},s-y)))},()=>o&&n(o)]}const Ne=(r,e,t=3)=>{let s=0;const o=Ha(50,250);return $a(a=>{const n=a.loaded,l=a.lengthComputable?a.total:void 0,i=n-s,c=o(i),p=n<=l;s=n;const y={loaded:n,total:l,progress:l?n/l:void 0,bytes:i,rate:c||void 0,estimated:c&&l&&p?(l-n)/c:void 0,event:a,lengthComputable:l!=null,[e?"download":"upload"]:!0};r(y)},t)},jt=(r,e)=>{const t=r!=null;return[s=>e[0]({lengthComputable:t,total:r,loaded:s}),e[1]]},Ft=r=>(...e)=>u.asap(()=>r(...e)),Na=q.hasStandardBrowserEnv?((r,e)=>t=>(t=new URL(t,q.origin),r.protocol===t.protocol&&r.host===t.host&&(e||r.port===t.port)))(new URL(q.origin),q.navigator&&/(msie|trident)/i.test(q.navigator.userAgent)):()=>!0,Wa=q.hasStandardBrowserEnv?{write(r,e,t,s,o,a){const n=[r+"="+encodeURIComponent(e)];u.isNumber(t)&&n.push("expires="+new Date(t).toGMTString()),u.isString(s)&&n.push("path="+s),u.isString(o)&&n.push("domain="+o),a===!0&&n.push("secure"),document.cookie=n.join("; ")},read(r){const e=document.cookie.match(new RegExp("(^|;\\s*)("+r+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(r){this.write(r,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function Qa(r){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(r)}function Ma(r,e){return e?r.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):r}function Cr(r,e,t){let s=!Qa(e);return r&&(s||t==!1)?Ma(r,e):e}const Lt=r=>r instanceof N?{...r}:r;function he(r,e){e=e||{};const t={};function s(c,p,y,I){return u.isPlainObject(c)&&u.isPlainObject(p)?u.merge.call({caseless:I},c,p):u.isPlainObject(p)?u.merge({},p):u.isArray(p)?p.slice():p}function o(c,p,y,I){if(u.isUndefined(p)){if(!u.isUndefined(c))return s(void 0,c,y,I)}else return s(c,p,y,I)}function a(c,p){if(!u.isUndefined(p))return s(void 0,p)}function n(c,p){if(u.isUndefined(p)){if(!u.isUndefined(c))return s(void 0,c)}else return s(void 0,p)}function l(c,p,y){if(y in e)return s(c,p);if(y in r)return s(void 0,c)}const i={url:a,method:a,data:a,baseURL:n,transformRequest:n,transformResponse:n,paramsSerializer:n,timeout:n,timeoutMessage:n,withCredentials:n,withXSRFToken:n,adapter:n,responseType:n,xsrfCookieName:n,xsrfHeaderName:n,onUploadProgress:n,onDownloadProgress:n,decompress:n,maxContentLength:n,maxBodyLength:n,beforeRedirect:n,transport:n,httpAgent:n,httpsAgent:n,cancelToken:n,socketPath:n,responseEncoding:n,validateStatus:l,headers:(c,p,y)=>o(Lt(c),Lt(p),y,!0)};return u.forEach(Object.keys({...r,...e}),function(p){const y=i[p]||o,I=y(r[p],e[p],p);u.isUndefined(I)&&y!==l||(t[p]=I)}),t}const Tr=r=>{const e=he({},r);let{data:t,withXSRFToken:s,xsrfHeaderName:o,xsrfCookieName:a,headers:n,auth:l}=e;if(e.headers=n=N.from(n),e.url=Er(Cr(e.baseURL,e.url,e.allowAbsoluteUrls),r.params,r.paramsSerializer),l&&n.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):""))),u.isFormData(t)){if(q.hasStandardBrowserEnv||q.hasStandardBrowserWebWorkerEnv)n.setContentType(void 0);else if(u.isFunction(t.getHeaders)){const i=t.getHeaders(),c=["content-type","content-length"];Object.entries(i).forEach(([p,y])=>{c.includes(p.toLowerCase())&&n.set(p,y)})}}if(q.hasStandardBrowserEnv&&(s&&u.isFunction(s)&&(s=s(e)),s||s!==!1&&Na(e.url))){const i=o&&a&&Wa.read(a);i&&n.set(o,i)}return e},Ja=typeof XMLHttpRequest<"u",Ka=Ja&&function(r){return new Promise(function(t,s){const o=Tr(r);let a=o.data;const n=N.from(o.headers).normalize();let{responseType:l,onUploadProgress:i,onDownloadProgress:c}=o,p,y,I,B,R;function f(){B&&B(),R&&R(),o.cancelToken&&o.cancelToken.unsubscribe(p),o.signal&&o.signal.removeEventListener("abort",p)}let w=new XMLHttpRequest;w.open(o.method.toUpperCase(),o.url,!0),w.timeout=o.timeout;function U(){if(!w)return;const E=N.from("getAllResponseHeaders"in w&&w.getAllResponseHeaders()),T={data:!l||l==="text"||l==="json"?w.responseText:w.response,status:w.status,statusText:w.statusText,headers:E,config:r,request:w};Ur(function(C){t(C),f()},function(C){s(C),f()},T),w=null}"onloadend"in w?w.onloadend=U:w.onreadystatechange=function(){!w||w.readyState!==4||w.status===0&&!(w.responseURL&&w.responseURL.indexOf("file:")===0)||setTimeout(U)},w.onabort=function(){w&&(s(new v("Request aborted",v.ECONNABORTED,r,w)),w=null)},w.onerror=function(x){const T=x&&x.message?x.message:"Network Error",D=new v(T,v.ERR_NETWORK,r,w);D.event=x||null,s(D),w=null},w.ontimeout=function(){let x=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded";const T=o.transitional||xr;o.timeoutErrorMessage&&(x=o.timeoutErrorMessage),s(new v(x,T.clarifyTimeoutError?v.ETIMEDOUT:v.ECONNABORTED,r,w)),w=null},a===void 0&&n.setContentType(null),"setRequestHeader"in w&&u.forEach(n.toJSON(),function(x,T){w.setRequestHeader(T,x)}),u.isUndefined(o.withCredentials)||(w.withCredentials=!!o.withCredentials),l&&l!=="json"&&(w.responseType=o.responseType),c&&([I,R]=Ne(c,!0),w.addEventListener("progress",I)),i&&w.upload&&([y,B]=Ne(i),w.upload.addEventListener("progress",y),w.upload.addEventListener("loadend",B)),(o.cancelToken||o.signal)&&(p=E=>{w&&(s(!E||E.type?new Ae(null,r,w):E),w.abort(),w=null)},o.cancelToken&&o.cancelToken.subscribe(p),o.signal&&(o.signal.aborted?p():o.signal.addEventListener("abort",p)));const F=qa(o.url);if(F&&q.protocols.indexOf(F)===-1){s(new v("Unsupported protocol "+F+":",v.ERR_BAD_REQUEST,r));return}w.send(a||null)})},Xa=(r,e)=>{const{length:t}=r=r?r.filter(Boolean):[];if(e||t){let s=new AbortController,o;const a=function(c){if(!o){o=!0,l();const p=c instanceof Error?c:this.reason;s.abort(p instanceof v?p:new Ae(p instanceof Error?p.message:p))}};let n=e&&setTimeout(()=>{n=null,a(new v(`timeout ${e} of ms exceeded`,v.ETIMEDOUT))},e);const l=()=>{r&&(n&&clearTimeout(n),n=null,r.forEach(c=>{c.unsubscribe?c.unsubscribe(a):c.removeEventListener("abort",a)}),r=null)};r.forEach(c=>c.addEventListener("abort",a));const{signal:i}=s;return i.unsubscribe=()=>u.asap(l),i}},Ya=function*(r,e){let t=r.byteLength;if(t{const o=Za(r,e);let a=0,n,l=i=>{n||(n=!0,s&&s(i))};return new ReadableStream({async pull(i){try{const{done:c,value:p}=await o.next();if(c){l(),i.close();return}let y=p.byteLength;if(t){let I=a+=y;t(I)}i.enqueue(new Uint8Array(p))}catch(c){throw l(c),c}},cancel(i){return l(i),o.return()}},{highWaterMark:2})},kt=64*1024,{isFunction:Fe}=u,to=(({Request:r,Response:e})=>({Request:r,Response:e}))(u.global),{ReadableStream:Gt,TextEncoder:_t}=u.global,qt=(r,...e)=>{try{return!!r(...e)}catch{return!1}},ro=r=>{r=u.merge.call({skipUndefined:!0},to,r);const{fetch:e,Request:t,Response:s}=r,o=e?Fe(e):typeof fetch=="function",a=Fe(t),n=Fe(s);if(!o)return!1;const l=o&&Fe(Gt),i=o&&(typeof _t=="function"?(R=>f=>R.encode(f))(new _t):async R=>new Uint8Array(await new t(R).arrayBuffer())),c=a&&l&&qt(()=>{let R=!1;const f=new t(q.origin,{body:new Gt,method:"POST",get duplex(){return R=!0,"half"}}).headers.has("Content-Type");return R&&!f}),p=n&&l&&qt(()=>u.isReadableStream(new s("").body)),y={stream:p&&(R=>R.body)};o&&["text","arrayBuffer","blob","formData","stream"].forEach(R=>{!y[R]&&(y[R]=(f,w)=>{let U=f&&f[R];if(U)return U.call(f);throw new v(`Response type '${R}' is not supported`,v.ERR_NOT_SUPPORT,w)})});const I=async R=>{if(R==null)return 0;if(u.isBlob(R))return R.size;if(u.isSpecCompliantForm(R))return(await new t(q.origin,{method:"POST",body:R}).arrayBuffer()).byteLength;if(u.isArrayBufferView(R)||u.isArrayBuffer(R))return R.byteLength;if(u.isURLSearchParams(R)&&(R=R+""),u.isString(R))return(await i(R)).byteLength},B=async(R,f)=>{const w=u.toFiniteNumber(R.getContentLength());return w??I(f)};return async R=>{let{url:f,method:w,data:U,signal:F,cancelToken:E,timeout:x,onDownloadProgress:T,onUploadProgress:D,responseType:C,headers:ie,withCredentials:te="same-origin",fetchOptions:ye}=Tr(R),Te=e||fetch;C=C?(C+"").toLowerCase():"text";let ue=Xa([F,E&&E.toAbortSignal()],x),k=null;const L=ue&&ue.unsubscribe&&(()=>{ue.unsubscribe()});let Oe;try{if(D&&c&&w!=="get"&&w!=="head"&&(Oe=await B(ie,U))!==0){let re=new t(f,{method:"POST",body:U,duplex:"half"}),me;if(u.isFormData(U)&&(me=re.headers.get("content-type"))&&ie.setContentType(me),re.body){const[Xe,De]=jt(Oe,Ne(Ft(D)));U=zt(re.body,kt,Xe,De)}}u.isString(te)||(te=te?"include":"omit");const M=a&&"credentials"in t.prototype,Pe={...ye,signal:ue,method:w.toUpperCase(),headers:ie.normalize().toJSON(),body:U,duplex:"half",credentials:M?te:void 0};k=a&&new t(f,Pe);let W=await(a?Te(k,ye):Te(f,Pe));const Be=p&&(C==="stream"||C==="response");if(p&&(T||Be&&L)){const re={};["status","statusText","headers"].forEach(At=>{re[At]=W[At]});const me=u.toFiniteNumber(W.headers.get("content-length")),[Xe,De]=T&&jt(me,Ne(Ft(T),!0))||[];W=new s(zt(W.body,kt,Xe,()=>{De&&De(),L&&L()}),re)}C=C||"text";let kr=await y[u.findKey(y,C)||"text"](W,R);return!Be&&L&&L(),await new Promise((re,me)=>{Ur(re,me,{data:kr,headers:N.from(W.headers),status:W.status,statusText:W.statusText,config:R,request:k})})}catch(M){throw L&&L(),M&&M.name==="TypeError"&&/Load failed|fetch/i.test(M.message)?Object.assign(new v("Network Error",v.ERR_NETWORK,R,k),{cause:M.cause||M}):v.from(M,M&&M.code,R,k)}}},so=new Map,Br=r=>{let e=r?r.env:{};const{fetch:t,Request:s,Response:o}=e,a=[s,o,t];let n=a.length,l=n,i,c,p=so;for(;l--;)i=a[l],c=p.get(i),c===void 0&&p.set(i,c=l?new Map:ro(e)),p=c;return c};Br();const dt={http:Aa,xhr:Ka,fetch:{get:Br}};u.forEach(dt,(r,e)=>{if(r){try{Object.defineProperty(r,"name",{value:e})}catch{}Object.defineProperty(r,"adapterName",{value:e})}});const Ht=r=>`- ${r}`,ao=r=>u.isFunction(r)||r===null||r===!1,Dr={getAdapter:(r,e)=>{r=u.isArray(r)?r:[r];const{length:t}=r;let s,o;const a={};for(let n=0;n`adapter ${i} `+(c===!1?"is not supported by the environment":"is not available in the build"));let l=t?n.length>1?`since : +import{b as Gr,r as _r}from"./CYb6_lpF.js";import"./DsnmJJEf.js";import{i as qr}from"./De-I_rkH.js";import{t as ze,H as ee,I as nt,ac as Hr,aW as $r,P as yt,X as Nr,a8 as Wr,aX as Qr,aY as Mr,aZ as Rt,R as Jr,a_ as Kr,S as je,J as lr,a7 as lt,M as ir,ag as Ot,ak as Xr,aw as Yr,a1 as Zr,a$ as es,b0 as ts,b1 as rs,b2 as ss,b3 as as,b4 as os,g as z,b5 as ns,b6 as ls,W as ft,b7 as is,b8 as cs,b9 as ps,ba as ds,bb as hs,at as us,bc as Os,bd as Ps,be as ms,p as bs,E as Vs,l as se,h as Ss,f as As,i as ys,b as fe,c as Rs,q as ce,m as ae,k as oe,d as Ye,s as wt,r as Ze,C as Pt,A as fs,a as ws}from"./BIqNNOMq.js";import{l as It,p as ne,i as et}from"./CfI2BFUj.js";function Et(r,e,t=!1,s=!1,o=!1){var a=r,n="";ze(()=>{var l=Hr;if(n===(n=e()??"")){ee&&nt();return}if(l.nodes_start!==null&&($r(l.nodes_start,l.nodes_end),l.nodes_start=l.nodes_end=null),n!==""){if(ee){yt.data;for(var i=nt(),c=i;i!==null&&(i.nodeType!==Nr||i.data!=="");)c=i,i=Wr(i);if(i===null)throw Qr(),Mr;Rt(yt,c),a=Jr(i);return}var p=n+"";t?p=`${p}`:s&&(p=`${p}`);var y=Kr(p);if((t||s)&&(y=je(y)),Rt(je(y),y.lastChild),t||s)for(;je(y);)a.before(je(y));else a.before(y)}})}function Is(r,e,t,s,o){ee&&nt();var a=e.$$slots?.[t],n=!1;a===!0&&(a=e[t==="default"?"children":t],n=!0),a===void 0||a(r,n?()=>s:s)}function $o(r){const e={};r.children&&(e.default=!0);for(const t in r.$$slots)e[t]=!0;return e}function Es(r,e){var t=void 0,s;lr(()=>{t!==(t=e())&&(s&&(lt(s),s=null),t&&(s=ir(()=>{Ot(()=>t(r))})))})}function cr(r){var e,t,s="";if(typeof r=="string"||typeof r=="number")s+=r;else if(typeof r=="object")if(Array.isArray(r)){var o=r.length;for(e=0;e=0;){var l=n+a;(n===0||xt.includes(s[n-1]))&&(l===s.length||xt.includes(s[l]))?s=(n===0?"":s.substring(0,n))+s.substring(l+1):n=l}}return s===""?null:s}function gt(r,e=!1){var t=e?" !important;":";",s="";for(var o in r){var a=r[o];a!=null&&a!==""&&(s+=" "+o+": "+a+t)}return s}function tt(r){return r[0]!=="-"||r[1]!=="-"?r.toLowerCase():r}function Us(r,e){if(e){var t="",s,o;if(Array.isArray(e)?(s=e[0],o=e[1]):s=e,r){r=String(r).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var a=!1,n=0,l=!1,i=[];s&&i.push(...Object.keys(s).map(tt)),o&&i.push(...Object.keys(o).map(tt));var c=0,p=-1;const f=r.length;for(var y=0;y{He(r,r.__value)});e.observe(r,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),Yr(()=>{e.disconnect()})}function No(r,e,t=e){var s=!0;Xr(r,"change",o=>{var a=o?"[selected]":":checked",n;if(r.multiple)n=[].map.call(r.querySelectorAll(a),xe);else{var l=r.querySelector(a)??r.querySelector("option:not([disabled])");n=l&&xe(l)}t(n)}),Ot(()=>{var o=e();if(He(r,o,s),s&&o===void 0){var a=r.querySelector(":checked");a!==null&&(o=xe(a),t(o))}r.__value=o,s=!1}),pr(r)}function xe(r){return"__value"in r?r.__value:r.value}const we=Symbol("class"),Ie=Symbol("style"),dr=Symbol("is custom element"),hr=Symbol("is html");function Wo(r){if(ee){var e=!1,t=()=>{if(!e){if(e=!0,r.hasAttribute("value")){var s=r.value;$e(r,"value",null),r.value=s}if(r.hasAttribute("checked")){var o=r.checked;$e(r,"checked",null),r.checked=o}}};r.__on_r=t,Os(t),Ps()}}function Qo(r,e){var t=mt(r);t.value===(t.value=e??void 0)||r.value===e&&(e!==0||r.nodeName!=="PROGRESS")||(r.value=e??"")}function Ts(r,e){e?r.hasAttribute("selected")||r.setAttribute("selected",""):r.removeAttribute("selected")}function $e(r,e,t,s){var o=mt(r);ee&&(o[e]=r.getAttribute(e),e==="src"||e==="srcset"||e==="href"&&r.nodeName==="LINK")||o[e]!==(o[e]=t)&&(e==="loading"&&(r[ss]=t),t==null?r.removeAttribute(e):typeof t!="string"&&ur(r).includes(e)?r[e]=t:r.setAttribute(e,t))}function Bs(r,e,t,s,o=!1){var a=mt(r),n=a[dr],l=!a[hr];let i=ee&&n;i&&ft(!1);var c=e||{},p=r.tagName==="OPTION";for(var y in e)y in t||(t[y]=null);t.class?t.class=gs(t.class):t[we]&&(t.class=null),t[Ie]&&(t.style??=null);var I=ur(r);for(const E in t){let x=t[E];if(p&&E==="value"&&x==null){r.value=r.__value="",c[E]=x;continue}if(E==="class"){var B=r.namespaceURI==="http://www.w3.org/1999/xhtml";ke(r,B,x,s,e?.[we],t[we]),c[E]=x,c[we]=t[we];continue}if(E==="style"){Cs(r,x,e?.[Ie],t[Ie]),c[E]=x,c[Ie]=t[Ie];continue}var R=c[E];if(!(x===R&&!(x===void 0&&r.hasAttribute(E)))){c[E]=x;var f=E[0]+E[1];if(f!=="$$")if(f==="on"){const T={},D="$$"+E;let C=E.slice(2);var w=ms(C);if(is(C)&&(C=C.slice(0,-7),T.capture=!0),!w&&R){if(x!=null)continue;r.removeEventListener(C,c[D],T),c[D]=null}if(x!=null)if(w)r[`__${C}`]=x,ps([C]);else{let ie=function(te){c[E].call(this,te)};c[D]=cs(C,r,ie,T)}else w&&(r[`__${C}`]=void 0)}else if(E==="style")$e(r,E,x);else if(E==="autofocus")ds(r,!!x);else if(!n&&(E==="__value"||E==="value"&&x!=null))r.value=r.__value=x;else if(E==="selected"&&p)Ts(r,x);else{var U=E;l||(U=hs(U));var F=U==="defaultValue"||U==="defaultChecked";if(x==null&&!n&&!F)if(a[E]=null,U==="value"||U==="checked"){let T=r;const D=e===void 0;if(U==="value"){let C=T.defaultValue;T.removeAttribute(U),T.defaultValue=C,T.value=T.__value=D?C:null}else{let C=T.defaultChecked;T.removeAttribute(U),T.defaultChecked=C,T.checked=D?C:!1}}else r.removeAttribute(E);else F||I.includes(U)&&(n||typeof x!="string")?(r[U]=x,U in a&&(a[U]=us)):typeof x!="function"&&$e(r,U,x)}}}return i&&ft(!0),c}function Ds(r,e,t=[],s=[],o,a=!1){rs(t,s,n=>{var l=void 0,i={},c=r.nodeName==="SELECT",p=!1;if(lr(()=>{var I=e(...n.map(z)),B=Bs(r,l,I,o,a);p&&c&&"value"in I&&He(r,I.value);for(let f of Object.getOwnPropertySymbols(i))I[f]||lt(i[f]);for(let f of Object.getOwnPropertySymbols(I)){var R=I[f];f.description===ns&&(!l||R!==l[f])&&(i[f]&<(i[f]),i[f]=ir(()=>Es(r,()=>R))),B[f]=R}l=B}),c){var y=r;Ot(()=>{He(y,l.value,!0),pr(y)})}p=!0})}function mt(r){return r.__attributes??={[dr]:r.nodeName.includes("-"),[hr]:r.namespaceURI===as}}var vt=new Map;function ur(r){var e=vt.get(r.nodeName);if(e)return e;vt.set(r.nodeName,e=[]);for(var t,s=r,o=Element.prototype;o!==s;){t=ls(s);for(var a in t)t[a].set&&e.push(a);s=os(s)}return e}function Mo(r,e){return Gr+_r(r,e)}function Or(r,e){return function(){return r.apply(e,arguments)}}const{toString:js}=Object.prototype,{getPrototypeOf:bt}=Object,{iterator:We,toStringTag:Pr}=Symbol,Qe=(r=>e=>{const t=js.call(e);return r[t]||(r[t]=t.slice(8,-1).toLowerCase())})(Object.create(null)),J=r=>(r=r.toLowerCase(),e=>Qe(e)===r),Me=r=>e=>typeof e===r,{isArray:Ae}=Array,Se=Me("undefined");function ge(r){return r!==null&&!Se(r)&&r.constructor!==null&&!Se(r.constructor)&&$(r.constructor.isBuffer)&&r.constructor.isBuffer(r)}const mr=J("ArrayBuffer");function Fs(r){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(r):e=r&&r.buffer&&mr(r.buffer),e}const Ls=Me("string"),$=Me("function"),br=Me("number"),ve=r=>r!==null&&typeof r=="object",zs=r=>r===!0||r===!1,Ge=r=>{if(Qe(r)!=="object")return!1;const e=bt(r);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Pr in r)&&!(We in r)},ks=r=>{if(!ve(r)||ge(r))return!1;try{return Object.keys(r).length===0&&Object.getPrototypeOf(r)===Object.prototype}catch{return!1}},Gs=J("Date"),_s=J("File"),qs=J("Blob"),Hs=J("FileList"),$s=r=>ve(r)&&$(r.pipe),Ns=r=>{let e;return r&&(typeof FormData=="function"&&r instanceof FormData||$(r.append)&&((e=Qe(r))==="formdata"||e==="object"&&$(r.toString)&&r.toString()==="[object FormData]"))},Ws=J("URLSearchParams"),[Qs,Ms,Js,Ks]=["ReadableStream","Request","Response","Headers"].map(J),Xs=r=>r.trim?r.trim():r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Ue(r,e,{allOwnKeys:t=!1}={}){if(r===null||typeof r>"u")return;let s,o;if(typeof r!="object"&&(r=[r]),Ae(r))for(s=0,o=r.length;s0;)if(o=t[s],e===o.toLowerCase())return o;return null}const pe=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Sr=r=>!Se(r)&&r!==pe;function it(){const{caseless:r,skipUndefined:e}=Sr(this)&&this||{},t={},s=(o,a)=>{const n=r&&Vr(t,a)||a;Ge(t[n])&&Ge(o)?t[n]=it(t[n],o):Ge(o)?t[n]=it({},o):Ae(o)?t[n]=o.slice():(!e||!Se(o))&&(t[n]=o)};for(let o=0,a=arguments.length;o(Ue(e,(o,a)=>{t&&$(o)?r[a]=Or(o,t):r[a]=o},{allOwnKeys:s}),r),Zs=r=>(r.charCodeAt(0)===65279&&(r=r.slice(1)),r),ea=(r,e,t,s)=>{r.prototype=Object.create(e.prototype,s),r.prototype.constructor=r,Object.defineProperty(r,"super",{value:e.prototype}),t&&Object.assign(r.prototype,t)},ta=(r,e,t,s)=>{let o,a,n;const l={};if(e=e||{},r==null)return e;do{for(o=Object.getOwnPropertyNames(r),a=o.length;a-- >0;)n=o[a],(!s||s(n,r,e))&&!l[n]&&(e[n]=r[n],l[n]=!0);r=t!==!1&&bt(r)}while(r&&(!t||t(r,e))&&r!==Object.prototype);return e},ra=(r,e,t)=>{r=String(r),(t===void 0||t>r.length)&&(t=r.length),t-=e.length;const s=r.indexOf(e,t);return s!==-1&&s===t},sa=r=>{if(!r)return null;if(Ae(r))return r;let e=r.length;if(!br(e))return null;const t=new Array(e);for(;e-- >0;)t[e]=r[e];return t},aa=(r=>e=>r&&e instanceof r)(typeof Uint8Array<"u"&&bt(Uint8Array)),oa=(r,e)=>{const s=(r&&r[We]).call(r);let o;for(;(o=s.next())&&!o.done;){const a=o.value;e.call(r,a[0],a[1])}},na=(r,e)=>{let t;const s=[];for(;(t=r.exec(e))!==null;)s.push(t);return s},la=J("HTMLFormElement"),ia=r=>r.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(t,s,o){return s.toUpperCase()+o}),Ut=(({hasOwnProperty:r})=>(e,t)=>r.call(e,t))(Object.prototype),ca=J("RegExp"),Ar=(r,e)=>{const t=Object.getOwnPropertyDescriptors(r),s={};Ue(t,(o,a)=>{let n;(n=e(o,a,r))!==!1&&(s[a]=n||o)}),Object.defineProperties(r,s)},pa=r=>{Ar(r,(e,t)=>{if($(r)&&["arguments","caller","callee"].indexOf(t)!==-1)return!1;const s=r[t];if($(s)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+t+"'")})}})},da=(r,e)=>{const t={},s=o=>{o.forEach(a=>{t[a]=!0})};return Ae(r)?s(r):s(String(r).split(e)),t},ha=()=>{},ua=(r,e)=>r!=null&&Number.isFinite(r=+r)?r:e;function Oa(r){return!!(r&&$(r.append)&&r[Pr]==="FormData"&&r[We])}const Pa=r=>{const e=new Array(10),t=(s,o)=>{if(ve(s)){if(e.indexOf(s)>=0)return;if(ge(s))return s;if(!("toJSON"in s)){e[o]=s;const a=Ae(s)?[]:{};return Ue(s,(n,l)=>{const i=t(n,o+1);!Se(i)&&(a[l]=i)}),e[o]=void 0,a}}return s};return t(r,0)},ma=J("AsyncFunction"),ba=r=>r&&(ve(r)||$(r))&&$(r.then)&&$(r.catch),yr=((r,e)=>r?setImmediate:e?((t,s)=>(pe.addEventListener("message",({source:o,data:a})=>{o===pe&&a===t&&s.length&&s.shift()()},!1),o=>{s.push(o),pe.postMessage(t,"*")}))(`axios@${Math.random()}`,[]):t=>setTimeout(t))(typeof setImmediate=="function",$(pe.postMessage)),Va=typeof queueMicrotask<"u"?queueMicrotask.bind(pe):typeof process<"u"&&process.nextTick||yr,Sa=r=>r!=null&&$(r[We]),u={isArray:Ae,isArrayBuffer:mr,isBuffer:ge,isFormData:Ns,isArrayBufferView:Fs,isString:Ls,isNumber:br,isBoolean:zs,isObject:ve,isPlainObject:Ge,isEmptyObject:ks,isReadableStream:Qs,isRequest:Ms,isResponse:Js,isHeaders:Ks,isUndefined:Se,isDate:Gs,isFile:_s,isBlob:qs,isRegExp:ca,isFunction:$,isStream:$s,isURLSearchParams:Ws,isTypedArray:aa,isFileList:Hs,forEach:Ue,merge:it,extend:Ys,trim:Xs,stripBOM:Zs,inherits:ea,toFlatObject:ta,kindOf:Qe,kindOfTest:J,endsWith:ra,toArray:sa,forEachEntry:oa,matchAll:na,isHTMLForm:la,hasOwnProperty:Ut,hasOwnProp:Ut,reduceDescriptors:Ar,freezeMethods:pa,toObjectSet:da,toCamelCase:ia,noop:ha,toFiniteNumber:ua,findKey:Vr,global:pe,isContextDefined:Sr,isSpecCompliantForm:Oa,toJSONObject:Pa,isAsyncFn:ma,isThenable:ba,setImmediate:yr,asap:Va,isIterable:Sa};function v(r,e,t,s,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=r,this.name="AxiosError",e&&(this.code=e),t&&(this.config=t),s&&(this.request=s),o&&(this.response=o,this.status=o.status?o.status:null)}u.inherits(v,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:u.toJSONObject(this.config),code:this.code,status:this.status}}});const Rr=v.prototype,fr={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(r=>{fr[r]={value:r}});Object.defineProperties(v,fr);Object.defineProperty(Rr,"isAxiosError",{value:!0});v.from=(r,e,t,s,o,a)=>{const n=Object.create(Rr);u.toFlatObject(r,n,function(p){return p!==Error.prototype},c=>c!=="isAxiosError");const l=r&&r.message?r.message:"Error",i=e==null&&r?r.code:e;return v.call(n,l,i,t,s,o),r&&n.cause==null&&Object.defineProperty(n,"cause",{value:r,configurable:!0}),n.name=r&&r.name||"Error",a&&Object.assign(n,a),n};const Aa=null;function ct(r){return u.isPlainObject(r)||u.isArray(r)}function wr(r){return u.endsWith(r,"[]")?r.slice(0,-2):r}function Ct(r,e,t){return r?r.concat(e).map(function(o,a){return o=wr(o),!t&&a?"["+o+"]":o}).join(t?".":""):e}function ya(r){return u.isArray(r)&&!r.some(ct)}const Ra=u.toFlatObject(u,{},null,function(e){return/^is[A-Z]/.test(e)});function Je(r,e,t){if(!u.isObject(r))throw new TypeError("target must be an object");e=e||new FormData,t=u.toFlatObject(t,{metaTokens:!0,dots:!1,indexes:!1},!1,function(f,w){return!u.isUndefined(w[f])});const s=t.metaTokens,o=t.visitor||p,a=t.dots,n=t.indexes,i=(t.Blob||typeof Blob<"u"&&Blob)&&u.isSpecCompliantForm(e);if(!u.isFunction(o))throw new TypeError("visitor must be a function");function c(R){if(R===null)return"";if(u.isDate(R))return R.toISOString();if(u.isBoolean(R))return R.toString();if(!i&&u.isBlob(R))throw new v("Blob is not supported. Use a Buffer instead.");return u.isArrayBuffer(R)||u.isTypedArray(R)?i&&typeof Blob=="function"?new Blob([R]):Buffer.from(R):R}function p(R,f,w){let U=R;if(R&&!w&&typeof R=="object"){if(u.endsWith(f,"{}"))f=s?f:f.slice(0,-2),R=JSON.stringify(R);else if(u.isArray(R)&&ya(R)||(u.isFileList(R)||u.endsWith(f,"[]"))&&(U=u.toArray(R)))return f=wr(f),U.forEach(function(E,x){!(u.isUndefined(E)||E===null)&&e.append(n===!0?Ct([f],x,a):n===null?f:f+"[]",c(E))}),!1}return ct(R)?!0:(e.append(Ct(w,f,a),c(R)),!1)}const y=[],I=Object.assign(Ra,{defaultVisitor:p,convertValue:c,isVisitable:ct});function B(R,f){if(!u.isUndefined(R)){if(y.indexOf(R)!==-1)throw Error("Circular reference detected in "+f.join("."));y.push(R),u.forEach(R,function(U,F){(!(u.isUndefined(U)||U===null)&&o.call(e,U,u.isString(F)?F.trim():F,f,I))===!0&&B(U,f?f.concat(F):[F])}),y.pop()}}if(!u.isObject(r))throw new TypeError("data must be an object");return B(r),e}function Tt(r){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(r).replace(/[!'()~]|%20|%00/g,function(s){return e[s]})}function Vt(r,e){this._pairs=[],r&&Je(r,this,e)}const Ir=Vt.prototype;Ir.append=function(e,t){this._pairs.push([e,t])};Ir.toString=function(e){const t=e?function(s){return e.call(this,s,Tt)}:Tt;return this._pairs.map(function(o){return t(o[0])+"="+t(o[1])},"").join("&")};function fa(r){return encodeURIComponent(r).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Er(r,e,t){if(!e)return r;const s=t&&t.encode||fa;u.isFunction(t)&&(t={serialize:t});const o=t&&t.serialize;let a;if(o?a=o(e,t):a=u.isURLSearchParams(e)?e.toString():new Vt(e,t).toString(s),a){const n=r.indexOf("#");n!==-1&&(r=r.slice(0,n)),r+=(r.indexOf("?")===-1?"?":"&")+a}return r}class Bt{constructor(){this.handlers=[]}use(e,t,s){return this.handlers.push({fulfilled:e,rejected:t,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){u.forEach(this.handlers,function(s){s!==null&&e(s)})}}const xr={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},wa=typeof URLSearchParams<"u"?URLSearchParams:Vt,Ia=typeof FormData<"u"?FormData:null,Ea=typeof Blob<"u"?Blob:null,xa={isBrowser:!0,classes:{URLSearchParams:wa,FormData:Ia,Blob:Ea},protocols:["http","https","file","blob","url","data"]},St=typeof window<"u"&&typeof document<"u",pt=typeof navigator=="object"&&navigator||void 0,ga=St&&(!pt||["ReactNative","NativeScript","NS"].indexOf(pt.product)<0),va=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Ua=St&&window.location.href||"http://localhost",Ca=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:St,hasStandardBrowserEnv:ga,hasStandardBrowserWebWorkerEnv:va,navigator:pt,origin:Ua},Symbol.toStringTag,{value:"Module"})),q={...Ca,...xa};function Ta(r,e){return Je(r,new q.classes.URLSearchParams,{visitor:function(t,s,o,a){return q.isNode&&u.isBuffer(t)?(this.append(s,t.toString("base64")),!1):a.defaultVisitor.apply(this,arguments)},...e})}function Ba(r){return u.matchAll(/\w+|\[(\w*)]/g,r).map(e=>e[0]==="[]"?"":e[1]||e[0])}function Da(r){const e={},t=Object.keys(r);let s;const o=t.length;let a;for(s=0;s=t.length;return n=!n&&u.isArray(o)?o.length:n,i?(u.hasOwnProp(o,n)?o[n]=[o[n],s]:o[n]=s,!l):((!o[n]||!u.isObject(o[n]))&&(o[n]=[]),e(t,s,o[n],a)&&u.isArray(o[n])&&(o[n]=Da(o[n])),!l)}if(u.isFormData(r)&&u.isFunction(r.entries)){const t={};return u.forEachEntry(r,(s,o)=>{e(Ba(s),o,t,0)}),t}return null}function ja(r,e,t){if(u.isString(r))try{return(e||JSON.parse)(r),u.trim(r)}catch(s){if(s.name!=="SyntaxError")throw s}return(t||JSON.stringify)(r)}const Ce={transitional:xr,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const s=t.getContentType()||"",o=s.indexOf("application/json")>-1,a=u.isObject(e);if(a&&u.isHTMLForm(e)&&(e=new FormData(e)),u.isFormData(e))return o?JSON.stringify(gr(e)):e;if(u.isArrayBuffer(e)||u.isBuffer(e)||u.isStream(e)||u.isFile(e)||u.isBlob(e)||u.isReadableStream(e))return e;if(u.isArrayBufferView(e))return e.buffer;if(u.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let l;if(a){if(s.indexOf("application/x-www-form-urlencoded")>-1)return Ta(e,this.formSerializer).toString();if((l=u.isFileList(e))||s.indexOf("multipart/form-data")>-1){const i=this.env&&this.env.FormData;return Je(l?{"files[]":e}:e,i&&new i,this.formSerializer)}}return a||o?(t.setContentType("application/json",!1),ja(e)):e}],transformResponse:[function(e){const t=this.transitional||Ce.transitional,s=t&&t.forcedJSONParsing,o=this.responseType==="json";if(u.isResponse(e)||u.isReadableStream(e))return e;if(e&&u.isString(e)&&(s&&!this.responseType||o)){const n=!(t&&t.silentJSONParsing)&&o;try{return JSON.parse(e,this.parseReviver)}catch(l){if(n)throw l.name==="SyntaxError"?v.from(l,v.ERR_BAD_RESPONSE,this,null,this.response):l}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:q.classes.FormData,Blob:q.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};u.forEach(["delete","get","head","post","put","patch"],r=>{Ce.headers[r]={}});const Fa=u.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),La=r=>{const e={};let t,s,o;return r&&r.split(` +`).forEach(function(n){o=n.indexOf(":"),t=n.substring(0,o).trim().toLowerCase(),s=n.substring(o+1).trim(),!(!t||e[t]&&Fa[t])&&(t==="set-cookie"?e[t]?e[t].push(s):e[t]=[s]:e[t]=e[t]?e[t]+", "+s:s)}),e},Dt=Symbol("internals");function Ee(r){return r&&String(r).trim().toLowerCase()}function _e(r){return r===!1||r==null?r:u.isArray(r)?r.map(_e):String(r)}function za(r){const e=Object.create(null),t=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=t.exec(r);)e[s[1]]=s[2];return e}const ka=r=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(r.trim());function st(r,e,t,s,o){if(u.isFunction(s))return s.call(this,e,t);if(o&&(e=t),!!u.isString(e)){if(u.isString(s))return e.indexOf(s)!==-1;if(u.isRegExp(s))return s.test(e)}}function Ga(r){return r.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,s)=>t.toUpperCase()+s)}function _a(r,e){const t=u.toCamelCase(" "+e);["get","set","has"].forEach(s=>{Object.defineProperty(r,s+t,{value:function(o,a,n){return this[s].call(this,e,o,a,n)},configurable:!0})})}let N=class{constructor(e){e&&this.set(e)}set(e,t,s){const o=this;function a(l,i,c){const p=Ee(i);if(!p)throw new Error("header name must be a non-empty string");const y=u.findKey(o,p);(!y||o[y]===void 0||c===!0||c===void 0&&o[y]!==!1)&&(o[y||i]=_e(l))}const n=(l,i)=>u.forEach(l,(c,p)=>a(c,p,i));if(u.isPlainObject(e)||e instanceof this.constructor)n(e,t);else if(u.isString(e)&&(e=e.trim())&&!ka(e))n(La(e),t);else if(u.isObject(e)&&u.isIterable(e)){let l={},i,c;for(const p of e){if(!u.isArray(p))throw TypeError("Object iterator must return a key-value pair");l[c=p[0]]=(i=l[c])?u.isArray(i)?[...i,p[1]]:[i,p[1]]:p[1]}n(l,t)}else e!=null&&a(t,e,s);return this}get(e,t){if(e=Ee(e),e){const s=u.findKey(this,e);if(s){const o=this[s];if(!t)return o;if(t===!0)return za(o);if(u.isFunction(t))return t.call(this,o,s);if(u.isRegExp(t))return t.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Ee(e),e){const s=u.findKey(this,e);return!!(s&&this[s]!==void 0&&(!t||st(this,this[s],s,t)))}return!1}delete(e,t){const s=this;let o=!1;function a(n){if(n=Ee(n),n){const l=u.findKey(s,n);l&&(!t||st(s,s[l],l,t))&&(delete s[l],o=!0)}}return u.isArray(e)?e.forEach(a):a(e),o}clear(e){const t=Object.keys(this);let s=t.length,o=!1;for(;s--;){const a=t[s];(!e||st(this,this[a],a,e,!0))&&(delete this[a],o=!0)}return o}normalize(e){const t=this,s={};return u.forEach(this,(o,a)=>{const n=u.findKey(s,a);if(n){t[n]=_e(o),delete t[a];return}const l=e?Ga(a):String(a).trim();l!==a&&delete t[a],t[l]=_e(o),s[l]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return u.forEach(this,(s,o)=>{s!=null&&s!==!1&&(t[o]=e&&u.isArray(s)?s.join(", "):s)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join(` +`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const s=new this(e);return t.forEach(o=>s.set(o)),s}static accessor(e){const s=(this[Dt]=this[Dt]={accessors:{}}).accessors,o=this.prototype;function a(n){const l=Ee(n);s[l]||(_a(o,n),s[l]=!0)}return u.isArray(e)?e.forEach(a):a(e),this}};N.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);u.reduceDescriptors(N.prototype,({value:r},e)=>{let t=e[0].toUpperCase()+e.slice(1);return{get:()=>r,set(s){this[t]=s}}});u.freezeMethods(N);function at(r,e){const t=this||Ce,s=e||t,o=N.from(s.headers);let a=s.data;return u.forEach(r,function(l){a=l.call(t,a,o.normalize(),e?e.status:void 0)}),o.normalize(),a}function vr(r){return!!(r&&r.__CANCEL__)}function ye(r,e,t){v.call(this,r??"canceled",v.ERR_CANCELED,e,t),this.name="CanceledError"}u.inherits(ye,v,{__CANCEL__:!0});function Ur(r,e,t){const s=t.config.validateStatus;!t.status||!s||s(t.status)?r(t):e(new v("Request failed with status code "+t.status,[v.ERR_BAD_REQUEST,v.ERR_BAD_RESPONSE][Math.floor(t.status/100)-4],t.config,t.request,t))}function qa(r){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(r);return e&&e[1]||""}function Ha(r,e){r=r||10;const t=new Array(r),s=new Array(r);let o=0,a=0,n;return e=e!==void 0?e:1e3,function(i){const c=Date.now(),p=s[a];n||(n=c),t[o]=i,s[o]=c;let y=a,I=0;for(;y!==o;)I+=t[y++],y=y%r;if(o=(o+1)%r,o===a&&(a=(a+1)%r),c-n{t=p,o=null,a&&(clearTimeout(a),a=null),r(...c)};return[(...c)=>{const p=Date.now(),y=p-t;y>=s?n(c,p):(o=c,a||(a=setTimeout(()=>{a=null,n(o)},s-y)))},()=>o&&n(o)]}const Ne=(r,e,t=3)=>{let s=0;const o=Ha(50,250);return $a(a=>{const n=a.loaded,l=a.lengthComputable?a.total:void 0,i=n-s,c=o(i),p=n<=l;s=n;const y={loaded:n,total:l,progress:l?n/l:void 0,bytes:i,rate:c||void 0,estimated:c&&l&&p?(l-n)/c:void 0,event:a,lengthComputable:l!=null,[e?"download":"upload"]:!0};r(y)},t)},jt=(r,e)=>{const t=r!=null;return[s=>e[0]({lengthComputable:t,total:r,loaded:s}),e[1]]},Ft=r=>(...e)=>u.asap(()=>r(...e)),Na=q.hasStandardBrowserEnv?((r,e)=>t=>(t=new URL(t,q.origin),r.protocol===t.protocol&&r.host===t.host&&(e||r.port===t.port)))(new URL(q.origin),q.navigator&&/(msie|trident)/i.test(q.navigator.userAgent)):()=>!0,Wa=q.hasStandardBrowserEnv?{write(r,e,t,s,o,a){const n=[r+"="+encodeURIComponent(e)];u.isNumber(t)&&n.push("expires="+new Date(t).toGMTString()),u.isString(s)&&n.push("path="+s),u.isString(o)&&n.push("domain="+o),a===!0&&n.push("secure"),document.cookie=n.join("; ")},read(r){const e=document.cookie.match(new RegExp("(^|;\\s*)("+r+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(r){this.write(r,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function Qa(r){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(r)}function Ma(r,e){return e?r.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):r}function Cr(r,e,t){let s=!Qa(e);return r&&(s||t==!1)?Ma(r,e):e}const Lt=r=>r instanceof N?{...r}:r;function he(r,e){e=e||{};const t={};function s(c,p,y,I){return u.isPlainObject(c)&&u.isPlainObject(p)?u.merge.call({caseless:I},c,p):u.isPlainObject(p)?u.merge({},p):u.isArray(p)?p.slice():p}function o(c,p,y,I){if(u.isUndefined(p)){if(!u.isUndefined(c))return s(void 0,c,y,I)}else return s(c,p,y,I)}function a(c,p){if(!u.isUndefined(p))return s(void 0,p)}function n(c,p){if(u.isUndefined(p)){if(!u.isUndefined(c))return s(void 0,c)}else return s(void 0,p)}function l(c,p,y){if(y in e)return s(c,p);if(y in r)return s(void 0,c)}const i={url:a,method:a,data:a,baseURL:n,transformRequest:n,transformResponse:n,paramsSerializer:n,timeout:n,timeoutMessage:n,withCredentials:n,withXSRFToken:n,adapter:n,responseType:n,xsrfCookieName:n,xsrfHeaderName:n,onUploadProgress:n,onDownloadProgress:n,decompress:n,maxContentLength:n,maxBodyLength:n,beforeRedirect:n,transport:n,httpAgent:n,httpsAgent:n,cancelToken:n,socketPath:n,responseEncoding:n,validateStatus:l,headers:(c,p,y)=>o(Lt(c),Lt(p),y,!0)};return u.forEach(Object.keys({...r,...e}),function(p){const y=i[p]||o,I=y(r[p],e[p],p);u.isUndefined(I)&&y!==l||(t[p]=I)}),t}const Tr=r=>{const e=he({},r);let{data:t,withXSRFToken:s,xsrfHeaderName:o,xsrfCookieName:a,headers:n,auth:l}=e;if(e.headers=n=N.from(n),e.url=Er(Cr(e.baseURL,e.url,e.allowAbsoluteUrls),r.params,r.paramsSerializer),l&&n.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):""))),u.isFormData(t)){if(q.hasStandardBrowserEnv||q.hasStandardBrowserWebWorkerEnv)n.setContentType(void 0);else if(u.isFunction(t.getHeaders)){const i=t.getHeaders(),c=["content-type","content-length"];Object.entries(i).forEach(([p,y])=>{c.includes(p.toLowerCase())&&n.set(p,y)})}}if(q.hasStandardBrowserEnv&&(s&&u.isFunction(s)&&(s=s(e)),s||s!==!1&&Na(e.url))){const i=o&&a&&Wa.read(a);i&&n.set(o,i)}return e},Ja=typeof XMLHttpRequest<"u",Ka=Ja&&function(r){return new Promise(function(t,s){const o=Tr(r);let a=o.data;const n=N.from(o.headers).normalize();let{responseType:l,onUploadProgress:i,onDownloadProgress:c}=o,p,y,I,B,R;function f(){B&&B(),R&&R(),o.cancelToken&&o.cancelToken.unsubscribe(p),o.signal&&o.signal.removeEventListener("abort",p)}let w=new XMLHttpRequest;w.open(o.method.toUpperCase(),o.url,!0),w.timeout=o.timeout;function U(){if(!w)return;const E=N.from("getAllResponseHeaders"in w&&w.getAllResponseHeaders()),T={data:!l||l==="text"||l==="json"?w.responseText:w.response,status:w.status,statusText:w.statusText,headers:E,config:r,request:w};Ur(function(C){t(C),f()},function(C){s(C),f()},T),w=null}"onloadend"in w?w.onloadend=U:w.onreadystatechange=function(){!w||w.readyState!==4||w.status===0&&!(w.responseURL&&w.responseURL.indexOf("file:")===0)||setTimeout(U)},w.onabort=function(){w&&(s(new v("Request aborted",v.ECONNABORTED,r,w)),w=null)},w.onerror=function(x){const T=x&&x.message?x.message:"Network Error",D=new v(T,v.ERR_NETWORK,r,w);D.event=x||null,s(D),w=null},w.ontimeout=function(){let x=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded";const T=o.transitional||xr;o.timeoutErrorMessage&&(x=o.timeoutErrorMessage),s(new v(x,T.clarifyTimeoutError?v.ETIMEDOUT:v.ECONNABORTED,r,w)),w=null},a===void 0&&n.setContentType(null),"setRequestHeader"in w&&u.forEach(n.toJSON(),function(x,T){w.setRequestHeader(T,x)}),u.isUndefined(o.withCredentials)||(w.withCredentials=!!o.withCredentials),l&&l!=="json"&&(w.responseType=o.responseType),c&&([I,R]=Ne(c,!0),w.addEventListener("progress",I)),i&&w.upload&&([y,B]=Ne(i),w.upload.addEventListener("progress",y),w.upload.addEventListener("loadend",B)),(o.cancelToken||o.signal)&&(p=E=>{w&&(s(!E||E.type?new ye(null,r,w):E),w.abort(),w=null)},o.cancelToken&&o.cancelToken.subscribe(p),o.signal&&(o.signal.aborted?p():o.signal.addEventListener("abort",p)));const F=qa(o.url);if(F&&q.protocols.indexOf(F)===-1){s(new v("Unsupported protocol "+F+":",v.ERR_BAD_REQUEST,r));return}w.send(a||null)})},Xa=(r,e)=>{const{length:t}=r=r?r.filter(Boolean):[];if(e||t){let s=new AbortController,o;const a=function(c){if(!o){o=!0,l();const p=c instanceof Error?c:this.reason;s.abort(p instanceof v?p:new ye(p instanceof Error?p.message:p))}};let n=e&&setTimeout(()=>{n=null,a(new v(`timeout ${e} of ms exceeded`,v.ETIMEDOUT))},e);const l=()=>{r&&(n&&clearTimeout(n),n=null,r.forEach(c=>{c.unsubscribe?c.unsubscribe(a):c.removeEventListener("abort",a)}),r=null)};r.forEach(c=>c.addEventListener("abort",a));const{signal:i}=s;return i.unsubscribe=()=>u.asap(l),i}},Ya=function*(r,e){let t=r.byteLength;if(t{const o=Za(r,e);let a=0,n,l=i=>{n||(n=!0,s&&s(i))};return new ReadableStream({async pull(i){try{const{done:c,value:p}=await o.next();if(c){l(),i.close();return}let y=p.byteLength;if(t){let I=a+=y;t(I)}i.enqueue(new Uint8Array(p))}catch(c){throw l(c),c}},cancel(i){return l(i),o.return()}},{highWaterMark:2})},kt=64*1024,{isFunction:Fe}=u,to=(({Request:r,Response:e})=>({Request:r,Response:e}))(u.global),{ReadableStream:Gt,TextEncoder:_t}=u.global,qt=(r,...e)=>{try{return!!r(...e)}catch{return!1}},ro=r=>{r=u.merge.call({skipUndefined:!0},to,r);const{fetch:e,Request:t,Response:s}=r,o=e?Fe(e):typeof fetch=="function",a=Fe(t),n=Fe(s);if(!o)return!1;const l=o&&Fe(Gt),i=o&&(typeof _t=="function"?(R=>f=>R.encode(f))(new _t):async R=>new Uint8Array(await new t(R).arrayBuffer())),c=a&&l&&qt(()=>{let R=!1;const f=new t(q.origin,{body:new Gt,method:"POST",get duplex(){return R=!0,"half"}}).headers.has("Content-Type");return R&&!f}),p=n&&l&&qt(()=>u.isReadableStream(new s("").body)),y={stream:p&&(R=>R.body)};o&&["text","arrayBuffer","blob","formData","stream"].forEach(R=>{!y[R]&&(y[R]=(f,w)=>{let U=f&&f[R];if(U)return U.call(f);throw new v(`Response type '${R}' is not supported`,v.ERR_NOT_SUPPORT,w)})});const I=async R=>{if(R==null)return 0;if(u.isBlob(R))return R.size;if(u.isSpecCompliantForm(R))return(await new t(q.origin,{method:"POST",body:R}).arrayBuffer()).byteLength;if(u.isArrayBufferView(R)||u.isArrayBuffer(R))return R.byteLength;if(u.isURLSearchParams(R)&&(R=R+""),u.isString(R))return(await i(R)).byteLength},B=async(R,f)=>{const w=u.toFiniteNumber(R.getContentLength());return w??I(f)};return async R=>{let{url:f,method:w,data:U,signal:F,cancelToken:E,timeout:x,onDownloadProgress:T,onUploadProgress:D,responseType:C,headers:ie,withCredentials:te="same-origin",fetchOptions:Re}=Tr(R),Te=e||fetch;C=C?(C+"").toLowerCase():"text";let ue=Xa([F,E&&E.toAbortSignal()],x),k=null;const L=ue&&ue.unsubscribe&&(()=>{ue.unsubscribe()});let Oe;try{if(D&&c&&w!=="get"&&w!=="head"&&(Oe=await B(ie,U))!==0){let re=new t(f,{method:"POST",body:U,duplex:"half"}),me;if(u.isFormData(U)&&(me=re.headers.get("content-type"))&&ie.setContentType(me),re.body){const[Xe,De]=jt(Oe,Ne(Ft(D)));U=zt(re.body,kt,Xe,De)}}u.isString(te)||(te=te?"include":"omit");const M=a&&"credentials"in t.prototype,Pe={...Re,signal:ue,method:w.toUpperCase(),headers:ie.normalize().toJSON(),body:U,duplex:"half",credentials:M?te:void 0};k=a&&new t(f,Pe);let W=await(a?Te(k,Re):Te(f,Pe));const Be=p&&(C==="stream"||C==="response");if(p&&(T||Be&&L)){const re={};["status","statusText","headers"].forEach(At=>{re[At]=W[At]});const me=u.toFiniteNumber(W.headers.get("content-length")),[Xe,De]=T&&jt(me,Ne(Ft(T),!0))||[];W=new s(zt(W.body,kt,Xe,()=>{De&&De(),L&&L()}),re)}C=C||"text";let kr=await y[u.findKey(y,C)||"text"](W,R);return!Be&&L&&L(),await new Promise((re,me)=>{Ur(re,me,{data:kr,headers:N.from(W.headers),status:W.status,statusText:W.statusText,config:R,request:k})})}catch(M){throw L&&L(),M&&M.name==="TypeError"&&/Load failed|fetch/i.test(M.message)?Object.assign(new v("Network Error",v.ERR_NETWORK,R,k),{cause:M.cause||M}):v.from(M,M&&M.code,R,k)}}},so=new Map,Br=r=>{let e=r?r.env:{};const{fetch:t,Request:s,Response:o}=e,a=[s,o,t];let n=a.length,l=n,i,c,p=so;for(;l--;)i=a[l],c=p.get(i),c===void 0&&p.set(i,c=l?new Map:ro(e)),p=c;return c};Br();const dt={http:Aa,xhr:Ka,fetch:{get:Br}};u.forEach(dt,(r,e)=>{if(r){try{Object.defineProperty(r,"name",{value:e})}catch{}Object.defineProperty(r,"adapterName",{value:e})}});const Ht=r=>`- ${r}`,ao=r=>u.isFunction(r)||r===null||r===!1,Dr={getAdapter:(r,e)=>{r=u.isArray(r)?r:[r];const{length:t}=r;let s,o;const a={};for(let n=0;n`adapter ${i} `+(c===!1?"is not supported by the environment":"is not available in the build"));let l=t?n.length>1?`since : `+n.map(Ht).join(` -`):" "+Ht(n[0]):"as no adapter specified";throw new v("There is no suitable adapter to dispatch the request "+l,"ERR_NOT_SUPPORT")}return o},adapters:dt};function ot(r){if(r.cancelToken&&r.cancelToken.throwIfRequested(),r.signal&&r.signal.aborted)throw new Ae(null,r)}function $t(r){return ot(r),r.headers=N.from(r.headers),r.data=at.call(r,r.transformRequest),["post","put","patch"].indexOf(r.method)!==-1&&r.headers.setContentType("application/x-www-form-urlencoded",!1),Dr.getAdapter(r.adapter||Ce.adapter,r)(r).then(function(s){return ot(r),s.data=at.call(r,r.transformResponse,s),s.headers=N.from(s.headers),s},function(s){return vr(s)||(ot(r),s&&s.response&&(s.response.data=at.call(r,r.transformResponse,s.response),s.response.headers=N.from(s.response.headers))),Promise.reject(s)})}const jr="1.12.2",Ke={};["object","boolean","number","function","string","symbol"].forEach((r,e)=>{Ke[r]=function(s){return typeof s===r||"a"+(e<1?"n ":" ")+r}});const Nt={};Ke.transitional=function(e,t,s){function o(a,n){return"[Axios v"+jr+"] Transitional option '"+a+"'"+n+(s?". "+s:"")}return(a,n,l)=>{if(e===!1)throw new v(o(n," has been removed"+(t?" in "+t:"")),v.ERR_DEPRECATED);return t&&!Nt[n]&&(Nt[n]=!0,console.warn(o(n," has been deprecated since v"+t+" and will be removed in the near future"))),e?e(a,n,l):!0}};Ke.spelling=function(e){return(t,s)=>(console.warn(`${s} is likely a misspelling of ${e}`),!0)};function oo(r,e,t){if(typeof r!="object")throw new v("options must be an object",v.ERR_BAD_OPTION_VALUE);const s=Object.keys(r);let o=s.length;for(;o-- >0;){const a=s[o],n=e[a];if(n){const l=r[a],i=l===void 0||n(l,a,r);if(i!==!0)throw new v("option "+a+" must be "+i,v.ERR_BAD_OPTION_VALUE);continue}if(t!==!0)throw new v("Unknown option "+a,v.ERR_BAD_OPTION)}}const qe={assertOptions:oo,validators:Ke},K=qe.validators;let de=class{constructor(e){this.defaults=e||{},this.interceptors={request:new Bt,response:new Bt}}async request(e,t){try{return await this._request(e,t)}catch(s){if(s instanceof Error){let o={};Error.captureStackTrace?Error.captureStackTrace(o):o=new Error;const a=o.stack?o.stack.replace(/^.+\n/,""):"";try{s.stack?a&&!String(s.stack).endsWith(a.replace(/^.+\n.+\n/,""))&&(s.stack+=` -`+a):s.stack=a}catch{}}throw s}}_request(e,t){typeof e=="string"?(t=t||{},t.url=e):t=e||{},t=he(this.defaults,t);const{transitional:s,paramsSerializer:o,headers:a}=t;s!==void 0&&qe.assertOptions(s,{silentJSONParsing:K.transitional(K.boolean),forcedJSONParsing:K.transitional(K.boolean),clarifyTimeoutError:K.transitional(K.boolean)},!1),o!=null&&(u.isFunction(o)?t.paramsSerializer={serialize:o}:qe.assertOptions(o,{encode:K.function,serialize:K.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),qe.assertOptions(t,{baseUrl:K.spelling("baseURL"),withXsrfToken:K.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let n=a&&u.merge(a.common,a[t.method]);a&&u.forEach(["delete","get","head","post","put","patch","common"],R=>{delete a[R]}),t.headers=N.concat(n,a);const l=[];let i=!0;this.interceptors.request.forEach(function(f){typeof f.runWhen=="function"&&f.runWhen(t)===!1||(i=i&&f.synchronous,l.unshift(f.fulfilled,f.rejected))});const c=[];this.interceptors.response.forEach(function(f){c.push(f.fulfilled,f.rejected)});let p,y=0,I;if(!i){const R=[$t.bind(this),void 0];for(R.unshift(...l),R.push(...c),I=R.length,p=Promise.resolve(t);y{if(!s._listeners)return;let a=s._listeners.length;for(;a-- >0;)s._listeners[a](o);s._listeners=null}),this.promise.then=o=>{let a;const n=new Promise(l=>{s.subscribe(l),a=l}).then(o);return n.cancel=function(){s.unsubscribe(a)},n},e(function(a,n,l){s.reason||(s.reason=new Ae(a,n,l),t(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=s=>{e.abort(s)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new Fr(function(o){e=o}),cancel:e}}};function lo(r){return function(t){return r.apply(null,t)}}function io(r){return u.isObject(r)&&r.isAxiosError===!0}const ht={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(ht).forEach(([r,e])=>{ht[e]=r});function Lr(r){const e=new de(r),t=Or(de.prototype.request,e);return u.extend(t,de.prototype,e,{allOwnKeys:!0}),u.extend(t,e,null,{allOwnKeys:!0}),t.create=function(o){return Lr(he(r,o))},t}const h=Lr(Ce);h.Axios=de;h.CanceledError=Ae;h.CancelToken=no;h.isCancel=vr;h.VERSION=jr;h.toFormData=Je;h.AxiosError=v;h.Cancel=h.CanceledError;h.all=function(e){return Promise.all(e)};h.spread=lo;h.isAxiosError=io;h.mergeConfig=he;h.AxiosHeaders=N;h.formToJSON=r=>gr(u.isHTMLForm(r)?new FormData(r):r);h.getAdapter=Dr.getAdapter;h.HttpStatusCode=ht;h.default=h;const{Axios:Xo,AxiosError:Yo,CanceledError:Zo,isCancel:en,CancelToken:tn,VERSION:rn,all:sn,Cancel:an,isAxiosError:on,spread:nn,toFormData:ln,AxiosHeaders:cn,HttpStatusCode:pn,formToJSON:dn,getAdapter:hn,mergeConfig:un}=h,O="/api/v1".replace(/\/+$/,"");class H{constructor(e,t=O,s=h){this.basePath=t,this.axios=s,e&&(this.configuration=e,this.basePath=e.basePath??t)}configuration}class co extends Error{constructor(e,t){super(t),this.field=e,this.name="RequiredError"}}const P={},m="https://example.com",d=function(r,e,t){if(t==null)throw new co(e,`Required parameter ${e} was null or undefined when calling ${r}.`)},b=async function(r,e,t){if(t&&t.apiKey){const s=typeof t.apiKey=="function"?await t.apiKey(e):await t.apiKey;r[e]=s}};function ut(r,e,t=""){e!=null&&(typeof e=="object"?Array.isArray(e)?e.forEach(s=>ut(r,s,t)):Object.keys(e).forEach(s=>ut(r,e[s],`${t}${t!==""?".":""}${s}`)):r.has(t)?r.append(t,e):r.set(t,e))}const V=function(r,...e){const t=new URLSearchParams(r.search);ut(t,e),r.search=t.toString()},g=function(r,e,t){const s=typeof r!="string";return(s&&t&&t.isJsonMime?t.isJsonMime(e.headers["Content-Type"]):s)?JSON.stringify(r!==void 0?r:{}):r||""},S=function(r){return r.pathname+r.search+r.hash},A=function(r,e,t,s){return(o=e,a=t)=>{const n={...r.options,url:(o.defaults.baseURL?"":s?.basePath??a)+r.url};return o.request(n)}},po=function(r){return{updateController:async(e,t={})=>{d("updateController","body",e);const s="/controller",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"PUT",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}}}},ho=function(r){const e=po(r);return{async updateController(t,s){const o=await e.updateController(t,s),a=r?.serverIndex??0,n=P["ControllerApi.updateController"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)}}};class Wt extends H{updateController(e,t){return ho(this.configuration).updateController(e,t).then(s=>s(this.axios,this.basePath))}}const uo=function(r){return{controllerInfo:async(e={})=>{const t="/controller-info",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}}}},Oo=function(r){const e=uo(r);return{async controllerInfo(t){const s=await e.controllerInfo(t),o=r?.serverIndex??0,a=P["ControllerInfoApi.controllerInfo"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)}}};class Qt extends H{controllerInfo(e){return Oo(this.configuration).controllerInfo(e).then(t=>t(this.axios,this.basePath))}}const Po=function(r){return{createCredentials:async(e,t={})=>{d("createCredentials","body",e);const s="/github/credentials",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},createGiteaCredentials:async(e,t={})=>{d("createGiteaCredentials","body",e);const s="/gitea/credentials",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},deleteCredentials:async(e,t={})=>{d("deleteCredentials","id",e);const s="/github/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteGiteaCredentials:async(e,t={})=>{d("deleteGiteaCredentials","id",e);const s="/gitea/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getCredentials:async(e,t={})=>{d("getCredentials","id",e);const s="/github/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getGiteaCredentials:async(e,t={})=>{d("getGiteaCredentials","id",e);const s="/gitea/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listCredentials:async(e={})=>{const t="/github/credentials",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listGiteaCredentials:async(e={})=>{const t="/gitea/credentials",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},updateCredentials:async(e,t,s={})=>{d("updateCredentials","id",e),d("updateCredentials","body",t);const o="/github/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateGiteaCredentials:async(e,t,s={})=>{d("updateGiteaCredentials","id",e),d("updateGiteaCredentials","body",t);const o="/gitea/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}}}},X=function(r){const e=Po(r);return{async createCredentials(t,s){const o=await e.createCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.createCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async createGiteaCredentials(t,s){const o=await e.createGiteaCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.createGiteaCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteCredentials(t,s){const o=await e.deleteCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.deleteCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteGiteaCredentials(t,s){const o=await e.deleteGiteaCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.deleteGiteaCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getCredentials(t,s){const o=await e.getCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.getCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getGiteaCredentials(t,s){const o=await e.getGiteaCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.getGiteaCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listCredentials(t){const s=await e.listCredentials(t),o=r?.serverIndex??0,a=P["CredentialsApi.listCredentials"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async listGiteaCredentials(t){const s=await e.listGiteaCredentials(t),o=r?.serverIndex??0,a=P["CredentialsApi.listGiteaCredentials"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async updateCredentials(t,s,o){const a=await e.updateCredentials(t,s,o),n=r?.serverIndex??0,l=P["CredentialsApi.updateCredentials"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateGiteaCredentials(t,s,o){const a=await e.updateGiteaCredentials(t,s,o),n=r?.serverIndex??0,l=P["CredentialsApi.updateGiteaCredentials"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)}}};class Mt extends H{createCredentials(e,t){return X(this.configuration).createCredentials(e,t).then(s=>s(this.axios,this.basePath))}createGiteaCredentials(e,t){return X(this.configuration).createGiteaCredentials(e,t).then(s=>s(this.axios,this.basePath))}deleteCredentials(e,t){return X(this.configuration).deleteCredentials(e,t).then(s=>s(this.axios,this.basePath))}deleteGiteaCredentials(e,t){return X(this.configuration).deleteGiteaCredentials(e,t).then(s=>s(this.axios,this.basePath))}getCredentials(e,t){return X(this.configuration).getCredentials(e,t).then(s=>s(this.axios,this.basePath))}getGiteaCredentials(e,t){return X(this.configuration).getGiteaCredentials(e,t).then(s=>s(this.axios,this.basePath))}listCredentials(e){return X(this.configuration).listCredentials(e).then(t=>t(this.axios,this.basePath))}listGiteaCredentials(e){return X(this.configuration).listGiteaCredentials(e).then(t=>t(this.axios,this.basePath))}updateCredentials(e,t,s){return X(this.configuration).updateCredentials(e,t,s).then(o=>o(this.axios,this.basePath))}updateGiteaCredentials(e,t,s){return X(this.configuration).updateGiteaCredentials(e,t,s).then(o=>o(this.axios,this.basePath))}}const mo=function(r){return{createGiteaEndpoint:async(e,t={})=>{d("createGiteaEndpoint","body",e);const s="/gitea/endpoints",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},createGithubEndpoint:async(e,t={})=>{d("createGithubEndpoint","body",e);const s="/github/endpoints",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},deleteGiteaEndpoint:async(e,t={})=>{d("deleteGiteaEndpoint","name",e);const s="/gitea/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteGithubEndpoint:async(e,t={})=>{d("deleteGithubEndpoint","name",e);const s="/github/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getGiteaEndpoint:async(e,t={})=>{d("getGiteaEndpoint","name",e);const s="/gitea/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getGithubEndpoint:async(e,t={})=>{d("getGithubEndpoint","name",e);const s="/github/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listGiteaEndpoints:async(e={})=>{const t="/gitea/endpoints",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listGithubEndpoints:async(e={})=>{const t="/github/endpoints",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},updateGiteaEndpoint:async(e,t,s={})=>{d("updateGiteaEndpoint","name",e),d("updateGiteaEndpoint","body",t);const o="/gitea/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateGithubEndpoint:async(e,t,s={})=>{d("updateGithubEndpoint","name",e),d("updateGithubEndpoint","body",t);const o="/github/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}}}},Y=function(r){const e=mo(r);return{async createGiteaEndpoint(t,s){const o=await e.createGiteaEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.createGiteaEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async createGithubEndpoint(t,s){const o=await e.createGithubEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.createGithubEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteGiteaEndpoint(t,s){const o=await e.deleteGiteaEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.deleteGiteaEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteGithubEndpoint(t,s){const o=await e.deleteGithubEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.deleteGithubEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getGiteaEndpoint(t,s){const o=await e.getGiteaEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.getGiteaEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getGithubEndpoint(t,s){const o=await e.getGithubEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.getGithubEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listGiteaEndpoints(t){const s=await e.listGiteaEndpoints(t),o=r?.serverIndex??0,a=P["EndpointsApi.listGiteaEndpoints"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async listGithubEndpoints(t){const s=await e.listGithubEndpoints(t),o=r?.serverIndex??0,a=P["EndpointsApi.listGithubEndpoints"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async updateGiteaEndpoint(t,s,o){const a=await e.updateGiteaEndpoint(t,s,o),n=r?.serverIndex??0,l=P["EndpointsApi.updateGiteaEndpoint"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateGithubEndpoint(t,s,o){const a=await e.updateGithubEndpoint(t,s,o),n=r?.serverIndex??0,l=P["EndpointsApi.updateGithubEndpoint"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)}}};class Jt extends H{createGiteaEndpoint(e,t){return Y(this.configuration).createGiteaEndpoint(e,t).then(s=>s(this.axios,this.basePath))}createGithubEndpoint(e,t){return Y(this.configuration).createGithubEndpoint(e,t).then(s=>s(this.axios,this.basePath))}deleteGiteaEndpoint(e,t){return Y(this.configuration).deleteGiteaEndpoint(e,t).then(s=>s(this.axios,this.basePath))}deleteGithubEndpoint(e,t){return Y(this.configuration).deleteGithubEndpoint(e,t).then(s=>s(this.axios,this.basePath))}getGiteaEndpoint(e,t){return Y(this.configuration).getGiteaEndpoint(e,t).then(s=>s(this.axios,this.basePath))}getGithubEndpoint(e,t){return Y(this.configuration).getGithubEndpoint(e,t).then(s=>s(this.axios,this.basePath))}listGiteaEndpoints(e){return Y(this.configuration).listGiteaEndpoints(e).then(t=>t(this.axios,this.basePath))}listGithubEndpoints(e){return Y(this.configuration).listGithubEndpoints(e).then(t=>t(this.axios,this.basePath))}updateGiteaEndpoint(e,t,s){return Y(this.configuration).updateGiteaEndpoint(e,t,s).then(o=>o(this.axios,this.basePath))}updateGithubEndpoint(e,t,s){return Y(this.configuration).updateGithubEndpoint(e,t,s).then(o=>o(this.axios,this.basePath))}}const bo=function(r){return{createEnterprise:async(e,t={})=>{d("createEnterprise","body",e);const s="/enterprises",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},createEnterprisePool:async(e,t,s={})=>{d("createEnterprisePool","enterpriseID",e),d("createEnterprisePool","body",t);const o="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createEnterpriseScaleSet:async(e,t,s={})=>{d("createEnterpriseScaleSet","enterpriseID",e),d("createEnterpriseScaleSet","body",t);const o="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},deleteEnterprise:async(e,t={})=>{d("deleteEnterprise","enterpriseID",e);const s="/enterprises/{enterpriseID}".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteEnterprisePool:async(e,t,s={})=>{d("deleteEnterprisePool","enterpriseID",e),d("deleteEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getEnterprise:async(e,t={})=>{d("getEnterprise","enterpriseID",e);const s="/enterprises/{enterpriseID}".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getEnterprisePool:async(e,t,s={})=>{d("getEnterprisePool","enterpriseID",e),d("getEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},listEnterpriseInstances:async(e,t={})=>{d("listEnterpriseInstances","enterpriseID",e);const s="/enterprises/{enterpriseID}/instances".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterprisePools:async(e,t={})=>{d("listEnterprisePools","enterpriseID",e);const s="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterpriseScaleSets:async(e,t={})=>{d("listEnterpriseScaleSets","enterpriseID",e);const s="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterprises:async(e,t,s={})=>{const o="/enterprises",a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),e!==void 0&&(c.name=e),t!==void 0&&(c.endpoint=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},updateEnterprise:async(e,t,s={})=>{d("updateEnterprise","enterpriseID",e),d("updateEnterprise","body",t);const o="/enterprises/{enterpriseID}".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateEnterprisePool:async(e,t,s,o={})=>{d("updateEnterprisePool","enterpriseID",e),d("updateEnterprisePool","poolID",t),d("updateEnterprisePool","body",s);const a="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}}}},Q=function(r){const e=bo(r);return{async createEnterprise(t,s){const o=await e.createEnterprise(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.createEnterprise"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async createEnterprisePool(t,s,o){const a=await e.createEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.createEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createEnterpriseScaleSet(t,s,o){const a=await e.createEnterpriseScaleSet(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.createEnterpriseScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteEnterprise(t,s){const o=await e.deleteEnterprise(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.deleteEnterprise"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteEnterprisePool(t,s,o){const a=await e.deleteEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.deleteEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getEnterprise(t,s){const o=await e.getEnterprise(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.getEnterprise"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getEnterprisePool(t,s,o){const a=await e.getEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.getEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async listEnterpriseInstances(t,s){const o=await e.listEnterpriseInstances(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.listEnterpriseInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listEnterprisePools(t,s){const o=await e.listEnterprisePools(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.listEnterprisePools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listEnterpriseScaleSets(t,s){const o=await e.listEnterpriseScaleSets(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.listEnterpriseScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listEnterprises(t,s,o){const a=await e.listEnterprises(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.listEnterprises"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateEnterprise(t,s,o){const a=await e.updateEnterprise(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.updateEnterprise"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateEnterprisePool(t,s,o,a){const n=await e.updateEnterprisePool(t,s,o,a),l=r?.serverIndex??0,i=P["EnterprisesApi.updateEnterprisePool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)}}};class Kt extends H{createEnterprise(e,t){return Q(this.configuration).createEnterprise(e,t).then(s=>s(this.axios,this.basePath))}createEnterprisePool(e,t,s){return Q(this.configuration).createEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}createEnterpriseScaleSet(e,t,s){return Q(this.configuration).createEnterpriseScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteEnterprise(e,t){return Q(this.configuration).deleteEnterprise(e,t).then(s=>s(this.axios,this.basePath))}deleteEnterprisePool(e,t,s){return Q(this.configuration).deleteEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}getEnterprise(e,t){return Q(this.configuration).getEnterprise(e,t).then(s=>s(this.axios,this.basePath))}getEnterprisePool(e,t,s){return Q(this.configuration).getEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}listEnterpriseInstances(e,t){return Q(this.configuration).listEnterpriseInstances(e,t).then(s=>s(this.axios,this.basePath))}listEnterprisePools(e,t){return Q(this.configuration).listEnterprisePools(e,t).then(s=>s(this.axios,this.basePath))}listEnterpriseScaleSets(e,t){return Q(this.configuration).listEnterpriseScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listEnterprises(e,t,s){return Q(this.configuration).listEnterprises(e,t,s).then(o=>o(this.axios,this.basePath))}updateEnterprise(e,t,s){return Q(this.configuration).updateEnterprise(e,t,s).then(o=>o(this.axios,this.basePath))}updateEnterprisePool(e,t,s,o){return Q(this.configuration).updateEnterprisePool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const Vo=function(r){return{firstRun:async(e,t={})=>{d("firstRun","body",e);const s="/first-run",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}}}},So=function(r){const e=Vo(r);return{async firstRun(t,s){const o=await e.firstRun(t,s),a=r?.serverIndex??0,n=P["FirstRunApi.firstRun"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)}}};class Xt extends H{firstRun(e,t){return So(this.configuration).firstRun(e,t).then(s=>s(this.axios,this.basePath))}}const Ao=function(r){return{getOrgWebhookInfo:async(e,t={})=>{d("getOrgWebhookInfo","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getRepoWebhookInfo:async(e,t={})=>{d("getRepoWebhookInfo","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},installOrgWebhook:async(e,t,s={})=>{d("installOrgWebhook","orgID",e),d("installOrgWebhook","body",t);const o="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},installRepoWebhook:async(e,t,s={})=>{d("installRepoWebhook","repoID",e),d("installRepoWebhook","body",t);const o="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},uninstallOrgWebhook:async(e,t={})=>{d("uninstallOrgWebhook","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},uninstallRepoWebhook:async(e,t={})=>{d("uninstallRepoWebhook","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}}}},be=function(r){const e=Ao(r);return{async getOrgWebhookInfo(t,s){const o=await e.getOrgWebhookInfo(t,s),a=r?.serverIndex??0,n=P["HooksApi.getOrgWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getRepoWebhookInfo(t,s){const o=await e.getRepoWebhookInfo(t,s),a=r?.serverIndex??0,n=P["HooksApi.getRepoWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async installOrgWebhook(t,s,o){const a=await e.installOrgWebhook(t,s,o),n=r?.serverIndex??0,l=P["HooksApi.installOrgWebhook"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async installRepoWebhook(t,s,o){const a=await e.installRepoWebhook(t,s,o),n=r?.serverIndex??0,l=P["HooksApi.installRepoWebhook"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async uninstallOrgWebhook(t,s){const o=await e.uninstallOrgWebhook(t,s),a=r?.serverIndex??0,n=P["HooksApi.uninstallOrgWebhook"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async uninstallRepoWebhook(t,s){const o=await e.uninstallRepoWebhook(t,s),a=r?.serverIndex??0,n=P["HooksApi.uninstallRepoWebhook"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)}}};class Yt extends H{getOrgWebhookInfo(e,t){return be(this.configuration).getOrgWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}getRepoWebhookInfo(e,t){return be(this.configuration).getRepoWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}installOrgWebhook(e,t,s){return be(this.configuration).installOrgWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}installRepoWebhook(e,t,s){return be(this.configuration).installRepoWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}uninstallOrgWebhook(e,t){return be(this.configuration).uninstallOrgWebhook(e,t).then(s=>s(this.axios,this.basePath))}uninstallRepoWebhook(e,t){return be(this.configuration).uninstallRepoWebhook(e,t).then(s=>s(this.axios,this.basePath))}}const yo=function(r){return{deleteInstance:async(e,t,s,o={})=>{d("deleteInstance","instanceName",e);const a="/instances/{instanceName}".replace("{instanceName}",encodeURIComponent(String(e))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"DELETE",...l,...o},c={},p={};await b(c,"Authorization",r),t!==void 0&&(p.forceRemove=t),s!==void 0&&(p.bypassGHUnauthorized=s),V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},{url:S(n),options:i}},getInstance:async(e,t={})=>{d("getInstance","instanceName",e);const s="/instances/{instanceName}".replace("{instanceName}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterpriseInstances:async(e,t={})=>{d("listEnterpriseInstances","enterpriseID",e);const s="/enterprises/{enterpriseID}/instances".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listInstances:async(e={})=>{const t="/instances",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listOrgInstances:async(e,t={})=>{d("listOrgInstances","orgID",e);const s="/organizations/{orgID}/instances".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listPoolInstances:async(e,t={})=>{d("listPoolInstances","poolID",e);const s="/pools/{poolID}/instances".replace("{poolID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoInstances:async(e,t={})=>{d("listRepoInstances","repoID",e);const s="/repositories/{repoID}/instances".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listScaleSetInstances:async(e,t={})=>{d("listScaleSetInstances","scalesetID",e);const s="/scalesets/{scalesetID}/instances".replace("{scalesetID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}}}},le=function(r){const e=yo(r);return{async deleteInstance(t,s,o,a){const n=await e.deleteInstance(t,s,o,a),l=r?.serverIndex??0,i=P["InstancesApi.deleteInstance"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async getInstance(t,s){const o=await e.getInstance(t,s),a=r?.serverIndex??0,n=P["InstancesApi.getInstance"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listEnterpriseInstances(t,s){const o=await e.listEnterpriseInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listEnterpriseInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listInstances(t){const s=await e.listInstances(t),o=r?.serverIndex??0,a=P["InstancesApi.listInstances"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async listOrgInstances(t,s){const o=await e.listOrgInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listOrgInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listPoolInstances(t,s){const o=await e.listPoolInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listPoolInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listRepoInstances(t,s){const o=await e.listRepoInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listRepoInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listScaleSetInstances(t,s){const o=await e.listScaleSetInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listScaleSetInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)}}};class Zt extends H{deleteInstance(e,t,s,o){return le(this.configuration).deleteInstance(e,t,s,o).then(a=>a(this.axios,this.basePath))}getInstance(e,t){return le(this.configuration).getInstance(e,t).then(s=>s(this.axios,this.basePath))}listEnterpriseInstances(e,t){return le(this.configuration).listEnterpriseInstances(e,t).then(s=>s(this.axios,this.basePath))}listInstances(e){return le(this.configuration).listInstances(e).then(t=>t(this.axios,this.basePath))}listOrgInstances(e,t){return le(this.configuration).listOrgInstances(e,t).then(s=>s(this.axios,this.basePath))}listPoolInstances(e,t){return le(this.configuration).listPoolInstances(e,t).then(s=>s(this.axios,this.basePath))}listRepoInstances(e,t){return le(this.configuration).listRepoInstances(e,t).then(s=>s(this.axios,this.basePath))}listScaleSetInstances(e,t){return le(this.configuration).listScaleSetInstances(e,t).then(s=>s(this.axios,this.basePath))}}const Ro=function(r){return{login:async(e,t={})=>{d("login","body",e);const s="/auth/login",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}}}},fo=function(r){const e=Ro(r);return{async login(t,s){const o=await e.login(t,s),a=r?.serverIndex??0,n=P["LoginApi.login"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)}}};class er extends H{login(e,t){return fo(this.configuration).login(e,t).then(s=>s(this.axios,this.basePath))}}const wo=function(r){return{deleteFileObject:async(e,t={})=>{d("deleteFileObject","objectID",e);const s="/objects/{objectID}".replace("{objectID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getFileObject:async(e,t={})=>{d("getFileObject","objectID",e);const s="/objects/{objectID}".replace("{objectID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listFileObjects:async(e,t,s,o={})=>{const a="/objects",n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"GET",...l,...o},c={},p={};await b(c,"Authorization",r),e!==void 0&&(p.tags=e),t!==void 0&&(p.page=t),s!==void 0&&(p.pageSize=s),V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},{url:S(n),options:i}},updateFileObject:async(e,t,s={})=>{d("updateFileObject","objectID",e),d("updateFileObject","body",t);const o="/objects/{objectID}".replace("{objectID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}}}},Le=function(r){const e=wo(r);return{async deleteFileObject(t,s){const o=await e.deleteFileObject(t,s),a=r?.serverIndex??0,n=P["ObjectsApi.deleteFileObject"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getFileObject(t,s){const o=await e.getFileObject(t,s),a=r?.serverIndex??0,n=P["ObjectsApi.getFileObject"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listFileObjects(t,s,o,a){const n=await e.listFileObjects(t,s,o,a),l=r?.serverIndex??0,i=P["ObjectsApi.listFileObjects"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async updateFileObject(t,s,o){const a=await e.updateFileObject(t,s,o),n=r?.serverIndex??0,l=P["ObjectsApi.updateFileObject"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)}}};class Io extends H{deleteFileObject(e,t){return Le(this.configuration).deleteFileObject(e,t).then(s=>s(this.axios,this.basePath))}getFileObject(e,t){return Le(this.configuration).getFileObject(e,t).then(s=>s(this.axios,this.basePath))}listFileObjects(e,t,s,o){return Le(this.configuration).listFileObjects(e,t,s,o).then(a=>a(this.axios,this.basePath))}updateFileObject(e,t,s){return Le(this.configuration).updateFileObject(e,t,s).then(o=>o(this.axios,this.basePath))}}const Eo=function(r){return{createOrg:async(e,t={})=>{d("createOrg","body",e);const s="/organizations",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},createOrgPool:async(e,t,s={})=>{d("createOrgPool","orgID",e),d("createOrgPool","body",t);const o="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createOrgScaleSet:async(e,t,s={})=>{d("createOrgScaleSet","orgID",e),d("createOrgScaleSet","body",t);const o="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},deleteOrg:async(e,t,s={})=>{d("deleteOrg","orgID",e);const o="/organizations/{orgID}".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),t!==void 0&&(c.keepWebhook=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deleteOrgPool:async(e,t,s={})=>{d("deleteOrgPool","orgID",e),d("deleteOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getOrg:async(e,t={})=>{d("getOrg","orgID",e);const s="/organizations/{orgID}".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getOrgPool:async(e,t,s={})=>{d("getOrgPool","orgID",e),d("getOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getOrgWebhookInfo:async(e,t={})=>{d("getOrgWebhookInfo","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},installOrgWebhook:async(e,t,s={})=>{d("installOrgWebhook","orgID",e),d("installOrgWebhook","body",t);const o="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},listOrgInstances:async(e,t={})=>{d("listOrgInstances","orgID",e);const s="/organizations/{orgID}/instances".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgPools:async(e,t={})=>{d("listOrgPools","orgID",e);const s="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgScaleSets:async(e,t={})=>{d("listOrgScaleSets","orgID",e);const s="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgs:async(e,t,s={})=>{const o="/organizations",a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),e!==void 0&&(c.name=e),t!==void 0&&(c.endpoint=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},uninstallOrgWebhook:async(e,t={})=>{d("uninstallOrgWebhook","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},updateOrg:async(e,t,s={})=>{d("updateOrg","orgID",e),d("updateOrg","body",t);const o="/organizations/{orgID}".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateOrgPool:async(e,t,s,o={})=>{d("updateOrgPool","orgID",e),d("updateOrgPool","poolID",t),d("updateOrgPool","body",s);const a="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}}}},G=function(r){const e=Eo(r);return{async createOrg(t,s){const o=await e.createOrg(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.createOrg"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async createOrgPool(t,s,o){const a=await e.createOrgPool(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.createOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createOrgScaleSet(t,s,o){const a=await e.createOrgScaleSet(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.createOrgScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteOrg(t,s,o){const a=await e.deleteOrg(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.deleteOrg"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteOrgPool(t,s,o){const a=await e.deleteOrgPool(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.deleteOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getOrg(t,s){const o=await e.getOrg(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.getOrg"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getOrgPool(t,s,o){const a=await e.getOrgPool(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.getOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getOrgWebhookInfo(t,s){const o=await e.getOrgWebhookInfo(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.getOrgWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async installOrgWebhook(t,s,o){const a=await e.installOrgWebhook(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.installOrgWebhook"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async listOrgInstances(t,s){const o=await e.listOrgInstances(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.listOrgInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listOrgPools(t,s){const o=await e.listOrgPools(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.listOrgPools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listOrgScaleSets(t,s){const o=await e.listOrgScaleSets(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.listOrgScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listOrgs(t,s,o){const a=await e.listOrgs(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.listOrgs"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async uninstallOrgWebhook(t,s){const o=await e.uninstallOrgWebhook(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.uninstallOrgWebhook"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async updateOrg(t,s,o){const a=await e.updateOrg(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.updateOrg"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateOrgPool(t,s,o,a){const n=await e.updateOrgPool(t,s,o,a),l=r?.serverIndex??0,i=P["OrganizationsApi.updateOrgPool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)}}};class tr extends H{createOrg(e,t){return G(this.configuration).createOrg(e,t).then(s=>s(this.axios,this.basePath))}createOrgPool(e,t,s){return G(this.configuration).createOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}createOrgScaleSet(e,t,s){return G(this.configuration).createOrgScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteOrg(e,t,s){return G(this.configuration).deleteOrg(e,t,s).then(o=>o(this.axios,this.basePath))}deleteOrgPool(e,t,s){return G(this.configuration).deleteOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}getOrg(e,t){return G(this.configuration).getOrg(e,t).then(s=>s(this.axios,this.basePath))}getOrgPool(e,t,s){return G(this.configuration).getOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}getOrgWebhookInfo(e,t){return G(this.configuration).getOrgWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}installOrgWebhook(e,t,s){return G(this.configuration).installOrgWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}listOrgInstances(e,t){return G(this.configuration).listOrgInstances(e,t).then(s=>s(this.axios,this.basePath))}listOrgPools(e,t){return G(this.configuration).listOrgPools(e,t).then(s=>s(this.axios,this.basePath))}listOrgScaleSets(e,t){return G(this.configuration).listOrgScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listOrgs(e,t,s){return G(this.configuration).listOrgs(e,t,s).then(o=>o(this.axios,this.basePath))}uninstallOrgWebhook(e,t){return G(this.configuration).uninstallOrgWebhook(e,t).then(s=>s(this.axios,this.basePath))}updateOrg(e,t,s){return G(this.configuration).updateOrg(e,t,s).then(o=>o(this.axios,this.basePath))}updateOrgPool(e,t,s,o){return G(this.configuration).updateOrgPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const xo=function(r){return{createEnterprisePool:async(e,t,s={})=>{d("createEnterprisePool","enterpriseID",e),d("createEnterprisePool","body",t);const o="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createOrgPool:async(e,t,s={})=>{d("createOrgPool","orgID",e),d("createOrgPool","body",t);const o="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createRepoPool:async(e,t,s={})=>{d("createRepoPool","repoID",e),d("createRepoPool","body",t);const o="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},deleteEnterprisePool:async(e,t,s={})=>{d("deleteEnterprisePool","enterpriseID",e),d("deleteEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deleteOrgPool:async(e,t,s={})=>{d("deleteOrgPool","orgID",e),d("deleteOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deletePool:async(e,t={})=>{d("deletePool","poolID",e);const s="/pools/{poolID}".replace("{poolID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteRepoPool:async(e,t,s={})=>{d("deleteRepoPool","repoID",e),d("deleteRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getEnterprisePool:async(e,t,s={})=>{d("getEnterprisePool","enterpriseID",e),d("getEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getOrgPool:async(e,t,s={})=>{d("getOrgPool","orgID",e),d("getOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getPool:async(e,t={})=>{d("getPool","poolID",e);const s="/pools/{poolID}".replace("{poolID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getRepoPool:async(e,t,s={})=>{d("getRepoPool","repoID",e),d("getRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},listEnterprisePools:async(e,t={})=>{d("listEnterprisePools","enterpriseID",e);const s="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgPools:async(e,t={})=>{d("listOrgPools","orgID",e);const s="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listPools:async(e={})=>{const t="/pools",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listRepoPools:async(e,t={})=>{d("listRepoPools","repoID",e);const s="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},updateEnterprisePool:async(e,t,s,o={})=>{d("updateEnterprisePool","enterpriseID",e),d("updateEnterprisePool","poolID",t),d("updateEnterprisePool","body",s);const a="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}},updateOrgPool:async(e,t,s,o={})=>{d("updateOrgPool","orgID",e),d("updateOrgPool","poolID",t),d("updateOrgPool","body",s);const a="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}},updatePool:async(e,t,s={})=>{d("updatePool","poolID",e),d("updatePool","body",t);const o="/pools/{poolID}".replace("{poolID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateRepoPool:async(e,t,s,o={})=>{d("updateRepoPool","repoID",e),d("updateRepoPool","poolID",t),d("updateRepoPool","body",s);const a="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}}}},j=function(r){const e=xo(r);return{async createEnterprisePool(t,s,o){const a=await e.createEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.createEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createOrgPool(t,s,o){const a=await e.createOrgPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.createOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createRepoPool(t,s,o){const a=await e.createRepoPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.createRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteEnterprisePool(t,s,o){const a=await e.deleteEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.deleteEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteOrgPool(t,s,o){const a=await e.deleteOrgPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.deleteOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deletePool(t,s){const o=await e.deletePool(t,s),a=r?.serverIndex??0,n=P["PoolsApi.deletePool"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteRepoPool(t,s,o){const a=await e.deleteRepoPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.deleteRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getEnterprisePool(t,s,o){const a=await e.getEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.getEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getOrgPool(t,s,o){const a=await e.getOrgPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.getOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getPool(t,s){const o=await e.getPool(t,s),a=r?.serverIndex??0,n=P["PoolsApi.getPool"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getRepoPool(t,s,o){const a=await e.getRepoPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.getRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async listEnterprisePools(t,s){const o=await e.listEnterprisePools(t,s),a=r?.serverIndex??0,n=P["PoolsApi.listEnterprisePools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listOrgPools(t,s){const o=await e.listOrgPools(t,s),a=r?.serverIndex??0,n=P["PoolsApi.listOrgPools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listPools(t){const s=await e.listPools(t),o=r?.serverIndex??0,a=P["PoolsApi.listPools"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async listRepoPools(t,s){const o=await e.listRepoPools(t,s),a=r?.serverIndex??0,n=P["PoolsApi.listRepoPools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async updateEnterprisePool(t,s,o,a){const n=await e.updateEnterprisePool(t,s,o,a),l=r?.serverIndex??0,i=P["PoolsApi.updateEnterprisePool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async updateOrgPool(t,s,o,a){const n=await e.updateOrgPool(t,s,o,a),l=r?.serverIndex??0,i=P["PoolsApi.updateOrgPool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async updatePool(t,s,o){const a=await e.updatePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.updatePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateRepoPool(t,s,o,a){const n=await e.updateRepoPool(t,s,o,a),l=r?.serverIndex??0,i=P["PoolsApi.updateRepoPool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)}}};class rr extends H{createEnterprisePool(e,t,s){return j(this.configuration).createEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}createOrgPool(e,t,s){return j(this.configuration).createOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}createRepoPool(e,t,s){return j(this.configuration).createRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}deleteEnterprisePool(e,t,s){return j(this.configuration).deleteEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}deleteOrgPool(e,t,s){return j(this.configuration).deleteOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}deletePool(e,t){return j(this.configuration).deletePool(e,t).then(s=>s(this.axios,this.basePath))}deleteRepoPool(e,t,s){return j(this.configuration).deleteRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}getEnterprisePool(e,t,s){return j(this.configuration).getEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}getOrgPool(e,t,s){return j(this.configuration).getOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}getPool(e,t){return j(this.configuration).getPool(e,t).then(s=>s(this.axios,this.basePath))}getRepoPool(e,t,s){return j(this.configuration).getRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}listEnterprisePools(e,t){return j(this.configuration).listEnterprisePools(e,t).then(s=>s(this.axios,this.basePath))}listOrgPools(e,t){return j(this.configuration).listOrgPools(e,t).then(s=>s(this.axios,this.basePath))}listPools(e){return j(this.configuration).listPools(e).then(t=>t(this.axios,this.basePath))}listRepoPools(e,t){return j(this.configuration).listRepoPools(e,t).then(s=>s(this.axios,this.basePath))}updateEnterprisePool(e,t,s,o){return j(this.configuration).updateEnterprisePool(e,t,s,o).then(a=>a(this.axios,this.basePath))}updateOrgPool(e,t,s,o){return j(this.configuration).updateOrgPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}updatePool(e,t,s){return j(this.configuration).updatePool(e,t,s).then(o=>o(this.axios,this.basePath))}updateRepoPool(e,t,s,o){return j(this.configuration).updateRepoPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const go=function(r){return{listProviders:async(e={})=>{const t="/providers",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}}}},vo=function(r){const e=go(r);return{async listProviders(t){const s=await e.listProviders(t),o=r?.serverIndex??0,a=P["ProvidersApi.listProviders"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)}}};class sr extends H{listProviders(e){return vo(this.configuration).listProviders(e).then(t=>t(this.axios,this.basePath))}}const Uo=function(r){return{createRepo:async(e,t={})=>{d("createRepo","body",e);const s="/repositories",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},createRepoPool:async(e,t,s={})=>{d("createRepoPool","repoID",e),d("createRepoPool","body",t);const o="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createRepoScaleSet:async(e,t,s={})=>{d("createRepoScaleSet","repoID",e),d("createRepoScaleSet","body",t);const o="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},deleteRepo:async(e,t,s={})=>{d("deleteRepo","repoID",e);const o="/repositories/{repoID}".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),t!==void 0&&(c.keepWebhook=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deleteRepoPool:async(e,t,s={})=>{d("deleteRepoPool","repoID",e),d("deleteRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getRepo:async(e,t={})=>{d("getRepo","repoID",e);const s="/repositories/{repoID}".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getRepoPool:async(e,t,s={})=>{d("getRepoPool","repoID",e),d("getRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getRepoWebhookInfo:async(e,t={})=>{d("getRepoWebhookInfo","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},installRepoWebhook:async(e,t,s={})=>{d("installRepoWebhook","repoID",e),d("installRepoWebhook","body",t);const o="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},listRepoInstances:async(e,t={})=>{d("listRepoInstances","repoID",e);const s="/repositories/{repoID}/instances".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoPools:async(e,t={})=>{d("listRepoPools","repoID",e);const s="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoScaleSets:async(e,t={})=>{d("listRepoScaleSets","repoID",e);const s="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepos:async(e,t,s,o={})=>{const a="/repositories",n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"GET",...l,...o},c={},p={};await b(c,"Authorization",r),e!==void 0&&(p.owner=e),t!==void 0&&(p.name=t),s!==void 0&&(p.endpoint=s),V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},{url:S(n),options:i}},uninstallRepoWebhook:async(e,t={})=>{d("uninstallRepoWebhook","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},updateRepo:async(e,t,s={})=>{d("updateRepo","repoID",e),d("updateRepo","body",t);const o="/repositories/{repoID}".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateRepoPool:async(e,t,s,o={})=>{d("updateRepoPool","repoID",e),d("updateRepoPool","poolID",t),d("updateRepoPool","body",s);const a="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}}}},_=function(r){const e=Uo(r);return{async createRepo(t,s){const o=await e.createRepo(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.createRepo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async createRepoPool(t,s,o){const a=await e.createRepoPool(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.createRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createRepoScaleSet(t,s,o){const a=await e.createRepoScaleSet(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.createRepoScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteRepo(t,s,o){const a=await e.deleteRepo(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.deleteRepo"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteRepoPool(t,s,o){const a=await e.deleteRepoPool(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.deleteRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getRepo(t,s){const o=await e.getRepo(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.getRepo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getRepoPool(t,s,o){const a=await e.getRepoPool(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.getRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getRepoWebhookInfo(t,s){const o=await e.getRepoWebhookInfo(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.getRepoWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async installRepoWebhook(t,s,o){const a=await e.installRepoWebhook(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.installRepoWebhook"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async listRepoInstances(t,s){const o=await e.listRepoInstances(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.listRepoInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listRepoPools(t,s){const o=await e.listRepoPools(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.listRepoPools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listRepoScaleSets(t,s){const o=await e.listRepoScaleSets(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.listRepoScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listRepos(t,s,o,a){const n=await e.listRepos(t,s,o,a),l=r?.serverIndex??0,i=P["RepositoriesApi.listRepos"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async uninstallRepoWebhook(t,s){const o=await e.uninstallRepoWebhook(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.uninstallRepoWebhook"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async updateRepo(t,s,o){const a=await e.updateRepo(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.updateRepo"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateRepoPool(t,s,o,a){const n=await e.updateRepoPool(t,s,o,a),l=r?.serverIndex??0,i=P["RepositoriesApi.updateRepoPool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)}}};class ar extends H{createRepo(e,t){return _(this.configuration).createRepo(e,t).then(s=>s(this.axios,this.basePath))}createRepoPool(e,t,s){return _(this.configuration).createRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}createRepoScaleSet(e,t,s){return _(this.configuration).createRepoScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteRepo(e,t,s){return _(this.configuration).deleteRepo(e,t,s).then(o=>o(this.axios,this.basePath))}deleteRepoPool(e,t,s){return _(this.configuration).deleteRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}getRepo(e,t){return _(this.configuration).getRepo(e,t).then(s=>s(this.axios,this.basePath))}getRepoPool(e,t,s){return _(this.configuration).getRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}getRepoWebhookInfo(e,t){return _(this.configuration).getRepoWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}installRepoWebhook(e,t,s){return _(this.configuration).installRepoWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}listRepoInstances(e,t){return _(this.configuration).listRepoInstances(e,t).then(s=>s(this.axios,this.basePath))}listRepoPools(e,t){return _(this.configuration).listRepoPools(e,t).then(s=>s(this.axios,this.basePath))}listRepoScaleSets(e,t){return _(this.configuration).listRepoScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listRepos(e,t,s,o){return _(this.configuration).listRepos(e,t,s,o).then(a=>a(this.axios,this.basePath))}uninstallRepoWebhook(e,t){return _(this.configuration).uninstallRepoWebhook(e,t).then(s=>s(this.axios,this.basePath))}updateRepo(e,t,s){return _(this.configuration).updateRepo(e,t,s).then(o=>o(this.axios,this.basePath))}updateRepoPool(e,t,s,o){return _(this.configuration).updateRepoPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const Co=function(r){return{createEnterpriseScaleSet:async(e,t,s={})=>{d("createEnterpriseScaleSet","enterpriseID",e),d("createEnterpriseScaleSet","body",t);const o="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createOrgScaleSet:async(e,t,s={})=>{d("createOrgScaleSet","orgID",e),d("createOrgScaleSet","body",t);const o="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createRepoScaleSet:async(e,t,s={})=>{d("createRepoScaleSet","repoID",e),d("createRepoScaleSet","body",t);const o="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},deleteScaleSet:async(e,t={})=>{d("deleteScaleSet","scalesetID",e);const s="/scalesets/{scalesetID}".replace("{scalesetID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getScaleSet:async(e,t={})=>{d("getScaleSet","scalesetID",e);const s="/scalesets/{scalesetID}".replace("{scalesetID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterpriseScaleSets:async(e,t={})=>{d("listEnterpriseScaleSets","enterpriseID",e);const s="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgScaleSets:async(e,t={})=>{d("listOrgScaleSets","orgID",e);const s="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoScaleSets:async(e,t={})=>{d("listRepoScaleSets","repoID",e);const s="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listScalesets:async(e={})=>{const t="/scalesets",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},updateScaleSet:async(e,t,s={})=>{d("updateScaleSet","scalesetID",e),d("updateScaleSet","body",t);const o="/scalesets/{scalesetID}".replace("{scalesetID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}}}},Z=function(r){const e=Co(r);return{async createEnterpriseScaleSet(t,s,o){const a=await e.createEnterpriseScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.createEnterpriseScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createOrgScaleSet(t,s,o){const a=await e.createOrgScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.createOrgScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createRepoScaleSet(t,s,o){const a=await e.createRepoScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.createRepoScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteScaleSet(t,s){const o=await e.deleteScaleSet(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.deleteScaleSet"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getScaleSet(t,s){const o=await e.getScaleSet(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.getScaleSet"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listEnterpriseScaleSets(t,s){const o=await e.listEnterpriseScaleSets(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.listEnterpriseScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listOrgScaleSets(t,s){const o=await e.listOrgScaleSets(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.listOrgScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listRepoScaleSets(t,s){const o=await e.listRepoScaleSets(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.listRepoScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listScalesets(t){const s=await e.listScalesets(t),o=r?.serverIndex??0,a=P["ScalesetsApi.listScalesets"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async updateScaleSet(t,s,o){const a=await e.updateScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.updateScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)}}};class or extends H{createEnterpriseScaleSet(e,t,s){return Z(this.configuration).createEnterpriseScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}createOrgScaleSet(e,t,s){return Z(this.configuration).createOrgScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}createRepoScaleSet(e,t,s){return Z(this.configuration).createRepoScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteScaleSet(e,t){return Z(this.configuration).deleteScaleSet(e,t).then(s=>s(this.axios,this.basePath))}getScaleSet(e,t){return Z(this.configuration).getScaleSet(e,t).then(s=>s(this.axios,this.basePath))}listEnterpriseScaleSets(e,t){return Z(this.configuration).listEnterpriseScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listOrgScaleSets(e,t){return Z(this.configuration).listOrgScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listRepoScaleSets(e,t){return Z(this.configuration).listRepoScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listScalesets(e){return Z(this.configuration).listScalesets(e).then(t=>t(this.axios,this.basePath))}updateScaleSet(e,t,s){return Z(this.configuration).updateScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}}const To=function(r){return{createTemplate:async(e,t={})=>{d("createTemplate","body",e);const s="/templates",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},deleteTemplate:async(e,t={})=>{d("deleteTemplate","templateID",e);const s="/templates/{templateID}".replace("{templateID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getTemplate:async(e,t={})=>{d("getTemplate","templateID",e);const s="/templates/{templateID}".replace("{templateID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listTemplates:async(e,t,s,o={})=>{const a="/templates",n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"GET",...l,...o},c={},p={};await b(c,"Authorization",r),e!==void 0&&(p.osType=e),t!==void 0&&(p.partialName=t),s!==void 0&&(p.forgeType=s),V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},{url:S(n),options:i}},updateTemplate:async(e,t,s={})=>{d("updateTemplate","templateID",e),d("updateTemplate","body",t);const o="/templates/{templateID}".replace("{templateID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}}}},Ee=function(r){const e=To(r);return{async createTemplate(t,s){const o=await e.createTemplate(t,s),a=r?.serverIndex??0,n=P["TemplatesApi.createTemplate"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteTemplate(t,s){const o=await e.deleteTemplate(t,s),a=r?.serverIndex??0,n=P["TemplatesApi.deleteTemplate"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getTemplate(t,s){const o=await e.getTemplate(t,s),a=r?.serverIndex??0,n=P["TemplatesApi.getTemplate"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listTemplates(t,s,o,a){const n=await e.listTemplates(t,s,o,a),l=r?.serverIndex??0,i=P["TemplatesApi.listTemplates"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async updateTemplate(t,s,o){const a=await e.updateTemplate(t,s,o),n=r?.serverIndex??0,l=P["TemplatesApi.updateTemplate"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)}}};class Bo extends H{createTemplate(e,t){return Ee(this.configuration).createTemplate(e,t).then(s=>s(this.axios,this.basePath))}deleteTemplate(e,t){return Ee(this.configuration).deleteTemplate(e,t).then(s=>s(this.axios,this.basePath))}getTemplate(e,t){return Ee(this.configuration).getTemplate(e,t).then(s=>s(this.axios,this.basePath))}listTemplates(e,t,s,o){return Ee(this.configuration).listTemplates(e,t,s,o).then(a=>a(this.axios,this.basePath))}updateTemplate(e,t,s){return Ee(this.configuration).updateTemplate(e,t,s).then(o=>o(this.axios,this.basePath))}}class nr{apiKey;username;password;accessToken;basePath;serverIndex;baseOptions;formDataCtor;constructor(e={}){this.apiKey=e.apiKey,this.username=e.username,this.password=e.password,this.accessToken=e.accessToken,this.basePath=e.basePath,this.serverIndex=e.serverIndex,this.baseOptions={...e.baseOptions,headers:{...e.baseOptions?.headers}},this.formDataCtor=e.formDataCtor}isJsonMime(e){const t=new RegExp("^(application/json|[^;/ ]+/[^;/ ]+[+]json)[ ]*(;.*)?$","i");return e!==null&&(t.test(e)||e.toLowerCase()==="application/json-patch+json")}}class zr{baseUrl;token;config;isDevelopmentMode(){return typeof window>"u"?!1:window.location.port==="5173"}loginApi;controllerInfoApi;controllerApi;endpointsApi;credentialsApi;repositoriesApi;organizationsApi;enterprisesApi;poolsApi;scaleSetsApi;instancesApi;providersApi;firstRunApi;hooksApi;templatesApi;objectsApi;constructor(e=""){this.baseUrl=e||window.location.origin;const t=this.isDevelopmentMode();this.config=new nr({basePath:`${this.baseUrl}/api/v1`,accessToken:()=>this.token||"",baseOptions:{withCredentials:!t}}),this.loginApi=new er(this.config),this.controllerInfoApi=new Qt(this.config),this.controllerApi=new Wt(this.config),this.endpointsApi=new Jt(this.config),this.credentialsApi=new Mt(this.config),this.repositoriesApi=new ar(this.config),this.organizationsApi=new tr(this.config),this.enterprisesApi=new Kt(this.config),this.poolsApi=new rr(this.config),this.scaleSetsApi=new or(this.config),this.instancesApi=new Zt(this.config),this.providersApi=new sr(this.config),this.firstRunApi=new Xt(this.config),this.hooksApi=new Yt(this.config),this.templatesApi=new Bo(this.config),this.objectsApi=new Io(this.config)}setToken(e){this.token=e;const t=this.isDevelopmentMode();this.config=new nr({basePath:`${this.baseUrl}/api/v1`,accessToken:()=>e,baseOptions:{withCredentials:!t}}),this.loginApi=new er(this.config),this.controllerInfoApi=new Qt(this.config),this.controllerApi=new Wt(this.config),this.endpointsApi=new Jt(this.config),this.credentialsApi=new Mt(this.config),this.repositoriesApi=new ar(this.config),this.organizationsApi=new tr(this.config),this.enterprisesApi=new Kt(this.config),this.poolsApi=new rr(this.config),this.scaleSetsApi=new or(this.config),this.instancesApi=new Zt(this.config),this.providersApi=new sr(this.config),this.firstRunApi=new Xt(this.config),this.hooksApi=new Yt(this.config)}async login(e){const t={username:e.username,password:e.password},o=(await this.loginApi.login(t)).data.token;if(o)return this.setToken(o),{token:o};throw new Error("Login failed")}async getControllerInfo(){return(await this.controllerInfoApi.controllerInfo()).data}async listGithubEndpoints(){return(await this.endpointsApi.listGithubEndpoints()).data||[]}async getGithubEndpoint(e){return(await this.endpointsApi.getGithubEndpoint(e)).data}async createGithubEndpoint(e){return(await this.endpointsApi.createGithubEndpoint(e)).data}async updateGithubEndpoint(e,t){return(await this.endpointsApi.updateGithubEndpoint(e,t)).data}async deleteGithubEndpoint(e){await this.endpointsApi.deleteGithubEndpoint(e)}async listGiteaEndpoints(){return(await this.endpointsApi.listGiteaEndpoints()).data||[]}async getGiteaEndpoint(e){return(await this.endpointsApi.getGiteaEndpoint(e)).data}async createGiteaEndpoint(e){return(await this.endpointsApi.createGiteaEndpoint(e)).data}async updateGiteaEndpoint(e,t){return(await this.endpointsApi.updateGiteaEndpoint(e,t)).data}async deleteGiteaEndpoint(e){await this.endpointsApi.deleteGiteaEndpoint(e)}async listAllEndpoints(){const[e,t]=await Promise.all([this.listGithubEndpoints().catch(()=>[]),this.listGiteaEndpoints().catch(()=>[])]);return[...e.map(s=>({...s,endpoint_type:"github"})),...t.map(s=>({...s,endpoint_type:"gitea"}))]}async listGithubCredentials(){return(await this.credentialsApi.listCredentials()).data||[]}async getGithubCredentials(e){return(await this.credentialsApi.getCredentials(e)).data}async createGithubCredentials(e){return(await this.credentialsApi.createCredentials(e)).data}async updateGithubCredentials(e,t){return(await this.credentialsApi.updateCredentials(e,t)).data}async deleteGithubCredentials(e){await this.credentialsApi.deleteCredentials(e)}async listGiteaCredentials(){return(await this.credentialsApi.listGiteaCredentials()).data||[]}async getGiteaCredentials(e){return(await this.credentialsApi.getGiteaCredentials(e)).data}async createGiteaCredentials(e){return(await this.credentialsApi.createGiteaCredentials(e)).data}async updateGiteaCredentials(e,t){return(await this.credentialsApi.updateGiteaCredentials(e,t)).data}async deleteGiteaCredentials(e){await this.credentialsApi.deleteGiteaCredentials(e)}async listAllCredentials(){const[e,t]=await Promise.all([this.listGithubCredentials().catch(()=>[]),this.listGiteaCredentials().catch(()=>[])]);return[...e,...t]}async installRepositoryWebhook(e,t={}){await this.repositoriesApi.installRepoWebhook(e,t)}async uninstallRepositoryWebhook(e){await this.hooksApi.uninstallRepoWebhook(e)}async getRepositoryWebhookInfo(e){return(await this.hooksApi.getRepoWebhookInfo(e)).data}async listRepositories(){return(await this.repositoriesApi.listRepos()).data||[]}async getRepository(e){return(await this.repositoriesApi.getRepo(e)).data}async createRepository(e){return(await this.repositoriesApi.createRepo(e)).data}async updateRepository(e,t){return(await this.repositoriesApi.updateRepo(e,t)).data}async deleteRepository(e){await this.repositoriesApi.deleteRepo(e)}async installRepoWebhook(e){await this.repositoriesApi.installRepoWebhook(e,{})}async listRepositoryPools(e){return(await this.repositoriesApi.listRepoPools(e)).data||[]}async listRepositoryInstances(e){return(await this.repositoriesApi.listRepoInstances(e)).data||[]}async createRepositoryPool(e,t){return(await this.repositoriesApi.createRepoPool(e,t)).data}async installOrganizationWebhook(e,t={}){await this.organizationsApi.installOrgWebhook(e,t)}async uninstallOrganizationWebhook(e){await this.hooksApi.uninstallOrgWebhook(e)}async getOrganizationWebhookInfo(e){return(await this.hooksApi.getOrgWebhookInfo(e)).data}async listOrganizations(){return(await this.organizationsApi.listOrgs()).data||[]}async getOrganization(e){return(await this.organizationsApi.getOrg(e)).data}async createOrganization(e){return(await this.organizationsApi.createOrg(e)).data}async updateOrganization(e,t){return(await this.organizationsApi.updateOrg(e,t)).data}async deleteOrganization(e){await this.organizationsApi.deleteOrg(e)}async listOrganizationPools(e){return(await this.organizationsApi.listOrgPools(e)).data||[]}async listOrganizationInstances(e){return(await this.organizationsApi.listOrgInstances(e)).data||[]}async createOrganizationPool(e,t){return(await this.organizationsApi.createOrgPool(e,t)).data}async listEnterprises(){return(await this.enterprisesApi.listEnterprises()).data||[]}async getEnterprise(e){return(await this.enterprisesApi.getEnterprise(e)).data}async createEnterprise(e){return(await this.enterprisesApi.createEnterprise(e)).data}async updateEnterprise(e,t){return(await this.enterprisesApi.updateEnterprise(e,t)).data}async deleteEnterprise(e){await this.enterprisesApi.deleteEnterprise(e)}async listEnterprisePools(e){return(await this.enterprisesApi.listEnterprisePools(e)).data||[]}async listEnterpriseInstances(e){return(await this.enterprisesApi.listEnterpriseInstances(e)).data||[]}async createEnterprisePool(e,t){return(await this.enterprisesApi.createEnterprisePool(e,t)).data}async createRepositoryScaleSet(e,t){return(await this.repositoriesApi.createRepoScaleSet(e,t)).data}async listRepositoryScaleSets(e){return(await this.repositoriesApi.listRepoScaleSets(e)).data||[]}async createOrganizationScaleSet(e,t){return(await this.organizationsApi.createOrgScaleSet(e,t)).data}async listOrganizationScaleSets(e){return(await this.organizationsApi.listOrgScaleSets(e)).data||[]}async createEnterpriseScaleSet(e,t){return(await this.enterprisesApi.createEnterpriseScaleSet(e,t)).data}async listEnterpriseScaleSets(e){return(await this.enterprisesApi.listEnterpriseScaleSets(e)).data||[]}async listPools(){return(await this.poolsApi.listPools()).data||[]}async listAllPools(){return this.listPools()}async getPool(e){return(await this.poolsApi.getPool(e)).data}async updatePool(e,t){return(await this.poolsApi.updatePool(e,t)).data}async deletePool(e){await this.poolsApi.deletePool(e)}async listScaleSets(){return(await this.scaleSetsApi.listScalesets()).data||[]}async getScaleSet(e){return(await this.scaleSetsApi.getScaleSet(e.toString())).data}async updateScaleSet(e,t){return(await this.scaleSetsApi.updateScaleSet(e.toString(),t)).data}async deleteScaleSet(e){await this.scaleSetsApi.deleteScaleSet(e.toString())}async listInstances(){return(await this.instancesApi.listInstances()).data||[]}async getInstance(e){return(await this.instancesApi.getInstance(e)).data}async deleteInstance(e){await this.instancesApi.deleteInstance(e)}async listProviders(){return(await this.providersApi.listProviders()).data||[]}async listCredentials(){return this.listAllCredentials()}async listEndpoints(){return this.listAllEndpoints()}async firstRun(e){return(await this.firstRunApi.firstRun(e)).data}async updateController(e){return(await this.controllerApi.updateController(e)).data}async listTemplates(e,t,s){return(await this.templatesApi.listTemplates(e,t,s)).data||[]}async getTemplate(e){return(await this.templatesApi.getTemplate(e)).data}async createTemplate(e){return(await this.templatesApi.createTemplate(e)).data}async updateTemplate(e,t){return(await this.templatesApi.updateTemplate(e.toString(),t)).data}async deleteTemplate(e){await this.templatesApi.deleteTemplate(e)}async listFileObjects(e,t,s){return(await this.objectsApi.listFileObjects(e,t,s)).data}async getFileObject(e){return(await this.objectsApi.getFileObject(e)).data}async updateFileObject(e,t){return(await this.objectsApi.updateFileObject(e,t)).data}async deleteFileObject(e){await this.objectsApi.deleteFileObject(e)}}new zr;class Do extends zr{constructor(e=""){super(e)}}const On=new Do;var jo=Pt(''),Fo=Pt(''),Lo=Pt(''),zo=As("");function Pn(r,e){const t=It(e,["children","$$slots","$$events","$$legacy"]),s=It(t,["variant","size","disabled","loading","type","fullWidth","icon","iconPosition"]);bs(e,!1);const o=ae(),a=ae(),n=ae(),l=ae(),i=ae(),c=ae(),p=ae(),y=ae(),I=Vs();let B=ne(e,"variant",8,"primary"),R=ne(e,"size",8,"md"),f=ne(e,"disabled",8,!1),w=ne(e,"loading",8,!1),U=ne(e,"type",8,"button"),F=ne(e,"fullWidth",8,!1),E=ne(e,"icon",8,null),x=ne(e,"iconPosition",8,"left");function T(){!f()&&!w()&&I("click")}se(()=>{},()=>{oe(o,"inline-flex items-center justify-center font-medium rounded-md transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-gray-900 cursor-pointer disabled:cursor-not-allowed")}),se(()=>ce(R()),()=>{oe(a,{sm:"px-3 py-2 text-sm",md:"px-4 py-2 text-sm",lg:"px-6 py-3 text-base"}[R()])}),se(()=>ce(B()),()=>{oe(n,{primary:"text-white bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 disabled:bg-gray-400 disabled:hover:bg-gray-400",secondary:"text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-600 focus:ring-blue-500",danger:"text-white bg-red-600 hover:bg-red-700 focus:ring-red-500 disabled:bg-gray-400 disabled:hover:bg-gray-400",ghost:"text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 focus:ring-blue-500"}[B()])}),se(()=>ce(F()),()=>{oe(l,F()?"w-full":"")}),se(()=>ce(f()),()=>{oe(i,f()?"opacity-50":"")}),se(()=>(z(o),z(a),z(n),z(l),z(i)),()=>{oe(c,[z(o),z(a),z(n),z(l),z(i)].filter(Boolean).join(" "))}),se(()=>ce(R()),()=>{oe(p,{sm:"h-4 w-4",md:"h-5 w-5",lg:"h-6 w-6"}[R()])}),se(()=>(ce(x()),ce(R())),()=>{oe(y,{sm:x()==="left"?"-ml-0.5 mr-2":"ml-2 -mr-0.5",md:x()==="left"?"-ml-1 mr-2":"ml-2 -mr-1",lg:x()==="left"?"-ml-1 mr-3":"ml-3 -mr-1"}[R()])}),Ss(),qr();var D=zo();Ds(D,()=>({type:U(),disabled:f(),class:z(c),...s}));var C=Ye(D);{var ie=k=>{var L=jo();ze(()=>ke(L,0,`animate-spin ${z(p)??""} ${x()==="left"?"-ml-1 mr-2":"ml-2 -mr-1"}`)),Re(k,L)},te=k=>{var L=fs(),Oe=ws(L);{var M=Pe=>{var W=Fo(),Be=Ye(W);Et(Be,E,!0),Ze(W),ze(()=>ke(W,0,`${z(p)??""} ${z(y)??""}`)),Re(Pe,W)};et(Oe,Pe=>{E()&&x()==="left"&&Pe(M)},!0)}Re(k,L)};et(C,k=>{w()?k(ie):k(te,!1)})}var ye=wt(C,2);Is(ye,e,"default",{});var Te=wt(ye,2);{var ue=k=>{var L=Lo(),Oe=Ye(L);Et(Oe,E,!0),Ze(L),ze(()=>ke(L,0,`${z(p)??""} ${z(y)??""}`)),Re(k,L)};et(Te,k=>{E()&&x()==="right"&&!w()&&k(ue)})}Ze(D),ys("click",D,T),Re(r,D),Rs()}export{Pn as B,Qo as a,No as b,$e as c,Mo as d,$o as e,Is as f,On as g,Et as h,Ds as i,gs as j,Cs as k,Wo as r,ke as s}; +`):" "+Ht(n[0]):"as no adapter specified";throw new v("There is no suitable adapter to dispatch the request "+l,"ERR_NOT_SUPPORT")}return o},adapters:dt};function ot(r){if(r.cancelToken&&r.cancelToken.throwIfRequested(),r.signal&&r.signal.aborted)throw new ye(null,r)}function $t(r){return ot(r),r.headers=N.from(r.headers),r.data=at.call(r,r.transformRequest),["post","put","patch"].indexOf(r.method)!==-1&&r.headers.setContentType("application/x-www-form-urlencoded",!1),Dr.getAdapter(r.adapter||Ce.adapter,r)(r).then(function(s){return ot(r),s.data=at.call(r,r.transformResponse,s),s.headers=N.from(s.headers),s},function(s){return vr(s)||(ot(r),s&&s.response&&(s.response.data=at.call(r,r.transformResponse,s.response),s.response.headers=N.from(s.response.headers))),Promise.reject(s)})}const jr="1.12.2",Ke={};["object","boolean","number","function","string","symbol"].forEach((r,e)=>{Ke[r]=function(s){return typeof s===r||"a"+(e<1?"n ":" ")+r}});const Nt={};Ke.transitional=function(e,t,s){function o(a,n){return"[Axios v"+jr+"] Transitional option '"+a+"'"+n+(s?". "+s:"")}return(a,n,l)=>{if(e===!1)throw new v(o(n," has been removed"+(t?" in "+t:"")),v.ERR_DEPRECATED);return t&&!Nt[n]&&(Nt[n]=!0,console.warn(o(n," has been deprecated since v"+t+" and will be removed in the near future"))),e?e(a,n,l):!0}};Ke.spelling=function(e){return(t,s)=>(console.warn(`${s} is likely a misspelling of ${e}`),!0)};function oo(r,e,t){if(typeof r!="object")throw new v("options must be an object",v.ERR_BAD_OPTION_VALUE);const s=Object.keys(r);let o=s.length;for(;o-- >0;){const a=s[o],n=e[a];if(n){const l=r[a],i=l===void 0||n(l,a,r);if(i!==!0)throw new v("option "+a+" must be "+i,v.ERR_BAD_OPTION_VALUE);continue}if(t!==!0)throw new v("Unknown option "+a,v.ERR_BAD_OPTION)}}const qe={assertOptions:oo,validators:Ke},K=qe.validators;let de=class{constructor(e){this.defaults=e||{},this.interceptors={request:new Bt,response:new Bt}}async request(e,t){try{return await this._request(e,t)}catch(s){if(s instanceof Error){let o={};Error.captureStackTrace?Error.captureStackTrace(o):o=new Error;const a=o.stack?o.stack.replace(/^.+\n/,""):"";try{s.stack?a&&!String(s.stack).endsWith(a.replace(/^.+\n.+\n/,""))&&(s.stack+=` +`+a):s.stack=a}catch{}}throw s}}_request(e,t){typeof e=="string"?(t=t||{},t.url=e):t=e||{},t=he(this.defaults,t);const{transitional:s,paramsSerializer:o,headers:a}=t;s!==void 0&&qe.assertOptions(s,{silentJSONParsing:K.transitional(K.boolean),forcedJSONParsing:K.transitional(K.boolean),clarifyTimeoutError:K.transitional(K.boolean)},!1),o!=null&&(u.isFunction(o)?t.paramsSerializer={serialize:o}:qe.assertOptions(o,{encode:K.function,serialize:K.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),qe.assertOptions(t,{baseUrl:K.spelling("baseURL"),withXsrfToken:K.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let n=a&&u.merge(a.common,a[t.method]);a&&u.forEach(["delete","get","head","post","put","patch","common"],R=>{delete a[R]}),t.headers=N.concat(n,a);const l=[];let i=!0;this.interceptors.request.forEach(function(f){typeof f.runWhen=="function"&&f.runWhen(t)===!1||(i=i&&f.synchronous,l.unshift(f.fulfilled,f.rejected))});const c=[];this.interceptors.response.forEach(function(f){c.push(f.fulfilled,f.rejected)});let p,y=0,I;if(!i){const R=[$t.bind(this),void 0];for(R.unshift(...l),R.push(...c),I=R.length,p=Promise.resolve(t);y{if(!s._listeners)return;let a=s._listeners.length;for(;a-- >0;)s._listeners[a](o);s._listeners=null}),this.promise.then=o=>{let a;const n=new Promise(l=>{s.subscribe(l),a=l}).then(o);return n.cancel=function(){s.unsubscribe(a)},n},e(function(a,n,l){s.reason||(s.reason=new ye(a,n,l),t(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=s=>{e.abort(s)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new Fr(function(o){e=o}),cancel:e}}};function lo(r){return function(t){return r.apply(null,t)}}function io(r){return u.isObject(r)&&r.isAxiosError===!0}const ht={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(ht).forEach(([r,e])=>{ht[e]=r});function Lr(r){const e=new de(r),t=Or(de.prototype.request,e);return u.extend(t,de.prototype,e,{allOwnKeys:!0}),u.extend(t,e,null,{allOwnKeys:!0}),t.create=function(o){return Lr(he(r,o))},t}const h=Lr(Ce);h.Axios=de;h.CanceledError=ye;h.CancelToken=no;h.isCancel=vr;h.VERSION=jr;h.toFormData=Je;h.AxiosError=v;h.Cancel=h.CanceledError;h.all=function(e){return Promise.all(e)};h.spread=lo;h.isAxiosError=io;h.mergeConfig=he;h.AxiosHeaders=N;h.formToJSON=r=>gr(u.isHTMLForm(r)?new FormData(r):r);h.getAdapter=Dr.getAdapter;h.HttpStatusCode=ht;h.default=h;const{Axios:Xo,AxiosError:Yo,CanceledError:Zo,isCancel:en,CancelToken:tn,VERSION:rn,all:sn,Cancel:an,isAxiosError:on,spread:nn,toFormData:ln,AxiosHeaders:cn,HttpStatusCode:pn,formToJSON:dn,getAdapter:hn,mergeConfig:un}=h,O="/api/v1".replace(/\/+$/,"");class H{constructor(e,t=O,s=h){this.basePath=t,this.axios=s,e&&(this.configuration=e,this.basePath=e.basePath??t)}configuration}class co extends Error{constructor(e,t){super(t),this.field=e,this.name="RequiredError"}}const P={},m="https://example.com",d=function(r,e,t){if(t==null)throw new co(e,`Required parameter ${e} was null or undefined when calling ${r}.`)},b=async function(r,e,t){if(t&&t.apiKey){const s=typeof t.apiKey=="function"?await t.apiKey(e):await t.apiKey;r[e]=s}};function ut(r,e,t=""){e!=null&&(typeof e=="object"?Array.isArray(e)?e.forEach(s=>ut(r,s,t)):Object.keys(e).forEach(s=>ut(r,e[s],`${t}${t!==""?".":""}${s}`)):r.has(t)?r.append(t,e):r.set(t,e))}const V=function(r,...e){const t=new URLSearchParams(r.search);ut(t,e),r.search=t.toString()},g=function(r,e,t){const s=typeof r!="string";return(s&&t&&t.isJsonMime?t.isJsonMime(e.headers["Content-Type"]):s)?JSON.stringify(r!==void 0?r:{}):r||""},S=function(r){return r.pathname+r.search+r.hash},A=function(r,e,t,s){return(o=e,a=t)=>{const n={...r.options,url:(o.defaults.baseURL?"":s?.basePath??a)+r.url};return o.request(n)}},po=function(r){return{updateController:async(e,t={})=>{d("updateController","body",e);const s="/controller",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"PUT",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}}}},ho=function(r){const e=po(r);return{async updateController(t,s){const o=await e.updateController(t,s),a=r?.serverIndex??0,n=P["ControllerApi.updateController"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)}}};class Wt extends H{updateController(e,t){return ho(this.configuration).updateController(e,t).then(s=>s(this.axios,this.basePath))}}const uo=function(r){return{controllerInfo:async(e={})=>{const t="/controller-info",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}}}},Oo=function(r){const e=uo(r);return{async controllerInfo(t){const s=await e.controllerInfo(t),o=r?.serverIndex??0,a=P["ControllerInfoApi.controllerInfo"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)}}};class Qt extends H{controllerInfo(e){return Oo(this.configuration).controllerInfo(e).then(t=>t(this.axios,this.basePath))}}const Po=function(r){return{createCredentials:async(e,t={})=>{d("createCredentials","body",e);const s="/github/credentials",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},createGiteaCredentials:async(e,t={})=>{d("createGiteaCredentials","body",e);const s="/gitea/credentials",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},deleteCredentials:async(e,t={})=>{d("deleteCredentials","id",e);const s="/github/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteGiteaCredentials:async(e,t={})=>{d("deleteGiteaCredentials","id",e);const s="/gitea/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getCredentials:async(e,t={})=>{d("getCredentials","id",e);const s="/github/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getGiteaCredentials:async(e,t={})=>{d("getGiteaCredentials","id",e);const s="/gitea/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listCredentials:async(e={})=>{const t="/github/credentials",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listGiteaCredentials:async(e={})=>{const t="/gitea/credentials",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},updateCredentials:async(e,t,s={})=>{d("updateCredentials","id",e),d("updateCredentials","body",t);const o="/github/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateGiteaCredentials:async(e,t,s={})=>{d("updateGiteaCredentials","id",e),d("updateGiteaCredentials","body",t);const o="/gitea/credentials/{id}".replace("{id}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}}}},X=function(r){const e=Po(r);return{async createCredentials(t,s){const o=await e.createCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.createCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async createGiteaCredentials(t,s){const o=await e.createGiteaCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.createGiteaCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteCredentials(t,s){const o=await e.deleteCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.deleteCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteGiteaCredentials(t,s){const o=await e.deleteGiteaCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.deleteGiteaCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getCredentials(t,s){const o=await e.getCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.getCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getGiteaCredentials(t,s){const o=await e.getGiteaCredentials(t,s),a=r?.serverIndex??0,n=P["CredentialsApi.getGiteaCredentials"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listCredentials(t){const s=await e.listCredentials(t),o=r?.serverIndex??0,a=P["CredentialsApi.listCredentials"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async listGiteaCredentials(t){const s=await e.listGiteaCredentials(t),o=r?.serverIndex??0,a=P["CredentialsApi.listGiteaCredentials"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async updateCredentials(t,s,o){const a=await e.updateCredentials(t,s,o),n=r?.serverIndex??0,l=P["CredentialsApi.updateCredentials"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateGiteaCredentials(t,s,o){const a=await e.updateGiteaCredentials(t,s,o),n=r?.serverIndex??0,l=P["CredentialsApi.updateGiteaCredentials"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)}}};class Mt extends H{createCredentials(e,t){return X(this.configuration).createCredentials(e,t).then(s=>s(this.axios,this.basePath))}createGiteaCredentials(e,t){return X(this.configuration).createGiteaCredentials(e,t).then(s=>s(this.axios,this.basePath))}deleteCredentials(e,t){return X(this.configuration).deleteCredentials(e,t).then(s=>s(this.axios,this.basePath))}deleteGiteaCredentials(e,t){return X(this.configuration).deleteGiteaCredentials(e,t).then(s=>s(this.axios,this.basePath))}getCredentials(e,t){return X(this.configuration).getCredentials(e,t).then(s=>s(this.axios,this.basePath))}getGiteaCredentials(e,t){return X(this.configuration).getGiteaCredentials(e,t).then(s=>s(this.axios,this.basePath))}listCredentials(e){return X(this.configuration).listCredentials(e).then(t=>t(this.axios,this.basePath))}listGiteaCredentials(e){return X(this.configuration).listGiteaCredentials(e).then(t=>t(this.axios,this.basePath))}updateCredentials(e,t,s){return X(this.configuration).updateCredentials(e,t,s).then(o=>o(this.axios,this.basePath))}updateGiteaCredentials(e,t,s){return X(this.configuration).updateGiteaCredentials(e,t,s).then(o=>o(this.axios,this.basePath))}}const mo=function(r){return{createGiteaEndpoint:async(e,t={})=>{d("createGiteaEndpoint","body",e);const s="/gitea/endpoints",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},createGithubEndpoint:async(e,t={})=>{d("createGithubEndpoint","body",e);const s="/github/endpoints",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},deleteGiteaEndpoint:async(e,t={})=>{d("deleteGiteaEndpoint","name",e);const s="/gitea/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteGithubEndpoint:async(e,t={})=>{d("deleteGithubEndpoint","name",e);const s="/github/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getGiteaEndpoint:async(e,t={})=>{d("getGiteaEndpoint","name",e);const s="/gitea/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getGithubEndpoint:async(e,t={})=>{d("getGithubEndpoint","name",e);const s="/github/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listGiteaEndpoints:async(e={})=>{const t="/gitea/endpoints",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listGithubEndpoints:async(e={})=>{const t="/github/endpoints",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},updateGiteaEndpoint:async(e,t,s={})=>{d("updateGiteaEndpoint","name",e),d("updateGiteaEndpoint","body",t);const o="/gitea/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateGithubEndpoint:async(e,t,s={})=>{d("updateGithubEndpoint","name",e),d("updateGithubEndpoint","body",t);const o="/github/endpoints/{name}".replace("{name}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}}}},Y=function(r){const e=mo(r);return{async createGiteaEndpoint(t,s){const o=await e.createGiteaEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.createGiteaEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async createGithubEndpoint(t,s){const o=await e.createGithubEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.createGithubEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteGiteaEndpoint(t,s){const o=await e.deleteGiteaEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.deleteGiteaEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteGithubEndpoint(t,s){const o=await e.deleteGithubEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.deleteGithubEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getGiteaEndpoint(t,s){const o=await e.getGiteaEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.getGiteaEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getGithubEndpoint(t,s){const o=await e.getGithubEndpoint(t,s),a=r?.serverIndex??0,n=P["EndpointsApi.getGithubEndpoint"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listGiteaEndpoints(t){const s=await e.listGiteaEndpoints(t),o=r?.serverIndex??0,a=P["EndpointsApi.listGiteaEndpoints"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async listGithubEndpoints(t){const s=await e.listGithubEndpoints(t),o=r?.serverIndex??0,a=P["EndpointsApi.listGithubEndpoints"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async updateGiteaEndpoint(t,s,o){const a=await e.updateGiteaEndpoint(t,s,o),n=r?.serverIndex??0,l=P["EndpointsApi.updateGiteaEndpoint"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateGithubEndpoint(t,s,o){const a=await e.updateGithubEndpoint(t,s,o),n=r?.serverIndex??0,l=P["EndpointsApi.updateGithubEndpoint"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)}}};class Jt extends H{createGiteaEndpoint(e,t){return Y(this.configuration).createGiteaEndpoint(e,t).then(s=>s(this.axios,this.basePath))}createGithubEndpoint(e,t){return Y(this.configuration).createGithubEndpoint(e,t).then(s=>s(this.axios,this.basePath))}deleteGiteaEndpoint(e,t){return Y(this.configuration).deleteGiteaEndpoint(e,t).then(s=>s(this.axios,this.basePath))}deleteGithubEndpoint(e,t){return Y(this.configuration).deleteGithubEndpoint(e,t).then(s=>s(this.axios,this.basePath))}getGiteaEndpoint(e,t){return Y(this.configuration).getGiteaEndpoint(e,t).then(s=>s(this.axios,this.basePath))}getGithubEndpoint(e,t){return Y(this.configuration).getGithubEndpoint(e,t).then(s=>s(this.axios,this.basePath))}listGiteaEndpoints(e){return Y(this.configuration).listGiteaEndpoints(e).then(t=>t(this.axios,this.basePath))}listGithubEndpoints(e){return Y(this.configuration).listGithubEndpoints(e).then(t=>t(this.axios,this.basePath))}updateGiteaEndpoint(e,t,s){return Y(this.configuration).updateGiteaEndpoint(e,t,s).then(o=>o(this.axios,this.basePath))}updateGithubEndpoint(e,t,s){return Y(this.configuration).updateGithubEndpoint(e,t,s).then(o=>o(this.axios,this.basePath))}}const bo=function(r){return{createEnterprise:async(e,t={})=>{d("createEnterprise","body",e);const s="/enterprises",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},createEnterprisePool:async(e,t,s={})=>{d("createEnterprisePool","enterpriseID",e),d("createEnterprisePool","body",t);const o="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createEnterpriseScaleSet:async(e,t,s={})=>{d("createEnterpriseScaleSet","enterpriseID",e),d("createEnterpriseScaleSet","body",t);const o="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},deleteEnterprise:async(e,t={})=>{d("deleteEnterprise","enterpriseID",e);const s="/enterprises/{enterpriseID}".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteEnterprisePool:async(e,t,s={})=>{d("deleteEnterprisePool","enterpriseID",e),d("deleteEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getEnterprise:async(e,t={})=>{d("getEnterprise","enterpriseID",e);const s="/enterprises/{enterpriseID}".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getEnterprisePool:async(e,t,s={})=>{d("getEnterprisePool","enterpriseID",e),d("getEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},listEnterpriseInstances:async(e,t={})=>{d("listEnterpriseInstances","enterpriseID",e);const s="/enterprises/{enterpriseID}/instances".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterprisePools:async(e,t={})=>{d("listEnterprisePools","enterpriseID",e);const s="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterpriseScaleSets:async(e,t={})=>{d("listEnterpriseScaleSets","enterpriseID",e);const s="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterprises:async(e,t,s={})=>{const o="/enterprises",a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),e!==void 0&&(c.name=e),t!==void 0&&(c.endpoint=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},updateEnterprise:async(e,t,s={})=>{d("updateEnterprise","enterpriseID",e),d("updateEnterprise","body",t);const o="/enterprises/{enterpriseID}".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateEnterprisePool:async(e,t,s,o={})=>{d("updateEnterprisePool","enterpriseID",e),d("updateEnterprisePool","poolID",t),d("updateEnterprisePool","body",s);const a="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}}}},Q=function(r){const e=bo(r);return{async createEnterprise(t,s){const o=await e.createEnterprise(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.createEnterprise"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async createEnterprisePool(t,s,o){const a=await e.createEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.createEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createEnterpriseScaleSet(t,s,o){const a=await e.createEnterpriseScaleSet(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.createEnterpriseScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteEnterprise(t,s){const o=await e.deleteEnterprise(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.deleteEnterprise"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteEnterprisePool(t,s,o){const a=await e.deleteEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.deleteEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getEnterprise(t,s){const o=await e.getEnterprise(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.getEnterprise"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getEnterprisePool(t,s,o){const a=await e.getEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.getEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async listEnterpriseInstances(t,s){const o=await e.listEnterpriseInstances(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.listEnterpriseInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listEnterprisePools(t,s){const o=await e.listEnterprisePools(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.listEnterprisePools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listEnterpriseScaleSets(t,s){const o=await e.listEnterpriseScaleSets(t,s),a=r?.serverIndex??0,n=P["EnterprisesApi.listEnterpriseScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listEnterprises(t,s,o){const a=await e.listEnterprises(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.listEnterprises"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateEnterprise(t,s,o){const a=await e.updateEnterprise(t,s,o),n=r?.serverIndex??0,l=P["EnterprisesApi.updateEnterprise"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateEnterprisePool(t,s,o,a){const n=await e.updateEnterprisePool(t,s,o,a),l=r?.serverIndex??0,i=P["EnterprisesApi.updateEnterprisePool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)}}};class Kt extends H{createEnterprise(e,t){return Q(this.configuration).createEnterprise(e,t).then(s=>s(this.axios,this.basePath))}createEnterprisePool(e,t,s){return Q(this.configuration).createEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}createEnterpriseScaleSet(e,t,s){return Q(this.configuration).createEnterpriseScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteEnterprise(e,t){return Q(this.configuration).deleteEnterprise(e,t).then(s=>s(this.axios,this.basePath))}deleteEnterprisePool(e,t,s){return Q(this.configuration).deleteEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}getEnterprise(e,t){return Q(this.configuration).getEnterprise(e,t).then(s=>s(this.axios,this.basePath))}getEnterprisePool(e,t,s){return Q(this.configuration).getEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}listEnterpriseInstances(e,t){return Q(this.configuration).listEnterpriseInstances(e,t).then(s=>s(this.axios,this.basePath))}listEnterprisePools(e,t){return Q(this.configuration).listEnterprisePools(e,t).then(s=>s(this.axios,this.basePath))}listEnterpriseScaleSets(e,t){return Q(this.configuration).listEnterpriseScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listEnterprises(e,t,s){return Q(this.configuration).listEnterprises(e,t,s).then(o=>o(this.axios,this.basePath))}updateEnterprise(e,t,s){return Q(this.configuration).updateEnterprise(e,t,s).then(o=>o(this.axios,this.basePath))}updateEnterprisePool(e,t,s,o){return Q(this.configuration).updateEnterprisePool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const Vo=function(r){return{firstRun:async(e,t={})=>{d("firstRun","body",e);const s="/first-run",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}}}},So=function(r){const e=Vo(r);return{async firstRun(t,s){const o=await e.firstRun(t,s),a=r?.serverIndex??0,n=P["FirstRunApi.firstRun"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)}}};class Xt extends H{firstRun(e,t){return So(this.configuration).firstRun(e,t).then(s=>s(this.axios,this.basePath))}}const Ao=function(r){return{getOrgWebhookInfo:async(e,t={})=>{d("getOrgWebhookInfo","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getRepoWebhookInfo:async(e,t={})=>{d("getRepoWebhookInfo","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},installOrgWebhook:async(e,t,s={})=>{d("installOrgWebhook","orgID",e),d("installOrgWebhook","body",t);const o="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},installRepoWebhook:async(e,t,s={})=>{d("installRepoWebhook","repoID",e),d("installRepoWebhook","body",t);const o="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},uninstallOrgWebhook:async(e,t={})=>{d("uninstallOrgWebhook","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},uninstallRepoWebhook:async(e,t={})=>{d("uninstallRepoWebhook","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}}}},be=function(r){const e=Ao(r);return{async getOrgWebhookInfo(t,s){const o=await e.getOrgWebhookInfo(t,s),a=r?.serverIndex??0,n=P["HooksApi.getOrgWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getRepoWebhookInfo(t,s){const o=await e.getRepoWebhookInfo(t,s),a=r?.serverIndex??0,n=P["HooksApi.getRepoWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async installOrgWebhook(t,s,o){const a=await e.installOrgWebhook(t,s,o),n=r?.serverIndex??0,l=P["HooksApi.installOrgWebhook"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async installRepoWebhook(t,s,o){const a=await e.installRepoWebhook(t,s,o),n=r?.serverIndex??0,l=P["HooksApi.installRepoWebhook"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async uninstallOrgWebhook(t,s){const o=await e.uninstallOrgWebhook(t,s),a=r?.serverIndex??0,n=P["HooksApi.uninstallOrgWebhook"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async uninstallRepoWebhook(t,s){const o=await e.uninstallRepoWebhook(t,s),a=r?.serverIndex??0,n=P["HooksApi.uninstallRepoWebhook"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)}}};class Yt extends H{getOrgWebhookInfo(e,t){return be(this.configuration).getOrgWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}getRepoWebhookInfo(e,t){return be(this.configuration).getRepoWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}installOrgWebhook(e,t,s){return be(this.configuration).installOrgWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}installRepoWebhook(e,t,s){return be(this.configuration).installRepoWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}uninstallOrgWebhook(e,t){return be(this.configuration).uninstallOrgWebhook(e,t).then(s=>s(this.axios,this.basePath))}uninstallRepoWebhook(e,t){return be(this.configuration).uninstallRepoWebhook(e,t).then(s=>s(this.axios,this.basePath))}}const yo=function(r){return{deleteInstance:async(e,t,s,o={})=>{d("deleteInstance","instanceName",e);const a="/instances/{instanceName}".replace("{instanceName}",encodeURIComponent(String(e))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"DELETE",...l,...o},c={},p={};await b(c,"Authorization",r),t!==void 0&&(p.forceRemove=t),s!==void 0&&(p.bypassGHUnauthorized=s),V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},{url:S(n),options:i}},getInstance:async(e,t={})=>{d("getInstance","instanceName",e);const s="/instances/{instanceName}".replace("{instanceName}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterpriseInstances:async(e,t={})=>{d("listEnterpriseInstances","enterpriseID",e);const s="/enterprises/{enterpriseID}/instances".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listInstances:async(e={})=>{const t="/instances",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listOrgInstances:async(e,t={})=>{d("listOrgInstances","orgID",e);const s="/organizations/{orgID}/instances".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listPoolInstances:async(e,t={})=>{d("listPoolInstances","poolID",e);const s="/pools/{poolID}/instances".replace("{poolID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoInstances:async(e,t={})=>{d("listRepoInstances","repoID",e);const s="/repositories/{repoID}/instances".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listScaleSetInstances:async(e,t={})=>{d("listScaleSetInstances","scalesetID",e);const s="/scalesets/{scalesetID}/instances".replace("{scalesetID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}}}},le=function(r){const e=yo(r);return{async deleteInstance(t,s,o,a){const n=await e.deleteInstance(t,s,o,a),l=r?.serverIndex??0,i=P["InstancesApi.deleteInstance"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async getInstance(t,s){const o=await e.getInstance(t,s),a=r?.serverIndex??0,n=P["InstancesApi.getInstance"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listEnterpriseInstances(t,s){const o=await e.listEnterpriseInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listEnterpriseInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listInstances(t){const s=await e.listInstances(t),o=r?.serverIndex??0,a=P["InstancesApi.listInstances"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async listOrgInstances(t,s){const o=await e.listOrgInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listOrgInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listPoolInstances(t,s){const o=await e.listPoolInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listPoolInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listRepoInstances(t,s){const o=await e.listRepoInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listRepoInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listScaleSetInstances(t,s){const o=await e.listScaleSetInstances(t,s),a=r?.serverIndex??0,n=P["InstancesApi.listScaleSetInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)}}};class Zt extends H{deleteInstance(e,t,s,o){return le(this.configuration).deleteInstance(e,t,s,o).then(a=>a(this.axios,this.basePath))}getInstance(e,t){return le(this.configuration).getInstance(e,t).then(s=>s(this.axios,this.basePath))}listEnterpriseInstances(e,t){return le(this.configuration).listEnterpriseInstances(e,t).then(s=>s(this.axios,this.basePath))}listInstances(e){return le(this.configuration).listInstances(e).then(t=>t(this.axios,this.basePath))}listOrgInstances(e,t){return le(this.configuration).listOrgInstances(e,t).then(s=>s(this.axios,this.basePath))}listPoolInstances(e,t){return le(this.configuration).listPoolInstances(e,t).then(s=>s(this.axios,this.basePath))}listRepoInstances(e,t){return le(this.configuration).listRepoInstances(e,t).then(s=>s(this.axios,this.basePath))}listScaleSetInstances(e,t){return le(this.configuration).listScaleSetInstances(e,t).then(s=>s(this.axios,this.basePath))}}const Ro=function(r){return{login:async(e,t={})=>{d("login","body",e);const s="/auth/login",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}}}},fo=function(r){const e=Ro(r);return{async login(t,s){const o=await e.login(t,s),a=r?.serverIndex??0,n=P["LoginApi.login"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)}}};class er extends H{login(e,t){return fo(this.configuration).login(e,t).then(s=>s(this.axios,this.basePath))}}const wo=function(r){return{deleteFileObject:async(e,t={})=>{d("deleteFileObject","objectID",e);const s="/objects/{objectID}".replace("{objectID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getFileObject:async(e,t={})=>{d("getFileObject","objectID",e);const s="/objects/{objectID}".replace("{objectID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listFileObjects:async(e,t,s,o={})=>{const a="/objects",n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"GET",...l,...o},c={},p={};await b(c,"Authorization",r),e!==void 0&&(p.tags=e),t!==void 0&&(p.page=t),s!==void 0&&(p.pageSize=s),V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},{url:S(n),options:i}},updateFileObject:async(e,t,s={})=>{d("updateFileObject","objectID",e),d("updateFileObject","body",t);const o="/objects/{objectID}".replace("{objectID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}}}},Le=function(r){const e=wo(r);return{async deleteFileObject(t,s){const o=await e.deleteFileObject(t,s),a=r?.serverIndex??0,n=P["ObjectsApi.deleteFileObject"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getFileObject(t,s){const o=await e.getFileObject(t,s),a=r?.serverIndex??0,n=P["ObjectsApi.getFileObject"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listFileObjects(t,s,o,a){const n=await e.listFileObjects(t,s,o,a),l=r?.serverIndex??0,i=P["ObjectsApi.listFileObjects"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async updateFileObject(t,s,o){const a=await e.updateFileObject(t,s,o),n=r?.serverIndex??0,l=P["ObjectsApi.updateFileObject"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)}}};class Io extends H{deleteFileObject(e,t){return Le(this.configuration).deleteFileObject(e,t).then(s=>s(this.axios,this.basePath))}getFileObject(e,t){return Le(this.configuration).getFileObject(e,t).then(s=>s(this.axios,this.basePath))}listFileObjects(e,t,s,o){return Le(this.configuration).listFileObjects(e,t,s,o).then(a=>a(this.axios,this.basePath))}updateFileObject(e,t,s){return Le(this.configuration).updateFileObject(e,t,s).then(o=>o(this.axios,this.basePath))}}const Eo=function(r){return{createOrg:async(e,t={})=>{d("createOrg","body",e);const s="/organizations",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},createOrgPool:async(e,t,s={})=>{d("createOrgPool","orgID",e),d("createOrgPool","body",t);const o="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createOrgScaleSet:async(e,t,s={})=>{d("createOrgScaleSet","orgID",e),d("createOrgScaleSet","body",t);const o="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},deleteOrg:async(e,t,s={})=>{d("deleteOrg","orgID",e);const o="/organizations/{orgID}".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),t!==void 0&&(c.keepWebhook=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deleteOrgPool:async(e,t,s={})=>{d("deleteOrgPool","orgID",e),d("deleteOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getOrg:async(e,t={})=>{d("getOrg","orgID",e);const s="/organizations/{orgID}".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getOrgPool:async(e,t,s={})=>{d("getOrgPool","orgID",e),d("getOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getOrgWebhookInfo:async(e,t={})=>{d("getOrgWebhookInfo","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},installOrgWebhook:async(e,t,s={})=>{d("installOrgWebhook","orgID",e),d("installOrgWebhook","body",t);const o="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},listOrgInstances:async(e,t={})=>{d("listOrgInstances","orgID",e);const s="/organizations/{orgID}/instances".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgPools:async(e,t={})=>{d("listOrgPools","orgID",e);const s="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgScaleSets:async(e,t={})=>{d("listOrgScaleSets","orgID",e);const s="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgs:async(e,t,s={})=>{const o="/organizations",a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),e!==void 0&&(c.name=e),t!==void 0&&(c.endpoint=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},uninstallOrgWebhook:async(e,t={})=>{d("uninstallOrgWebhook","orgID",e);const s="/organizations/{orgID}/webhook".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},updateOrg:async(e,t,s={})=>{d("updateOrg","orgID",e),d("updateOrg","body",t);const o="/organizations/{orgID}".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateOrgPool:async(e,t,s,o={})=>{d("updateOrgPool","orgID",e),d("updateOrgPool","poolID",t),d("updateOrgPool","body",s);const a="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}}}},G=function(r){const e=Eo(r);return{async createOrg(t,s){const o=await e.createOrg(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.createOrg"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async createOrgPool(t,s,o){const a=await e.createOrgPool(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.createOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createOrgScaleSet(t,s,o){const a=await e.createOrgScaleSet(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.createOrgScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteOrg(t,s,o){const a=await e.deleteOrg(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.deleteOrg"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteOrgPool(t,s,o){const a=await e.deleteOrgPool(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.deleteOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getOrg(t,s){const o=await e.getOrg(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.getOrg"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getOrgPool(t,s,o){const a=await e.getOrgPool(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.getOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getOrgWebhookInfo(t,s){const o=await e.getOrgWebhookInfo(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.getOrgWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async installOrgWebhook(t,s,o){const a=await e.installOrgWebhook(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.installOrgWebhook"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async listOrgInstances(t,s){const o=await e.listOrgInstances(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.listOrgInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listOrgPools(t,s){const o=await e.listOrgPools(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.listOrgPools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listOrgScaleSets(t,s){const o=await e.listOrgScaleSets(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.listOrgScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listOrgs(t,s,o){const a=await e.listOrgs(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.listOrgs"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async uninstallOrgWebhook(t,s){const o=await e.uninstallOrgWebhook(t,s),a=r?.serverIndex??0,n=P["OrganizationsApi.uninstallOrgWebhook"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async updateOrg(t,s,o){const a=await e.updateOrg(t,s,o),n=r?.serverIndex??0,l=P["OrganizationsApi.updateOrg"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateOrgPool(t,s,o,a){const n=await e.updateOrgPool(t,s,o,a),l=r?.serverIndex??0,i=P["OrganizationsApi.updateOrgPool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)}}};class tr extends H{createOrg(e,t){return G(this.configuration).createOrg(e,t).then(s=>s(this.axios,this.basePath))}createOrgPool(e,t,s){return G(this.configuration).createOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}createOrgScaleSet(e,t,s){return G(this.configuration).createOrgScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteOrg(e,t,s){return G(this.configuration).deleteOrg(e,t,s).then(o=>o(this.axios,this.basePath))}deleteOrgPool(e,t,s){return G(this.configuration).deleteOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}getOrg(e,t){return G(this.configuration).getOrg(e,t).then(s=>s(this.axios,this.basePath))}getOrgPool(e,t,s){return G(this.configuration).getOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}getOrgWebhookInfo(e,t){return G(this.configuration).getOrgWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}installOrgWebhook(e,t,s){return G(this.configuration).installOrgWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}listOrgInstances(e,t){return G(this.configuration).listOrgInstances(e,t).then(s=>s(this.axios,this.basePath))}listOrgPools(e,t){return G(this.configuration).listOrgPools(e,t).then(s=>s(this.axios,this.basePath))}listOrgScaleSets(e,t){return G(this.configuration).listOrgScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listOrgs(e,t,s){return G(this.configuration).listOrgs(e,t,s).then(o=>o(this.axios,this.basePath))}uninstallOrgWebhook(e,t){return G(this.configuration).uninstallOrgWebhook(e,t).then(s=>s(this.axios,this.basePath))}updateOrg(e,t,s){return G(this.configuration).updateOrg(e,t,s).then(o=>o(this.axios,this.basePath))}updateOrgPool(e,t,s,o){return G(this.configuration).updateOrgPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const xo=function(r){return{createEnterprisePool:async(e,t,s={})=>{d("createEnterprisePool","enterpriseID",e),d("createEnterprisePool","body",t);const o="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createOrgPool:async(e,t,s={})=>{d("createOrgPool","orgID",e),d("createOrgPool","body",t);const o="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createRepoPool:async(e,t,s={})=>{d("createRepoPool","repoID",e),d("createRepoPool","body",t);const o="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},deleteEnterprisePool:async(e,t,s={})=>{d("deleteEnterprisePool","enterpriseID",e),d("deleteEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deleteOrgPool:async(e,t,s={})=>{d("deleteOrgPool","orgID",e),d("deleteOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deletePool:async(e,t={})=>{d("deletePool","poolID",e);const s="/pools/{poolID}".replace("{poolID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},deleteRepoPool:async(e,t,s={})=>{d("deleteRepoPool","repoID",e),d("deleteRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getEnterprisePool:async(e,t,s={})=>{d("getEnterprisePool","enterpriseID",e),d("getEnterprisePool","poolID",t);const o="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getOrgPool:async(e,t,s={})=>{d("getOrgPool","orgID",e),d("getOrgPool","poolID",t);const o="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getPool:async(e,t={})=>{d("getPool","poolID",e);const s="/pools/{poolID}".replace("{poolID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getRepoPool:async(e,t,s={})=>{d("getRepoPool","repoID",e),d("getRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},listEnterprisePools:async(e,t={})=>{d("listEnterprisePools","enterpriseID",e);const s="/enterprises/{enterpriseID}/pools".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgPools:async(e,t={})=>{d("listOrgPools","orgID",e);const s="/organizations/{orgID}/pools".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listPools:async(e={})=>{const t="/pools",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},listRepoPools:async(e,t={})=>{d("listRepoPools","repoID",e);const s="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},updateEnterprisePool:async(e,t,s,o={})=>{d("updateEnterprisePool","enterpriseID",e),d("updateEnterprisePool","poolID",t),d("updateEnterprisePool","body",s);const a="/enterprises/{enterpriseID}/pools/{poolID}".replace("{enterpriseID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}},updateOrgPool:async(e,t,s,o={})=>{d("updateOrgPool","orgID",e),d("updateOrgPool","poolID",t),d("updateOrgPool","body",s);const a="/organizations/{orgID}/pools/{poolID}".replace("{orgID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}},updatePool:async(e,t,s={})=>{d("updatePool","poolID",e),d("updatePool","body",t);const o="/pools/{poolID}".replace("{poolID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateRepoPool:async(e,t,s,o={})=>{d("updateRepoPool","repoID",e),d("updateRepoPool","poolID",t),d("updateRepoPool","body",s);const a="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}}}},j=function(r){const e=xo(r);return{async createEnterprisePool(t,s,o){const a=await e.createEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.createEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createOrgPool(t,s,o){const a=await e.createOrgPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.createOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createRepoPool(t,s,o){const a=await e.createRepoPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.createRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteEnterprisePool(t,s,o){const a=await e.deleteEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.deleteEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteOrgPool(t,s,o){const a=await e.deleteOrgPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.deleteOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deletePool(t,s){const o=await e.deletePool(t,s),a=r?.serverIndex??0,n=P["PoolsApi.deletePool"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteRepoPool(t,s,o){const a=await e.deleteRepoPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.deleteRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getEnterprisePool(t,s,o){const a=await e.getEnterprisePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.getEnterprisePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getOrgPool(t,s,o){const a=await e.getOrgPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.getOrgPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getPool(t,s){const o=await e.getPool(t,s),a=r?.serverIndex??0,n=P["PoolsApi.getPool"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getRepoPool(t,s,o){const a=await e.getRepoPool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.getRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async listEnterprisePools(t,s){const o=await e.listEnterprisePools(t,s),a=r?.serverIndex??0,n=P["PoolsApi.listEnterprisePools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listOrgPools(t,s){const o=await e.listOrgPools(t,s),a=r?.serverIndex??0,n=P["PoolsApi.listOrgPools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listPools(t){const s=await e.listPools(t),o=r?.serverIndex??0,a=P["PoolsApi.listPools"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async listRepoPools(t,s){const o=await e.listRepoPools(t,s),a=r?.serverIndex??0,n=P["PoolsApi.listRepoPools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async updateEnterprisePool(t,s,o,a){const n=await e.updateEnterprisePool(t,s,o,a),l=r?.serverIndex??0,i=P["PoolsApi.updateEnterprisePool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async updateOrgPool(t,s,o,a){const n=await e.updateOrgPool(t,s,o,a),l=r?.serverIndex??0,i=P["PoolsApi.updateOrgPool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async updatePool(t,s,o){const a=await e.updatePool(t,s,o),n=r?.serverIndex??0,l=P["PoolsApi.updatePool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateRepoPool(t,s,o,a){const n=await e.updateRepoPool(t,s,o,a),l=r?.serverIndex??0,i=P["PoolsApi.updateRepoPool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)}}};class rr extends H{createEnterprisePool(e,t,s){return j(this.configuration).createEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}createOrgPool(e,t,s){return j(this.configuration).createOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}createRepoPool(e,t,s){return j(this.configuration).createRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}deleteEnterprisePool(e,t,s){return j(this.configuration).deleteEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}deleteOrgPool(e,t,s){return j(this.configuration).deleteOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}deletePool(e,t){return j(this.configuration).deletePool(e,t).then(s=>s(this.axios,this.basePath))}deleteRepoPool(e,t,s){return j(this.configuration).deleteRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}getEnterprisePool(e,t,s){return j(this.configuration).getEnterprisePool(e,t,s).then(o=>o(this.axios,this.basePath))}getOrgPool(e,t,s){return j(this.configuration).getOrgPool(e,t,s).then(o=>o(this.axios,this.basePath))}getPool(e,t){return j(this.configuration).getPool(e,t).then(s=>s(this.axios,this.basePath))}getRepoPool(e,t,s){return j(this.configuration).getRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}listEnterprisePools(e,t){return j(this.configuration).listEnterprisePools(e,t).then(s=>s(this.axios,this.basePath))}listOrgPools(e,t){return j(this.configuration).listOrgPools(e,t).then(s=>s(this.axios,this.basePath))}listPools(e){return j(this.configuration).listPools(e).then(t=>t(this.axios,this.basePath))}listRepoPools(e,t){return j(this.configuration).listRepoPools(e,t).then(s=>s(this.axios,this.basePath))}updateEnterprisePool(e,t,s,o){return j(this.configuration).updateEnterprisePool(e,t,s,o).then(a=>a(this.axios,this.basePath))}updateOrgPool(e,t,s,o){return j(this.configuration).updateOrgPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}updatePool(e,t,s){return j(this.configuration).updatePool(e,t,s).then(o=>o(this.axios,this.basePath))}updateRepoPool(e,t,s,o){return j(this.configuration).updateRepoPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const go=function(r){return{listProviders:async(e={})=>{const t="/providers",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}}}},vo=function(r){const e=go(r);return{async listProviders(t){const s=await e.listProviders(t),o=r?.serverIndex??0,a=P["ProvidersApi.listProviders"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)}}};class sr extends H{listProviders(e){return vo(this.configuration).listProviders(e).then(t=>t(this.axios,this.basePath))}}const Uo=function(r){return{createRepo:async(e,t={})=>{d("createRepo","body",e);const s="/repositories",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},createRepoPool:async(e,t,s={})=>{d("createRepoPool","repoID",e),d("createRepoPool","body",t);const o="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createRepoScaleSet:async(e,t,s={})=>{d("createRepoScaleSet","repoID",e),d("createRepoScaleSet","body",t);const o="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},deleteRepo:async(e,t,s={})=>{d("deleteRepo","repoID",e);const o="/repositories/{repoID}".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),t!==void 0&&(c.keepWebhook=t),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},deleteRepoPool:async(e,t,s={})=>{d("deleteRepoPool","repoID",e),d("deleteRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"DELETE",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getRepo:async(e,t={})=>{d("getRepo","repoID",e);const s="/repositories/{repoID}".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getRepoPool:async(e,t,s={})=>{d("getRepoPool","repoID",e),d("getRepoPool","poolID",t);const o="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"GET",...n,...s},i={},c={};await b(i,"Authorization",r),V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},{url:S(a),options:l}},getRepoWebhookInfo:async(e,t={})=>{d("getRepoWebhookInfo","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},installRepoWebhook:async(e,t,s={})=>{d("installRepoWebhook","repoID",e),d("installRepoWebhook","body",t);const o="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},listRepoInstances:async(e,t={})=>{d("listRepoInstances","repoID",e);const s="/repositories/{repoID}/instances".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoPools:async(e,t={})=>{d("listRepoPools","repoID",e);const s="/repositories/{repoID}/pools".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoScaleSets:async(e,t={})=>{d("listRepoScaleSets","repoID",e);const s="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepos:async(e,t,s,o={})=>{const a="/repositories",n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"GET",...l,...o},c={},p={};await b(c,"Authorization",r),e!==void 0&&(p.owner=e),t!==void 0&&(p.name=t),s!==void 0&&(p.endpoint=s),V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},{url:S(n),options:i}},uninstallRepoWebhook:async(e,t={})=>{d("uninstallRepoWebhook","repoID",e);const s="/repositories/{repoID}/webhook".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},updateRepo:async(e,t,s={})=>{d("updateRepo","repoID",e),d("updateRepo","body",t);const o="/repositories/{repoID}".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},updateRepoPool:async(e,t,s,o={})=>{d("updateRepoPool","repoID",e),d("updateRepoPool","poolID",t),d("updateRepoPool","body",s);const a="/repositories/{repoID}/pools/{poolID}".replace("{repoID}",encodeURIComponent(String(e))).replace("{poolID}",encodeURIComponent(String(t))),n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"PUT",...l,...o},c={},p={};await b(c,"Authorization",r),c["Content-Type"]="application/json",V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},i.data=g(s,i,r),{url:S(n),options:i}}}},_=function(r){const e=Uo(r);return{async createRepo(t,s){const o=await e.createRepo(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.createRepo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async createRepoPool(t,s,o){const a=await e.createRepoPool(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.createRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createRepoScaleSet(t,s,o){const a=await e.createRepoScaleSet(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.createRepoScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteRepo(t,s,o){const a=await e.deleteRepo(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.deleteRepo"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteRepoPool(t,s,o){const a=await e.deleteRepoPool(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.deleteRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getRepo(t,s){const o=await e.getRepo(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.getRepo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getRepoPool(t,s,o){const a=await e.getRepoPool(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.getRepoPool"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async getRepoWebhookInfo(t,s){const o=await e.getRepoWebhookInfo(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.getRepoWebhookInfo"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async installRepoWebhook(t,s,o){const a=await e.installRepoWebhook(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.installRepoWebhook"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async listRepoInstances(t,s){const o=await e.listRepoInstances(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.listRepoInstances"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listRepoPools(t,s){const o=await e.listRepoPools(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.listRepoPools"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listRepoScaleSets(t,s){const o=await e.listRepoScaleSets(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.listRepoScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listRepos(t,s,o,a){const n=await e.listRepos(t,s,o,a),l=r?.serverIndex??0,i=P["RepositoriesApi.listRepos"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async uninstallRepoWebhook(t,s){const o=await e.uninstallRepoWebhook(t,s),a=r?.serverIndex??0,n=P["RepositoriesApi.uninstallRepoWebhook"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async updateRepo(t,s,o){const a=await e.updateRepo(t,s,o),n=r?.serverIndex??0,l=P["RepositoriesApi.updateRepo"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async updateRepoPool(t,s,o,a){const n=await e.updateRepoPool(t,s,o,a),l=r?.serverIndex??0,i=P["RepositoriesApi.updateRepoPool"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)}}};class ar extends H{createRepo(e,t){return _(this.configuration).createRepo(e,t).then(s=>s(this.axios,this.basePath))}createRepoPool(e,t,s){return _(this.configuration).createRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}createRepoScaleSet(e,t,s){return _(this.configuration).createRepoScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteRepo(e,t,s){return _(this.configuration).deleteRepo(e,t,s).then(o=>o(this.axios,this.basePath))}deleteRepoPool(e,t,s){return _(this.configuration).deleteRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}getRepo(e,t){return _(this.configuration).getRepo(e,t).then(s=>s(this.axios,this.basePath))}getRepoPool(e,t,s){return _(this.configuration).getRepoPool(e,t,s).then(o=>o(this.axios,this.basePath))}getRepoWebhookInfo(e,t){return _(this.configuration).getRepoWebhookInfo(e,t).then(s=>s(this.axios,this.basePath))}installRepoWebhook(e,t,s){return _(this.configuration).installRepoWebhook(e,t,s).then(o=>o(this.axios,this.basePath))}listRepoInstances(e,t){return _(this.configuration).listRepoInstances(e,t).then(s=>s(this.axios,this.basePath))}listRepoPools(e,t){return _(this.configuration).listRepoPools(e,t).then(s=>s(this.axios,this.basePath))}listRepoScaleSets(e,t){return _(this.configuration).listRepoScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listRepos(e,t,s,o){return _(this.configuration).listRepos(e,t,s,o).then(a=>a(this.axios,this.basePath))}uninstallRepoWebhook(e,t){return _(this.configuration).uninstallRepoWebhook(e,t).then(s=>s(this.axios,this.basePath))}updateRepo(e,t,s){return _(this.configuration).updateRepo(e,t,s).then(o=>o(this.axios,this.basePath))}updateRepoPool(e,t,s,o){return _(this.configuration).updateRepoPool(e,t,s,o).then(a=>a(this.axios,this.basePath))}}const Co=function(r){return{createEnterpriseScaleSet:async(e,t,s={})=>{d("createEnterpriseScaleSet","enterpriseID",e),d("createEnterpriseScaleSet","body",t);const o="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createOrgScaleSet:async(e,t,s={})=>{d("createOrgScaleSet","orgID",e),d("createOrgScaleSet","body",t);const o="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},createRepoScaleSet:async(e,t,s={})=>{d("createRepoScaleSet","repoID",e),d("createRepoScaleSet","body",t);const o="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"POST",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}},deleteScaleSet:async(e,t={})=>{d("deleteScaleSet","scalesetID",e);const s="/scalesets/{scalesetID}".replace("{scalesetID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getScaleSet:async(e,t={})=>{d("getScaleSet","scalesetID",e);const s="/scalesets/{scalesetID}".replace("{scalesetID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listEnterpriseScaleSets:async(e,t={})=>{d("listEnterpriseScaleSets","enterpriseID",e);const s="/enterprises/{enterpriseID}/scalesets".replace("{enterpriseID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listOrgScaleSets:async(e,t={})=>{d("listOrgScaleSets","orgID",e);const s="/organizations/{orgID}/scalesets".replace("{orgID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listRepoScaleSets:async(e,t={})=>{d("listRepoScaleSets","repoID",e);const s="/repositories/{repoID}/scalesets".replace("{repoID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listScalesets:async(e={})=>{const t="/scalesets",s=new URL(t,m);let o;r&&(o=r.baseOptions);const a={method:"GET",...o,...e},n={},l={};await b(n,"Authorization",r),V(s,l);let i=o&&o.headers?o.headers:{};return a.headers={...n,...i,...e.headers},{url:S(s),options:a}},updateScaleSet:async(e,t,s={})=>{d("updateScaleSet","scalesetID",e),d("updateScaleSet","body",t);const o="/scalesets/{scalesetID}".replace("{scalesetID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}}}},Z=function(r){const e=Co(r);return{async createEnterpriseScaleSet(t,s,o){const a=await e.createEnterpriseScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.createEnterpriseScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createOrgScaleSet(t,s,o){const a=await e.createOrgScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.createOrgScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async createRepoScaleSet(t,s,o){const a=await e.createRepoScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.createRepoScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)},async deleteScaleSet(t,s){const o=await e.deleteScaleSet(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.deleteScaleSet"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getScaleSet(t,s){const o=await e.getScaleSet(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.getScaleSet"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listEnterpriseScaleSets(t,s){const o=await e.listEnterpriseScaleSets(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.listEnterpriseScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listOrgScaleSets(t,s){const o=await e.listOrgScaleSets(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.listOrgScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listRepoScaleSets(t,s){const o=await e.listRepoScaleSets(t,s),a=r?.serverIndex??0,n=P["ScalesetsApi.listRepoScaleSets"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listScalesets(t){const s=await e.listScalesets(t),o=r?.serverIndex??0,a=P["ScalesetsApi.listScalesets"]?.[o]?.url;return(n,l)=>A(s,h,O,r)(n,a||l)},async updateScaleSet(t,s,o){const a=await e.updateScaleSet(t,s,o),n=r?.serverIndex??0,l=P["ScalesetsApi.updateScaleSet"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)}}};class or extends H{createEnterpriseScaleSet(e,t,s){return Z(this.configuration).createEnterpriseScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}createOrgScaleSet(e,t,s){return Z(this.configuration).createOrgScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}createRepoScaleSet(e,t,s){return Z(this.configuration).createRepoScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}deleteScaleSet(e,t){return Z(this.configuration).deleteScaleSet(e,t).then(s=>s(this.axios,this.basePath))}getScaleSet(e,t){return Z(this.configuration).getScaleSet(e,t).then(s=>s(this.axios,this.basePath))}listEnterpriseScaleSets(e,t){return Z(this.configuration).listEnterpriseScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listOrgScaleSets(e,t){return Z(this.configuration).listOrgScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listRepoScaleSets(e,t){return Z(this.configuration).listRepoScaleSets(e,t).then(s=>s(this.axios,this.basePath))}listScalesets(e){return Z(this.configuration).listScalesets(e).then(t=>t(this.axios,this.basePath))}updateScaleSet(e,t,s){return Z(this.configuration).updateScaleSet(e,t,s).then(o=>o(this.axios,this.basePath))}}const To=function(r){return{createTemplate:async(e,t={})=>{d("createTemplate","body",e);const s="/templates",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},deleteTemplate:async(e,t={})=>{d("deleteTemplate","templateID",e);const s="/templates/{templateID}".replace("{templateID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"DELETE",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},getTemplate:async(e,t={})=>{d("getTemplate","templateID",e);const s="/templates/{templateID}".replace("{templateID}",encodeURIComponent(String(e))),o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"GET",...a,...t},l={},i={};await b(l,"Authorization",r),V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},{url:S(o),options:n}},listTemplates:async(e,t,s,o={})=>{const a="/templates",n=new URL(a,m);let l;r&&(l=r.baseOptions);const i={method:"GET",...l,...o},c={},p={};await b(c,"Authorization",r),e!==void 0&&(p.osType=e),t!==void 0&&(p.partialName=t),s!==void 0&&(p.forgeType=s),V(n,p);let y=l&&l.headers?l.headers:{};return i.headers={...c,...y,...o.headers},{url:S(n),options:i}},restoreTemplates:async(e,t={})=>{d("restoreTemplates","body",e);const s="/templates/restore",o=new URL(s,m);let a;r&&(a=r.baseOptions);const n={method:"POST",...a,...t},l={},i={};await b(l,"Authorization",r),l["Content-Type"]="application/json",V(o,i);let c=a&&a.headers?a.headers:{};return n.headers={...l,...c,...t.headers},n.data=g(e,n,r),{url:S(o),options:n}},updateTemplate:async(e,t,s={})=>{d("updateTemplate","templateID",e),d("updateTemplate","body",t);const o="/templates/{templateID}".replace("{templateID}",encodeURIComponent(String(e))),a=new URL(o,m);let n;r&&(n=r.baseOptions);const l={method:"PUT",...n,...s},i={},c={};await b(i,"Authorization",r),i["Content-Type"]="application/json",V(a,c);let p=n&&n.headers?n.headers:{};return l.headers={...i,...p,...s.headers},l.data=g(t,l,r),{url:S(a),options:l}}}},Ve=function(r){const e=To(r);return{async createTemplate(t,s){const o=await e.createTemplate(t,s),a=r?.serverIndex??0,n=P["TemplatesApi.createTemplate"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async deleteTemplate(t,s){const o=await e.deleteTemplate(t,s),a=r?.serverIndex??0,n=P["TemplatesApi.deleteTemplate"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async getTemplate(t,s){const o=await e.getTemplate(t,s),a=r?.serverIndex??0,n=P["TemplatesApi.getTemplate"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async listTemplates(t,s,o,a){const n=await e.listTemplates(t,s,o,a),l=r?.serverIndex??0,i=P["TemplatesApi.listTemplates"]?.[l]?.url;return(c,p)=>A(n,h,O,r)(c,i||p)},async restoreTemplates(t,s){const o=await e.restoreTemplates(t,s),a=r?.serverIndex??0,n=P["TemplatesApi.restoreTemplates"]?.[a]?.url;return(l,i)=>A(o,h,O,r)(l,n||i)},async updateTemplate(t,s,o){const a=await e.updateTemplate(t,s,o),n=r?.serverIndex??0,l=P["TemplatesApi.updateTemplate"]?.[n]?.url;return(i,c)=>A(a,h,O,r)(i,l||c)}}};class Bo extends H{createTemplate(e,t){return Ve(this.configuration).createTemplate(e,t).then(s=>s(this.axios,this.basePath))}deleteTemplate(e,t){return Ve(this.configuration).deleteTemplate(e,t).then(s=>s(this.axios,this.basePath))}getTemplate(e,t){return Ve(this.configuration).getTemplate(e,t).then(s=>s(this.axios,this.basePath))}listTemplates(e,t,s,o){return Ve(this.configuration).listTemplates(e,t,s,o).then(a=>a(this.axios,this.basePath))}restoreTemplates(e,t){return Ve(this.configuration).restoreTemplates(e,t).then(s=>s(this.axios,this.basePath))}updateTemplate(e,t,s){return Ve(this.configuration).updateTemplate(e,t,s).then(o=>o(this.axios,this.basePath))}}class nr{apiKey;username;password;accessToken;basePath;serverIndex;baseOptions;formDataCtor;constructor(e={}){this.apiKey=e.apiKey,this.username=e.username,this.password=e.password,this.accessToken=e.accessToken,this.basePath=e.basePath,this.serverIndex=e.serverIndex,this.baseOptions={...e.baseOptions,headers:{...e.baseOptions?.headers}},this.formDataCtor=e.formDataCtor}isJsonMime(e){const t=new RegExp("^(application/json|[^;/ ]+/[^;/ ]+[+]json)[ ]*(;.*)?$","i");return e!==null&&(t.test(e)||e.toLowerCase()==="application/json-patch+json")}}class zr{baseUrl;token;config;isDevelopmentMode(){return typeof window>"u"?!1:window.location.port==="5173"}loginApi;controllerInfoApi;controllerApi;endpointsApi;credentialsApi;repositoriesApi;organizationsApi;enterprisesApi;poolsApi;scaleSetsApi;instancesApi;providersApi;firstRunApi;hooksApi;templatesApi;objectsApi;constructor(e=""){this.baseUrl=e||window.location.origin;const t=this.isDevelopmentMode();this.config=new nr({basePath:`${this.baseUrl}/api/v1`,accessToken:()=>this.token||"",baseOptions:{withCredentials:!t}}),this.loginApi=new er(this.config),this.controllerInfoApi=new Qt(this.config),this.controllerApi=new Wt(this.config),this.endpointsApi=new Jt(this.config),this.credentialsApi=new Mt(this.config),this.repositoriesApi=new ar(this.config),this.organizationsApi=new tr(this.config),this.enterprisesApi=new Kt(this.config),this.poolsApi=new rr(this.config),this.scaleSetsApi=new or(this.config),this.instancesApi=new Zt(this.config),this.providersApi=new sr(this.config),this.firstRunApi=new Xt(this.config),this.hooksApi=new Yt(this.config),this.templatesApi=new Bo(this.config),this.objectsApi=new Io(this.config)}setToken(e){this.token=e;const t=this.isDevelopmentMode();this.config=new nr({basePath:`${this.baseUrl}/api/v1`,accessToken:()=>e,baseOptions:{withCredentials:!t}}),this.loginApi=new er(this.config),this.controllerInfoApi=new Qt(this.config),this.controllerApi=new Wt(this.config),this.endpointsApi=new Jt(this.config),this.credentialsApi=new Mt(this.config),this.repositoriesApi=new ar(this.config),this.organizationsApi=new tr(this.config),this.enterprisesApi=new Kt(this.config),this.poolsApi=new rr(this.config),this.scaleSetsApi=new or(this.config),this.instancesApi=new Zt(this.config),this.providersApi=new sr(this.config),this.firstRunApi=new Xt(this.config),this.hooksApi=new Yt(this.config)}async login(e){const t={username:e.username,password:e.password},o=(await this.loginApi.login(t)).data.token;if(o)return this.setToken(o),{token:o};throw new Error("Login failed")}async getControllerInfo(){return(await this.controllerInfoApi.controllerInfo()).data}async listGithubEndpoints(){return(await this.endpointsApi.listGithubEndpoints()).data||[]}async getGithubEndpoint(e){return(await this.endpointsApi.getGithubEndpoint(e)).data}async createGithubEndpoint(e){return(await this.endpointsApi.createGithubEndpoint(e)).data}async updateGithubEndpoint(e,t){return(await this.endpointsApi.updateGithubEndpoint(e,t)).data}async deleteGithubEndpoint(e){await this.endpointsApi.deleteGithubEndpoint(e)}async listGiteaEndpoints(){return(await this.endpointsApi.listGiteaEndpoints()).data||[]}async getGiteaEndpoint(e){return(await this.endpointsApi.getGiteaEndpoint(e)).data}async createGiteaEndpoint(e){return(await this.endpointsApi.createGiteaEndpoint(e)).data}async updateGiteaEndpoint(e,t){return(await this.endpointsApi.updateGiteaEndpoint(e,t)).data}async deleteGiteaEndpoint(e){await this.endpointsApi.deleteGiteaEndpoint(e)}async listAllEndpoints(){const[e,t]=await Promise.all([this.listGithubEndpoints().catch(()=>[]),this.listGiteaEndpoints().catch(()=>[])]);return[...e.map(s=>({...s,endpoint_type:"github"})),...t.map(s=>({...s,endpoint_type:"gitea"}))]}async listGithubCredentials(){return(await this.credentialsApi.listCredentials()).data||[]}async getGithubCredentials(e){return(await this.credentialsApi.getCredentials(e)).data}async createGithubCredentials(e){return(await this.credentialsApi.createCredentials(e)).data}async updateGithubCredentials(e,t){return(await this.credentialsApi.updateCredentials(e,t)).data}async deleteGithubCredentials(e){await this.credentialsApi.deleteCredentials(e)}async listGiteaCredentials(){return(await this.credentialsApi.listGiteaCredentials()).data||[]}async getGiteaCredentials(e){return(await this.credentialsApi.getGiteaCredentials(e)).data}async createGiteaCredentials(e){return(await this.credentialsApi.createGiteaCredentials(e)).data}async updateGiteaCredentials(e,t){return(await this.credentialsApi.updateGiteaCredentials(e,t)).data}async deleteGiteaCredentials(e){await this.credentialsApi.deleteGiteaCredentials(e)}async listAllCredentials(){const[e,t]=await Promise.all([this.listGithubCredentials().catch(()=>[]),this.listGiteaCredentials().catch(()=>[])]);return[...e,...t]}async installRepositoryWebhook(e,t={}){await this.repositoriesApi.installRepoWebhook(e,t)}async uninstallRepositoryWebhook(e){await this.hooksApi.uninstallRepoWebhook(e)}async getRepositoryWebhookInfo(e){return(await this.hooksApi.getRepoWebhookInfo(e)).data}async listRepositories(){return(await this.repositoriesApi.listRepos()).data||[]}async getRepository(e){return(await this.repositoriesApi.getRepo(e)).data}async createRepository(e){return(await this.repositoriesApi.createRepo(e)).data}async updateRepository(e,t){return(await this.repositoriesApi.updateRepo(e,t)).data}async deleteRepository(e){await this.repositoriesApi.deleteRepo(e)}async installRepoWebhook(e){await this.repositoriesApi.installRepoWebhook(e,{})}async listRepositoryPools(e){return(await this.repositoriesApi.listRepoPools(e)).data||[]}async listRepositoryInstances(e){return(await this.repositoriesApi.listRepoInstances(e)).data||[]}async createRepositoryPool(e,t){return(await this.repositoriesApi.createRepoPool(e,t)).data}async installOrganizationWebhook(e,t={}){await this.organizationsApi.installOrgWebhook(e,t)}async uninstallOrganizationWebhook(e){await this.hooksApi.uninstallOrgWebhook(e)}async getOrganizationWebhookInfo(e){return(await this.hooksApi.getOrgWebhookInfo(e)).data}async listOrganizations(){return(await this.organizationsApi.listOrgs()).data||[]}async getOrganization(e){return(await this.organizationsApi.getOrg(e)).data}async createOrganization(e){return(await this.organizationsApi.createOrg(e)).data}async updateOrganization(e,t){return(await this.organizationsApi.updateOrg(e,t)).data}async deleteOrganization(e){await this.organizationsApi.deleteOrg(e)}async listOrganizationPools(e){return(await this.organizationsApi.listOrgPools(e)).data||[]}async listOrganizationInstances(e){return(await this.organizationsApi.listOrgInstances(e)).data||[]}async createOrganizationPool(e,t){return(await this.organizationsApi.createOrgPool(e,t)).data}async listEnterprises(){return(await this.enterprisesApi.listEnterprises()).data||[]}async getEnterprise(e){return(await this.enterprisesApi.getEnterprise(e)).data}async createEnterprise(e){return(await this.enterprisesApi.createEnterprise(e)).data}async updateEnterprise(e,t){return(await this.enterprisesApi.updateEnterprise(e,t)).data}async deleteEnterprise(e){await this.enterprisesApi.deleteEnterprise(e)}async listEnterprisePools(e){return(await this.enterprisesApi.listEnterprisePools(e)).data||[]}async listEnterpriseInstances(e){return(await this.enterprisesApi.listEnterpriseInstances(e)).data||[]}async createEnterprisePool(e,t){return(await this.enterprisesApi.createEnterprisePool(e,t)).data}async createRepositoryScaleSet(e,t){return(await this.repositoriesApi.createRepoScaleSet(e,t)).data}async listRepositoryScaleSets(e){return(await this.repositoriesApi.listRepoScaleSets(e)).data||[]}async createOrganizationScaleSet(e,t){return(await this.organizationsApi.createOrgScaleSet(e,t)).data}async listOrganizationScaleSets(e){return(await this.organizationsApi.listOrgScaleSets(e)).data||[]}async createEnterpriseScaleSet(e,t){return(await this.enterprisesApi.createEnterpriseScaleSet(e,t)).data}async listEnterpriseScaleSets(e){return(await this.enterprisesApi.listEnterpriseScaleSets(e)).data||[]}async listPools(){return(await this.poolsApi.listPools()).data||[]}async listAllPools(){return this.listPools()}async getPool(e){return(await this.poolsApi.getPool(e)).data}async updatePool(e,t){return(await this.poolsApi.updatePool(e,t)).data}async deletePool(e){await this.poolsApi.deletePool(e)}async listScaleSets(){return(await this.scaleSetsApi.listScalesets()).data||[]}async getScaleSet(e){return(await this.scaleSetsApi.getScaleSet(e.toString())).data}async updateScaleSet(e,t){return(await this.scaleSetsApi.updateScaleSet(e.toString(),t)).data}async deleteScaleSet(e){await this.scaleSetsApi.deleteScaleSet(e.toString())}async listInstances(){return(await this.instancesApi.listInstances()).data||[]}async getInstance(e){return(await this.instancesApi.getInstance(e)).data}async deleteInstance(e){await this.instancesApi.deleteInstance(e)}async listProviders(){return(await this.providersApi.listProviders()).data||[]}async listCredentials(){return this.listAllCredentials()}async listEndpoints(){return this.listAllEndpoints()}async firstRun(e){return(await this.firstRunApi.firstRun(e)).data}async updateController(e){return(await this.controllerApi.updateController(e)).data}async listTemplates(e,t,s){return(await this.templatesApi.listTemplates(e,t,s)).data||[]}async getTemplate(e){return(await this.templatesApi.getTemplate(e)).data}async createTemplate(e){return(await this.templatesApi.createTemplate(e)).data}async updateTemplate(e,t){return(await this.templatesApi.updateTemplate(e.toString(),t)).data}async deleteTemplate(e){await this.templatesApi.deleteTemplate(e)}async restoreTemplates(e){await this.templatesApi.restoreTemplates(e)}async listFileObjects(e,t,s){return(await this.objectsApi.listFileObjects(e,t,s)).data}async getFileObject(e){return(await this.objectsApi.getFileObject(e)).data}async updateFileObject(e,t){return(await this.objectsApi.updateFileObject(e,t)).data}async deleteFileObject(e){await this.objectsApi.deleteFileObject(e)}}new zr;class Do extends zr{constructor(e=""){super(e)}}const On=new Do;var jo=Pt(''),Fo=Pt(''),Lo=Pt(''),zo=As("");function Pn(r,e){const t=It(e,["children","$$slots","$$events","$$legacy"]),s=It(t,["variant","size","disabled","loading","type","fullWidth","icon","iconPosition"]);bs(e,!1);const o=ae(),a=ae(),n=ae(),l=ae(),i=ae(),c=ae(),p=ae(),y=ae(),I=Vs();let B=ne(e,"variant",8,"primary"),R=ne(e,"size",8,"md"),f=ne(e,"disabled",8,!1),w=ne(e,"loading",8,!1),U=ne(e,"type",8,"button"),F=ne(e,"fullWidth",8,!1),E=ne(e,"icon",8,null),x=ne(e,"iconPosition",8,"left");function T(){!f()&&!w()&&I("click")}se(()=>{},()=>{oe(o,"inline-flex items-center justify-center font-medium rounded-md transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-gray-900 cursor-pointer disabled:cursor-not-allowed")}),se(()=>ce(R()),()=>{oe(a,{sm:"px-3 py-2 text-sm",md:"px-4 py-2 text-sm",lg:"px-6 py-3 text-base"}[R()])}),se(()=>ce(B()),()=>{oe(n,{primary:"text-white bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 disabled:bg-gray-400 disabled:hover:bg-gray-400",secondary:"text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-600 focus:ring-blue-500",danger:"text-white bg-red-600 hover:bg-red-700 focus:ring-red-500 disabled:bg-gray-400 disabled:hover:bg-gray-400",ghost:"text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 focus:ring-blue-500"}[B()])}),se(()=>ce(F()),()=>{oe(l,F()?"w-full":"")}),se(()=>ce(f()),()=>{oe(i,f()?"opacity-50":"")}),se(()=>(z(o),z(a),z(n),z(l),z(i)),()=>{oe(c,[z(o),z(a),z(n),z(l),z(i)].filter(Boolean).join(" "))}),se(()=>ce(R()),()=>{oe(p,{sm:"h-4 w-4",md:"h-5 w-5",lg:"h-6 w-6"}[R()])}),se(()=>(ce(x()),ce(R())),()=>{oe(y,{sm:x()==="left"?"-ml-0.5 mr-2":"ml-2 -mr-0.5",md:x()==="left"?"-ml-1 mr-2":"ml-2 -mr-1",lg:x()==="left"?"-ml-1 mr-3":"ml-3 -mr-1"}[R()])}),Ss(),qr();var D=zo();Ds(D,()=>({type:U(),disabled:f(),class:z(c),...s}));var C=Ye(D);{var ie=k=>{var L=jo();ze(()=>ke(L,0,`animate-spin ${z(p)??""} ${x()==="left"?"-ml-1 mr-2":"ml-2 -mr-1"}`)),fe(k,L)},te=k=>{var L=fs(),Oe=ws(L);{var M=Pe=>{var W=Fo(),Be=Ye(W);Et(Be,E,!0),Ze(W),ze(()=>ke(W,0,`${z(p)??""} ${z(y)??""}`)),fe(Pe,W)};et(Oe,Pe=>{E()&&x()==="left"&&Pe(M)},!0)}fe(k,L)};et(C,k=>{w()?k(ie):k(te,!1)})}var Re=wt(C,2);Is(Re,e,"default",{});var Te=wt(Re,2);{var ue=k=>{var L=Lo(),Oe=Ye(L);Et(Oe,E,!0),Ze(L),ze(()=>ke(L,0,`${z(p)??""} ${z(y)??""}`)),fe(k,L)};et(Te,k=>{E()&&x()==="right"&&!w()&&k(ue)})}Ze(D),ys("click",D,T),fe(r,D),Rs()}export{Pn as B,Qo as a,No as b,$e as c,Mo as d,$o as e,Is as f,On as g,Et as h,Cs as i,Ds as j,gs as k,Wo as r,ke as s}; diff --git a/webapp/assets/_app/immutable/chunks/BSR16q_V.js b/webapp/assets/_app/immutable/chunks/CYb6_lpF.js similarity index 52% rename from webapp/assets/_app/immutable/chunks/BSR16q_V.js rename to webapp/assets/_app/immutable/chunks/CYb6_lpF.js index 2703d984..2425d4b6 100644 --- a/webapp/assets/_app/immutable/chunks/BSR16q_V.js +++ b/webapp/assets/_app/immutable/chunks/CYb6_lpF.js @@ -1 +1 @@ -const w=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function x(t){const s=[];return{pattern:t==="/"?/^\/$/:new RegExp(`^${m(t).map(a=>{const i=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(a);if(i)return s.push({name:i[1],matcher:i[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const c=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(a);if(c)return s.push({name:c[1],matcher:c[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!a)return;const n=a.split(/\[(.+?)\](?!\])/);return"/"+n.map((e,l)=>{if(l%2){if(e.startsWith("x+"))return h(String.fromCharCode(parseInt(e.slice(2),16)));if(e.startsWith("u+"))return h(String.fromCharCode(...e.slice(2).split("-").map(g=>parseInt(g,16))));const o=w.exec(e),[,u,p,_,d]=o;return s.push({name:_,matcher:d,optional:!!u,rest:!!p,chained:p?l===1&&n[0]==="":!1}),p?"([^]*?)":u?"([^/]*)?":"([^/]+?)"}return h(e)}).join("")}).join("")}/?$`),params:s}}function $(t){return t!==""&&!/^\([^)]+\)$/.test(t)}function m(t){return t.slice(1).split("/").filter($)}function j(t,s,f){const a={},i=t.slice(1),c=i.filter(r=>r!==void 0);let n=0;for(let r=0;ro).join("/"),n=0),l===void 0){e.rest&&(a[e.name]="");continue}if(!e.matcher||f[e.matcher](l)){a[e.name]=l;const o=s[r+1],u=i[r+1];o&&!o.rest&&o.optional&&u&&e.chained&&(n=0),!o&&!u&&Object.keys(a).length===c.length&&(n=0);continue}if(e.optional&&e.chained){n++;continue}return}if(!n)return a}function h(t){return t.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}const b=/\[(\[)?(\.\.\.)?(\w+?)(?:=(\w+))?\]\]?/g;function k(t,s){return"/"+m(t).map(a=>a.replace(b,(i,c,n,r)=>{const e=s[r];if(!e){if(c||n&&e!==void 0)return"";throw new Error(`Missing parameter '${r}' in route ${t}`)}if(e.startsWith("/")||e.endsWith("/"))throw new Error(`Parameter '${r}' in route ${t} cannot start or end with a slash -- this would cause an invalid route like foo//bar`);return e})).filter(Boolean).join("/")}const v=globalThis.__sveltekit_mlwef0?.base??"/ui",C=globalThis.__sveltekit_mlwef0?.assets??v;export{C as a,v as b,j as e,x as p,k as r}; +const w=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function x(t){const s=[];return{pattern:t==="/"?/^\/$/:new RegExp(`^${_(t).map(a=>{const i=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(a);if(i)return s.push({name:i[1],matcher:i[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const c=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(a);if(c)return s.push({name:c[1],matcher:c[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!a)return;const n=a.split(/\[(.+?)\](?!\])/);return"/"+n.map((e,u)=>{if(u%2){if(e.startsWith("x+"))return h(String.fromCharCode(parseInt(e.slice(2),16)));if(e.startsWith("u+"))return h(String.fromCharCode(...e.slice(2).split("-").map(g=>parseInt(g,16))));const o=w.exec(e),[,l,p,m,d]=o;return s.push({name:m,matcher:d,optional:!!l,rest:!!p,chained:p?u===1&&n[0]==="":!1}),p?"([^]*?)":l?"([^/]*)?":"([^/]+?)"}return h(e)}).join("")}).join("")}/?$`),params:s}}function $(t){return t!==""&&!/^\([^)]+\)$/.test(t)}function _(t){return t.slice(1).split("/").filter($)}function k(t,s,f){const a={},i=t.slice(1),c=i.filter(r=>r!==void 0);let n=0;for(let r=0;ro).join("/"),n=0),u===void 0){e.rest&&(a[e.name]="");continue}if(!e.matcher||f[e.matcher](u)){a[e.name]=u;const o=s[r+1],l=i[r+1];o&&!o.rest&&o.optional&&l&&e.chained&&(n=0),!o&&!l&&Object.keys(a).length===c.length&&(n=0);continue}if(e.optional&&e.chained){n++;continue}return}if(!n)return a}function h(t){return t.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}const v=/\[(\[)?(\.\.\.)?(\w+?)(?:=(\w+))?\]\]?/g;function j(t,s){return"/"+_(t).map(a=>a.replace(v,(i,c,n,r)=>{const e=s[r];if(!e){if(c||n&&e!==void 0)return"";throw new Error(`Missing parameter '${r}' in route ${t}`)}if(e.startsWith("/")||e.endsWith("/"))throw new Error(`Parameter '${r}' in route ${t} cannot start or end with a slash -- this would cause an invalid route like foo//bar`);return e})).filter(Boolean).join("/")}const b=globalThis.__sveltekit_kn00vz?.base??"/ui",C=globalThis.__sveltekit_kn00vz?.assets??b;export{C as a,b,k as e,x as p,j as r}; diff --git a/webapp/assets/_app/immutable/chunks/CdEA5IGF.js b/webapp/assets/_app/immutable/chunks/CdEA5IGF.js new file mode 100644 index 00000000..ba323f89 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/CdEA5IGF.js @@ -0,0 +1 @@ +function r(n){return function(...t){var e=t[0];return e.stopPropagation(),n?.apply(this,t)}}function p(n){return function(...t){var e=t[0];return e.preventDefault(),n?.apply(this,t)}}export{p,r as s}; diff --git a/webapp/assets/_app/immutable/chunks/DbNhg6mG.js b/webapp/assets/_app/immutable/chunks/CfI2BFUj.js similarity index 98% rename from webapp/assets/_app/immutable/chunks/DbNhg6mG.js rename to webapp/assets/_app/immutable/chunks/CfI2BFUj.js index 1bca2464..41475586 100644 --- a/webapp/assets/_app/immutable/chunks/DbNhg6mG.js +++ b/webapp/assets/_app/immutable/chunks/CfI2BFUj.js @@ -1 +1 @@ -import{J as Y,H as T,I as C,K as F,T as j,U as G,V as H,R as $,W as x,L as q,M as A,N as z,at as J,O as Z,a3 as Q,Q as V,P as W,au as D,m as X,av as k,k as U,G as ee,g as P,aw as re,ax as ne,ay as w,az as se,aA as M,ar as ae,v as ie,aB as te,ac as R,aC as ue,_ as fe,aD as le,u as oe,aE as ce,aF as de,aG as _e,aH as N,aI as L,aJ as pe,aK as ve,ai as B,aL as K,aM as m}from"./DniTuB_0.js";function Ie(e,r,s=!1){T&&C();var n=e,a=null,i=null,l=J,d=s?F:0,p=!1;const S=(o,u=!0)=>{p=!0,_(u,o)};var f=null;function I(){f!==null&&(f.lastChild.remove(),n.before(f),f=null);var o=l?a:i,u=l?i:a;o&&Q(o),u&&V(u,()=>{l?i=null:a=null})}const _=(o,u)=>{if(l===(l=o))return;let g=!1;if(T){const E=j(n)===G;!!l===E&&(n=H(),$(n),x(!1),g=!0)}var b=Z(),c=n;if(b&&(f=document.createDocumentFragment(),f.append(c=q())),l?a??=u&&A(()=>u(c)):i??=u&&A(()=>u(c)),b){var h=z,t=l?a:i,v=l?i:a;t&&h.skipped_effects.delete(t),v&&h.skipped_effects.add(v),h.add_callback(I)}else I();g&&x(!0)};Y(()=>{p=!1,r(S),p||_(null,null)},d),T&&(n=W)}let O=!1,y=Symbol();function ge(e,r,s){const n=s[r]??={store:null,source:X(void 0),unsubscribe:D};if(n.store!==e&&!(y in s))if(n.unsubscribe(),n.store=e??null,e==null)n.source.v=void 0,n.unsubscribe=D;else{var a=!0;n.unsubscribe=k(e,i=>{a?n.source.v=i:U(n.source,i)}),a=!1}return e&&y in s?ee(e):P(n.source)}function Ee(){const e={};function r(){re(()=>{for(var s in e)e[s].unsubscribe();ne(e,y,{enumerable:!1,value:!0})})}return[e,r]}function be(e){var r=O;try{return O=!1,[e(),O]}finally{O=r}}const he={get(e,r){if(!e.exclude.includes(r))return P(e.version),r in e.special?e.special[r]():e.props[r]},set(e,r,s){if(!(r in e.special)){var n=R;try{L(e.parent_effect),e.special[r]=Pe({get[r](){return e.props[r]}},r,M)}finally{L(n)}}return e.special[r](s),N(e.version),!0},getOwnPropertyDescriptor(e,r){if(!e.exclude.includes(r)&&r in e.props)return{enumerable:!0,configurable:!0,value:e.props[r]}},deleteProperty(e,r){return e.exclude.includes(r)||(e.exclude.push(r),N(e.version)),!0},has(e,r){return e.exclude.includes(r)?!1:r in e.props},ownKeys(e){return Reflect.ownKeys(e.props).filter(r=>!e.exclude.includes(r))}};function Oe(e,r){return new Proxy({props:e,exclude:r,special:{},version:fe(0),parent_effect:R},he)}const me={get(e,r){let s=e.props.length;for(;s--;){let n=e.props[s];if(m(n)&&(n=n()),typeof n=="object"&&n!==null&&r in n)return n[r]}},set(e,r,s){let n=e.props.length;for(;n--;){let a=e.props[n];m(a)&&(a=a());const i=w(a,r);if(i&&i.set)return i.set(s),!0}return!1},getOwnPropertyDescriptor(e,r){let s=e.props.length;for(;s--;){let n=e.props[s];if(m(n)&&(n=n()),typeof n=="object"&&n!==null&&r in n){const a=w(n,r);return a&&!a.configurable&&(a.configurable=!0),a}}},has(e,r){if(r===B||r===K)return!1;for(let s of e.props)if(m(s)&&(s=s()),s!=null&&r in s)return!0;return!1},ownKeys(e){const r=[];for(let s of e.props)if(m(s)&&(s=s()),!!s){for(const n in s)r.includes(n)||r.push(n);for(const n of Object.getOwnPropertySymbols(s))r.includes(n)||r.push(n)}return r}};function Te(...e){return new Proxy({props:e},me)}function Pe(e,r,s,n){var a=!ce||(s&de)!==0,i=(s&le)!==0,l=(s&pe)!==0,d=n,p=!0,S=()=>(p&&(p=!1,d=l?oe(n):n),d),f;if(i){var I=B in e||K in e;f=w(e,r)?.set??(I&&r in e?t=>e[r]=t:void 0)}var _,o=!1;i?[_,o]=be(()=>e[r]):_=e[r],_===void 0&&n!==void 0&&(_=S(),f&&(a&&se(),f(_)));var u;if(a?u=()=>{var t=e[r];return t===void 0?S():(p=!0,t)}:u=()=>{var t=e[r];return t!==void 0&&(d=void 0),t===void 0?d:t},a&&(s&M)===0)return u;if(f){var g=e.$$legacy;return function(t,v){return arguments.length>0?((!a||!v||g||o)&&f(v?u():t),t):u()}}var b=!1,c=((s&_e)!==0?ae:ie)(()=>(b=!1,u()));i&&P(c);var h=R;return function(t,v){if(arguments.length>0){const E=v?P(c):a&&i?te(t):t;return U(c,E),b=!0,d!==void 0&&(d=E),t}return ve&&b||(h.f&ue)!==0?c.v:P(c)}}export{ge as a,Te as b,Ie as i,Oe as l,Pe as p,Ee as s}; +import{J as Y,H as T,I as C,K as F,T as j,U as G,V as H,R as $,W as x,L as q,M as A,N as z,at as J,O as Z,a3 as Q,Q as V,P as W,au as D,m as X,av as k,k as U,G as ee,g as P,aw as re,ax as ne,ay as w,az as se,aA as M,ar as ae,v as ie,aB as te,ac as R,aC as ue,_ as fe,aD as le,u as oe,aE as ce,aF as de,aG as _e,aH as N,aI as L,aJ as pe,aK as ve,ai as B,aL as K,aM as m}from"./BIqNNOMq.js";function Ie(e,r,s=!1){T&&C();var n=e,a=null,i=null,l=J,d=s?F:0,p=!1;const S=(o,u=!0)=>{p=!0,_(u,o)};var f=null;function I(){f!==null&&(f.lastChild.remove(),n.before(f),f=null);var o=l?a:i,u=l?i:a;o&&Q(o),u&&V(u,()=>{l?i=null:a=null})}const _=(o,u)=>{if(l===(l=o))return;let g=!1;if(T){const E=j(n)===G;!!l===E&&(n=H(),$(n),x(!1),g=!0)}var b=Z(),c=n;if(b&&(f=document.createDocumentFragment(),f.append(c=q())),l?a??=u&&A(()=>u(c)):i??=u&&A(()=>u(c)),b){var h=z,t=l?a:i,v=l?i:a;t&&h.skipped_effects.delete(t),v&&h.skipped_effects.add(v),h.add_callback(I)}else I();g&&x(!0)};Y(()=>{p=!1,r(S),p||_(null,null)},d),T&&(n=W)}let O=!1,y=Symbol();function ge(e,r,s){const n=s[r]??={store:null,source:X(void 0),unsubscribe:D};if(n.store!==e&&!(y in s))if(n.unsubscribe(),n.store=e??null,e==null)n.source.v=void 0,n.unsubscribe=D;else{var a=!0;n.unsubscribe=k(e,i=>{a?n.source.v=i:U(n.source,i)}),a=!1}return e&&y in s?ee(e):P(n.source)}function Ee(){const e={};function r(){re(()=>{for(var s in e)e[s].unsubscribe();ne(e,y,{enumerable:!1,value:!0})})}return[e,r]}function be(e){var r=O;try{return O=!1,[e(),O]}finally{O=r}}const he={get(e,r){if(!e.exclude.includes(r))return P(e.version),r in e.special?e.special[r]():e.props[r]},set(e,r,s){if(!(r in e.special)){var n=R;try{L(e.parent_effect),e.special[r]=Pe({get[r](){return e.props[r]}},r,M)}finally{L(n)}}return e.special[r](s),N(e.version),!0},getOwnPropertyDescriptor(e,r){if(!e.exclude.includes(r)&&r in e.props)return{enumerable:!0,configurable:!0,value:e.props[r]}},deleteProperty(e,r){return e.exclude.includes(r)||(e.exclude.push(r),N(e.version)),!0},has(e,r){return e.exclude.includes(r)?!1:r in e.props},ownKeys(e){return Reflect.ownKeys(e.props).filter(r=>!e.exclude.includes(r))}};function Oe(e,r){return new Proxy({props:e,exclude:r,special:{},version:fe(0),parent_effect:R},he)}const me={get(e,r){let s=e.props.length;for(;s--;){let n=e.props[s];if(m(n)&&(n=n()),typeof n=="object"&&n!==null&&r in n)return n[r]}},set(e,r,s){let n=e.props.length;for(;n--;){let a=e.props[n];m(a)&&(a=a());const i=w(a,r);if(i&&i.set)return i.set(s),!0}return!1},getOwnPropertyDescriptor(e,r){let s=e.props.length;for(;s--;){let n=e.props[s];if(m(n)&&(n=n()),typeof n=="object"&&n!==null&&r in n){const a=w(n,r);return a&&!a.configurable&&(a.configurable=!0),a}}},has(e,r){if(r===B||r===K)return!1;for(let s of e.props)if(m(s)&&(s=s()),s!=null&&r in s)return!0;return!1},ownKeys(e){const r=[];for(let s of e.props)if(m(s)&&(s=s()),!!s){for(const n in s)r.includes(n)||r.push(n);for(const n of Object.getOwnPropertySymbols(s))r.includes(n)||r.push(n)}return r}};function Te(...e){return new Proxy({props:e},me)}function Pe(e,r,s,n){var a=!ce||(s&de)!==0,i=(s&le)!==0,l=(s&pe)!==0,d=n,p=!0,S=()=>(p&&(p=!1,d=l?oe(n):n),d),f;if(i){var I=B in e||K in e;f=w(e,r)?.set??(I&&r in e?t=>e[r]=t:void 0)}var _,o=!1;i?[_,o]=be(()=>e[r]):_=e[r],_===void 0&&n!==void 0&&(_=S(),f&&(a&&se(),f(_)));var u;if(a?u=()=>{var t=e[r];return t===void 0?S():(p=!0,t)}:u=()=>{var t=e[r];return t!==void 0&&(d=void 0),t===void 0?d:t},a&&(s&M)===0)return u;if(f){var g=e.$$legacy;return function(t,v){return arguments.length>0?((!a||!v||g||o)&&f(v?u():t),t):u()}}var b=!1,c=((s&_e)!==0?ae:ie)(()=>(b=!1,u()));i&&P(c);var h=R;return function(t,v){if(arguments.length>0){const E=v?P(c):a&&i?te(t):t;return U(c,E),b=!0,d!==void 0&&(d=E),t}return ve&&b||(h.f&ue)!==0?c.v:P(c)}}export{ge as a,Te as b,Ie as i,Oe as l,Pe as p,Ee as s}; diff --git a/webapp/assets/_app/immutable/chunks/CjQpknJk.js b/webapp/assets/_app/immutable/chunks/CjQpknJk.js new file mode 100644 index 00000000..951daf0b --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/CjQpknJk.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as O}from"./De-I_rkH.js";import{p as Q,f as R,d as e,r as t,s,q as c,u as o,z as rt,t as W,e as g,b as h,c as X,E as mt,D as ut,A as Z,a as tt,g as P}from"./BIqNNOMq.js";import{p as T,i as G,s as gt,a as pt}from"./CfI2BFUj.js";import{c as st,d as et,B as xt}from"./CQh-7xkh.js";import{b as z,e as ft}from"./B7If18kh.js";import{B as H}from"./CwE4al8R.js";import{e as yt}from"./B1uxuBYn.js";import{D as ht,G as at}from"./BjNB1vhO.js";import{E as _t}from"./C6HeU_02.js";import{S as kt}from"./DCu5KXBe.js";import{e as bt,i as wt}from"./D8ZtP9JD.js";import{b as Ct}from"./BLHP-Xk3.js";var Pt=R('

ID
Created At
Updated At
Status
Pool Balancer Type
');function qt(L,v){Q(v,!1);let a=T(v,"entity",8),p=T(v,"entityType",8);function B(){return`${p().charAt(0).toUpperCase()+p().slice(1)} Information`}function n(){if(!a().endpoint?.base_url)return"#";const i=a().endpoint.base_url.replace(/\/$/,"");switch(p()){case"repository":const K=a();return`${i}/${K.owner}/${a().name}`;case"organization":return`${i}/${a().name}`;case"enterprise":return`${i}/enterprises/${a().name}`;default:return"#"}}function E(){return`${p().charAt(0).toUpperCase()+p().slice(1)} URL`}function V(){const i=a().pool_balancing_type;if(!i||i===""||i==="none")return"Round Robin (default)";switch(i){case"roundrobin":return"Round Robin";case"pack":return"Pack";default:return i}}O();var m=Pt(),x=e(m),_=e(x),I=e(_,!0);t(_);var k=s(_,2),d=e(k),f=s(e(d),2),b=e(f,!0);t(f),t(d);var u=s(d,2),D=s(e(u),2),M=e(D,!0);t(D),t(u);var w=s(u,2),S=s(e(w),2),$=e(S,!0);t(S),t(w);var r=s(w,2),C=s(e(r),2),l=e(C);{var A=i=>{H(i,{variant:"success",text:"Running"})},U=i=>{H(i,{variant:"error",text:"Stopped"})};G(l,i=>{c(a()),o(()=>a().pool_manager_status?.running)?i(A):i(U,!1)})}t(C),t(r);var N=s(r,2),j=s(e(N),2),y=e(j,!0);t(j),t(N);var q=s(N,2),F=e(q),ot=e(F,!0);t(F);var Y=s(F,2),J=e(Y),it=e(J);rt(),t(J),t(Y),t(q),t(k),t(x),t(m),W((i,K,dt,nt,lt,vt,ct)=>{g(I,i),g(b,(c(a()),o(()=>a().id))),g(M,K),g($,dt),g(y,nt),g(ot,lt),st(J,"href",vt),g(it,`${ct??""} `)},[()=>o(B),()=>(c(z),c(a()),o(()=>z(a().created_at))),()=>(c(z),c(a()),o(()=>z(a().updated_at))),()=>o(V),()=>o(E),()=>o(n),()=>o(n)]),h(L,m),X()}var Tt=R('

No pools configured

'),Et=R('');function Wt(L,v){Q(v,!1);const[a,p]=gt(),B=()=>pt(yt,"$eagerCache",a);let n=T(v,"pools",8),E=T(v,"entityType",8),V=T(v,"entityId",8,""),m=T(v,"entityName",8,"");const x=mt();function _(){x("addPool",{entityType:E(),entityId:V(),entityName:m()})}const I=[{key:"id",title:"ID",flexible:!0,cellComponent:_t,cellProps:{entityType:"pool",showId:!0,fontMono:!0}},{key:"image",title:"Image",flexible:!0,cellComponent:at,cellProps:{field:"image",type:"code",showTitle:!0}},{key:"provider",title:"Provider",cellComponent:at,cellProps:{field:"provider_name"}},{key:"status",title:"Status",cellComponent:kt,cellProps:{statusType:"enabled"}}],k={entityType:"pool",primaryText:{field:"id",isClickable:!0,href:"/pools/{id}",useId:!0,isMonospace:!0},secondaryText:{field:"entity_name",computedValue:r=>ft(r,B())},badges:[{type:"custom",value:r=>({variant:r.enabled?"success":"error",text:r.enabled?"Enabled":"Disabled"})}]};O();var d=Et(),f=e(d),b=e(f),u=e(b),D=e(u);t(u);var M=s(u,2);t(b);var w=s(b,2);{var S=r=>{var C=Tt(),l=s(e(C),4),A=e(l);t(l);var U=s(l,2),N=e(U);xt(N,{variant:"primary",size:"sm",$$events:{click:_},children:(j,y)=>{rt();var q=ut("Add Pool");h(j,q)},$$slots:{default:!0}}),t(U),t(C),W(()=>g(A,`No pools configured for this ${E()??""}.`)),h(r,C)},$=r=>{ht(r,{get columns(){return I},get data(){return n()},loading:!1,error:"",searchTerm:"",showSearch:!1,showPagination:!1,currentPage:1,get perPage(){return c(n()),o(()=>n().length)},totalPages:1,get totalItems(){return c(n()),o(()=>n().length)},itemName:"pools",emptyTitle:"No pools configured",get emptyMessage(){return`No pools configured for this ${E()??""}.`},emptyIconType:"cog",get mobileCardConfig(){return k}})};G(w,r=>{c(n()),o(()=>n().length===0)?r(S):r($,!1)})}t(f),t(d),W(r=>{g(D,`Pools (${c(n()),o(()=>n().length)??""})`),st(M,"href",r)},[()=>(c(et),o(()=>et("/pools")))]),h(L,d),X(),p()}var It=R('

'),Nt=R('

Events

'),Bt=R('

Events

No events available

');function Ft(L,v){Q(v,!1);let a=T(v,"events",8),p=T(v,"eventsContainer",12,void 0);O();var B=Z(),n=tt(B);{var E=m=>{var x=Nt(),_=e(x),I=s(e(_),2);bt(I,5,a,wt,(k,d)=>{var f=It(),b=e(f),u=e(b),D=e(u,!0);t(u);var M=s(u,2),w=e(M);{var S=l=>{H(l,{variant:"error",text:"Error"})},$=l=>{var A=Z(),U=tt(A);{var N=y=>{H(y,{variant:"warning",text:"Warning"})},j=y=>{H(y,{variant:"info",text:"Info"})};G(U,y=>{P(d),o(()=>(P(d).event_level||"info").toLowerCase()==="warning")?y(N):y(j,!1)},!0)}h(l,A)};G(w,l=>{P(d),o(()=>(P(d).event_level||"info").toLowerCase()==="error")?l(S):l($,!1)})}var r=s(w,2),C=e(r,!0);t(r),t(M),t(b),t(f),W(l=>{g(D,(P(d),o(()=>P(d).message))),g(C,l)},[()=>(c(z),P(d),o(()=>z(P(d).created_at)))]),h(k,f)}),t(I),Ct(I,k=>p(k),()=>p()),t(_),t(x),h(m,x)},V=m=>{var x=Bt();h(m,x)};G(n,m=>{c(a()),o(()=>a()&&a().length>0)?m(E):m(V,!1)})}h(L,B),X()}export{qt as E,Wt as P,Ft as a}; diff --git a/webapp/assets/_app/immutable/chunks/CpPzJ1l1.js b/webapp/assets/_app/immutable/chunks/CpPzJ1l1.js new file mode 100644 index 00000000..dc3b60e3 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/CpPzJ1l1.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as He}from"./De-I_rkH.js";import{p as Je,E as Qe,o as Ve,f as x,d as a,r,s,g as e,m as u,z as U,t as y,y as ye,u as c,e as v,q as $,k as n,i as xe,b,D as Xe,c as Ye}from"./BIqNNOMq.js";import{p as fe,i as B}from"./CfI2BFUj.js";import{e as Ze,i as et}from"./D8ZtP9JD.js";import{r as ee,b as _e,g as tt}from"./CQh-7xkh.js";import{a as he,b as at}from"./Gs5uNKRr.js";import{p as rt}from"./CdEA5IGF.js";import{e as ke}from"./BZiHL9L3.js";import{M as ot}from"./BFX8vI-4.js";var st=x('

'),nt=x('
Owner:
'),it=x('
'),dt=x(""),lt=x(''),ct=x('

Leave empty to auto-generate a new secret

'),vt=x('
Updating...
'),pt=x('

Name:
Endpoint:
Current Credentials:
Current Pool Balancer:

Leave unchanged to keep current credentials

Round Robin distributes jobs evenly across pools, Pack fills pools in order

');function wt(we,A){Je(A,!1);let i=fe(A,"entity",8),C=fe(A,"entityType",8);const T=Qe();let M=u(!1),k=u(""),R=u([]),W=u(!1),f=u(""),_=u(""),h=u(""),g=u(!1),E=u(!1);function Ce(){if(C()==="repository"){const l=i();return`${l.owner}/${l.name}`}return i().name||""}function z(){return C().charAt(0).toUpperCase()+C().slice(1)}function Me(){return C()==="repository"&&i().owner||""}async function Ee(){try{n(W,!0),n(R,await tt.listCredentials())}catch(l){n(k,ke(l))}finally{n(W,!1)}}function Se(){n(f,i().credentials_name||""),n(_,i().pool_balancing_type||"roundrobin"),n(h,""),n(g,!1),n(E,i().agent_mode??!1)}async function Pe(){try{n(M,!0),n(k,"");const l={};let w=!1;if(e(f)&&e(f)!==i().credentials_name&&(l.credentials_name=e(f),w=!0),e(_)&&e(_)!==i().pool_balancing_type&&(l.pool_balancer_type=e(_),w=!0),e(E)!==i().agent_mode&&(l.agent_mode=e(E),w=!0),e(g)){if(!e(h).trim()){n(k,"Please enter a webhook secret or uncheck the option to change it");return}l.webhook_secret=e(h),w=!0}if(!w){T("close");return}T("submit",l)}catch(l){n(k,ke(l))}finally{n(M,!1)}}Ve(()=>{Ee(),Se()}),He(),ot(we,{$$events:{close:()=>T("close")},children:(l,w)=>{var D=pt(),j=a(D),N=a(j),Ue=a(N);r(N);var te=s(N,2),Be=a(te,!0);r(te),r(j);var q=s(j,2),ae=a(q);{var Te=t=>{var o=st(),d=a(o),p=a(d,!0);r(d),r(o),y(()=>v(p,e(k))),b(t,o)};B(ae,t=>{e(k)&&t(Te)})}var I=s(ae,2),L=a(I),$e=a(L);r(L);var re=s(L,2),oe=a(re);{var Ae=t=>{var o=nt(),d=s(a(o),2),p=a(d,!0);r(d),r(o),y(S=>v(p,S),[()=>c(Me)]),b(t,o)};B(oe,t=>{C()==="repository"&&t(Ae)})}var O=s(oe,2),se=s(a(O),2),Re=a(se,!0);r(se),r(O);var F=s(O,2),ne=s(a(F),2),We=a(ne,!0);r(ne),r(F);var G=s(F,2),ie=s(a(G),2),ze=a(ie,!0);r(ie),r(G);var de=s(G,2),le=s(a(de),2),De=a(le,!0);r(le),r(de),r(re),r(I);var K=s(I,2),H=a(K),je=s(a(H),2);{var Ne=t=>{var o=it();b(t,o)},qe=t=>{var o=lt();y(()=>{e(f),ye(()=>{e(R)})});var d=a(o);d.value=d.__value="";var p=s(d);Ze(p,1,()=>e(R),et,(S,m)=>{var P=dt(),Ke=a(P);r(P);var me={};y(()=>{v(Ke,`${e(m),c(()=>e(m).name)??""} (${e(m),c(()=>e(m).endpoint?.name||"Unknown")??""})`),me!==(me=(e(m),c(()=>e(m).name)))&&(P.value=(P.__value=(e(m),c(()=>e(m).name)))??"")}),b(S,P)}),r(o),_e(o,()=>e(f),S=>n(f,S)),b(t,o)};B(je,t=>{e(W)?t(Ne):t(qe,!1)})}U(2),r(H);var J=s(H,2),Q=s(a(J),2);y(()=>{e(_),ye(()=>{})});var V=a(Q);V.value=V.__value="roundrobin";var ce=s(V);ce.value=ce.__value="pack",r(Q),U(2),r(J);var X=s(J,2),ve=a(X);ee(ve),U(4),r(X);var pe=s(X,2),Y=a(pe),ue=a(Y);ee(ue),U(2),r(Y);var Ie=s(Y,2);{var Le=t=>{var o=ct(),d=s(a(o),2);ee(d),U(2),r(o),y(()=>d.required=e(g)),at(d,()=>e(h),p=>n(h,p)),b(t,o)};B(Ie,t=>{e(g)&&t(Le)})}r(pe),r(K);var be=s(K,2),ge=a(be),Z=s(ge,2),Oe=a(Z);{var Fe=t=>{var o=vt();b(t,o)},Ge=t=>{var o=Xe();y(d=>v(o,`Update ${d??""}`),[()=>c(z)]),b(t,o)};B(Oe,t=>{e(M)?t(Fe):t(Ge,!1)})}r(Z),r(be),r(q),r(D),y((t,o,d,p)=>{v(Ue,`Update ${t??""}`),v(Be,o),v($e,`${d??""} Information`),v(Re,($(i()),c(()=>i().name))),v(We,($(i()),c(()=>i().endpoint?.name))),v(ze,($(i()),c(()=>i().credentials_name))),v(De,($(i()),c(()=>i().pool_balancing_type||"roundrobin"))),Z.disabled=p},[()=>c(z),()=>c(Ce),()=>c(z),()=>(e(M),e(g),e(h),c(()=>e(M)||e(g)&&!e(h).trim()))]),_e(Q,()=>e(_),t=>n(_,t)),he(ve,()=>e(E),t=>n(E,t)),he(ue,()=>e(g),t=>n(g,t)),xe("click",ge,()=>T("close")),xe("submit",q,rt(Pe)),b(l,D)},$$slots:{default:!0}}),Ye()}export{wt as U}; diff --git a/webapp/assets/_app/immutable/chunks/Cq4AwQWc.js b/webapp/assets/_app/immutable/chunks/Cq4AwQWc.js new file mode 100644 index 00000000..d50a3917 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/Cq4AwQWc.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as T}from"./De-I_rkH.js";import{p as U,E as V,f as g,t as z,b as r,c as W,d as i,r as o,s as k,u as y,e as b,A as B,a as D,q as E,z as X,D as Y}from"./BIqNNOMq.js";import{p as v,i as d}from"./CfI2BFUj.js";import{e as Z,f as H,B as $}from"./CQh-7xkh.js";var tt=g('
'),at=g('
'),et=g('

');function ct(L,t){const l=Z(t);U(t,!1);const q=V();let M=v(t,"title",8),C=v(t,"description",8),n=v(t,"actionLabel",8,null),m=v(t,"showAction",8,!0);function F(){q("action")}T();var f=et(),_=i(f),x=i(_),G=i(x,!0);o(x);var w=k(x,2),I=i(w,!0);o(w),o(_);var J=k(_,2);{var K=e=>{var s=tt(),h=i(s);H(h,t,"actions",{}),o(s),r(e,s)},N=e=>{var s=B(),h=D(s);{var O=p=>{var u=at(),A=i(u);{var Q=a=>{var c=B(),P=D(c);H(P,t,"secondary-actions",{}),r(a,c)};d(A,a=>{y(()=>l["secondary-actions"])&&a(Q)})}var R=k(A,2);{var S=a=>{$(a,{variant:"primary",icon:'',$$events:{click:F},children:(c,P)=>{X();var j=Y();z(()=>b(j,n())),r(c,j)},$$slots:{default:!0}})};d(R,a=>{m()&&n()&&a(S)})}o(u),r(p,u)};d(h,p=>{E(m()),E(n()),y(()=>m()&&n()||l["secondary-actions"])&&p(O)},!0)}r(e,s)};d(J,e=>{y(()=>l.actions)?e(K):e(N,!1)})}o(f),z(()=>{b(G,M()),b(I,C())}),r(L,f),W()}export{ct as P}; diff --git a/webapp/assets/_app/immutable/chunks/CwE4al8R.js b/webapp/assets/_app/immutable/chunks/CwE4al8R.js new file mode 100644 index 00000000..8d7a0958 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/CwE4al8R.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as y}from"./De-I_rkH.js";import{p,l as u,q as g,h as c,f,t as m,b as w,c as _,k as v,m as h,d as z,r as B,g as j,e as q}from"./BIqNNOMq.js";import{s as V,k as A}from"./CQh-7xkh.js";import{p as t}from"./CfI2BFUj.js";var C=f(" ");function I(d,e){p(e,!1);const l=h();let a=t(e,"variant",8,"gray"),n=t(e,"size",8,"sm"),i=t(e,"text",8),s=t(e,"ring",8,!1);const o={success:"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200",error:"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200",warning:"bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",info:"bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200",gray:"bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200",blue:"bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200",green:"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200",red:"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200",yellow:"bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",secondary:"bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200",purple:"bg-purple-100 dark:bg-purple-900 text-purple-800 dark:text-purple-200"},b={success:"ring-green-600/20 dark:ring-green-400/30",error:"ring-red-600/20 dark:ring-red-400/30",warning:"ring-yellow-600/20 dark:ring-yellow-400/30",info:"ring-blue-600/20 dark:ring-blue-400/30",gray:"ring-gray-500/20 dark:ring-gray-400/30",blue:"ring-blue-600/20 dark:ring-blue-400/30",green:"ring-green-600/20 dark:ring-green-400/30",red:"ring-red-600/20 dark:ring-red-400/30",yellow:"ring-yellow-600/20 dark:ring-yellow-400/30",secondary:"ring-gray-500/20 dark:ring-gray-400/30",purple:"ring-purple-600/20 dark:ring-purple-400/30"},k={sm:"px-2 py-1 text-xs",md:"px-2.5 py-0.5 text-xs"};u(()=>(g(a()),g(n()),g(s())),()=>{v(l,["inline-flex items-center rounded-full font-semibold",o[a()],k[n()],s()?`ring-1 ring-inset ${b[a()]}`:""].filter(Boolean).join(" "))}),c(),y();var r=C(),x=z(r,!0);B(r),m(()=>{V(r,1,A(j(l))),q(x,i())}),w(d,r),_()}export{I as B}; diff --git a/webapp/assets/_app/immutable/chunks/Cx8owuas.js b/webapp/assets/_app/immutable/chunks/Cx8owuas.js new file mode 100644 index 00000000..d78a1ed7 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/Cx8owuas.js @@ -0,0 +1 @@ +import{F as m}from"./BIqNNOMq.js";import{g as s}from"./CQh-7xkh.js";const z=!0,I=z,_=()=>window.location.port==="5173",b={isAuthenticated:!1,user:null,loading:!0,needsInitialization:!1},o=m(b);function f(t,a,e=7){const i=new Date;i.setTime(i.getTime()+e*24*60*60*1e3),document.cookie=`${t}=${a};expires=${i.toUTCString()};path=/;SameSite=Lax`}function d(t){const a=t+"=",e=document.cookie.split(";");for(let i=0;i({...i,loading:!0}));const e=await s.login({username:t,password:a});I&&(f("garm_token",e.token),f("garm_user",t)),s.setToken(e.token),o.set({isAuthenticated:!0,user:t,loading:!1,needsInitialization:!1})}catch(e){throw o.update(i=>({...i,loading:!1})),e}},logout(){g("garm_token"),g("garm_user"),o.set({isAuthenticated:!1,user:null,loading:!1,needsInitialization:!1})},async init(){try{o.update(e=>({...e,loading:!0})),await c.checkInitializationStatus();const t=d("garm_token"),a=d("garm_user");if(t&&a&&(s.setToken(t),await c.checkAuth())){o.set({isAuthenticated:!0,user:a,loading:!1,needsInitialization:!1});return}o.update(e=>({...e,loading:!1,needsInitialization:!1}))}catch{o.update(a=>({...a,loading:!1}))}},async checkInitializationStatus(){try{const t={Accept:"application/json"},a=d("garm_token"),e=_();e&&a&&(t.Authorization=`Bearer ${a}`);const i=await fetch("/api/v1/login",{method:"GET",headers:t,credentials:e?"omit":"include"});if(!i.ok){if(i.status===409&&(await i.json()).error==="init_required")throw o.update(l=>({...l,needsInitialization:!0,loading:!1})),new Error("Initialization required");return}return}catch(t){if(t instanceof Error&&t.message==="Initialization required")throw t;return}},async checkAuth(){try{return await c.checkInitializationStatus(),await s.getControllerInfo(),!0}catch(t){return t instanceof Error&&t.message==="Initialization required"?!1:t?.response?.status===409&&t?.response?.data?.error==="init_required"?(o.update(a=>({...a,needsInitialization:!0,loading:!1})),!1):(c.logout(),!1)}},async initialize(t,a,e,i,n){try{o.update(u=>({...u,loading:!0}));const l=await s.firstRun({username:t,email:a,password:e,full_name:i||t});await c.login(t,e);const r=window.location.origin,h=n?.metadataUrl||`${r}/api/v1/metadata`,p=n?.callbackUrl||`${r}/api/v1/callbacks`,k=n?.webhookUrl||`${r}/webhooks`,w=n?.agentUrl||`${r}/agent`;await s.updateController({metadata_url:h,callback_url:p,webhook_url:k,agent_url:w}),o.update(u=>({...u,needsInitialization:!1}))}catch(l){throw o.update(r=>({...r,loading:!1})),l}}};export{o as a,c as b}; diff --git a/webapp/assets/_app/immutable/chunks/DNeHGP6d.js b/webapp/assets/_app/immutable/chunks/D2YBjDB9.js similarity index 84% rename from webapp/assets/_app/immutable/chunks/DNeHGP6d.js rename to webapp/assets/_app/immutable/chunks/D2YBjDB9.js index 31fbd37e..26abb6d7 100644 --- a/webapp/assets/_app/immutable/chunks/DNeHGP6d.js +++ b/webapp/assets/_app/immutable/chunks/D2YBjDB9.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import{i as j}from"./TJn6xDN9.js";import{p as E,E as G,f as S,d as t,r,s as g,u,q as p,z as m,t as q,e as z,i as f,b as D,c as H}from"./DniTuB_0.js";import{h as y,s as h}from"./DD3srElq.js";import{p as v}from"./DbNhg6mG.js";import{g as o}from"./LMA6-4d1.js";var I=S('
');function M(x,s){E(s,!1);const k=G();let i=v(s,"selectedForgeType",12,""),_=v(s,"label",8,"Select Forge Type");function n(c){i(c),k("select",c)}j();var d=I(),l=t(d),F=t(l,!0);r(l);var b=g(l,2),e=t(b),w=t(e);y(w,()=>(p(o),u(()=>o("github","w-8 h-8")))),m(2),r(e);var a=g(e,2),T=t(a);y(T,()=>(p(o),u(()=>o("gitea","w-8 h-8")))),m(2),r(a),r(b),r(d),q(()=>{z(F,_()),h(e,1,`flex flex-col items-center justify-center p-6 border-2 rounded-lg transition-colors cursor-pointer ${i()==="github"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),h(a,1,`flex flex-col items-center justify-center p-6 border-2 rounded-lg transition-colors cursor-pointer ${i()==="gitea"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`)}),f("click",e,()=>n("github")),f("click",a,()=>n("gitea")),D(x,d),H()}export{M as F}; +import"./DsnmJJEf.js";import{i as j}from"./De-I_rkH.js";import{p as E,E as G,f as S,d as t,r,s as g,u,q as p,z as m,t as q,e as z,i as f,b as D,c as H}from"./BIqNNOMq.js";import{h as y,s as h}from"./CQh-7xkh.js";import{p as v}from"./CfI2BFUj.js";import{g as o}from"./B7If18kh.js";var I=S('
');function M(x,s){E(s,!1);const k=G();let i=v(s,"selectedForgeType",12,""),_=v(s,"label",8,"Select Forge Type");function n(c){i(c),k("select",c)}j();var d=I(),l=t(d),F=t(l,!0);r(l);var b=g(l,2),e=t(b),w=t(e);y(w,()=>(p(o),u(()=>o("github","w-8 h-8")))),m(2),r(e);var a=g(e,2),T=t(a);y(T,()=>(p(o),u(()=>o("gitea","w-8 h-8")))),m(2),r(a),r(b),r(d),q(()=>{z(F,_()),h(e,1,`flex flex-col items-center justify-center p-6 border-2 rounded-lg transition-colors cursor-pointer ${i()==="github"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),h(a,1,`flex flex-col items-center justify-center p-6 border-2 rounded-lg transition-colors cursor-pointer ${i()==="gitea"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`)}),f("click",e,()=>n("github")),f("click",a,()=>n("gitea")),D(x,d),H()}export{M as F}; diff --git a/webapp/assets/_app/immutable/chunks/D3pbRQAB.js b/webapp/assets/_app/immutable/chunks/D3pbRQAB.js deleted file mode 100644 index 6fd97ccc..00000000 --- a/webapp/assets/_app/immutable/chunks/D3pbRQAB.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as H}from"./TJn6xDN9.js";import{p as J,l as j,h as K,f as g,t as h,b as k,c as L,s as u,d as r,k as z,m as E,r as a,q as l,u as p,g as _,e as y}from"./DniTuB_0.js";import{p as d,i as I}from"./DbNhg6mG.js";import{c as M,s as P,d as n}from"./DD3srElq.js";var Q=g('
'),S=g('
'),V=g('');function te(C,i){J(i,!1);const m=E(),b=E();let e=d(i,"item",8),s=d(i,"entityType",8,"repository"),N=d(i,"showOwner",8,!1),O=d(i,"showId",8,!1),T=d(i,"fontMono",8,!1);function q(){if(!e())return"Unknown";switch(s()){case"repository":return N()?`${e().owner||"Unknown"}/${e().name||"Unknown"}`:e().name||"Unknown";case"organization":case"enterprise":return e().name||"Unknown";case"pool":return O()?e().id||"Unknown":e().name||"Unknown";case"scaleset":return e().name||"Unknown";case"instance":return e().name||"Unknown";case"template":return e().name||"Unknown";case"object":return e().name||"Unknown";default:return e().name||e().id||"Unknown"}}function B(){if(!e())return"#";let t;switch(s()){case"instance":t=e().name;break;default:t=e().id||e().name;break}if(!t)return"#";switch(s()){case"repository":return n(`/repositories/${t}`);case"organization":return n(`/organizations/${t}`);case"enterprise":return n(`/enterprises/${t}`);case"pool":return n(`/pools/${t}`);case"scaleset":return n(`/scalesets/${t}`);case"instance":return n(`/instances/${encodeURIComponent(t)}`);case"template":return n(`/templates/${t}`);case"object":return n(`/objects/${t}`);default:return"#"}}j(()=>{},()=>{z(m,q())}),j(()=>{},()=>{z(b,B())}),K(),H();var f=V(),w=r(f),c=r(w),D=r(c,!0);a(c);var R=u(c,2);{var $=t=>{var o=Q(),v=u(r(o),2),x=r(v),U=u(r(x),2),G=r(U,!0);a(U),a(x),a(v),a(o),h(()=>y(G,(l(e()),p(()=>e().description)))),k(t,o)};I(R,t=>{l(s()),l(e()),p(()=>s()==="object"&&e()?.description)&&t($)})}a(w);var A=u(w,2);{var F=t=>{var o=S(),v=r(o,!0);a(o),h(()=>y(v,(l(e()),p(()=>e().provider_id)))),k(t,o)};I(A,t=>{l(s()),l(e()),p(()=>s()==="instance"&&e()?.provider_id)&&t(F)})}a(f),h(()=>{M(c,"href",_(b)),P(c,1,`truncate text-blue-600 dark:text-blue-400 hover:text-blue-500 dark:hover:text-blue-300 ${T()?"font-mono":""}`),M(c,"title",_(m)),y(D,_(m))}),k(C,f),L()}export{te as E}; diff --git a/webapp/assets/_app/immutable/chunks/D4Caz1gY.js b/webapp/assets/_app/immutable/chunks/D4Caz1gY.js deleted file mode 100644 index 85ca9d43..00000000 --- a/webapp/assets/_app/immutable/chunks/D4Caz1gY.js +++ /dev/null @@ -1 +0,0 @@ -function r(t){return function(...e){var n=e[0];return n.preventDefault(),t?.apply(this,e)}}export{r as p}; diff --git a/webapp/assets/_app/immutable/chunks/BZLWIdPw.js b/webapp/assets/_app/immutable/chunks/D4ORNjyB.js similarity index 84% rename from webapp/assets/_app/immutable/chunks/BZLWIdPw.js rename to webapp/assets/_app/immutable/chunks/D4ORNjyB.js index 975c2f7c..44a3ac65 100644 --- a/webapp/assets/_app/immutable/chunks/BZLWIdPw.js +++ b/webapp/assets/_app/immutable/chunks/D4ORNjyB.js @@ -1 +1 @@ -import{H as l,I as u,J as m,K as _,L as p,M as h,N as v,O as b,P as g,Q as x}from"./DniTuB_0.js";function E(s,i,d){l&&u();var r=s,a,n,e=null,t=null;function f(){n&&(x(n),n=null),e&&(e.lastChild.remove(),r.before(e),e=null),n=t,t=null}m(()=>{if(a!==(a=i())){var c=b();if(a){var o=r;c&&(e=document.createDocumentFragment(),e.append(o=p())),t=h(()=>d(o,a))}c?v.add_callback(f):f()}},_),l&&(r=g)}export{E as c}; +import{H as l,I as u,J as m,K as _,L as p,M as h,N as v,O as b,P as g,Q as x}from"./BIqNNOMq.js";function E(s,i,d){l&&u();var r=s,a,n,e=null,t=null;function f(){n&&(x(n),n=null),e&&(e.lastChild.remove(),r.before(e),e=null),n=t,t=null}m(()=>{if(a!==(a=i())){var c=b();if(a){var o=r;c&&(e=document.createDocumentFragment(),e.append(o=p())),t=h(()=>d(o,a))}c?v.add_callback(f):f()}},_),l&&(r=g)}export{E as c}; diff --git a/webapp/assets/_app/immutable/chunks/Ck5PkeSc.js b/webapp/assets/_app/immutable/chunks/D8ZtP9JD.js similarity index 98% rename from webapp/assets/_app/immutable/chunks/Ck5PkeSc.js rename to webapp/assets/_app/immutable/chunks/D8ZtP9JD.js index ae1750aa..a6a39fbb 100644 --- a/webapp/assets/_app/immutable/chunks/Ck5PkeSc.js +++ b/webapp/assets/_app/immutable/chunks/D8ZtP9JD.js @@ -1 +1 @@ -import{L as G,J as re,R as X,H as D,S as ne,I as fe,g as Q,v as le,T as ie,U as se,V as W,W as g,P as O,X as ue,Y as te,M as J,O as ve,N as de,Z,m as _e,_ as z,a0 as K,a1 as oe,a2 as V,a3 as $,Q as ce,a4 as Y,a5 as he,a6 as B,a7 as k,a8 as Ee,a9 as me,aa as pe,ab as Te,ac as Ae,ad as y,ae as Ie,af as Ne}from"./DniTuB_0.js";function Me(i,r){return r}function we(i,r,e){for(var u=i.items,v=[],d=r.length,s=0;s0&&v.length===0&&e!==null;if(h){var T=e.parentNode;pe(T),T.append(e),u.clear(),w(i,r[0].prev,r[d-1].next)}Te(v,()=>{for(var p=0;p{var _=e();return oe(_)?_:_==null?[]:K(_)}),n,t;function l(){xe(t,n,h,A,s,v,r,u,e),d!==null&&(n.length===0?o?$(o):o=J(()=>d(s)):o!==null&&ce(o,()=>{o=null}))}re(()=>{t??=Ae,n=Q(M);var _=n.length;if(C&&_===0)return;C=_===0;let m=!1;if(D){var I=ie(s)===se;I!==(_===0)&&(s=W(),X(s),g(!1),m=!0)}if(D){for(var x=null,c,a=0;a<_;a++){if(O.nodeType===ue&&O.data===te){s=O,m=!0,g(!1);break}var f=n[a],E=u(f,a);c=P(O,h,x,null,f,E,a,v,r,e),h.items.set(E,c),x=c}_>0&&X(W())}if(D)_===0&&d&&(o=J(()=>d(s)));else if(ve()){var H=new Set,b=de;for(a=0;a<_;a+=1){f=n[a],E=u(f,a);var S=h.items.get(E)??A.get(E);S?(r&(Y|V))!==0&&j(S,f,a,r):(c=P(null,h,null,null,f,E,a,v,r,e,!0),A.set(E,c)),H.add(E)}for(const[N,L]of h.items)H.has(N)||b.skipped_effects.add(L.e);b.add_callback(l)}else l();m&&g(!0),Q(M)}),D&&(s=O)}function xe(i,r,e,u,v,d,s,h,T){var p=(s&Ne)!==0,o=(s&(Y|V))!==0,C=r.length,A=e.items,M=e.first,n=M,t,l=null,_,m=[],I=[],x,c,a,f;if(p)for(f=0;f0){var ee=(s&y)!==0&&C===0?v:null;if(p){for(f=0;f{if(_!==void 0)for(a of _)a.a?.apply()}),i.first=e.first&&e.first.e,i.last=l&&l.e;for(var ae of u.values())k(ae.e);u.clear()}function j(i,r,e,u){(u&Y)!==0&&Z(i.v,r),(u&V)!==0?Z(i.i,e):i.i=e}function P(i,r,e,u,v,d,s,h,T,p,o){var C=(T&Y)!==0,A=(T&he)===0,M=C?A?_e(v,!1,!1):z(v):v,n=(T&V)===0?s:z(s),t={i:n,v:M,k:d,a:null,e:null,prev:e,next:u};try{if(i===null){var l=document.createDocumentFragment();l.append(i=G())}return t.e=J(()=>h(i,M,n,p),D),t.e.prev=e&&e.e,t.e.next=u&&u.e,e===null?o||(r.first=t):(e.next=t,e.e.next=t.e),u!==null&&(u.prev=t,u.e.prev=t.e),t}finally{}}function F(i,r,e){for(var u=i.next?i.next.e.nodes_start:e,v=r?r.e.nodes_start:e,d=i.e.nodes_start;d!==null&&d!==u;){var s=Ee(d);v.before(d),d=s}}function w(i,r,e){r===null?i.first=e:(r.next=e,r.e.next=e&&e.e),e!==null&&(e.prev=r,e.e.prev=r&&r.e)}export{Se as e,Me as i}; +import{L as G,J as re,R as X,H as D,S as ne,I as fe,g as Q,v as le,T as ie,U as se,V as W,W as g,P as O,X as ue,Y as te,M as J,O as ve,N as de,Z,m as _e,_ as z,a0 as K,a1 as oe,a2 as V,a3 as $,Q as ce,a4 as Y,a5 as he,a6 as B,a7 as k,a8 as Ee,a9 as me,aa as pe,ab as Te,ac as Ae,ad as y,ae as Ie,af as Ne}from"./BIqNNOMq.js";function Me(i,r){return r}function we(i,r,e){for(var u=i.items,v=[],d=r.length,s=0;s0&&v.length===0&&e!==null;if(h){var T=e.parentNode;pe(T),T.append(e),u.clear(),w(i,r[0].prev,r[d-1].next)}Te(v,()=>{for(var p=0;p{var _=e();return oe(_)?_:_==null?[]:K(_)}),n,t;function l(){xe(t,n,h,A,s,v,r,u,e),d!==null&&(n.length===0?o?$(o):o=J(()=>d(s)):o!==null&&ce(o,()=>{o=null}))}re(()=>{t??=Ae,n=Q(M);var _=n.length;if(C&&_===0)return;C=_===0;let m=!1;if(D){var I=ie(s)===se;I!==(_===0)&&(s=W(),X(s),g(!1),m=!0)}if(D){for(var x=null,c,a=0;a<_;a++){if(O.nodeType===ue&&O.data===te){s=O,m=!0,g(!1);break}var f=n[a],E=u(f,a);c=P(O,h,x,null,f,E,a,v,r,e),h.items.set(E,c),x=c}_>0&&X(W())}if(D)_===0&&d&&(o=J(()=>d(s)));else if(ve()){var H=new Set,b=de;for(a=0;a<_;a+=1){f=n[a],E=u(f,a);var S=h.items.get(E)??A.get(E);S?(r&(Y|V))!==0&&j(S,f,a,r):(c=P(null,h,null,null,f,E,a,v,r,e,!0),A.set(E,c)),H.add(E)}for(const[N,L]of h.items)H.has(N)||b.skipped_effects.add(L.e);b.add_callback(l)}else l();m&&g(!0),Q(M)}),D&&(s=O)}function xe(i,r,e,u,v,d,s,h,T){var p=(s&Ne)!==0,o=(s&(Y|V))!==0,C=r.length,A=e.items,M=e.first,n=M,t,l=null,_,m=[],I=[],x,c,a,f;if(p)for(f=0;f0){var ee=(s&y)!==0&&C===0?v:null;if(p){for(f=0;f{if(_!==void 0)for(a of _)a.a?.apply()}),i.first=e.first&&e.first.e,i.last=l&&l.e;for(var ae of u.values())k(ae.e);u.clear()}function j(i,r,e,u){(u&Y)!==0&&Z(i.v,r),(u&V)!==0?Z(i.i,e):i.i=e}function P(i,r,e,u,v,d,s,h,T,p,o){var C=(T&Y)!==0,A=(T&he)===0,M=C?A?_e(v,!1,!1):z(v):v,n=(T&V)===0?s:z(s),t={i:n,v:M,k:d,a:null,e:null,prev:e,next:u};try{if(i===null){var l=document.createDocumentFragment();l.append(i=G())}return t.e=J(()=>h(i,M,n,p),D),t.e.prev=e&&e.e,t.e.next=u&&u.e,e===null?o||(r.first=t):(e.next=t,e.e.next=t.e),u!==null&&(u.prev=t,u.e.prev=t.e),t}finally{}}function F(i,r,e){for(var u=i.next?i.next.e.nodes_start:e,v=r?r.e.nodes_start:e,d=i.e.nodes_start;d!==null&&d!==u;){var s=Ee(d);v.before(d),d=s}}function w(i,r,e){r===null?i.first=e:(r.next=e,r.e.next=e&&e.e),e!==null&&(e.prev=r,e.e.prev=r&&r.e)}export{Se as e,Me as i}; diff --git a/webapp/assets/_app/immutable/chunks/D8qjq9ho.js b/webapp/assets/_app/immutable/chunks/D8qjq9ho.js new file mode 100644 index 00000000..52c1ea4c --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/D8qjq9ho.js @@ -0,0 +1,2 @@ +import"./DsnmJJEf.js";import{i as ct}from"./De-I_rkH.js";import{p as bt,E as vt,m as p,o as mt,k as s,B as yt,l as we,g as e,h as _t,f as x,a as W,d,r as o,s as n,t as _,y as tr,u as g,z as ar,q as A,e as E,i as V,b as f,A as ae,D as Pr,c as xt,v as ht}from"./BIqNNOMq.js";import{p as kt,i as v,s as wt,a as Et}from"./CfI2BFUj.js";import{e as Ir,i as Jr}from"./D8ZtP9JD.js";import{r as T,s as ir,b as or,c as Nr,g as Ee,d as Cr}from"./CQh-7xkh.js";import{b as j,a as Br}from"./Gs5uNKRr.js";import{p as Tt}from"./CdEA5IGF.js";import{M as $t}from"./BFX8vI-4.js";import{J as St,U as Rt,a as Mt,b as Ot}from"./COXBdepE.js";import{e as Dr}from"./BZiHL9L3.js";import{e as Ut}from"./B1uxuBYn.js";import{w as nr}from"./C4VNo_Nu.js";var zt=x('

'),At=x('

'),jt=x('
Loading templates...
'),Pt=x(""),It=x('

',1),Jt=x('

Create a template first or proceed without a template to use default behavior.

'),Nt=x(' '),Ct=x('
'),Bt=x('
'),Dt=x('
Updating...
'),Lt=x('

Pool Information (Read-only)

Provider:
Entity:

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Tags
Extra Specs (JSON)
'),Gt=x(" ",1);function aa(Lr,dr){bt(dr,!1);const[Gr,qr]=wt(),c=()=>Et(Ut,"$eagerCache",Gr),M=p();let r=kt(dr,"pool",8);const Te=vt();let ie=p(!1),X=p(""),O=p(""),$=p([]),$e=p(!1),F=p(!1),H=null,oe=p(r().image||""),ne=p(r().flavor||""),P=p(r().max_runners),I=p(r().min_idle_runners),de=p(r().runner_bootstrap_timeout),se=p(r().priority),le=p(r().runner_prefix||""),S=p(r().os_type||"linux"),Y=p(r().os_arch||"amd64"),ue=p(r()["github-runner-group"]||""),pe=p(r().enabled),Z=p(r().enable_shell??!1),R=p((r().tags||[]).map(t=>t.name||"").filter(Boolean)),K=p(""),J=p("{}"),U=p(r().template_id);function Wr(t){if(t.repo_id){const a=c().repositories.find(l=>l.id===t.repo_id);return a?`${a.owner}/${a.name}`:"Unknown Entity"}if(t.org_id){const a=c().organizations.find(l=>l.id===t.org_id);return a&&a.name?a.name:"Unknown Entity"}if(t.enterprise_id){const a=c().enterprises.find(l=>l.id===t.enterprise_id);return a&&a.name?a.name:"Unknown Entity"}return"Unknown Entity"}function sr(t){return t.repo_id?"Repository":t.org_id?"Organization":t.enterprise_id?"Enterprise":"Unknown"}function Se(){if(r().endpoint?.endpoint_type)return r().endpoint.endpoint_type;if(r().repo_id){const t=c().repositories.find(a=>a.id===r().repo_id);if(t?.endpoint?.endpoint_type)return t.endpoint.endpoint_type}if(r().org_id){const t=c().organizations.find(a=>a.id===r().org_id);if(t?.endpoint?.endpoint_type)return t.endpoint.endpoint_type}if(r().enterprise_id){const t=c().enterprises.find(a=>a.id===r().enterprise_id);if(t?.endpoint?.endpoint_type)return t.endpoint.endpoint_type}return null}function Fr(){return r().repo_id?c().repositories.find(a=>a.id===r().repo_id)?.agent_mode??!1:r().org_id?c().organizations.find(a=>a.id===r().org_id)?.agent_mode??!1:r().enterprise_id?c().enterprises.find(a=>a.id===r().enterprise_id)?.agent_mode??!1:!1}function Re(t){if(t.operation!=="update")return;const a=t.payload;if(r().repo_id&&a.id===r().repo_id){const l=c().repositories.find(h=>h.id===r().repo_id);l&&(Object.assign(l,a),"agent_mode"in a&&s(M,a.agent_mode??!1))}else if(r().org_id&&a.id===r().org_id){const l=c().organizations.find(h=>h.id===r().org_id);l&&(Object.assign(l,a),"agent_mode"in a&&s(M,a.agent_mode??!1))}else if(r().enterprise_id&&a.id===r().enterprise_id){const l=c().enterprises.find(h=>h.id===r().enterprise_id);l&&(Object.assign(l,a),"agent_mode"in a&&s(M,a.agent_mode??!1))}}async function Me(t){try{if(r().repo_id){await Ee.updateRepository(r().repo_id,t);const a=c().repositories.find(l=>l.id===r().repo_id);a&&Object.assign(a,t)}else if(r().org_id){await Ee.updateOrganization(r().org_id,t);const a=c().organizations.find(l=>l.id===r().org_id);a&&Object.assign(a,t)}else if(r().enterprise_id){await Ee.updateEnterprise(r().enterprise_id,t);const a=c().enterprises.find(l=>l.id===r().enterprise_id);a&&Object.assign(a,t)}s(F,!1)}catch(a){throw a}}function Hr(){return r().repo_id?c().repositories.find(t=>t.id===r().repo_id)||null:r().org_id?c().organizations.find(t=>t.id===r().org_id)||null:r().enterprise_id&&c().enterprises.find(t=>t.id===r().enterprise_id)||null}async function lr(){try{s($e,!0);const t=Se();if(!t){s($,[]);return}if(s($,await Ee.listTemplates(e(S),void 0,t)),!e(U)||!e($).find(a=>a.id===e(U))){const a=e($).find(l=>l.owner_id==="system");a?s(U,a.id):e($).length>0&&s(U,e($)[0].id)}}catch(t){s(X,Dr(t))}finally{s($e,!1)}}mt(()=>{if(r().extra_specs)try{if(typeof r().extra_specs=="object")s(J,JSON.stringify(r().extra_specs,null,2));else{const t=JSON.parse(r().extra_specs);s(J,JSON.stringify(t,null,2))}}catch{s(J,r().extra_specs||"{}")}lr(),r().repo_id?H=nr.subscribeToEntity("repository",["update"],Re):r().org_id?H=nr.subscribeToEntity("organization",["update"],Re):r().enterprise_id&&(H=nr.subscribeToEntity("enterprise",["update"],Re))}),yt(()=>{H&&(H(),H=null)});function ur(){e(K).trim()&&!e(R).includes(e(K).trim())&&(s(R,[...e(R),e(K).trim()]),s(K,""))}function Kr(t){s(R,e(R).filter((a,l)=>l!==t))}function Qr(t){t.key==="Enter"&&(t.preventDefault(),ur())}async function Vr(){try{if(s(ie,!0),s(X,""),e(O))throw new Error(e(O));let t={};if(e(J).trim())try{t=JSON.parse(e(J))}catch{throw new Error("Invalid JSON in extra specs")}const a={image:e(oe)!==r().image?e(oe):void 0,flavor:e(ne)!==r().flavor?e(ne):void 0,max_runners:e(P)!==r().max_runners?e(P):void 0,min_idle_runners:e(I)!==r().min_idle_runners?e(I):void 0,runner_bootstrap_timeout:e(de)!==r().runner_bootstrap_timeout?e(de):void 0,priority:e(se)!==r().priority?e(se):void 0,runner_prefix:e(le)!==r().runner_prefix?e(le):void 0,os_type:e(S)!==r().os_type?e(S):void 0,os_arch:e(Y)!==r().os_arch?e(Y):void 0,"github-runner-group":e(ue)!==r()["github-runner-group"]&&e(ue)||void 0,enabled:e(pe)!==r().enabled?e(pe):void 0,enable_shell:e(Z)!==r().enable_shell?e(Z):void 0,tags:JSON.stringify(e(R))!==JSON.stringify((r().tags||[]).map(l=>l.name||"").filter(Boolean))?e(R):void 0,extra_specs:e(J).trim()!==JSON.stringify(r().extra_specs||{},null,2).trim()?t:void 0,template_id:e(U)!==r().template_id?e(U):void 0};Object.keys(a).forEach(l=>{a[l]===void 0&&delete a[l]}),Te("submit",a)}catch(t){s(X,Dr(t))}finally{s(ie,!1)}}we(()=>{},()=>{s(M,Fr())}),we(()=>e(M),()=>{e(M)||s(Z,!1)}),we(()=>e(S),()=>{e(S)&&lr()}),we(()=>(e(I),e(P)),()=>{e(I)!==null&&e(I)!==void 0&&e(P)!==null&&e(P)!==void 0&&e(I)>e(P)?s(O,"Min idle runners cannot be greater than max runners"):s(O,"")}),_t(),ct();var pr=Gt(),gr=W(pr);$t(gr,{$$events:{close:()=>Te("close")},children:(t,a)=>{var l=Lt(),h=d(l),ge=d(h),ee=d(ge);o(ge),o(h);var Q=n(h,2),fe=d(Q);{var Oe=i=>{var u=zt(),m=d(u),k=d(m,!0);o(m),o(u),_(()=>E(k,e(X))),f(i,u)};v(fe,i=>{e(X)&&i(Oe)})}var ce=n(fe,2);{var N=i=>{var u=At(),m=d(u),k=d(m,!0);o(m),o(u),_(()=>E(k,e(O))),f(i,u)};v(ce,i=>{e(O)&&i(N)})}var C=n(ce,2),be=n(d(C),2),re=d(be),ve=n(d(re),2),B=d(ve,!0);o(ve),o(re);var D=n(re,2),me=n(d(D),2),Ue=d(me);o(me),o(D),o(be),o(C);var L=n(C,2),ye=n(d(L),2),ze=d(ye),fr=n(d(ze),2);T(fr),o(ze);var Ae=n(ze,2),cr=n(d(Ae),2);T(cr),o(Ae);var je=n(Ae,2),Pe=n(d(je),2);_(()=>{e(S),tr(()=>{})});var Ie=d(Pe);Ie.value=Ie.__value="linux";var br=n(Ie);br.value=br.__value="windows",o(Pe),o(je);var Je=n(je,2),Ne=n(d(Je),2);_(()=>{e(Y),tr(()=>{})});var Ce=d(Ne);Ce.value=Ce.__value="amd64";var vr=n(Ce);vr.value=vr.__value="arm64",o(Ne),o(Je);var mr=n(Je,2),Zr=n(d(mr),2);{var et=i=>{var u=jt();f(i,u)},rt=i=>{var u=ae(),m=W(u);{var k=y=>{var z=It(),w=W(z);_(()=>{e(U),tr(()=>{e($)})}),Ir(w,5,()=>e($),Jr,(G,b)=>{var q=Pt(),zr=d(q),gt=n(zr);{var ft=rr=>{var jr=Pr();_(()=>E(jr,`- ${e(b),g(()=>e(b).description)??""}`)),f(rr,jr)};v(gt,rr=>{e(b),g(()=>e(b).description)&&rr(ft)})}o(q);var Ar={};_(()=>{E(zr,`${e(b),g(()=>e(b).name)??""} ${e(b),g(()=>e(b).owner_id==="system"?"(System)":"")??""} `),Ar!==(Ar=(e(b),g(()=>e(b).id)))&&(q.value=(q.__value=(e(b),g(()=>e(b).id)))??"")}),f(G,q)}),o(w);var he=n(w,2),ke=d(he);o(he),_(G=>E(ke,`Templates define how the runner software is installed and configured. + Showing templates for ${G??""} ${e(S)??""}.`),[()=>g(Se)]),or(w,()=>e(U),G=>s(U,G)),f(y,z)},te=y=>{var z=Jt(),w=d(z),he=d(w);o(w);var ke=n(w,2),G=d(ke);ar(),o(ke),o(z),_((b,q)=>{E(he,`No templates found for ${b??""} ${e(S)??""}.`),Nr(G,"href",q)},[()=>g(Se),()=>(A(Cr),g(()=>Cr("/templates")))]),f(y,z)};v(m,y=>{e($),g(()=>e($).length>0)?y(k):y(te,!1)},!0)}f(i,u)};v(Zr,i=>{e($e)?i(et):i(rt,!1)})}o(mr),o(ye),o(L);var Be=n(L,2),yr=n(d(Be),2),De=d(yr),Le=n(d(De),2);T(Le),o(De);var Ge=n(De,2),qe=n(d(Ge),2);T(qe),o(Ge);var _r=n(Ge,2),xr=n(d(_r),2);T(xr),o(_r),o(yr),o(Be);var We=n(Be,2),Fe=n(d(We),2),He=d(Fe),hr=n(d(He),2);T(hr),o(He);var Ke=n(He,2),kr=n(d(Ke),2);T(kr),o(Ke);var wr=n(Ke,2),Er=n(d(wr),2);T(Er),o(wr),o(Fe);var Qe=n(Fe,2),Tr=d(Qe),$r=n(d(Tr),2),Ve=d($r),_e=d(Ve);T(_e);var tt=n(_e,2);o(Ve);var at=n(Ve,2);{var it=i=>{var u=Ct();Ir(u,5,()=>e(R),Jr,(m,k,te)=>{var y=Nt(),z=d(y),w=n(z);o(y),_(()=>{E(z,`${e(k)??""} `),Nr(w,"aria-label",`Remove tag ${e(k)??""}`)}),V("click",w,()=>Kr(te)),f(m,y)}),o(u),f(i,u)};v(at,i=>{e(R),g(()=>e(R).length>0)&&i(it)})}o($r),o(Tr),o(Qe);var Xe=n(Qe,2),Sr=d(Xe),ot=n(d(Sr),2);St(ot,{rows:4,placeholder:"{}",get value(){return e(J)},set value(i){s(J,i)},$$legacy:!0}),o(Sr),o(Xe);var Ye=n(Xe,2),Rr=d(Ye);T(Rr),ar(2),o(Ye);var Mr=n(Ye,2),Ze=d(Mr),xe=d(Ze);T(xe);var nt=n(xe,2);ar(2),o(Ze);var dt=n(Ze,2);{var st=i=>{var u=Bt(),m=n(d(u),2),k=d(m),te=n(k);o(m),o(u),_(y=>E(k,`Shell access requires agent mode to be enabled on the ${y??""}. `),[()=>(A(r()),g(()=>sr(r()).toLowerCase()))]),V("click",te,()=>s(F,!0)),f(i,u)};v(dt,i=>{e(M)||i(st)})}o(Mr),o(We);var Or=n(We,2),Ur=d(Or),er=n(Ur,2),lt=d(er);{var ut=i=>{var u=Dt();f(i,u)},pt=i=>{var u=Pr("Update Pool");f(i,u)};v(lt,i=>{e(ie)?i(ut):i(pt,!1)})}o(er),o(Or),o(Q),o(l),_((i,u)=>{E(ee,`Update Pool ${A(r()),g(()=>r().id)??""}`),E(B,(A(r()),g(()=>r().provider_name))),E(Ue,`${i??""}: ${u??""}`),ir(Le,1,`w-full px-3 py-2 border ${e(O)?"border-red-300 dark:border-red-500":"border-gray-300 dark:border-gray-600"} rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white`),ir(qe,1,`w-full px-3 py-2 border ${e(O)?"border-red-300 dark:border-red-500":"border-gray-300 dark:border-gray-600"} rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white`),xe.disabled=!e(M),ir(nt,1,`ml-2 block text-sm font-medium text-gray-700 dark:text-gray-300 ${e(M)?"":"opacity-50"}`),er.disabled=e(ie)||e(O)!==""},[()=>(A(r()),g(()=>sr(r()))),()=>(A(r()),g(()=>Wr(r())))]),j(fr,()=>e(oe),i=>s(oe,i)),j(cr,()=>e(ne),i=>s(ne,i)),or(Pe,()=>e(S),i=>s(S,i)),or(Ne,()=>e(Y),i=>s(Y,i)),j(Le,()=>e(I),i=>s(I,i)),j(qe,()=>e(P),i=>s(P,i)),j(xr,()=>e(de),i=>s(de,i)),j(hr,()=>e(le),i=>s(le,i)),j(kr,()=>e(se),i=>s(se,i)),j(Er,()=>e(ue),i=>s(ue,i)),j(_e,()=>e(K),i=>s(K,i)),V("keydown",_e,Qr),V("click",tt,ur),Br(Rr,()=>e(pe),i=>s(pe,i)),Br(xe,()=>e(Z),i=>s(Z,i)),V("click",Ur,()=>Te("close")),V("submit",Q,Tt(Vr)),f(t,l)},$$slots:{default:!0}});var Xr=n(gr,2);{var Yr=t=>{const a=ht(()=>g(Hr));var l=ae(),h=W(l);{var ge=ee=>{var Q=ae(),fe=W(Q);{var Oe=N=>{Rt(N,{get repository(){return e(a)},$$events:{close:()=>s(F,!1),submit:C=>Me(C.detail)}})},ce=N=>{var C=ae(),be=W(C);{var re=B=>{Mt(B,{get organization(){return e(a)},$$events:{close:()=>s(F,!1),submit:D=>Me(D.detail)}})},ve=B=>{var D=ae(),me=W(D);{var Ue=L=>{Ot(L,{get enterprise(){return e(a)},$$events:{close:()=>s(F,!1),submit:ye=>Me(ye.detail)}})};v(me,L=>{A(r()),g(()=>r().enterprise_id)&&L(Ue)},!0)}f(B,D)};v(be,B=>{A(r()),g(()=>r().org_id)?B(re):B(ve,!1)},!0)}f(N,C)};v(fe,N=>{A(r()),g(()=>r().repo_id)?N(Oe):N(ce,!1)})}f(ee,Q)};v(h,ee=>{e(a)&&ee(ge)})}f(t,l)};v(Xr,t=>{e(F)&&t(Yr)})}f(Lr,pr),xt(),qr()}export{aa as U}; diff --git a/webapp/assets/_app/immutable/chunks/B3nevMeU.js b/webapp/assets/_app/immutable/chunks/DAaZIIvX.js similarity index 86% rename from webapp/assets/_app/immutable/chunks/B3nevMeU.js rename to webapp/assets/_app/immutable/chunks/DAaZIIvX.js index 07f01e5b..371f6aa8 100644 --- a/webapp/assets/_app/immutable/chunks/B3nevMeU.js +++ b/webapp/assets/_app/immutable/chunks/DAaZIIvX.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import{i as D}from"./TJn6xDN9.js";import{p as P,f as I,d as s,r as n,s as u,u as l,q as i,t as w,e as S,b as N,c as A}from"./DniTuB_0.js";import{d as f,c as F}from"./DD3srElq.js";import{p as d}from"./DbNhg6mG.js";import{D as E,G,A as j}from"./QtGwBUod.js";import{E as q}from"./D3pbRQAB.js";import{S as g}from"./Dn_Ue57e.js";var L=I('');function O(y,a){P(a,!1);let e=d(a,"instances",8),h=d(a,"entityType",8),v=d(a,"onDeleteInstance",8);const b=[{key:"name",title:"Name",cellComponent:q,cellProps:{entityType:"instance",nameField:"name"}},{key:"status",title:"Status",cellComponent:g,cellProps:{statusType:"instance",statusField:"status"}},{key:"runner_status",title:"Runner Status",cellComponent:g,cellProps:{statusType:"instance",statusField:"runner_status"}},{key:"created",title:"Created",cellComponent:G,cellProps:{field:"created_at",type:"date"}},{key:"actions",title:"Actions",align:"right",cellComponent:j,cellProps:{actions:[{type:"delete",label:"Delete",title:"Delete instance",ariaLabel:"Delete instance",action:"delete"}]}}],x={entityType:"instance",primaryText:{field:"name",isClickable:!0,href:"/instances/{name}"},secondaryText:{field:"provider_id"},badges:[{type:"status",field:"status"}],actions:[{type:"delete",handler:t=>m(t)}]};function m(t){v()(t)}function C(t){m(t.detail.item)}D();var r=L(),p=s(r),o=s(p),c=s(o),T=s(c);n(c);var _=u(c,2);n(o);var k=u(o,2);E(k,{get columns(){return b},get data(){return e()},loading:!1,error:"",searchTerm:"",showSearch:!1,showPagination:!1,currentPage:1,get perPage(){return i(e()),l(()=>e().length)},totalPages:1,get totalItems(){return i(e()),l(()=>e().length)},itemName:"instances",emptyTitle:"No instances running",get emptyMessage(){return`No instances running for this ${h()??""}.`},emptyIconType:"cog",get mobileCardConfig(){return x},$$events:{delete:C}}),n(p),n(r),w(t=>{S(T,`Instances (${i(e()),l(()=>e().length)??""})`),F(_,"href",t)},[()=>(i(f),l(()=>f("/instances")))]),N(y,r),A()}export{O as I}; +import"./DsnmJJEf.js";import{i as D}from"./De-I_rkH.js";import{p as P,f as I,d as s,r as n,s as u,u as l,q as i,t as w,e as S,b as N,c as A}from"./BIqNNOMq.js";import{d as f,c as F}from"./CQh-7xkh.js";import{p as d}from"./CfI2BFUj.js";import{D as E,G,A as j}from"./BjNB1vhO.js";import{E as q}from"./C6HeU_02.js";import{S as g}from"./DCu5KXBe.js";var L=I('');function O(y,a){P(a,!1);let e=d(a,"instances",8),h=d(a,"entityType",8),v=d(a,"onDeleteInstance",8);const b=[{key:"name",title:"Name",cellComponent:q,cellProps:{entityType:"instance",nameField:"name"}},{key:"status",title:"Status",cellComponent:g,cellProps:{statusType:"instance",statusField:"status"}},{key:"runner_status",title:"Runner Status",cellComponent:g,cellProps:{statusType:"instance",statusField:"runner_status"}},{key:"created",title:"Created",cellComponent:G,cellProps:{field:"created_at",type:"date"}},{key:"actions",title:"Actions",align:"right",cellComponent:j,cellProps:{actions:[{type:"delete",label:"Delete",title:"Delete instance",ariaLabel:"Delete instance",action:"delete"}]}}],x={entityType:"instance",primaryText:{field:"name",isClickable:!0,href:"/instances/{name}"},secondaryText:{field:"provider_id"},badges:[{type:"status",field:"status"}],actions:[{type:"delete",handler:t=>m(t)}]};function m(t){v()(t)}function C(t){m(t.detail.item)}D();var r=L(),p=s(r),o=s(p),c=s(o),T=s(c);n(c);var _=u(c,2);n(o);var k=u(o,2);E(k,{get columns(){return b},get data(){return e()},loading:!1,error:"",searchTerm:"",showSearch:!1,showPagination:!1,currentPage:1,get perPage(){return i(e()),l(()=>e().length)},totalPages:1,get totalItems(){return i(e()),l(()=>e().length)},itemName:"instances",emptyTitle:"No instances running",get emptyMessage(){return`No instances running for this ${h()??""}.`},emptyIconType:"cog",get mobileCardConfig(){return x},$$events:{delete:C}}),n(p),n(r),w(t=>{S(T,`Instances (${i(e()),l(()=>e().length)??""})`),F(_,"href",t)},[()=>(i(f),l(()=>f("/instances")))]),N(y,r),A()}export{O as I}; diff --git a/webapp/assets/_app/immutable/chunks/DBZ2eikH.js b/webapp/assets/_app/immutable/chunks/DBZ2eikH.js new file mode 100644 index 00000000..2e6eefcf --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/DBZ2eikH.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as Rt}from"./De-I_rkH.js";import{p as Pt,E as Ct,m as c,o as $t,g as e,k as r,B as jt,l as ue,h as At,f as x,a as G,s as t,d as i,r as o,t as h,i as J,b,e as S,z as ze,y as be,u as f,D as ce,c as It,A as re,v as Ot,q as Bt}from"./BIqNNOMq.js";import{p as Yr,i as _,s as Lt,a as qt}from"./CfI2BFUj.js";import{e as Se,i as Re}from"./D8ZtP9JD.js";import{s as Pe,r as j,b as ve,g as A,c as Zr,d as et}from"./CQh-7xkh.js";import{b as N,a as rt}from"./Gs5uNKRr.js";import{p as Ut}from"./CdEA5IGF.js";import{M as Dt}from"./BFX8vI-4.js";import{e as Ce}from"./BZiHL9L3.js";import{J as Ht,U as Gt,a as Jt,b as Nt}from"./COXBdepE.js";import{w as Er}from"./C4VNo_Nu.js";import{e as Vt}from"./B1uxuBYn.js";var Wt=x('

'),Ft=x('
'),Kt=x(""),Qt=x(''),Xt=x('
'),Yt=x(""),Zt=x(''),ea=x('
Loading templates...
'),ra=x(""),ta=x('

Templates define how the runner software is installed and configured.

',1),aa=x('

Create a template first or proceed without a template to use default behavior.

'),oa=x('

Select an entity first to see available templates

'),ia=x(' '),sa=x('
'),da=x(''),la=x('
'),na=x('

Entity & Provider Configuration

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Extra Specs (JSON)
',1),ua=x('
Creating...
'),ba=x('

Create New Pool

Entity Level *
'),ca=x(" ",1);function Ta(tt,$e){Pt($e,!1);const[at,ot]=Lt(),je=()=>qt(Vt,"$eagerCache",at),L=c(),ge=Ct();let Ae=Yr($e,"initialEntityType",8,""),Mr=Yr($e,"initialEntityId",8,""),pe=c(!1),V=c(""),d=c(Ae()),T=c([]),Ie=c([]),I=c([]),Oe=c(!1),Be=c(!1),Le=c(!1),K=c(!1),W=c(null),n=c(Mr()),Q=c(""),te=c(""),ae=c(""),qe=c(void 0),Ue=c(void 0),De=c(void 0),He=c(100),Ge=c("garm"),R=c("linux"),fe=c("amd64"),Je=c(""),Ne=c(!0),me=c(!1),q=c([]),X=c(""),oe=c("{}"),U=c(void 0);async function it(){try{r(Be,!0),r(Ie,await A.listProviders())}catch(s){r(V,Ce(s))}finally{r(Be,!1)}}async function Tr(){try{r(Le,!0);const s=Ve();if(!s){r(I,[]);return}if(r(I,await A.listTemplates(e(R),void 0,s)),!e(U)||!e(I).find(l=>l.id===e(U))){const l=e(I).find(m=>m.owner_id==="system");l?r(U,l.id):e(I).length>0&&r(U,e(I)[0].id)}}catch(s){r(V,Ce(s))}finally{r(Le,!1)}}function Ve(){if(!e(n)||!e(T))return null;const s=e(T).find(l=>l.id===e(n));if(!s)return null;if("forge_type"in s)return s.forge_type;if("endpoint"in s){const l=s.endpoint;if(l&&"endpoint_type"in l)return l.endpoint_type||null}return"github"}function ye(){if(!e(n)||!e(T))return!1;const s=e(T).find(l=>l.id===e(n));return s&&"agent_mode"in s?s.agent_mode??!1:!1}async function We(){if(e(d))try{switch(r(Oe,!0),r(T,[]),e(d)){case"repository":r(T,await A.listRepositories());break;case"organization":r(T,await A.listOrganizations());break;case"enterprise":r(T,await A.listEnterprises());break}}catch(s){r(V,Ce(s))}finally{r(Oe,!1)}}function Fe(s){e(d)!==s&&(r(d,s),r(n,""),r(U,void 0),We())}function zr(s){if(s.operation!=="update")return;const l=s.payload;if(e(d)==="repository"&&l.id===e(n)){const m=je().repositories.find(P=>P.id===e(n));m&&(Object.assign(m,l),r(L,ye()))}else if(e(d)==="organization"&&l.id===e(n)){const m=je().organizations.find(P=>P.id===e(n));m&&(Object.assign(m,l),r(L,ye()))}else if(e(d)==="enterprise"&&l.id===e(n)){const m=je().enterprises.find(P=>P.id===e(n));m&&(Object.assign(m,l),r(L,ye()))}}async function Ke(s){if(!(!e(n)||!e(d)))try{switch(e(d)){case"repository":await A.updateRepository(e(n),s);break;case"organization":await A.updateOrganization(e(n),s);break;case"enterprise":await A.updateEnterprise(e(n),s);break}await We(),r(K,!1)}catch(l){throw l}}function st(){return!e(n)||!e(T)?null:e(T).find(s=>s.id===e(n))||null}function Sr(){e(X).trim()&&!e(q).includes(e(X).trim())&&(r(q,[...e(q),e(X).trim()]),r(X,""))}function dt(s){r(q,e(q).filter((l,m)=>m!==s))}function lt(s){s.key==="Enter"&&(s.preventDefault(),Sr())}async function nt(){if(!e(d)||!e(n)||!e(Q)||!e(te)||!e(ae)){r(V,"Please fill in all required fields");return}try{r(pe,!0),r(V,"");let s={};if(e(oe).trim())try{s=JSON.parse(e(oe))}catch{throw new Error("Invalid JSON in extra specs")}const l={provider_name:e(Q),image:e(te),flavor:e(ae),max_runners:e(qe)||10,min_idle_runners:e(Ue)||0,runner_bootstrap_timeout:e(De)||20,priority:e(He),runner_prefix:e(Ge),os_type:e(R),os_arch:e(fe),"github-runner-group":e(Je)||void 0,enabled:e(Ne),enable_shell:e(me),tags:e(q),extra_specs:e(oe).trim()?s:void 0,template_id:e(U)};if(Ae()&&Mr())ge("submit",l);else{switch(e(d)){case"repository":await A.createRepositoryPool(e(n),l);break;case"organization":await A.createOrganizationPool(e(n),l);break;case"enterprise":await A.createEnterprisePool(e(n),l);break;default:throw new Error("Invalid entity level")}ge("submit",l)}}catch(s){r(V,Ce(s))}finally{r(pe,!1)}}$t(()=>{it(),Ae()&&We(),e(d)&&(e(d)==="repository"||e(d)==="organization"||e(d)==="enterprise")&&r(W,Er.subscribeToEntity(e(d),["update"],zr))}),jt(()=>{e(W)&&(e(W)(),r(W,null))}),ue(()=>{},()=>{r(L,ye())}),ue(()=>e(L),()=>{e(L)||r(me,!1)}),ue(()=>(e(n),e(R)),()=>{e(n)&&e(R)&&Tr()}),ue(()=>(e(R),e(n)),()=>{e(R)&&e(n)&&Tr()}),ue(()=>(e(d),e(W),Er),()=>{e(d)&&(e(d)==="repository"||e(d)==="organization"||e(d)==="enterprise")&&(e(W)&&e(W)(),r(W,Er.subscribeToEntity(e(d),["update"],zr)))}),At(),Rt();var Rr=ca(),Pr=G(Rr);Dt(Pr,{$$events:{close:()=>ge("close")},children:(s,l)=>{var m=ba(),P=t(i(m),2),xe=i(P);{var ie=k=>{var z=Wt(),ee=i(z),we=i(ee,!0);o(ee),o(z),h(()=>S(we,e(V))),b(k,z)};_(xe,k=>{e(V)&&k(ie)})}var Y=t(xe,2),he=t(i(Y),2),se=i(he),de=t(se,2),D=t(de,2);o(he),o(Y);var F=t(Y,2);{var Qe=k=>{var z=na(),ee=G(z),we=t(i(ee),2),Ze=i(we),er=i(Ze),ct=i(er);ze(),o(er);var vt=t(er,2);{var gt=a=>{var v=Ft();b(a,v)},pt=a=>{var v=Qt();h(()=>{e(n),be(()=>{e(d),e(T)})});var w=i(v),C=i(w);o(w),w.value=w.__value="";var $=t(w);Se($,1,()=>e(T),Re,(p,u)=>{var y=Kt(),H=i(y);{var le=g=>{var M=ce();h(()=>S(M,`${e(u),f(()=>e(u).owner)??""}/${e(u),f(()=>e(u).name)??""} (${e(u),f(()=>e(u).endpoint?.name)??""})`)),b(g,M)},B=g=>{var M=ce();h(()=>S(M,`${e(u),f(()=>e(u).name)??""} (${e(u),f(()=>e(u).endpoint?.name)??""})`)),b(g,M)};_(H,g=>{e(d)==="repository"?g(le):g(B,!1)})}o(y);var E={};h(()=>{E!==(E=(e(u),f(()=>e(u).id)))&&(y.value=(y.__value=(e(u),f(()=>e(u).id)))??"")}),b(p,y)}),o(v),h(()=>S(C,`Select a ${e(d)??""}`)),ve(v,()=>e(n),p=>r(n,p)),b(a,v)};_(vt,a=>{e(Oe)?a(gt):a(pt,!1)})}o(Ze);var Cr=t(Ze,2),ft=t(i(Cr),2);{var mt=a=>{var v=Xt();b(a,v)},yt=a=>{var v=Zt();h(()=>{e(Q),be(()=>{e(Ie)})});var w=i(v);w.value=w.__value="";var C=t(w);Se(C,1,()=>e(Ie),Re,($,p)=>{var u=Yt(),y=i(u,!0);o(u);var H={};h(()=>{S(y,(e(p),f(()=>e(p).name))),H!==(H=(e(p),f(()=>e(p).name)))&&(u.value=(u.__value=(e(p),f(()=>e(p).name)))??"")}),b($,u)}),o(v),ve(v,()=>e(Q),$=>r(Q,$)),b(a,v)};_(ft,a=>{e(Be)?a(mt):a(yt,!1)})}o(Cr),o(we),o(ee);var rr=t(ee,2),tr=t(i(rr),2),ar=i(tr),$r=t(i(ar),2);j($r),o(ar);var or=t(ar,2),jr=t(i(or),2);j(jr),o(or);var ir=t(or,2),sr=t(i(ir),2);h(()=>{e(R),be(()=>{})});var dr=i(sr);dr.value=dr.__value="linux";var Ar=t(dr);Ar.value=Ar.__value="windows",o(sr),o(ir);var Ir=t(ir,2),lr=t(i(Ir),2);h(()=>{e(fe),be(()=>{})});var nr=i(lr);nr.value=nr.__value="amd64";var Or=t(nr);Or.value=Or.__value="arm64",o(lr),o(Ir),o(tr);var Br=t(tr,2),xt=t(i(Br),2);{var ht=a=>{var v=ea();b(a,v)},_t=a=>{var v=re(),w=G(v);{var C=p=>{var u=ta(),y=G(u);h(()=>{e(U),be(()=>{e(I)})}),Se(y,5,()=>e(I),Re,(E,g)=>{var M=ra(),ne=i(M),_r=t(ne);{var kr=wr=>{var Xr=ce();h(()=>S(Xr,`- ${e(g),f(()=>e(g).description)??""}`)),b(wr,Xr)};_(_r,wr=>{e(g),f(()=>e(g).description)&&wr(kr)})}o(M);var Te={};h(()=>{S(ne,`${e(g),f(()=>e(g).name)??""} ${e(g),f(()=>e(g).owner_id==="system"?"(System)":"")??""} `),Te!==(Te=(e(g),f(()=>e(g).id)))&&(M.value=(M.__value=(e(g),f(()=>e(g).id)))??"")}),b(E,M)}),o(y);var H=t(y,2),le=t(i(H));{var B=E=>{var g=ce();h(M=>S(g,`Showing templates for ${M??""} ${e(R)??""}.`),[()=>f(Ve)]),b(E,g)};_(le,E=>{e(n)&&E(B)})}o(H),ve(y,()=>e(U),E=>r(U,E)),b(p,u)},$=p=>{var u=re(),y=G(u);{var H=B=>{var E=aa(),g=i(E),M=i(g);o(g);var ne=t(g,2),_r=i(ne);ze(),o(ne),o(E),h((kr,Te)=>{S(M,`No templates found for ${kr??""} ${e(R)??""}.`),Zr(_r,"href",Te)},[()=>f(Ve),()=>(Bt(et),f(()=>et("/templates")))]),b(B,E)},le=B=>{var E=oa();b(B,E)};_(y,B=>{e(n)?B(H):B(le,!1)},!0)}b(p,u)};_(w,p=>{e(I),f(()=>e(I).length>0)?p(C):p($,!1)},!0)}b(a,v)};_(xt,a=>{e(Le)?a(ht):a(_t,!1)})}o(Br),o(rr);var ur=t(rr,2),Lr=t(i(ur),2),br=i(Lr),qr=t(i(br),2);j(qr),o(br);var cr=t(br,2),Ur=t(i(cr),2);j(Ur),o(cr);var Dr=t(cr,2),Hr=t(i(Dr),2);j(Hr),o(Dr),o(Lr),o(ur);var Gr=t(ur,2),vr=t(i(Gr),2),gr=i(vr),Jr=t(i(gr),2);j(Jr),o(gr);var pr=t(gr,2),Nr=t(i(pr),2);j(Nr),o(pr);var Vr=t(pr,2),Wr=t(i(Vr),2);j(Wr),o(Vr),o(vr);var fr=t(vr,2),Fr=t(i(fr),2),mr=i(Fr),Ee=i(mr);j(Ee);var kt=t(Ee,2);o(mr);var wt=t(mr,2);{var Et=a=>{var v=sa();Se(v,5,()=>e(q),Re,(w,C,$)=>{var p=ia(),u=i(p),y=t(u);o(p),h(()=>{S(u,`${e(C)??""} `),Zr(y,"aria-label",`Remove tag ${e(C)}`)}),J("click",y,()=>dt($)),b(w,p)}),o(v),b(a,v)};_(wt,a=>{e(q),f(()=>e(q).length>0)&&a(Et)})}o(Fr),o(fr);var yr=t(fr,2),Mt=t(i(yr),2);Ht(Mt,{rows:4,placeholder:"{}",get value(){return e(oe)},set value(a){r(oe,a)},$$legacy:!0}),o(yr);var xr=t(yr,2),Kr=i(xr);j(Kr),ze(2),o(xr);var Qr=t(xr,2),hr=i(Qr),Me=i(hr);j(Me);var Tt=t(Me,2);ze(2),o(hr);var zt=t(hr,2);{var St=a=>{var v=la(),w=t(i(v),2),C=i(w),$=t(C);{var p=u=>{var y=da();J("click",y,()=>r(K,!0)),b(u,y)};_($,u=>{e(n)&&u(p)})}o(w),o(v),h(()=>S(C,`Shell access requires agent mode to be enabled on the ${e(d)??""}. `)),b(a,v)};_(zt,a=>{e(L)||a(St)})}o(Qr),o(Gr),h(a=>{S(ct,`${a??""} `),Me.disabled=!e(L),Pe(Tt,1,`ml-2 block text-sm font-medium text-gray-700 dark:text-gray-300 ${e(L)?"":"opacity-50"}`)},[()=>(e(d),f(()=>e(d).charAt(0).toUpperCase()+e(d).slice(1)))]),N($r,()=>e(te),a=>r(te,a)),N(jr,()=>e(ae),a=>r(ae,a)),ve(sr,()=>e(R),a=>r(R,a)),ve(lr,()=>e(fe),a=>r(fe,a)),N(qr,()=>e(Ue),a=>r(Ue,a)),N(Ur,()=>e(qe),a=>r(qe,a)),N(Hr,()=>e(De),a=>r(De,a)),N(Jr,()=>e(Ge),a=>r(Ge,a)),N(Nr,()=>e(He),a=>r(He,a)),N(Wr,()=>e(Je),a=>r(Je,a)),N(Ee,()=>e(X),a=>r(X,a)),J("keydown",Ee,lt),J("click",kt,Sr),rt(Kr,()=>e(Ne),a=>r(Ne,a)),rt(Me,()=>e(me),a=>r(me,a)),b(k,z)};_(F,k=>{e(d)&&k(Qe)})}var _e=t(F,2),ke=i(_e),O=t(ke,2),Z=i(O);{var Xe=k=>{var z=ua();b(k,z)},Ye=k=>{var z=ce("Create Pool");b(k,z)};_(Z,k=>{e(pe)?k(Xe):k(Ye,!1)})}o(O),o(_e),o(P),o(m),h(()=>{Pe(se,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(d)==="repository"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),Pe(de,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(d)==="organization"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),Pe(D,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(d)==="enterprise"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),O.disabled=e(pe)||!e(d)||!e(n)||!e(Q)||!e(te)||!e(ae)}),J("click",se,()=>Fe("repository")),J("click",de,()=>Fe("organization")),J("click",D,()=>Fe("enterprise")),J("click",ke,()=>ge("close")),J("submit",P,Ut(nt)),b(s,m)},$$slots:{default:!0}});var ut=t(Pr,2);{var bt=s=>{const l=Ot(()=>f(st));var m=re(),P=G(m);{var xe=ie=>{var Y=re(),he=G(Y);{var se=D=>{Gt(D,{get repository(){return e(l)},$$events:{close:()=>r(K,!1),submit:F=>Ke(F.detail)}})},de=D=>{var F=re(),Qe=G(F);{var _e=O=>{Jt(O,{get organization(){return e(l)},$$events:{close:()=>r(K,!1),submit:Z=>Ke(Z.detail)}})},ke=O=>{var Z=re(),Xe=G(Z);{var Ye=k=>{Nt(k,{get enterprise(){return e(l)},$$events:{close:()=>r(K,!1),submit:z=>Ke(z.detail)}})};_(Xe,k=>{e(d)==="enterprise"&&k(Ye)},!0)}b(O,Z)};_(Qe,O=>{e(d)==="organization"?O(_e):O(ke,!1)},!0)}b(D,F)};_(he,D=>{e(d)==="repository"?D(se):D(de,!1)})}b(ie,Y)};_(P,ie=>{e(l)&&ie(xe)})}b(s,m)};_(ut,s=>{e(K)&&e(n)&&s(bt)})}b(tt,Rr),It(),ot()}export{Ta as C}; diff --git a/webapp/assets/_app/immutable/chunks/DCu5KXBe.js b/webapp/assets/_app/immutable/chunks/DCu5KXBe.js new file mode 100644 index 00000000..c68d2219 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/DCu5KXBe.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as S}from"./De-I_rkH.js";import{p as C,l as w,q as n,g as t,m as y,h as L,A,a as B,b as V,c as E,k as _,u as f}from"./BIqNNOMq.js";import{k as F}from"./BjNB1vhO.js";import{p as g}from"./CfI2BFUj.js";import{B as G}from"./CwE4al8R.js";import{k as x}from"./B7If18kh.js";import{f as q}from"./ow_oMtSd.js";function J(v,u){C(u,!1);const s=y(),c=y();let e=g(u,"item",8),k=g(u,"statusType",8,"entity"),r=g(u,"statusField",8,"status");w(()=>(n(e()),n(r())),()=>{_(s,e()?.[r()]||"unknown")}),w(()=>(n(e()),n(k()),t(s),n(r())),()=>{_(c,(()=>{if(!e())return{variant:"error",text:"Unknown"};switch(k()){case"entity":return x(e());case"instance":let a="secondary";switch(t(s).toLowerCase()){case"running":a="success";break;case"stopped":a="info";break;case"creating":case"pending_create":a="warning";break;case"deleting":case"pending_delete":case"pending_force_delete":a="warning";break;case"error":case"deleted":a="error";break;case"active":case"online":a="success";break;case"idle":a="info";break;case"pending":case"installing":a="warning";break;case"failed":case"terminated":case"offline":a="error";break;case"unknown":default:a="secondary";break}return{variant:a,text:q(t(s))};case"enabled":return{variant:e().enabled?"success":"error",text:e().enabled?"Enabled":"Disabled"};case"os_type":const T=(t(s)||"").toLowerCase();let i="secondary",o=t(s)||"Unknown";switch(T){case"linux":i="success",o="Linux";break;case"windows":i="blue",o="Windows";break;case"macos":case"darwin":i="purple",o="macOS";break;default:i="gray",o=t(s)||"Unknown";break}return{variant:i,text:o};case"forge_type":const U=(t(s)||"").toLowerCase();let l="secondary",d=t(s)||"Unknown";switch(U){case"github":l="gray",d="GitHub";break;case"gitea":l="green",d="Gitea";break;default:l="secondary",d=t(s)||"Unknown";break}return{variant:l,text:d};case"custom":const p=e()[r()]||"Unknown";if(r()==="auth-type"){const b=p==="pat"||!p?"pat":"app";return{variant:b==="pat"?"success":"info",text:b==="pat"?"PAT":"App"}}return{variant:"info",text:p};default:return x(e())}})())}),L(),S();var m=A(),h=B(m);F(h,()=>(n(e()),n(r()),f(()=>`${e()?.name||"item"}-${e()?.[r()]||"status"}-${e()?.updated_at||"time"}`)),a=>{G(a,{get variant(){return t(c),f(()=>t(c).variant)},get text(){return t(c),f(()=>t(c).text)}})}),V(v,m),E()}export{J as S}; diff --git a/webapp/assets/_app/immutable/chunks/hsRG7ppz.js b/webapp/assets/_app/immutable/chunks/DFF0ZVx4.js similarity index 75% rename from webapp/assets/_app/immutable/chunks/hsRG7ppz.js rename to webapp/assets/_app/immutable/chunks/DFF0ZVx4.js index 13b261cb..edd644f2 100644 --- a/webapp/assets/_app/immutable/chunks/hsRG7ppz.js +++ b/webapp/assets/_app/immutable/chunks/DFF0ZVx4.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import{i as _}from"./TJn6xDN9.js";import{p as h,f as x,t as u,b as g,c as k,s as w,d as o,u as d,q as e,r,e as y}from"./DniTuB_0.js";import{h as b}from"./DD3srElq.js";import{p as m}from"./DbNhg6mG.js";import{g as l}from"./LMA6-4d1.js";var z=x('
');function U(v,i){h(i,!1);let t=m(i,"item",8),s=m(i,"iconSize",8,"w-5 h-5");_();var a=z(),n=o(a),f=o(n);b(f,()=>(e(l),e(t()),e(s()),d(()=>l(t()?.endpoint?.endpoint_type||t()?.endpoint_type||"unknown",s())))),r(n);var p=w(n,2),c=o(p,!0);r(p),r(a),u(()=>y(c,(e(t()),d(()=>t()?.endpoint?.name||t()?.endpoint_name||t()?.endpoint_type||"Unknown")))),g(v,a),k()}export{U as E}; +import"./DsnmJJEf.js";import{i as _}from"./De-I_rkH.js";import{p as h,f as x,t as u,b as g,c as k,s as w,d as o,u as d,q as e,r,e as y}from"./BIqNNOMq.js";import{h as b}from"./CQh-7xkh.js";import{p as m}from"./CfI2BFUj.js";import{g as l}from"./B7If18kh.js";var z=x('
');function U(v,i){h(i,!1);let t=m(i,"item",8),s=m(i,"iconSize",8,"w-5 h-5");_();var a=z(),n=o(a),f=o(n);b(f,()=>(e(l),e(t()),e(s()),d(()=>l(t()?.endpoint?.endpoint_type||t()?.endpoint_type||"unknown",s())))),r(n);var p=w(n,2),c=o(p,!0);r(p),r(a),u(()=>y(c,(e(t()),d(()=>t()?.endpoint?.name||t()?.endpoint_name||t()?.endpoint_type||"Unknown")))),g(v,a),k()}export{U as E}; diff --git a/webapp/assets/_app/immutable/chunks/DW-EakRM.js b/webapp/assets/_app/immutable/chunks/DFRbKD7c.js similarity index 69% rename from webapp/assets/_app/immutable/chunks/DW-EakRM.js rename to webapp/assets/_app/immutable/chunks/DFRbKD7c.js index c294d7c7..80fbe988 100644 --- a/webapp/assets/_app/immutable/chunks/DW-EakRM.js +++ b/webapp/assets/_app/immutable/chunks/DFRbKD7c.js @@ -1 +1 @@ -import"./DsnmJJEf.js";import{i as _}from"./TJn6xDN9.js";import{p as k,f as E,t as C,u as i,q as t,e as f,b as P,c as j,s as q,d as l,r as o}from"./DniTuB_0.js";import{c as z}from"./DD3srElq.js";import{p as n}from"./DbNhg6mG.js";import{j as x,e as c,i as u}from"./LMA6-4d1.js";var N=E('');function F(d,r){k(r,!1);let e=n(r,"item",8),m=n(r,"eagerCache",8,null);_();var s=N(),a=l(s),v=l(a,!0);o(a);var p=q(a,2),g=l(p,!0);o(p),o(s),C((h,b,y)=>{z(a,"href",h),f(v,b),f(g,y)},[()=>(t(x),t(e()),i(()=>x(e()))),()=>(t(c),t(e()),t(m()),i(()=>c(e(),m()))),()=>(t(u),t(e()),i(()=>u(e())))]),P(d,s),j()}export{F as P}; +import"./DsnmJJEf.js";import{i as _}from"./De-I_rkH.js";import{p as k,f as E,t as C,u as i,q as t,e as f,b as P,c as j,s as q,d as l,r as o}from"./BIqNNOMq.js";import{c as z}from"./CQh-7xkh.js";import{p as n}from"./CfI2BFUj.js";import{j as x,e as c,i as u}from"./B7If18kh.js";var N=E('');function F(d,r){k(r,!1);let e=n(r,"item",8),m=n(r,"eagerCache",8,null);_();var s=N(),a=l(s),v=l(a,!0);o(a);var p=q(a,2),g=l(p,!0);o(p),o(s),C((h,b,y)=>{z(a,"href",h),f(v,b),f(g,y)},[()=>(t(x),t(e()),i(()=>x(e()))),()=>(t(c),t(e()),t(m()),i(()=>c(e(),m()))),()=>(t(u),t(e()),i(()=>u(e())))]),P(d,s),j()}export{F as P}; diff --git a/webapp/assets/_app/immutable/chunks/Db7N5hjl.js b/webapp/assets/_app/immutable/chunks/Db7N5hjl.js new file mode 100644 index 00000000..2c3ae198 --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/Db7N5hjl.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as J}from"./De-I_rkH.js";import{p as K,E as O,f as j,d as e,r as t,s as i,z as $,D,b as n,t as h,e as v,g as Q,v as R,c as S}from"./BIqNNOMq.js";import{p as l,i as T}from"./CfI2BFUj.js";import{B as L,s as M}from"./CQh-7xkh.js";import{M as U}from"./BFX8vI-4.js";var V=j('

'),W=j('

');function se(B,a){K(a,!1);let C=l(a,"title",8),P=l(a,"message",8),_=l(a,"itemName",8,""),c=l(a,"loading",8,!1),z=l(a,"confirmLabel",8,"Delete"),m=l(a,"danger",8,!0);const f=O();function E(){f("confirm")}J(),U(B,{$$events:{close:()=>f("close")},children:(N,X)=>{var u=W(),d=e(u),q=e(d);t(d);var x=i(d,2),g=e(x),A=e(g,!0);t(g);var k=i(g,2),p=e(k),F=e(p,!0);t(p);var G=i(p,2);{var H=r=>{var s=V(),o=e(s,!0);t(s),h(()=>v(o,_())),n(r,s)};T(G,r=>{_()&&r(H)})}t(k),t(x);var b=i(x,2),w=e(b);L(w,{variant:"secondary",get disabled(){return c()},$$events:{click:()=>f("close")},children:(r,s)=>{$();var o=D("Cancel");n(r,o)},$$slots:{default:!0}});var I=i(w,2);{let r=R(()=>m()?"danger":"primary");L(I,{get variant(){return Q(r)},get disabled(){return c()},get loading(){return c()},$$events:{click:E},children:(s,o)=>{$();var y=D();h(()=>v(y,z())),n(s,y)},$$slots:{default:!0}})}t(b),t(u),h(()=>{M(d,1,`mx-auto flex items-center justify-center h-12 w-12 rounded-full ${m()?"bg-red-100 dark:bg-red-900":"bg-yellow-100 dark:bg-yellow-900"} mb-4`),M(q,0,`h-6 w-6 ${m()?"text-red-600 dark:text-red-400":"text-yellow-600 dark:text-yellow-400"}`),v(A,C()),v(F,P())}),n(N,u)},$$slots:{default:!0}}),S()}export{se as D}; diff --git a/webapp/assets/_app/immutable/chunks/Dbr2TLcG.js b/webapp/assets/_app/immutable/chunks/Dbr2TLcG.js new file mode 100644 index 00000000..6427de2c --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/Dbr2TLcG.js @@ -0,0 +1 @@ +import"./DsnmJJEf.js";import{i as D}from"./De-I_rkH.js";import{p as E,E as B,l as t,q as s,g as e,m as o,h as P,f as S,t as T,i as q,b as F,c as G,u as I,d as _,k as a,r as z}from"./BIqNNOMq.js";import{j as J,h as K,s as N,k as O}from"./CQh-7xkh.js";import{l as j,p as l}from"./CfI2BFUj.js";var Q=S('');function Z(M,i){const C=j(i,["children","$$slots","$$events","$$legacy"]),H=j(C,["action","disabled","title","ariaLabel","size"]);E(i,!1);const u=o(),h=o(),k=o(),p=o(),f=o(),v=o(),n=o(),m=o(),x=o(),L=B();let r=l(i,"action",8,"edit"),b=l(i,"disabled",8,!1),w=l(i,"title",8,""),y=l(i,"ariaLabel",8,""),c=l(i,"size",8,"md");function A(){b()||L("click")}t(()=>{},()=>{a(u,"transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-gray-900 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50")}),t(()=>s(c()),()=>{a(h,{sm:"p-1",md:"p-2"}[c()])}),t(()=>s(r()),()=>{a(k,{edit:"text-indigo-600 dark:text-indigo-400 hover:text-indigo-900 dark:hover:text-indigo-300 focus:ring-indigo-500",delete:"text-red-600 dark:text-red-400 hover:text-red-900 dark:hover:text-red-300 focus:ring-red-500",view:"text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-300 focus:ring-gray-500",add:"text-green-600 dark:text-green-400 hover:text-green-900 dark:hover:text-green-300 focus:ring-green-500",copy:"text-blue-600 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 focus:ring-blue-500",download:"text-blue-600 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 focus:ring-blue-500",shell:"text-green-600 dark:text-green-400 hover:text-green-900 dark:hover:text-green-300 focus:ring-green-500"}[r()])}),t(()=>s(c()),()=>{a(p,c()==="sm"?"h-4 w-4":"h-5 w-5")}),t(()=>(e(u),e(h),e(k)),()=>{a(f,[e(u),e(h),e(k)].join(" "))}),t(()=>{},()=>{a(v,{edit:'',delete:'',view:'',add:'',copy:'',download:'',shell:''})}),t(()=>{},()=>{a(n,{edit:"Edit",delete:"Delete",view:"View",add:"Add",copy:"Clone",download:"Download",shell:"Shell"})}),t(()=>(s(w()),e(n),s(r())),()=>{a(m,w()||e(n)[r()])}),t(()=>(s(y()),e(n),s(r())),()=>{a(x,y()||`${e(n)[r()]} item`)}),P(),D();var d=Q();J(d,()=>({type:"button",class:e(f),disabled:b(),title:e(m),"aria-label":e(x),...H}));var g=_(d),V=_(g);K(V,()=>(e(v),s(r()),I(()=>e(v)[r()])),!0),z(g),z(d),T(()=>N(g,0,O(e(p)))),q("click",d,A),F(M,d),G()}export{Z as A}; diff --git a/webapp/assets/_app/immutable/chunks/DcEwzE5l.js b/webapp/assets/_app/immutable/chunks/DcEwzE5l.js deleted file mode 100644 index 010a3f20..00000000 --- a/webapp/assets/_app/immutable/chunks/DcEwzE5l.js +++ /dev/null @@ -1,4 +0,0 @@ -import"./DsnmJJEf.js";import{i as g}from"./TJn6xDN9.js";import{p as x,l as k,k as d,m as w,q as y,h as J,f as b,d as z,x as L,s as j,g as c,r as q,t as B,b as f,c as C}from"./DniTuB_0.js";import{p as o,i as E}from"./DbNhg6mG.js";import{c as n,s as M}from"./DD3srElq.js";import{b as N}from"./CCQwxxp9.js";var O=b('
'),S=b('
');function I(m,r){x(r,!1);let t=o(r,"value",12,""),p=o(r,"placeholder",8,"{}"),u=o(r,"rows",8,4),i=o(r,"disabled",8,!1),a=w(!0);k(()=>y(t()),()=>{if(t().trim())try{JSON.parse(t()),d(a,!0)}catch{d(a,!1)}else d(a,!0)}),J(),g();var l=S(),e=z(l);L(e);var v=j(e,2);{var h=s=>{var _=O();f(s,_)};E(v,s=>{c(a)||s(h)})}q(l),B(()=>{n(e,"placeholder",p()),n(e,"rows",u()),e.disabled=i(),M(e,1,`w-full px-3 py-2 border rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 font-mono text-sm resize-none - ${c(a)?"border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-white":"border-red-300 dark:border-red-600 bg-red-50 dark:bg-red-900/20 text-red-900 dark:text-red-100"} - ${i()?"opacity-50 cursor-not-allowed":""} - `)}),N(e,t),f(m,l),C()}export{I as J}; diff --git a/webapp/assets/_app/immutable/chunks/DcQdHuVc.js b/webapp/assets/_app/immutable/chunks/DcQdHuVc.js deleted file mode 100644 index 2a1b14d8..00000000 --- a/webapp/assets/_app/immutable/chunks/DcQdHuVc.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as k}from"./TJn6xDN9.js";import{p as c,l as u,q as g,h as f,f as m,t as p,b as w,c as _,k as v,m as h,d as z,r as B,g as j,e as q}from"./DniTuB_0.js";import{s as V,j as A}from"./DD3srElq.js";import{p as a}from"./DbNhg6mG.js";var C=m(" ");function I(d,e){c(e,!1);const n=h();let t=a(e,"variant",8,"gray"),l=a(e,"size",8,"sm"),i=a(e,"text",8),s=a(e,"ring",8,!1);const o={success:"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200",error:"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200",warning:"bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",info:"bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200",gray:"bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200",blue:"bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200",green:"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200",red:"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200",yellow:"bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",secondary:"bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200"},b={success:"ring-green-600/20 dark:ring-green-400/30",error:"ring-red-600/20 dark:ring-red-400/30",warning:"ring-yellow-600/20 dark:ring-yellow-400/30",info:"ring-blue-600/20 dark:ring-blue-400/30",gray:"ring-gray-500/20 dark:ring-gray-400/30",blue:"ring-blue-600/20 dark:ring-blue-400/30",green:"ring-green-600/20 dark:ring-green-400/30",red:"ring-red-600/20 dark:ring-red-400/30",yellow:"ring-yellow-600/20 dark:ring-yellow-400/30",secondary:"ring-gray-500/20 dark:ring-gray-400/30"},y={sm:"px-2 py-1 text-xs",md:"px-2.5 py-0.5 text-xs"};u(()=>(g(t()),g(l()),g(s())),()=>{v(n,["inline-flex items-center rounded-full font-semibold",o[t()],y[l()],s()?`ring-1 ring-inset ${b[t()]}`:""].filter(Boolean).join(" "))}),f(),k();var r=C(),x=z(r,!0);B(r),p(()=>{V(r,1,A(j(n))),q(x,i())}),w(d,r),_()}export{I as B}; diff --git a/webapp/assets/_app/immutable/chunks/TJn6xDN9.js b/webapp/assets/_app/immutable/chunks/De-I_rkH.js similarity index 88% rename from webapp/assets/_app/immutable/chunks/TJn6xDN9.js rename to webapp/assets/_app/immutable/chunks/De-I_rkH.js index 7d9f4f28..d0b875c4 100644 --- a/webapp/assets/_app/immutable/chunks/TJn6xDN9.js +++ b/webapp/assets/_app/immutable/chunks/De-I_rkH.js @@ -1 +1 @@ -import{am as g,an as d,ao as c,u as m,ap as b,aq as i,g as p,q as v,ar as h,as as k}from"./DniTuB_0.js";function q(n=!1){const s=g,e=s.l.u;if(!e)return;let f=()=>v(s.s);if(n){let t=0,a={};const _=h(()=>{let l=!1;const r=s.s;for(const o in r)r[o]!==a[o]&&(a[o]=r[o],l=!0);return l&&t++,t});f=()=>p(_)}e.b.length&&d(()=>{u(s,f),i(e.b)}),c(()=>{const t=m(()=>e.m.map(b));return()=>{for(const a of t)typeof a=="function"&&a()}}),e.a.length&&c(()=>{u(s,f),i(e.a)})}function u(n,s){if(n.l.s)for(const e of n.l.s)p(e);s()}k();export{q as i}; +import{am as g,an as d,ao as c,u as m,ap as b,aq as i,g as p,q as v,ar as h,as as k}from"./BIqNNOMq.js";function q(n=!1){const s=g,e=s.l.u;if(!e)return;let f=()=>v(s.s);if(n){let t=0,a={};const _=h(()=>{let l=!1;const r=s.s;for(const o in r)r[o]!==a[o]&&(a[o]=r[o],l=!0);return l&&t++,t});f=()=>p(_)}e.b.length&&d(()=>{u(s,f),i(e.b)}),c(()=>{const t=m(()=>e.m.map(b));return()=>{for(const a of t)typeof a=="function"&&a()}}),e.a.length&&c(()=>{u(s,f),i(e.a)})}function u(n,s){if(n.l.s)for(const e of n.l.s)p(e);s()}k();export{q as i}; diff --git a/webapp/assets/_app/immutable/chunks/CBJzOE8U.js b/webapp/assets/_app/immutable/chunks/DgRPqjXE.js similarity index 90% rename from webapp/assets/_app/immutable/chunks/CBJzOE8U.js rename to webapp/assets/_app/immutable/chunks/DgRPqjXE.js index 643f9a76..7988e1c3 100644 --- a/webapp/assets/_app/immutable/chunks/CBJzOE8U.js +++ b/webapp/assets/_app/immutable/chunks/DgRPqjXE.js @@ -1 +1 @@ -import{F as u}from"./DniTuB_0.js";function c(){const{subscribe:s,set:i,update:o}=u([]),n={subscribe:s,add:e=>{const t=Math.random().toString(36).substr(2,9),r={...e,id:t,duration:e.duration??5e3};return o(a=>[...a,r]),r.duration&&r.duration>0&&setTimeout(()=>{o(a=>a.filter(d=>d.id!==t))},r.duration),t},remove:e=>{o(t=>t.filter(r=>r.id!==e))},clear:()=>{i([])},success:(e,t="",r)=>n.add({type:"success",title:e,message:t,duration:r}),error:(e,t="",r)=>n.add({type:"error",title:e,message:t,duration:r}),info:(e,t="",r)=>n.add({type:"info",title:e,message:t,duration:r}),warning:(e,t="",r)=>n.add({type:"warning",title:e,message:t,duration:r})};return n}const p=c();export{p as t}; +import{F as u}from"./BIqNNOMq.js";function c(){const{subscribe:s,set:i,update:o}=u([]),n={subscribe:s,add:e=>{const t=Math.random().toString(36).substr(2,9),r={...e,id:t,duration:e.duration??5e3};return o(a=>[...a,r]),r.duration&&r.duration>0&&setTimeout(()=>{o(a=>a.filter(d=>d.id!==t))},r.duration),t},remove:e=>{o(t=>t.filter(r=>r.id!==e))},clear:()=>{i([])},success:(e,t="",r)=>n.add({type:"success",title:e,message:t,duration:r}),error:(e,t="",r)=>n.add({type:"error",title:e,message:t,duration:r}),info:(e,t="",r)=>n.add({type:"info",title:e,message:t,duration:r}),warning:(e,t="",r)=>n.add({type:"warning",title:e,message:t,duration:r})};return n}const p=c();export{p as t}; diff --git a/webapp/assets/_app/immutable/chunks/Dn_Ue57e.js b/webapp/assets/_app/immutable/chunks/Dn_Ue57e.js deleted file mode 100644 index 9fe7d278..00000000 --- a/webapp/assets/_app/immutable/chunks/Dn_Ue57e.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as v}from"./TJn6xDN9.js";import{p as w,l as m,q as s,g as r,m as g,h as x,A as h,a as T,b as S,c as A,k,u}from"./DniTuB_0.js";import{k as B}from"./QtGwBUod.js";import{p}from"./DbNhg6mG.js";import{B as C}from"./DcQdHuVc.js";import{k as b}from"./LMA6-4d1.js";import{f as E}from"./ow_oMtSd.js";function z(_,i){w(i,!1);const c=g(),n=g();let e=p(i,"item",8),d=p(i,"statusType",8,"entity"),a=p(i,"statusField",8,"status");m(()=>(s(e()),s(a())),()=>{k(c,e()?.[a()]||"unknown")}),m(()=>(s(e()),s(d()),r(c),s(a())),()=>{k(n,(()=>{if(!e())return{variant:"error",text:"Unknown"};switch(d()){case"entity":return b(e());case"instance":let t="secondary";switch(r(c).toLowerCase()){case"running":t="success";break;case"stopped":t="info";break;case"creating":case"pending_create":t="warning";break;case"deleting":case"pending_delete":case"pending_force_delete":t="warning";break;case"error":case"deleted":t="error";break;case"active":case"online":t="success";break;case"idle":t="info";break;case"pending":case"installing":t="warning";break;case"failed":case"terminated":case"offline":t="error";break;case"unknown":default:t="secondary";break}return{variant:t,text:E(r(c))};case"enabled":return{variant:e().enabled?"success":"error",text:e().enabled?"Enabled":"Disabled"};case"custom":const o=e()[a()]||"Unknown";if(a()==="auth-type"){const f=o==="pat"||!o?"pat":"app";return{variant:f==="pat"?"success":"info",text:f==="pat"?"PAT":"App"}}return{variant:"info",text:o};default:return b(e())}})())}),x(),v();var l=h(),y=T(l);B(y,()=>(s(e()),s(a()),u(()=>`${e()?.name||"item"}-${e()?.[a()]||"status"}-${e()?.updated_at||"time"}`)),t=>{C(t,{get variant(){return r(n),u(()=>r(n).variant)},get text(){return r(n),u(()=>r(n).text)}})}),S(_,l),A()}export{z as S}; diff --git a/webapp/assets/_app/immutable/chunks/CCQwxxp9.js b/webapp/assets/_app/immutable/chunks/Gs5uNKRr.js similarity index 92% rename from webapp/assets/_app/immutable/chunks/CCQwxxp9.js rename to webapp/assets/_app/immutable/chunks/Gs5uNKRr.js index 3885a52a..9fd3abcb 100644 --- a/webapp/assets/_app/immutable/chunks/CCQwxxp9.js +++ b/webapp/assets/_app/immutable/chunks/Gs5uNKRr.js @@ -1 +1 @@ -import{aj as b,ak as o,u as h,ah as _,H as t,N as f,al as m}from"./DniTuB_0.js";function y(e,a,c=a){var v=b(),d=new WeakSet;o(e,"input",r=>{var l=r?e.defaultValue:e.value;if(l=n(e)?s(l):l,c(l),f!==null&&d.add(f),v&&l!==(l=a())){var k=e.selectionStart,u=e.selectionEnd;e.value=l??"",u!==null&&(e.selectionStart=k,e.selectionEnd=Math.min(u,e.value.length))}}),(t&&e.defaultValue!==e.value||h(a)==null&&e.value)&&(c(n(e)?s(e.value):e.value),f!==null&&d.add(f)),_(()=>{var r=a();if(e===document.activeElement){var l=m??f;if(d.has(l))return}n(e)&&r===s(e.value)||e.type==="date"&&!r&&!e.value||r!==e.value&&(e.value=r??"")})}function E(e,a,c=a){o(e,"change",v=>{var d=v?e.defaultChecked:e.checked;c(d)}),(t&&e.defaultChecked!==e.checked||h(a)==null)&&c(e.checked),_(()=>{var v=a();e.checked=!!v})}function n(e){var a=e.type;return a==="number"||a==="range"}function s(e){return e===""?null:+e}export{E as a,y as b}; +import{aj as b,ak as o,u as h,ah as _,H as t,N as f,al as m}from"./BIqNNOMq.js";function y(e,a,c=a){var v=b(),d=new WeakSet;o(e,"input",r=>{var l=r?e.defaultValue:e.value;if(l=n(e)?s(l):l,c(l),f!==null&&d.add(f),v&&l!==(l=a())){var k=e.selectionStart,u=e.selectionEnd;e.value=l??"",u!==null&&(e.selectionStart=k,e.selectionEnd=Math.min(u,e.value.length))}}),(t&&e.defaultValue!==e.value||h(a)==null&&e.value)&&(c(n(e)?s(e.value):e.value),f!==null&&d.add(f)),_(()=>{var r=a();if(e===document.activeElement){var l=m??f;if(d.has(l))return}n(e)&&r===s(e.value)||e.type==="date"&&!r&&!e.value||r!==e.value&&(e.value=r??"")})}function E(e,a,c=a){o(e,"change",v=>{var d=v?e.defaultChecked:e.checked;c(d)}),(t&&e.defaultChecked!==e.checked||h(a)==null)&&c(e.checked),_(()=>{var v=a();e.checked=!!v})}function n(e){var a=e.type;return a==="number"||a==="range"}function s(e){return e===""?null:+e}export{E as a,y as b}; diff --git a/webapp/assets/_app/immutable/chunks/If6x_I-9.js b/webapp/assets/_app/immutable/chunks/If6x_I-9.js new file mode 100644 index 00000000..de21425e --- /dev/null +++ b/webapp/assets/_app/immutable/chunks/If6x_I-9.js @@ -0,0 +1,2 @@ +import"./DsnmJJEf.js";import{i as Zr}from"./De-I_rkH.js";import{p as et,E as rt,m as c,o as tt,k as s,B as at,l as ye,g as e,h as it,f as $,a as j,d,r as i,s as o,q as k,u as p,t as y,y as Ye,z as Ze,e as w,i as er,b as g,D as V,A as q,c as ot,v as dt}from"./BIqNNOMq.js";import{p as nt,i as m,s as st,a as lt}from"./CfI2BFUj.js";import{e as ut,i as pt}from"./D8ZtP9JD.js";import{r as O,s as rr,b as tr,g as xe,d as Or,c as gt}from"./CQh-7xkh.js";import{b as G,a as $r}from"./Gs5uNKRr.js";import{p as ct}from"./CdEA5IGF.js";import{M as ft}from"./BFX8vI-4.js";import{e as zr}from"./BZiHL9L3.js";import{J as bt,U as vt,a as mt,b as _t}from"./COXBdepE.js";import{e as yt}from"./B1uxuBYn.js";import{w as ar}from"./C4VNo_Nu.js";var xt=$('

'),ht=$('

'),kt=$('
Loading templates...
'),wt=$(""),St=$('

',1),Et=$('

Create a template first or proceed without a template to use default behavior.

'),Tt=$('
'),Rt=$('
Updating...
'),Mt=$('

Scale Set Information

Provider:
Entity:

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Extra Specs (JSON)
'),Ot=$(" ",1);function Lt(Ar,ir){et(ir,!1);const[Ur,jr]=st(),b=()=>lt(yt,"$eagerCache",Ur),z=c();let r=nt(ir,"scaleSet",8);const he=rt();let ie=c(!1),X=c(""),A=c(""),E=c([]),ke=c(!1),W=c(!1),F=null,oe=c(r().name||""),de=c(r().image||""),ne=c(r().flavor||""),I=c(r().max_runners),J=c(r().min_idle_runners),se=c(r().runner_bootstrap_timeout),le=c(r().runner_prefix||""),T=c(r().os_type||"linux"),Y=c(r().os_arch||"amd64"),ue=c(r()["github-runner-group"]||""),pe=c(r().enabled),Z=c(r().enable_shell??!1),N=c("{}"),U=c(r().template_id);function we(){if(r().endpoint?.endpoint_type)return r().endpoint.endpoint_type;if(r().repo_id){const n=b().repositories.find(a=>a.id===r().repo_id);if(n?.endpoint?.endpoint_type)return n.endpoint.endpoint_type}if(r().org_id){const n=b().organizations.find(a=>a.id===r().org_id);if(n?.endpoint?.endpoint_type)return n.endpoint.endpoint_type}if(r().enterprise_id){const n=b().enterprises.find(a=>a.id===r().enterprise_id);if(n?.endpoint?.endpoint_type)return n.endpoint.endpoint_type}return null}function Ir(){return r().repo_id?b().repositories.find(a=>a.id===r().repo_id)?.agent_mode??!1:r().org_id?b().organizations.find(a=>a.id===r().org_id)?.agent_mode??!1:r().enterprise_id?b().enterprises.find(a=>a.id===r().enterprise_id)?.agent_mode??!1:!1}function Jr(){return r().repo_id?"repository":r().org_id?"organization":r().enterprise_id?"enterprise":"entity"}function Se(n){if(n.operation!=="update")return;const a=n.payload;if(r().repo_id&&a.id===r().repo_id){const l=b().repositories.find(S=>S.id===r().repo_id);l&&(Object.assign(l,a),"agent_mode"in a&&s(z,a.agent_mode??!1))}else if(r().org_id&&a.id===r().org_id){const l=b().organizations.find(S=>S.id===r().org_id);l&&(Object.assign(l,a),"agent_mode"in a&&s(z,a.agent_mode??!1))}else if(r().enterprise_id&&a.id===r().enterprise_id){const l=b().enterprises.find(S=>S.id===r().enterprise_id);l&&(Object.assign(l,a),"agent_mode"in a&&s(z,a.agent_mode??!1))}}async function Ee(n){try{if(r().repo_id){await xe.updateRepository(r().repo_id,n);const a=b().repositories.find(l=>l.id===r().repo_id);a&&Object.assign(a,n)}else if(r().org_id){await xe.updateOrganization(r().org_id,n);const a=b().organizations.find(l=>l.id===r().org_id);a&&Object.assign(a,n)}else if(r().enterprise_id){await xe.updateEnterprise(r().enterprise_id,n);const a=b().enterprises.find(l=>l.id===r().enterprise_id);a&&Object.assign(a,n)}s(W,!1)}catch(a){throw a}}function Nr(){return r().repo_id?b().repositories.find(n=>n.id===r().repo_id)||null:r().org_id?b().organizations.find(n=>n.id===r().org_id)||null:r().enterprise_id&&b().enterprises.find(n=>n.id===r().enterprise_id)||null}async function or(){try{s(ke,!0);const n=we();if(!n){s(E,[]);return}if(s(E,await xe.listTemplates(e(T),void 0,n)),!e(U)||!e(E).find(a=>a.id===e(U))){const a=e(E).find(l=>l.owner_id==="system");a?s(U,a.id):e(E).length>0&&s(U,e(E)[0].id)}}catch(n){s(X,zr(n))}finally{s(ke,!1)}}tt(()=>{if(r().extra_specs)try{if(typeof r().extra_specs=="object")s(N,JSON.stringify(r().extra_specs,null,2));else{const n=JSON.parse(r().extra_specs);s(N,JSON.stringify(n,null,2))}}catch{s(N,r().extra_specs||"{}")}or(),r().repo_id?F=ar.subscribeToEntity("repository",["update"],Se):r().org_id?F=ar.subscribeToEntity("organization",["update"],Se):r().enterprise_id&&(F=ar.subscribeToEntity("enterprise",["update"],Se))}),at(()=>{F&&(F(),F=null)});async function Cr(){try{if(s(ie,!0),s(X,""),e(A))throw new Error(e(A));let n={};if(e(N).trim())try{n=JSON.parse(e(N))}catch{throw new Error("Invalid JSON in extra specs")}const a={name:e(oe)!==r().name?e(oe):void 0,image:e(de)!==r().image?e(de):void 0,flavor:e(ne)!==r().flavor?e(ne):void 0,max_runners:e(I)!==r().max_runners?e(I):void 0,min_idle_runners:e(J)!==r().min_idle_runners?e(J):void 0,runner_bootstrap_timeout:e(se)!==r().runner_bootstrap_timeout?e(se):void 0,runner_prefix:e(le)!==r().runner_prefix?e(le):void 0,os_type:e(T)!==r().os_type?e(T):void 0,os_arch:e(Y)!==r().os_arch?e(Y):void 0,"github-runner-group":e(ue)!==r()["github-runner-group"]&&e(ue)||void 0,enabled:e(pe)!==r().enabled?e(pe):void 0,enable_shell:e(Z)!==r().enable_shell?e(Z):void 0,extra_specs:e(N).trim()!==JSON.stringify(r().extra_specs||{},null,2).trim()?n:void 0,template_id:e(U)!==r().template_id?e(U):void 0};Object.keys(a).forEach(l=>{a[l]===void 0&&delete a[l]}),he("submit",a)}catch(n){s(X,zr(n))}finally{s(ie,!1)}}ye(()=>{},()=>{s(z,Ir())}),ye(()=>e(z),()=>{e(z)||s(Z,!1)}),ye(()=>e(T),()=>{e(T)&&or()}),ye(()=>(e(J),e(I)),()=>{e(J)!==null&&e(J)!==void 0&&e(I)!==null&&e(I)!==void 0&&e(J)>e(I)?s(A,"Min idle runners cannot be greater than max runners"):s(A,"")}),it(),Zr();var dr=Ot(),nr=j(dr);ft(nr,{$$events:{close:()=>he("close")},children:(n,a)=>{var l=Mt(),S=d(l),ge=d(S),ee=d(ge);i(ge),i(S);var H=o(S,2),ce=d(H);{var Te=t=>{var u=xt(),x=d(u),R=d(x,!0);i(x),i(u),y(()=>w(R,e(X))),g(t,u)};m(ce,t=>{e(X)&&t(Te)})}var fe=o(ce,2);{var C=t=>{var u=ht(),x=d(u),R=d(x,!0);i(x),i(u),y(()=>w(R,e(A))),g(t,u)};m(fe,t=>{e(A)&&t(C)})}var P=o(fe,2),be=o(d(P),2),re=d(be),ve=o(d(re),2),D=d(ve,!0);i(ve),i(re);var B=o(re,2),me=o(d(B),2),Re=d(me);{var te=t=>{var u=V();y(()=>w(u,`Repository: ${k(r()),p(()=>r().repo_name)??""}`)),g(t,u)},Me=t=>{var u=q(),x=j(u);{var R=v=>{var h=V();y(()=>w(h,`Organization: ${k(r()),p(()=>r().org_name)??""}`)),g(v,h)},ae=v=>{var h=q(),M=j(h);{var K=_=>{var f=V();y(()=>w(f,`Enterprise: ${k(r()),p(()=>r().enterprise_name)??""}`)),g(_,f)},Q=_=>{var f=V("Unknown Entity");g(_,f)};m(M,_=>{k(r()),p(()=>r().enterprise_name)?_(K):_(Q,!1)},!0)}g(v,h)};m(x,v=>{k(r()),p(()=>r().org_name)?v(R):v(ae,!1)},!0)}g(t,u)};m(Re,t=>{k(r()),p(()=>r().repo_name)?t(te):t(Me,!1)})}i(me),i(B),i(be),i(P);var Oe=o(P,2),sr=o(d(Oe),2);O(sr),i(Oe);var $e=o(Oe,2),lr=o(d($e),2),ze=d(lr),ur=o(d(ze),2);O(ur),i(ze);var Ae=o(ze,2),pr=o(d(Ae),2);O(pr),i(Ae);var Ue=o(Ae,2),je=o(d(Ue),2);y(()=>{e(T),Ye(()=>{})});var Ie=d(je);Ie.value=Ie.__value="linux";var gr=o(Ie);gr.value=gr.__value="windows",i(je),i(Ue);var Je=o(Ue,2),Ne=o(d(Je),2);y(()=>{e(Y),Ye(()=>{})});var Ce=d(Ne);Ce.value=Ce.__value="amd64";var cr=o(Ce);cr.value=cr.__value="arm64",i(Ne),i(Je);var fr=o(Je,2),Gr=o(d(fr),2);{var Br=t=>{var u=kt();g(t,u)},Lr=t=>{var u=q(),x=j(u);{var R=v=>{var h=St(),M=j(h);y(()=>{e(U),Ye(()=>{e(E)})}),ut(M,5,()=>e(E),pt,(_,f)=>{var L=wt(),Tr=d(L),Xr=o(Tr);{var Yr=Xe=>{var Mr=V();y(()=>w(Mr,`- ${e(f),p(()=>e(f).description)??""}`)),g(Xe,Mr)};m(Xr,Xe=>{e(f),p(()=>e(f).description)&&Xe(Yr)})}i(L);var Rr={};y(()=>{w(Tr,`${e(f),p(()=>e(f).name)??""} ${e(f),p(()=>e(f).owner_id==="system"?"(System)":"")??""} `),Rr!==(Rr=(e(f),p(()=>e(f).id)))&&(L.value=(L.__value=(e(f),p(()=>e(f).id)))??"")}),g(_,L)}),i(M);var K=o(M,2),Q=d(K);i(K),y(_=>w(Q,`Templates define how the runner software is installed and configured. + Showing templates for ${_??""} ${e(T)??""}.`),[()=>p(we)]),tr(M,()=>e(U),_=>s(U,_)),g(v,h)},ae=v=>{var h=Et(),M=d(h),K=d(M);i(M);var Q=o(M,2),_=d(Q);Ze(),i(Q),i(h),y((f,L)=>{w(K,`No templates found for ${f??""} ${e(T)??""}.`),gt(_,"href",L)},[()=>p(we),()=>(k(Or),p(()=>Or("/templates")))]),g(v,h)};m(x,v=>{e(E),p(()=>e(E).length>0)?v(R):v(ae,!1)},!0)}g(t,u)};m(Gr,t=>{e(ke)?t(Br):t(Lr,!1)})}i(fr),i(lr),i($e);var Pe=o($e,2),br=o(d(Pe),2),De=d(br),Ge=o(d(De),2);O(Ge),i(De);var Be=o(De,2),Le=o(d(Be),2);O(Le),i(Be);var vr=o(Be,2),mr=o(d(vr),2);O(mr),i(vr),i(br),i(Pe);var qe=o(Pe,2),We=o(d(qe),2),Fe=d(We),_r=o(d(Fe),2);O(_r),i(Fe);var yr=o(Fe,2),xr=o(d(yr),2);O(xr),i(yr),i(We);var He=o(We,2),hr=d(He),qr=o(d(hr),2);bt(qr,{rows:4,placeholder:"{}",get value(){return e(N)},set value(t){s(N,t)},$$legacy:!0}),i(hr),i(He);var Ke=o(He,2),kr=d(Ke);O(kr),Ze(2),i(Ke);var wr=o(Ke,2),Qe=d(wr),_e=d(Qe);O(_e);var Wr=o(_e,2);Ze(2),i(Qe);var Fr=o(Qe,2);{var Hr=t=>{var u=Tt(),x=o(d(u),2),R=d(x),ae=o(R);i(x),i(u),y(v=>w(R,`Shell access requires agent mode to be enabled on the ${v??""}. `),[()=>p(Jr)]),er("click",ae,()=>s(W,!0)),g(t,u)};m(Fr,t=>{e(z)||t(Hr)})}i(wr),i(qe);var Sr=o(qe,2),Er=d(Sr),Ve=o(Er,2),Kr=d(Ve);{var Qr=t=>{var u=Rt();g(t,u)},Vr=t=>{var u=V("Update Scale Set");g(t,u)};m(Kr,t=>{e(ie)?t(Qr):t(Vr,!1)})}i(Ve),i(Sr),i(H),i(l),y(()=>{w(ee,`Update Scale Set ${k(r()),p(()=>r().name)??""}`),w(D,(k(r()),p(()=>r().provider_name))),rr(Ge,1,`w-full px-3 py-2 border ${e(A)?"border-red-300 dark:border-red-500":"border-gray-300 dark:border-gray-600"} rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white`),rr(Le,1,`w-full px-3 py-2 border ${e(A)?"border-red-300 dark:border-red-500":"border-gray-300 dark:border-gray-600"} rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white`),_e.disabled=!e(z),rr(Wr,1,`ml-2 block text-sm font-medium text-gray-700 dark:text-gray-300 ${e(z)?"":"opacity-50"}`),Ve.disabled=e(ie)||e(A)!==""}),G(sr,()=>e(oe),t=>s(oe,t)),G(ur,()=>e(de),t=>s(de,t)),G(pr,()=>e(ne),t=>s(ne,t)),tr(je,()=>e(T),t=>s(T,t)),tr(Ne,()=>e(Y),t=>s(Y,t)),G(Ge,()=>e(J),t=>s(J,t)),G(Le,()=>e(I),t=>s(I,t)),G(mr,()=>e(se),t=>s(se,t)),G(_r,()=>e(le),t=>s(le,t)),G(xr,()=>e(ue),t=>s(ue,t)),$r(kr,()=>e(pe),t=>s(pe,t)),$r(_e,()=>e(Z),t=>s(Z,t)),er("click",Er,()=>he("close")),er("submit",H,ct(Cr)),g(n,l)},$$slots:{default:!0}});var Pr=o(nr,2);{var Dr=n=>{const a=dt(()=>p(Nr));var l=q(),S=j(l);{var ge=ee=>{var H=q(),ce=j(H);{var Te=C=>{vt(C,{get repository(){return e(a)},$$events:{close:()=>s(W,!1),submit:P=>Ee(P.detail)}})},fe=C=>{var P=q(),be=j(P);{var re=D=>{mt(D,{get organization(){return e(a)},$$events:{close:()=>s(W,!1),submit:B=>Ee(B.detail)}})},ve=D=>{var B=q(),me=j(B);{var Re=te=>{_t(te,{get enterprise(){return e(a)},$$events:{close:()=>s(W,!1),submit:Me=>Ee(Me.detail)}})};m(me,te=>{k(r()),p(()=>r().enterprise_id)&&te(Re)},!0)}g(D,B)};m(be,D=>{k(r()),p(()=>r().org_id)?D(re):D(ve,!1)},!0)}g(C,P)};m(ce,C=>{k(r()),p(()=>r().repo_id)?C(Te):C(fe,!1)})}g(ee,H)};m(S,ee=>{e(a)&&ee(ge)})}g(n,l)};m(Pr,n=>{e(W)&&n(Dr)})}g(Ar,dr),ot(),jr()}export{Lt as U}; diff --git a/webapp/assets/_app/immutable/chunks/NLwquURr.js b/webapp/assets/_app/immutable/chunks/NLwquURr.js deleted file mode 100644 index 4b61c2df..00000000 --- a/webapp/assets/_app/immutable/chunks/NLwquURr.js +++ /dev/null @@ -1,2 +0,0 @@ -import"./DsnmJJEf.js";import{i as Ir}from"./TJn6xDN9.js";import{p as Jr,E as Mr,m as u,o as Nr,k as s,l as or,g as e,h as Pr,f as M,d,r as a,s as o,q as R,u as p,t as f,y as Re,z as sr,e as y,i as ir,b,D,A as Ee,a as Q,c as Cr}from"./DniTuB_0.js";import{p as Ur,i as E,s as Dr,a as Gr}from"./DbNhg6mG.js";import{e as jr,i as zr}from"./Ck5PkeSc.js";import{r as $,s as nr,b as $e,g as Lr,d as lr,c as Br}from"./DD3srElq.js";import{b as J,a as Fr}from"./CCQwxxp9.js";import{p as qr}from"./D4Caz1gY.js";import{M as Hr}from"./PC4wJWhj.js";import{e as ur}from"./BZiHL9L3.js";import{J as Wr}from"./DcEwzE5l.js";import{e as Kr}from"./C-ow2qSP.js";var Qr=M('

'),Vr=M('

'),Xr=M('
Loading templates...
'),Yr=M(""),Zr=M('

',1),et=M('

Create a template first or proceed without a template to use default behavior.

'),rt=M('
Updating...
'),tt=M('

Scale Set Information

Provider:
Entity:

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Extra Specs (JSON)
');function vt(pr,Oe){Jr(Oe,!1);const[br,cr]=Dr(),V=()=>Gr(Kr,"$eagerCache",br);let r=Ur(Oe,"scaleSet",8);const X=Mr();let z=u(!1),G=u(""),k=u(""),x=u([]),Y=u(!1),L=u(r().name||""),B=u(r().image||""),F=u(r().flavor||""),O=u(r().max_runners),A=u(r().min_idle_runners),q=u(r().runner_bootstrap_timeout),H=u(r().runner_prefix||""),_=u(r().os_type||"linux"),j=u(r().os_arch||"amd64"),W=u(r()["github-runner-group"]||""),K=u(r().enabled),I=u("{}"),w=u(r().template_id);function Z(){if(r().endpoint?.endpoint_type)return r().endpoint.endpoint_type;if(r().repo_id){const i=V().repositories.find(c=>c.id===r().repo_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}if(r().org_id){const i=V().organizations.find(c=>c.id===r().org_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}if(r().enterprise_id){const i=V().enterprises.find(c=>c.id===r().enterprise_id);if(i?.endpoint?.endpoint_type)return i.endpoint.endpoint_type}return null}async function Ae(){try{s(Y,!0);const i=Z();if(!i){s(x,[]);return}if(s(x,await Lr.listTemplates(e(_),void 0,i)),!e(w)||!e(x).find(c=>c.id===e(w))){const c=e(x).find(S=>S.owner_id==="system");c?s(w,c.id):e(x).length>0&&s(w,e(x)[0].id)}}catch(i){s(G,ur(i))}finally{s(Y,!1)}}Nr(()=>{if(r().extra_specs)try{if(typeof r().extra_specs=="object")s(I,JSON.stringify(r().extra_specs,null,2));else{const i=JSON.parse(r().extra_specs);s(I,JSON.stringify(i,null,2))}}catch{s(I,r().extra_specs||"{}")}Ae()});async function gr(){try{if(s(z,!0),s(G,""),e(k))throw new Error(e(k));let i={};if(e(I).trim())try{i=JSON.parse(e(I))}catch{throw new Error("Invalid JSON in extra specs")}const c={name:e(L)!==r().name?e(L):void 0,image:e(B)!==r().image?e(B):void 0,flavor:e(F)!==r().flavor?e(F):void 0,max_runners:e(O)!==r().max_runners?e(O):void 0,min_idle_runners:e(A)!==r().min_idle_runners?e(A):void 0,runner_bootstrap_timeout:e(q)!==r().runner_bootstrap_timeout?e(q):void 0,runner_prefix:e(H)!==r().runner_prefix?e(H):void 0,os_type:e(_)!==r().os_type?e(_):void 0,os_arch:e(j)!==r().os_arch?e(j):void 0,"github-runner-group":e(W)!==r()["github-runner-group"]&&e(W)||void 0,enabled:e(K)!==r().enabled?e(K):void 0,extra_specs:e(I).trim()!==JSON.stringify(r().extra_specs||{},null,2).trim()?i:void 0,template_id:e(w)!==r().template_id?e(w):void 0};Object.keys(c).forEach(S=>{c[S]===void 0&&delete c[S]}),X("submit",c)}catch(i){s(G,ur(i))}finally{s(z,!1)}}or(()=>e(_),()=>{e(_)&&Ae()}),or(()=>(e(A),e(O)),()=>{e(A)!==null&&e(A)!==void 0&&e(O)!==null&&e(O)!==void 0&&e(A)>e(O)?s(k,"Min idle runners cannot be greater than max runners"):s(k,"")}),Pr(),Ir(),Hr(pr,{$$events:{close:()=>X("close")},children:(i,c)=>{var S=tt(),ee=d(S),Ie=d(ee),vr=d(Ie);a(Ie),a(ee);var re=o(ee,2),Je=d(re);{var fr=t=>{var n=Qr(),T=d(n),N=d(T,!0);a(T),a(n),f(()=>y(N,e(G))),b(t,n)};E(Je,t=>{e(G)&&t(fr)})}var Me=o(Je,2);{var mr=t=>{var n=Vr(),T=d(n),N=d(T,!0);a(T),a(n),f(()=>y(N,e(k))),b(t,n)};E(Me,t=>{e(k)&&t(mr)})}var te=o(Me,2),Ne=o(d(te),2),ae=d(Ne),Pe=o(d(ae),2),yr=d(Pe,!0);a(Pe),a(ae);var Ce=o(ae,2),Ue=o(d(Ce),2),xr=d(Ue);{var _r=t=>{var n=D();f(()=>y(n,`Repository: ${R(r()),p(()=>r().repo_name)??""}`)),b(t,n)},hr=t=>{var n=Ee(),T=Q(n);{var N=v=>{var m=D();f(()=>y(m,`Organization: ${R(r()),p(()=>r().org_name)??""}`)),b(v,m)},Se=v=>{var m=Ee(),h=Q(m);{var C=g=>{var l=D();f(()=>y(l,`Enterprise: ${R(r()),p(()=>r().enterprise_name)??""}`)),b(g,l)},U=g=>{var l=D("Unknown Entity");b(g,l)};E(h,g=>{R(r()),p(()=>r().enterprise_name)?g(C):g(U,!1)},!0)}b(v,m)};E(T,v=>{R(r()),p(()=>r().org_name)?v(N):v(Se,!1)},!0)}b(t,n)};E(xr,t=>{R(r()),p(()=>r().repo_name)?t(_r):t(hr,!1)})}a(Ue),a(Ce),a(Ne),a(te);var de=o(te,2),De=o(d(de),2);$(De),a(de);var oe=o(de,2),Ge=o(d(oe),2),se=d(Ge),je=o(d(se),2);$(je),a(se);var ie=o(se,2),ze=o(d(ie),2);$(ze),a(ie);var ne=o(ie,2),le=o(d(ne),2);f(()=>{e(_),Re(()=>{})});var ue=d(le);ue.value=ue.__value="linux";var Le=o(ue);Le.value=Le.__value="windows",a(le),a(ne);var pe=o(ne,2),be=o(d(pe),2);f(()=>{e(j),Re(()=>{})});var ce=d(be);ce.value=ce.__value="amd64";var Be=o(ce);Be.value=Be.__value="arm64",a(be),a(pe);var Fe=o(pe,2),kr=o(d(Fe),2);{var wr=t=>{var n=Xr();b(t,n)},Sr=t=>{var n=Ee(),T=Q(n);{var N=v=>{var m=Zr(),h=Q(m);f(()=>{e(w),Re(()=>{e(x)})}),jr(h,5,()=>e(x),zr,(g,l)=>{var P=Yr(),tr=d(P),Or=o(tr);{var Ar=Te=>{var dr=D();f(()=>y(dr,`- ${e(l),p(()=>e(l).description)??""}`)),b(Te,dr)};E(Or,Te=>{e(l),p(()=>e(l).description)&&Te(Ar)})}a(P);var ar={};f(()=>{y(tr,`${e(l),p(()=>e(l).name)??""} ${e(l),p(()=>e(l).owner_id==="system"?"(System)":"")??""} `),ar!==(ar=(e(l),p(()=>e(l).id)))&&(P.value=(P.__value=(e(l),p(()=>e(l).id)))??"")}),b(g,P)}),a(h);var C=o(h,2),U=d(C);a(C),f(g=>y(U,`Templates define how the runner software is installed and configured. - Showing templates for ${g??""} ${e(_)??""}.`),[()=>p(Z)]),$e(h,()=>e(w),g=>s(w,g)),b(v,m)},Se=v=>{var m=et(),h=d(m),C=d(h);a(h);var U=o(h,2),g=d(U);sr(),a(U),a(m),f((l,P)=>{y(C,`No templates found for ${l??""} ${e(_)??""}.`),Br(g,"href",P)},[()=>p(Z),()=>(R(lr),p(()=>lr("/templates")))]),b(v,m)};E(T,v=>{e(x),p(()=>e(x).length>0)?v(N):v(Se,!1)},!0)}b(t,n)};E(kr,t=>{e(Y)?t(wr):t(Sr,!1)})}a(Fe),a(Ge),a(oe);var ge=o(oe,2),qe=o(d(ge),2),ve=d(qe),fe=o(d(ve),2);$(fe),a(ve);var me=o(ve,2),ye=o(d(me),2);$(ye),a(me);var He=o(me,2),We=o(d(He),2);$(We),a(He),a(qe),a(ge);var xe=o(ge,2),_e=o(d(xe),2),he=d(_e),Ke=o(d(he),2);$(Ke),a(he);var Qe=o(he,2),Ve=o(d(Qe),2);$(Ve),a(Qe),a(_e);var ke=o(_e,2),Xe=d(ke),Tr=o(d(Xe),2);Wr(Tr,{rows:4,placeholder:"{}",get value(){return e(I)},set value(t){s(I,t)},$$legacy:!0}),a(Xe),a(ke);var Ye=o(ke,2),Ze=d(Ye);$(Ze),sr(2),a(Ye),a(xe);var er=o(xe,2),rr=d(er),we=o(rr,2),Rr=d(we);{var Er=t=>{var n=rt();b(t,n)},$r=t=>{var n=D("Update Scale Set");b(t,n)};E(Rr,t=>{e(z)?t(Er):t($r,!1)})}a(we),a(er),a(re),a(S),f(()=>{y(vr,`Update Scale Set ${R(r()),p(()=>r().name)??""}`),y(yr,(R(r()),p(()=>r().provider_name))),nr(fe,1,`w-full px-3 py-2 border ${e(k)?"border-red-300 dark:border-red-500":"border-gray-300 dark:border-gray-600"} rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white`),nr(ye,1,`w-full px-3 py-2 border ${e(k)?"border-red-300 dark:border-red-500":"border-gray-300 dark:border-gray-600"} rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white`),we.disabled=e(z)||e(k)!==""}),J(De,()=>e(L),t=>s(L,t)),J(je,()=>e(B),t=>s(B,t)),J(ze,()=>e(F),t=>s(F,t)),$e(le,()=>e(_),t=>s(_,t)),$e(be,()=>e(j),t=>s(j,t)),J(fe,()=>e(A),t=>s(A,t)),J(ye,()=>e(O),t=>s(O,t)),J(We,()=>e(q),t=>s(q,t)),J(Ke,()=>e(H),t=>s(H,t)),J(Ve,()=>e(W),t=>s(W,t)),Fr(Ze,()=>e(K),t=>s(K,t)),ir("click",rr,()=>X("close")),ir("submit",re,qr(gr)),b(i,S)},$$slots:{default:!0}}),Cr(),cr()}export{vt as U}; diff --git a/webapp/assets/_app/immutable/chunks/QtGwBUod.js b/webapp/assets/_app/immutable/chunks/QtGwBUod.js deleted file mode 100644 index 9e850e0d..00000000 --- a/webapp/assets/_app/immutable/chunks/QtGwBUod.js +++ /dev/null @@ -1 +0,0 @@ -import"./DsnmJJEf.js";import{i as me}from"./TJn6xDN9.js";import{aj as mt,aU as pt,aV as xt,J as yt,L as kt,M as _t,N as bt,O as wt,at as Mt,H as Xe,I as Pt,Q as Ct,P as jt,a1 as Tt,p as fe,l as je,k as Te,m as ze,q as y,h as Ne,C as _e,d as s,g as e,r as n,t as U,b as i,c as ge,f as I,s as P,e as q,z as Ee,D as Ce,A as G,a as R,E as be,i as Fe,y as zt,v as X,u}from"./DniTuB_0.js";import{p as l,i as j,b as It}from"./DbNhg6mG.js";import{e as oe,i as ue}from"./Ck5PkeSc.js";import{h as Ge,s as ke,B as ye,r as St,c as De,b as Ht,d as Lt,f as Ye,k as Bt}from"./DD3srElq.js";import{c as At}from"./BZLWIdPw.js";import{b as Et}from"./CCQwxxp9.js";import{A as tt}from"./B5vVe1Fo.js";import{B as Dt}from"./DcQdHuVc.js";import{g as $e,b as Nt}from"./LMA6-4d1.js";function et(A,r,v){Xe&&Pt();var a=A,t=Mt,x,m,g=null,c=mt()?pt:xt;function p(){x&&Ct(x),g!==null&&(g.lastChild.remove(),a.before(g),g=null),x=m}yt(()=>{if(c(t,t=r())){var k=a,B=wt();B&&(g=document.createDocumentFragment(),g.append(k=kt())),m=_t(()=>v(k)),B?bt.add_callback(p):p()}}),Xe&&(a=jt)}function Ae(A,r){var v=A.$$events?.[r.type],a=Tt(v)?v.slice():v==null?[]:[v];for(var t of a)t.call(this,r)}var Vt=_e('');function Rt(A,r){fe(r,!1);const v=ze();let a=l(r,"name",8),t=l(r,"class",8,"h-5 w-5");const x={plus:'',edit:'',delete:'',view:'',close:'',check:'',x:'',"chevron-left":'',"chevron-right":'',"chevron-down":'',"chevron-up":'',search:'',refresh:'',menu:'',settings:'',"check-circle":'',"x-circle":'',"exclamation-circle":'',"information-circle":'',loading:'',sun:'',moon:'',document:'',folder:''};je(()=>y(a()),()=>{Te(v,x[a()]||"")}),Ne();var m=Vt(),g=s(m);Ge(g,()=>e(v),!0),n(m),U(()=>ke(m,0,`${t()}`)),i(A,m),ge()}var Ut=I('

');function qt(A,r){let v=l(r,"message",8,"Loading...");var a=Ut(),t=P(s(a),2),x=s(t,!0);n(t),n(a),U(()=>q(x,v())),i(A,a)}var Ot=I('
'),Ft=I('

');function Gt(A,r){let v=l(r,"title",8,"Error"),a=l(r,"message",8),t=l(r,"showRetry",8,!1),x=l(r,"onRetry",8,void 0);var m=Ft(),g=s(m),c=s(g),p=P(s(c),2),k=s(p),B=s(k,!0);n(k);var O=P(k,2),N=s(O,!0);n(O);var E=P(O,2);{var J=K=>{var T=Ot(),w=s(T);ye(w,{variant:"secondary",size:"sm",icon:"",class:"text-red-700 dark:text-red-200 bg-red-100 dark:bg-red-800 hover:bg-red-200 dark:hover:bg-red-700 focus:outline-none focus:bg-red-200 dark:focus:bg-red-700",$$events:{click(...V){x()?.apply(this,V)}},children:(V,C)=>{Ee();var Z=Ce("Retry");i(V,Z)},$$slots:{default:!0}}),n(T),i(K,T)};j(E,K=>{t()&&x()&&K(J)})}n(p),n(c),n(g),n(m),U(()=>{q(B,v()),q(N,a())}),i(A,m)}var Jt=_e(''),Kt=_e(''),Qt=_e(''),Zt=_e(''),Wt=_e(''),Xt=_e(''),Yt=I('

');function $t(A,r){let v=l(r,"title",8),a=l(r,"message",8),t=l(r,"iconType",8,"document");var x=Yt(),m=s(x);{var g=N=>{var E=Jt();i(N,E)},c=N=>{var E=G(),J=R(E);{var K=w=>{var V=Kt();i(w,V)},T=w=>{var V=G(),C=R(V);{var Z=d=>{var f=Qt();i(d,f)},o=d=>{var f=G(),h=R(f);{var S=M=>{var D=Zt();i(M,D)},W=M=>{var D=G(),H=R(D);{var z=L=>{var Q=Wt();i(L,Q)},b=L=>{var Q=G(),$=R(Q);{var te=ee=>{var ce=Xt();i(ee,ce)};j($,ee=>{t()==="settings"&&ee(te)},!0)}i(L,Q)};j(H,L=>{t()==="key"?L(z):L(b,!1)},!0)}i(M,D)};j(h,M=>{t()==="cog"?M(S):M(W,!1)},!0)}i(d,f)};j(C,d=>{t()==="users"?d(Z):d(o,!1)},!0)}i(w,V)};j(J,w=>{t()==="building"?w(K):w(T,!1)},!0)}i(N,E)};j(m,N=>{t()==="document"?N(g):N(c,!1)})}var p=P(m,2),k=s(p,!0);n(p);var B=P(p,2),O=s(B,!0);n(B),n(x),U(()=>{q(k,v()),q(O,a())}),i(A,x)}var er=I('
');function rt(A,r){fe(r,!1);let v=l(r,"value",12,""),a=l(r,"placeholder",8,"Search..."),t=l(r,"disabled",8,!1);const x=be();function m(){x("input",v())}me();var g=er(),c=s(g),p=s(c);Rt(p,{name:"search",class:"h-5 w-5 text-gray-400"}),n(c);var k=P(c,2);St(k),n(g),U(()=>{De(k,"placeholder",a()),k.disabled=t()}),Et(k,v),Fe("input",k,m),Fe("keydown",k,function(B){Ae.call(this,r,B)}),i(A,g),ge()}var tr=I(""),rr=I('
'),ar=I('
');function nr(A,r){fe(r,!1);let v=l(r,"searchTerm",12,""),a=l(r,"perPage",12,25),t=l(r,"placeholder",8,"Search..."),x=l(r,"showPerPageSelector",8,!0),m=l(r,"perPageOptions",24,()=>[25,50,100]);const g=be();function c(){g("search",{term:v()})}function p(){g("perPageChange",{perPage:a()})}me();var k=ar(),B=s(k),O=s(B),N=s(O),E=P(s(N),2);rt(E,{get placeholder(){return t()},get value(){return v()},set value(T){v(T)},$$events:{input:c},$$legacy:!0}),n(N),n(O);var J=P(O,2);{var K=T=>{var w=rr(),V=s(w),C=P(s(V),2);U(()=>{a(),zt(()=>{m()})}),oe(C,5,m,ue,(Z,o)=>{var d=tr(),f=s(d,!0);n(d);var h={};U(()=>{q(f,e(o)),h!==(h=e(o))&&(d.value=(d.__value=e(o))??"")}),i(Z,d)}),n(C),n(V),n(w),Ht(C,a),Fe("change",C,p),i(T,w)};j(J,T=>{x()&&T(K)})}n(B),n(k),i(A,k),ge()}var ir=I('

'),lr=I('
');function sr(A,r){fe(r,!1);let v=l(r,"value",12,""),a=l(r,"placeholder",8,"Search..."),t=l(r,"disabled",8,!1),x=l(r,"helpText",8,""),m=l(r,"showButton",8,!0);const g=be();function c(){g("search",v())}function p(){g("search",v())}function k(C){C.key==="Enter"&&c()}me();var B=lr(),O=s(B),N=s(O),E=s(N),J=s(E);rt(J,{get placeholder(){return a()},get disabled(){return t()},get value(){return v()},set value(C){v(C)},$$events:{input:p,keydown:k},$$legacy:!0}),n(E);var K=P(E,2);{var T=C=>{ye(C,{variant:"secondary",get disabled(){return t()},$$events:{click:c},children:(Z,o)=>{Ee();var d=Ce("Search");i(Z,d)},$$slots:{default:!0}})};j(K,C=>{m()&&C(T)})}n(N);var w=P(N,2);{var V=C=>{var Z=ir(),o=s(Z,!0);n(Z),U(()=>q(o,x())),i(C,Z)};j(w,C=>{x()&&C(V)})}n(O),n(B),i(A,B),ge()}var or=I('Showing to of ',1),dr=I('
');function vr(A,r){fe(r,!1);const v=ze(),a=ze();let t=l(r,"currentPage",8,1),x=l(r,"totalPages",8,1),m=l(r,"perPage",8,25),g=l(r,"totalItems",8,0),c=l(r,"itemName",8,"results");const p=be();function k(E){E>=1&&E<=x()&&E!==t()&&p("pageChange",{page:E})}je(()=>(y(g()),y(t()),y(m())),()=>{Te(v,g()===0?0:(t()-1)*m()+1)}),je(()=>(y(t()),y(m()),y(g())),()=>{Te(a,Math.min(t()*m(),g()))}),Ne(),me();var B=G(),O=R(B);{var N=E=>{var J=dr(),K=s(J),T=s(K);{let H=X(()=>t()===1);ye(T,{variant:"secondary",get disabled(){return e(H)},$$events:{click:()=>k(t()-1)},children:(z,b)=>{Ee();var L=Ce("Previous");i(z,L)},$$slots:{default:!0}})}var w=P(T,2);{let H=X(()=>t()===x());ye(w,{variant:"secondary",get disabled(){return e(H)},class:"ml-3",$$events:{click:()=>k(t()+1)},children:(z,b)=>{Ee();var L=Ce("Next");i(z,L)},$$slots:{default:!0}})}n(K);var V=P(K,2),C=s(V),Z=s(C),o=s(Z);{var d=H=>{var z=Ce();U(()=>q(z,`No ${c()??""}`)),i(H,z)},f=H=>{var z=or(),b=P(R(z)),L=s(b,!0);n(b);var Q=P(b,2),$=s(Q,!0);n(Q);var te=P(Q,2),ee=s(te,!0);n(te);var ce=P(te);U(()=>{q(L,e(v)),q($,e(a)),q(ee,g()),q(ce,` ${c()??""}`)}),i(H,z)};j(o,H=>{g()===0?H(d):H(f,!1)})}n(Z),n(C);var h=P(C,2),S=s(h),W=s(S);{let H=X(()=>t()===1);ye(W,{variant:"secondary",size:"sm",get disabled(){return e(H)},class:"rounded-r-none","aria-label":"Previous page",icon:"",$$events:{click:()=>k(t()-1)}})}var M=P(W,2);oe(M,1,()=>(y(x()),u(()=>Array(x()))),ue,(H,z,b)=>{const L=X(()=>b+1);{let Q=X(()=>e(L)===t()?"primary":"secondary");ye(H,{get variant(){return e(Q)},size:"sm",class:"rounded-none border-l-0 first:border-l first:rounded-l-md",$$events:{click:()=>k(e(L))},children:($,te)=>{Ee();var ee=Ce();U(()=>q(ee,e(L))),i($,ee)},$$slots:{default:!0}})}});var D=P(M,2);{let H=X(()=>t()===x());ye(D,{variant:"secondary",size:"sm",get disabled(){return e(H)},class:"rounded-l-none","aria-label":"Next page",icon:"",$$events:{click:()=>k(t()+1)}})}n(S),n(h),n(V),n(J),i(E,J)};j(O,E=>{x()>1&&E(N)})}i(A,B),ge()}var cr=I('

'),ur=I('

'),fr=I('

'),gr=I('

'),hr=I('
'),mr=I('
'),pr=I('
'),xr=I(" "),yr=I('
'),kr=I('
');function _r(A,r){fe(r,!1);const v=be();let a=l(r,"item",8),t=l(r,"config",8);function x(){if(!a())return"Unknown";const{field:o,useId:d,showOwner:f}=t().primaryText,h=a()[o];return d&&h?`${h.slice(0,8)}...`:f&&a().owner&&a().name?`${a().owner}/${a().name}`:h||"Unknown"}function m(){if(!t().secondaryText)return"";const{field:o,computedValue:d}=t().secondaryText;return d!==void 0?typeof d=="function"?d(a()):d:a()?.[o]||""}function g(){if(!t().primaryText.href||!a())return"#";let o=t().primaryText.href;return o=o.replace("{id}",a().id||""),o=o.replace("{name}",encodeURIComponent(a().name||"")),Lt(o)}function c(o){if(!a())return;const d=t().actions?.find(f=>f.type===o);d&&d.handler(a()),o==="edit"?v("edit",{item:a()}):o==="delete"?v("delete",{item:a()}):o==="clone"?v("clone",{item:a()}):v("action",{type:o,item:a()})}function p(o){switch(o.type){case"status":if(t().entityType==="instance"){const f=a()?.[o.field]||"unknown";let h="neutral",S=f.charAt(0).toUpperCase()+f.slice(1);return o.field==="status"?h=f==="running"?"success":f==="pending"||f==="creating"?"info":f==="failed"||f==="error"?"error":"neutral":o.field==="runner_status"&&(h=f==="idle"?"info":f==="active"||f==="running"?"success":f==="failed"||f==="error"?"error":"neutral"),{variant:h,text:S}}return{variant:"neutral",text:a()?.[o.field]||"Unknown"};case"forge":return{variant:"neutral",text:a()?.[o.field]||"unknown"};case"auth":const d=a()?.[o.field]||"pat";return{variant:d==="pat"?"success":"info",text:d.toUpperCase()};case"custom":if(typeof o.value=="function"){const f=o.value(a());return{variant:f?.variant||"neutral",text:f?.text||""}}return{variant:o.value?.variant||"neutral",text:o.value?.text||""};default:return{variant:"neutral",text:""}}}me();var k=kr(),B=s(k),O=s(B);{var N=o=>{var d=ur(),f=s(d),h=s(f,!0);n(f);var S=P(f,2);{var W=M=>{var D=cr(),H=s(D,!0);n(D),U(z=>q(H,z),[()=>u(m)]),i(M,D)};j(S,M=>{y(t()),u(()=>t().secondaryText)&&M(W)})}n(d),U((M,D)=>{De(d,"href",M),ke(f,1,`text-sm font-medium text-blue-600 dark:text-blue-400 hover:text-blue-500 dark:hover:text-blue-300 truncate${y(t()),u(()=>t().primaryText.isMonospace?" font-mono":"")??""}`),q(h,D)},[()=>u(g),()=>u(x)]),i(o,d)},E=o=>{var d=gr(),f=s(d),h=s(f,!0);n(f);var S=P(f,2);{var W=M=>{var D=fr(),H=s(D,!0);n(D),U(z=>q(H,z),[()=>u(m)]),i(M,D)};j(S,M=>{y(t()),u(()=>t().secondaryText)&&M(W)})}n(d),U(M=>q(h,M),[()=>u(x)]),i(o,d)};j(O,o=>{y(t()),u(()=>t().primaryText.isClickable)?o(N):o(E,!1)})}var J=P(O,2);{var K=o=>{var d=pr(),f=s(d);{var h=M=>{var D=G(),H=R(D);oe(H,1,()=>(y(t()),u(()=>t().customInfo)),ue,(z,b)=>{const L=X(()=>(e(b),y(a()),u(()=>typeof e(b).icon=="function"?e(b).icon(a()):e(b).icon))),Q=X(()=>(e(b),y(a()),u(()=>typeof e(b).text=="function"?e(b).text(a()):e(b).text)));var $=hr(),te=s($);{var ee=we=>{var Ie=G(),Re=R(Ie);Ge(Re,()=>e(L)),i(we,Ie)};j(te,we=>{e(L)&&we(ee)})}var ce=P(te,2),Ve=s(ce,!0);n(ce),n($),U(()=>q(Ve,e(Q))),i(z,$)}),i(M,D)};j(f,M=>{y(t()),u(()=>t().customInfo)&&M(h)})}var S=P(f,2);{var W=M=>{var D=G(),H=R(D);oe(H,1,()=>(y(t()),u(()=>t().badges.filter(z=>z.type==="forge"))),ue,(z,b)=>{var L=mr(),Q=s(L);Ge(Q,()=>(y($e),e(b),y(a()),u(()=>$e(e(b).field?a()?.[e(b).field]||"unknown":a()?.endpoint?.endpoint_type||"unknown"))));var $=P(Q,2),te=s($,!0);n($),n(L),U(()=>q(te,(y(a()),u(()=>a()?.endpoint?.name||"Unknown")))),i(z,L)}),i(M,D)};j(S,M=>{y(t()),u(()=>t().badges)&&M(W)})}n(d),i(o,d)};j(J,o=>{y(t()),u(()=>t().customInfo||t().badges?.some(d=>d.type==="forge"))&&o(K)})}n(B);var T=P(B,2),w=s(T);{var V=o=>{var d=G(),f=R(d);oe(f,1,()=>(y(t()),u(()=>t().badges.filter(h=>h.type!=="forge"))),ue,(h,S)=>{var W=G(),M=R(W);{var D=z=>{const b=X(()=>(e(S),u(()=>p(e(S)))));var L=xr(),Q=s(L,!0);n(L),U(()=>{ke(L,1,`inline-flex items-center rounded-full px-2 py-1 text-xs font-medium ring-1 ring-inset ${y(e(b)),u(()=>e(b).variant==="success"?"bg-green-50 text-green-700 ring-green-600/20 dark:bg-green-900/50 dark:text-green-300 dark:ring-green-400/20":e(b).variant==="info"?"bg-blue-50 text-blue-700 ring-blue-600/20 dark:bg-blue-900/50 dark:text-blue-300 dark:ring-blue-400/20":e(b).variant==="error"?"bg-red-50 text-red-700 ring-red-600/20 dark:bg-red-900/50 dark:text-red-300 dark:ring-red-400/20":"bg-gray-50 text-gray-700 ring-gray-600/20 dark:bg-gray-900/50 dark:text-gray-300 dark:ring-gray-400/20")??""}`),q(Q,(y(e(b)),u(()=>e(b).text)))}),i(z,L)},H=z=>{const b=X(()=>(e(S),u(()=>p(e(S)))));Dt(z,{get variant(){return y(e(b)),u(()=>e(b).variant)},get text(){return y(e(b)),u(()=>e(b).text)}})};j(M,z=>{e(S),u(()=>e(S).type==="status")?z(D):z(H,!1)})}i(h,W)}),i(o,d)};j(w,o=>{y(t()),u(()=>t().badges)&&o(V)})}var C=P(w,2);{var Z=o=>{var d=yr();oe(d,5,()=>(y(t()),u(()=>t().actions)),ue,(f,h)=>{{let S=X(()=>(e(h),u(()=>e(h).type==="clone"?"copy":e(h).type))),W=X(()=>(e(h),y(t()),u(()=>e(h).type==="edit"?`Edit ${t().entityType}`:e(h).type==="delete"?`Delete ${t().entityType}`:e(h).type==="clone"?`Clone ${t().entityType}`:e(h).type))),M=X(()=>(e(h),y(t()),u(()=>e(h).type==="edit"?`Edit ${t().entityType}`:e(h).type==="delete"?`Delete ${t().entityType}`:e(h).type==="clone"?`Clone ${t().entityType}`:e(h).type)));tt(f,{get action(){return e(S)},size:"sm",get title(){return e(W)},get ariaLabel(){return e(M)},$$events:{click:()=>c(e(h).type)}})}}),n(d),i(o,d)};j(C,o=>{y(t()),u(()=>t().actions)&&o(Z)})}n(T),n(k),i(A,k),ge()}var br=I('
'),wr=I('
'),Mr=I("
"),Pr=I("
"),Cr=I(' ',1),jr=I('
');function qr(A,r){fe(r,!1);const v=ze();let a=l(r,"columns",24,()=>[]),t=l(r,"data",24,()=>[]),x=l(r,"loading",8,!1),m=l(r,"error",8,""),g=l(r,"totalItems",8,0),c=l(r,"itemName",8,"results"),p=l(r,"searchTerm",12,""),k=l(r,"searchPlaceholder",8,"Search..."),B=l(r,"showSearch",8,!0),O=l(r,"searchType",8,"client"),N=l(r,"searchHelpText",8,""),E=l(r,"currentPage",8,1),J=l(r,"perPage",12,25),K=l(r,"totalPages",8,1),T=l(r,"showPagination",8,!0),w=l(r,"showPerPageSelector",8,!0),V=l(r,"emptyTitle",8,"No items found"),C=l(r,"emptyMessage",8,""),Z=l(r,"emptyIconType",8,"document"),o=l(r,"errorTitle",8,"Error loading data"),d=l(r,"showRetry",8,!1),f=l(r,"showMobileCards",8,!0),h=l(r,"mobileCardConfig",8,null);const S=be();function W(_){const de=typeof _.detail=="string"?_.detail:_.detail.term;S("search",{term:de})}function M(_){S("pageChange",_.detail)}function D(_){S("perPageChange",_.detail)}function H(){S("retry")}function z(_){S("edit",_.detail)}function b(_){S("delete",_.detail)}function L(_){S("clone",_.detail)}function Q(_){S("action",_.detail)}function $(_){const de="px-6 py-4 text-sm",Se=_.align==="right"?"text-right":_.align==="center"?"text-center":"text-left",He=_.key==="actions"?"font-medium":"text-gray-900 dark:text-white",Le=_.flexible?"min-w-0":"";return`${de} ${Se} ${He} ${Le}`.trim()}function te(){return a().map(_=>_.flexible?`${_.flexRatio||1}fr`:"auto").join(" ")}je(()=>(y(C()),y(p()),y(c())),()=>{Te(v,C()||(p()?`No items found matching "${p()}"`:`No ${c()} found`))}),Ne(),me();var ee=jr(),ce=s(ee);{var Ve=_=>{var de=G(),Se=R(de);{var He=re=>{sr(re,{get placeholder(){return k()},get helpText(){return N()},showButton:!1,get value(){return p()},set value(ve){p(ve)},$$events:{search:W},$$legacy:!0})},Le=re=>{nr(re,{get placeholder(){return k()},get showPerPageSelector(){return w()},get searchTerm(){return p()},set searchTerm(ve){p(ve)},get perPage(){return J()},set perPage(ve){J(ve)},$$events:{search:W,perPageChange:D},$$legacy:!0})};j(Se,re=>{O()==="backend"?re(He):re(Le,!1)})}i(_,de)};j(ce,_=>{B()&&_(Ve)})}var we=P(ce,2),Ie=s(we);{var Re=_=>{qt(_,{get message(){return`Loading ${c()??""}...`}})},at=_=>{var de=G(),Se=R(de);{var He=re=>{{let ve=X(()=>d()?H:void 0);Gt(re,{get title(){return o()},get message(){return m()},get showRetry(){return d()},get onRetry(){return e(ve)}})}},Le=re=>{var ve=G(),lt=R(ve);{var st=Me=>{$t(Me,{get title(){return V()},get message(){return e(v)},get iconType(){return Z()}})},ot=Me=>{var Je=Cr(),Ke=R(Je);{var dt=ne=>{var F=wr();oe(F,7,t,(le,ae)=>le.id||le.name||ae,(le,ae,qe)=>{var Be=br(),Y=s(Be);{var Pe=he=>{var pe=G(),ie=R(pe);et(ie,()=>(e(ae),u(()=>`${e(ae).id||e(ae).name}-${e(ae).updated_at}-mobile`)),xe=>{_r(xe,{get item(){return e(ae)},get config(){return h()},$$events:{edit(se){Ae.call(this,r,se)},delete(se){Ae.call(this,r,se)},clone(se){Ae.call(this,r,se)},action(se){Ae.call(this,r,se)}}})}),i(he,pe)},Oe=he=>{var pe=G(),ie=R(pe);Ye(ie,r,"mobile-card",{get item(){return e(ae)},get index(){return e(qe)}}),i(he,pe)};j(Y,he=>{h()?he(Pe):he(Oe,!1)})}n(Be),i(le,Be)}),n(F),i(ne,F)};j(Ke,ne=>{f()&&ne(dt)})}var Qe=P(Ke,2),Ue=s(Qe),Ze=s(Ue);oe(Ze,1,a,ue,(ne,F)=>{var le=Mr(),ae=s(le,!0);n(le),U(()=>{ke(le,1,`px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider bg-gray-50 dark:bg-gray-700 border-b border-gray-200 dark:border-gray-600 ${e(F),u(()=>e(F).align==="right"?"text-right":e(F).align==="center"?"text-center":"text-left")??""}`),q(ae,(e(F),u(()=>e(F).title)))}),i(ne,le)});var vt=P(Ze,2);oe(vt,3,t,(ne,F)=>ne.id||ne.name||F,(ne,F,le)=>{var ae=G(),qe=R(ae);oe(qe,1,a,ue,(Be,Y)=>{var Pe=Pr(),Oe=s(Pe);{var he=ie=>{var xe=G(),se=R(xe);et(se,()=>(e(F),e(Y),u(()=>`${e(F).id||e(F).name}-${e(F).updated_at}-${e(Y).key}`)),ct=>{var We=G(),ut=R(We);{let ft=X(()=>typeof e(Y).cellProps=="function"?e(Y).cellProps(e(F)):e(Y).cellProps);At(ut,()=>e(Y).cellComponent,(gt,ht)=>{ht(gt,It({get item(){return e(F)}},()=>e(ft),{$$events:{edit:z,delete:b,clone:L,action:Q}}))})}i(ct,We)}),i(ie,xe)},pe=ie=>{var xe=G(),se=R(xe);Ye(se,r,"cell",{get item(){return e(F)},get column(){return e(Y)},get index(){return e(le)},get value(){return e(F),e(Y),u(()=>e(F)[e(Y).key])}}),i(ie,xe)};j(Oe,ie=>{e(Y),u(()=>e(Y).cellComponent)?ie(he):ie(pe,!1)})}n(Pe),U(ie=>ke(Pe,1,`${ie??""} border-b border-gray-200 dark:border-gray-700`),[()=>(e(Y),u(()=>$(e(Y))))]),i(Be,Pe)}),i(ne,ae)}),n(Ue),n(Qe),U(ne=>Bt(Ue,`grid-template-columns: ${ne??""}`),[()=>u(te)]),i(Me,Je)};j(lt,Me=>{y(t()),u(()=>t().length===0)?Me(st):Me(ot,!1)},!0)}i(re,ve)};j(Se,re=>{m()?re(He):re(Le,!1)},!0)}i(_,de)};j(Ie,_=>{x()?_(Re):_(at,!1)})}var nt=P(Ie,2);{var it=_=>{vr(_,{get currentPage(){return E()},get totalPages(){return K()},get perPage(){return J()},get totalItems(){return g()},get itemName(){return c()},$$events:{pageChange:M}})};j(nt,_=>{y(T()),y(x()),y(m()),y(t()),u(()=>T()&&!x()&&!m()&&t().length>0)&&_(it)})}n(we),n(ee),i(A,ee),ge()}var Tr=I('
');function Or(A,r){fe(r,!1);const v=be();let a=l(r,"item",8),t=l(r,"actions",24,()=>[{type:"edit",title:"Edit",ariaLabel:"Edit item",action:"edit"},{type:"delete",title:"Delete",ariaLabel:"Delete item",action:"delete"}]);function x(g,c){if(!a())return;const p=c||g;p==="edit"?v("edit",{item:a()}):p==="delete"?v("delete",{item:a()}):p==="copy"||p==="clone"?v("clone",{item:a()}):v("action",{type:p,item:a()})}me();var m=Tr();oe(m,5,t,ue,(g,c)=>{{let p=X(()=>(e(c),u(()=>e(c).action==="clone"?"copy":e(c).action||(e(c).type==="edit"?"edit":e(c).type==="delete"?"delete":e(c).type==="copy"?"copy":"view")))),k=X(()=>(e(c),u(()=>e(c).title||(e(c).type==="edit"?"Edit":e(c).type==="delete"?"Delete":e(c).type==="copy"?"Clone":e(c).label)))),B=X(()=>(e(c),u(()=>e(c).ariaLabel||(e(c).type==="edit"?"Edit item":e(c).type==="delete"?"Delete item":e(c).type==="copy"?"Clone item":e(c).label))));tt(g,{get action(){return e(p)},get title(){return e(k)},get ariaLabel(){return e(B)},$$events:{click:()=>x(e(c).type,e(c).action)}})}}),n(m),i(A,m),ge()}var zr=I(" "),Ir=I(" ");function Fr(A,r){fe(r,!1);const v=ze(),a=ze();let t=l(r,"item",8),x=l(r,"field",8,void 0),m=l(r,"getValue",8,void 0),g=l(r,"type",8,"text"),c=l(r,"truncateLength",8,50),p=l(r,"showTitle",8,!1);function k(){return t()?m()?m()(t()):x()&&x().split(".").reduce((T,w)=>T?.[w],t())||"":""}function B(){return g()==="date"?Nt(e(v)):g()==="truncated"&&e(v).length>c()?`${e(v).slice(0,c())}...`:e(v)}function O(){switch(g()){case"code":return"inline-block max-w-full truncate bg-gray-100 dark:bg-gray-700 px-2 py-1 rounded text-xs font-mono";case"description":return"block w-full truncate text-sm text-gray-500 dark:text-gray-300";case"date":return"block w-full truncate text-sm text-gray-900 dark:text-white font-mono";default:return"block w-full truncate text-sm text-gray-900 dark:text-white"}}je(()=>{},()=>{Te(v,k())}),je(()=>{},()=>{Te(a,B())}),Ne(),me();var N=G(),E=R(N);{var J=T=>{var w=zr(),V=s(w,!0);n(w),U(C=>{ke(w,1,`${C??""} ${p()?"cursor-default":""}`),De(w,"title",p()?e(v):""),q(V,e(a))},[()=>u(O)]),i(T,w)},K=T=>{var w=Ir(),V=s(w,!0);n(w),U(C=>{ke(w,1,`${C??""} ${p()?"cursor-default":""}`),De(w,"title",p()?e(v):""),q(V,e(a))},[()=>u(O)]),i(T,w)};j(E,T=>{g()==="code"?T(J):T(K,!1)})}i(A,N),ge()}export{Or as A,qr as D,Fr as G,qt as L,et as k}; diff --git a/webapp/assets/_app/immutable/chunks/BB5NL1nO.js b/webapp/assets/_app/immutable/chunks/mAwhcVsI.js similarity index 90% rename from webapp/assets/_app/immutable/chunks/BB5NL1nO.js rename to webapp/assets/_app/immutable/chunks/mAwhcVsI.js index d237e342..4cac54b4 100644 --- a/webapp/assets/_app/immutable/chunks/BB5NL1nO.js +++ b/webapp/assets/_app/immutable/chunks/mAwhcVsI.js @@ -1,19 +1,19 @@ -import"./DsnmJJEf.js";import{i as Vh}from"./TJn6xDN9.js";import{ay as ud,aw as dd,p as Nh,E as Fh,o as pd,B as md,g as j,m as Wi,l as Wt,k as zi,q as zt,h as Xh,f as _h,b as St,c as Uh,d as $t,r as Bt,s as Sn,z as Cl,D as Pl,t as ti,e as kn,v as gd,C as $o,A as Od,a as yd}from"./DniTuB_0.js";import{b as bd}from"./C-xTH-sp.js";import{p as Be,a as xd,s as Sd,i as Ql}from"./DbNhg6mG.js";import{t as kd}from"./2CDqnvrp.js";import{B as Al,s as wn}from"./DD3srElq.js";import{M as wd}from"./PC4wJWhj.js";function vd(n,e,t){var i=ud(n,e);i&&i.set&&(n[e]=t,dd(()=>{n[e]=null}))}let qr=[],Hh=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=Hh[i])e=i+1;else return!0;if(e==t)return!1}}function Ml(n){return n>=127462&&n<=127487}const Rl=8205;function Cd(n,e,t=!0,i=!0){return(t?jh:Pd)(n,e,i)}function jh(n,e,t){if(e==n.length)return e;e&&Gh(n.charCodeAt(e))&&Zh(n.charCodeAt(e-1))&&e--;let i=Js(n,e);for(e+=Dl(i);e=0&&Ml(Js(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function Pd(n,e,t){for(;e>0;){let i=jh(n,e-2,t);if(i=56320&&n<57344}function Zh(n){return n>=55296&&n<56320}function Dl(n){return n<65536?1:2}class V{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=pi(this,e,t);let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),Ye.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=pi(this,e,t);let i=[];return this.decompose(e,t,i,0),Ye.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new Ii(this),r=new Ii(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new Ii(this,e)}iterRange(e,t=this.length){return new Yh(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Kh(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?V.empty:e.length<=32?new J(e):Ye.from(J.split(e,[]))}}class J extends V{constructor(e,t=Qd(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Ad(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new J(El(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=Gn(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new J(l,o.length+r.length));else{let a=l.length>>1;i.push(new J(l.slice(0,a)),new J(l.slice(a)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof J))return super.replace(e,t,i);[e,t]=pi(this,e,t);let s=Gn(this.text,Gn(i.text,El(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new J(s,r):Ye.from(J.split(s,[]),r)}sliceString(e,t=this.length,i=` +import"./DsnmJJEf.js";import{i as Vh}from"./De-I_rkH.js";import{ay as ud,aw as dd,p as Nh,E as Fh,o as pd,B as md,g as j,m as zi,l as Wt,k as Ii,q as zt,h as Xh,f as _h,b as St,c as Uh,d as $t,r as Bt,s as kn,z as Cl,D as Pl,t as ti,e as wn,v as gd,C as $o,A as Od,a as yd}from"./BIqNNOMq.js";import{b as bd}from"./BLHP-Xk3.js";import{p as Be,a as xd,s as Sd,i as Ql}from"./CfI2BFUj.js";import{t as kd}from"./CBy1Js1f.js";import{B as Al,s as vn}from"./CQh-7xkh.js";import{M as wd}from"./BFX8vI-4.js";function vd(n,e,t){var i=ud(n,e);i&&i.set&&(n[e]=t,dd(()=>{n[e]=null}))}let qr=[],Hh=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=Hh[i])e=i+1;else return!0;if(e==t)return!1}}function Ml(n){return n>=127462&&n<=127487}const Rl=8205;function Cd(n,e,t=!0,i=!0){return(t?jh:Pd)(n,e,i)}function jh(n,e,t){if(e==n.length)return e;e&&Gh(n.charCodeAt(e))&&Zh(n.charCodeAt(e-1))&&e--;let i=Js(n,e);for(e+=Dl(i);e=0&&Ml(Js(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function Pd(n,e,t){for(;e>0;){let i=jh(n,e-2,t);if(i=56320&&n<57344}function Zh(n){return n>=55296&&n<56320}function Dl(n){return n<65536?1:2}class V{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=pi(this,e,t);let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),Ye.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=pi(this,e,t);let i=[];return this.decompose(e,t,i,0),Ye.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new Vi(this),r=new Vi(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new Vi(this,e)}iterRange(e,t=this.length){return new Yh(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Kh(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?V.empty:e.length<=32?new J(e):Ye.from(J.split(e,[]))}}class J extends V{constructor(e,t=Qd(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Ad(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new J(El(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=Zn(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new J(l,o.length+r.length));else{let a=l.length>>1;i.push(new J(l.slice(0,a)),new J(l.slice(a)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof J))return super.replace(e,t,i);[e,t]=pi(this,e,t);let s=Zn(this.text,Zn(i.text,El(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new J(s,r):Ye.from(J.split(s,[]),r)}sliceString(e,t=this.length,i=` `){[e,t]=pi(this,e,t);let s="";for(let r=0,o=0;r<=t&&oe&&o&&(s+=i),er&&(s+=l.slice(Math.max(0,e-r),t-r)),r=a+1}return s}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],s=-1;for(let r of e)i.push(r),s+=r.length+1,i.length==32&&(t.push(new J(i,s)),i=[],s=-1);return s>-1&&t.push(new J(i,s)),t}}class Ye extends V{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.children[r],l=s+o.length,a=i+o.lines-1;if((t?a:l)>=e)return o.lineInner(e,t,i,s);s=l+1,i=a+1}}decompose(e,t,i,s){for(let r=0,o=0;o<=t&&r=o){let h=s&((o<=e?1:0)|(a>=t?2:0));o>=e&&a<=t&&!h?i.push(l):l.decompose(e-o,t-o,i,h)}o=a+1}}replace(e,t,i){if([e,t]=pi(this,e,t),i.lines=r&&t<=l){let a=o.replace(e-r,t-r,i),h=this.lines-o.lines+a.lines;if(a.lines>4&&a.lines>h>>6){let c=this.children.slice();return c[s]=a,new Ye(c,this.length-(t-e)+i.length)}return super.replace(r,l,a)}r=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=` -`){[e,t]=pi(this,e,t);let s="";for(let r=0,o=0;re&&r&&(s+=i),eo&&(s+=l.sliceString(e-o,t-o,i)),o=a+1}return s}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof Ye))return 0;let i=0,[s,r,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==l)return i;let a=this.children[s],h=e.children[r];if(a!=h)return i+a.scanIdentical(h,t);i+=a.length+1}}static from(e,t=e.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new J(d,t)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,l=[],a=0,h=-1,c=[];function f(d){let p;if(d.lines>r&&d instanceof Ye)for(let m of d.children)f(m);else d.lines>o&&(a>o||!a)?(u(),l.push(d)):d instanceof J&&a&&(p=c[c.length-1])instanceof J&&d.lines+p.lines<=32?(a+=d.lines,h+=d.length+1,c[c.length-1]=new J(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>s&&u(),a+=d.lines,h+=d.length+1,c.push(d))}function u(){a!=0&&(l.push(c.length==1?c[0]:Ye.from(c,h)),h=-1,a=c.length=0)}for(let d of e)f(d);return u(),l.length==1?l[0]:new Ye(l,t)}}V.empty=new J([""],0);function Qd(n){let e=-1;for(let t of n)e+=t.length+1;return e}function Gn(n,e,t=0,i=1e9){for(let s=0,r=0,o=!0;r=t&&(a>i&&(l=l.slice(0,i-s)),s0?1:(e instanceof J?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,l=s instanceof J?s.text.length:s.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=` -`,this;e--}else if(s instanceof J){let a=s.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=s.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof J?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class Yh{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new Ii(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:s}=this.cursor.next(e);return this.pos+=(s.length+e)*t,this.value=s.length<=i?s:t<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class Kh{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:s}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(V.prototype[Symbol.iterator]=function(){return this.iter()},Ii.prototype[Symbol.iterator]=Yh.prototype[Symbol.iterator]=Kh.prototype[Symbol.iterator]=function(){return this});class Ad{constructor(e,t,i,s){this.from=e,this.to=t,this.number=i,this.text=s}get length(){return this.to-this.from}}function pi(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function Oe(n,e,t=!0,i=!0){return Cd(n,e,t,i)}function Md(n){return n>=56320&&n<57344}function Rd(n){return n>=55296&&n<56320}function Ce(n,e){let t=n.charCodeAt(e);if(!Rd(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return Md(i)?(t-55296<<10)+(i-56320)+65536:t}function Bo(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function Ke(n){return n<65536?1:2}const $r=/\r\n?|\n/;var ge=function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n}(ge||(ge={}));class st{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return r+(e-s);r+=l}else{if(i!=ge.Simple&&h>=e&&(i==ge.TrackDel&&se||i==ge.TrackBefore&&se))return null;if(h>e||h==e&&t<0&&!l)return e==s||t<0?r:r+a;r+=a}s=h}if(e>s)throw new RangeError(`Position ${e} is out of range for changeset of length ${s}`);return r}touchesRange(e,t=e){for(let i=0,s=0;i=0&&s<=t&&l>=e)return st?"cover":!0;s=l}return!1}toString(){let e="";for(let t=0;t=0?":"+s:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new st(e)}static create(e){return new st(e)}}class ae extends st{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Br(this,(t,i,s,r,o)=>e=e.replace(s,s+(i-t),o),!1),e}mapDesc(e,t=!1){return Lr(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let s=0,r=0;s=0){t[s]=l,t[s+1]=o;let a=s>>1;for(;i.length0&&Tt(i,t,r.text),r.forward(c),l+=c}let h=e[o++];for(;l>1].toJSON()))}return e}static of(e,t,i){let s=[],r=[],o=0,l=null;function a(c=!1){if(!c&&!s.length)return;ou||f<0||u>t)throw new RangeError(`Invalid change range ${f} to ${u} (in doc of length ${t})`);let p=d?typeof d=="string"?V.of(d.split(i||$r)):d:V.empty,m=p.length;if(f==u&&m==0)return;fo&&ye(s,f-o,-1),ye(s,u-f,m),Tt(r,s,p),o=u}}return h(e),a(!l),l}static empty(e){return new ae(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let s=0;sl&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(r.length==1)t.push(r[0],0);else{for(;i.length=0&&t<=0&&t==n[s+1]?n[s]+=e:s>=0&&e==0&&n[s]==0?n[s+1]+=t:i?(n[s]+=e,n[s+1]+=t):n.push(e,t)}function Tt(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];e(s,h,r,c,f),s=h,r=c}}}function Lr(n,e,t,i=!1){let s=[],r=i?[]:null,o=new Ui(n),l=new Ui(e);for(let a=-1;;){if(o.done&&l.len||l.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&l.ins==-1){let h=Math.min(o.len,l.len);ye(s,h,-1),o.forward(h),l.forward(h)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len=0&&a=0){let h=0,c=o.len;for(;c;)if(l.ins==-1){let f=Math.min(c,l.len);h+=f,c-=f,l.forward(f)}else if(l.ins==0&&l.lena||o.ins>=0&&o.len>a)&&(l||i.length>h),r.forward2(a),o.forward(a)}}}}class Ui{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?V.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?V.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class Nt{constructor(e,t,i){this.from=e,this.to=t,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,t=-1){let i,s;return this.empty?i=s=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),s=e.mapPos(this.to,-1)),i==this.from&&s==this.to?this:new Nt(i,s,this.flags)}extend(e,t=e){if(e<=this.anchor&&t>=this.anchor)return b.range(e,t);let i=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return b.range(this.anchor,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return b.range(e.anchor,e.head)}static create(e,t,i){return new Nt(e,t,i)}}class b{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:b.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new b(e.ranges.map(t=>Nt.fromJSON(t)),e.main)}static single(e,t=e){return new b([b.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,s=0;se?8:0)|r)}static normalized(e,t=0){let i=e[t];e.sort((s,r)=>s.from-r.from),t=e.indexOf(i);for(let s=1;sr.head?b.range(a,l):b.range(l,a))}}return new b(e,t)}}function ec(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}let Lo=0;class M{constructor(e,t,i,s,r){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=s,this.id=Lo++,this.default=e([]),this.extensions=typeof r=="function"?r(this):r}get reader(){return this}static define(e={}){return new M(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:Wo),!!e.static,e.enables)}of(e){return new Zn([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Zn(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Zn(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}}function Wo(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}class Zn{constructor(e,t,i,s){this.dependencies=e,this.facet=t,this.type=i,this.value=s,this.id=Lo++}dynamicSlot(e){var t;let i=this.value,s=this.facet.compareInput,r=this.id,o=e[r]>>1,l=this.type==2,a=!1,h=!1,c=[];for(let f of this.dependencies)f=="doc"?a=!0:f=="selection"?h=!0:(((t=e[f.id])!==null&&t!==void 0?t:1)&1)==0&&c.push(e[f.id]);return{create(f){return f.values[o]=i(f),1},update(f,u){if(a&&u.docChanged||h&&(u.docChanged||u.selection)||Wr(f,c)){let d=i(f);if(l?!ql(d,f.values[o],s):!s(d,f.values[o]))return f.values[o]=d,1}return 0},reconfigure:(f,u)=>{let d,p=u.config.address[r];if(p!=null){let m=cs(u,p);if(this.dependencies.every(g=>g instanceof M?u.facet(g)===f.facet(g):g instanceof ue?u.field(g,!1)==f.field(g,!1):!0)||(l?ql(d=i(f),m,s):s(d=i(f),m)))return f.values[o]=m,0}else d=i(f);return f.values[o]=d,1}}}}function ql(n,e,t){if(n.length!=e.length)return!1;for(let i=0;in[a.id]),s=t.map(a=>a.type),r=i.filter(a=>!(a&1)),o=n[e.id]>>1;function l(a){let h=[];for(let c=0;ci===s),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(vn).find(i=>i.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,s)=>{let r=i.values[t],o=this.updateF(r,s);return this.compareF(r,o)?0:(i.values[t]=o,1)},reconfigure:(i,s)=>{let r=i.facet(vn),o=s.facet(vn),l;return(l=r.find(a=>a.field==this))&&l!=o.find(a=>a.field==this)?(i.values[t]=l.create(i),1):s.config.address[this.id]!=null?(i.values[t]=s.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,vn.of({field:this,create:e})]}get extension(){return this}}const It={lowest:4,low:3,default:2,high:1,highest:0};function Qi(n){return e=>new tc(e,n)}const Et={highest:Qi(It.highest),high:Qi(It.high),default:Qi(It.default),low:Qi(It.low),lowest:Qi(It.lowest)};class tc{constructor(e,t){this.inner=e,this.prec=t}}class $s{of(e){return new zr(this,e)}reconfigure(e){return $s.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class zr{constructor(e,t){this.compartment=e,this.inner=t}}class hs{constructor(e,t,i,s,r,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=s,this.staticValues=r,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let s=[],r=Object.create(null),o=new Map;for(let u of Ed(e,t,o))u instanceof ue?s.push(u):(r[u.facet.id]||(r[u.facet.id]=[])).push(u);let l=Object.create(null),a=[],h=[];for(let u of s)l[u.id]=h.length<<1,h.push(d=>u.slot(d));let c=i?.config.facets;for(let u in r){let d=r[u],p=d[0].facet,m=c&&c[u]||[];if(d.every(g=>g.type==0))if(l[p.id]=a.length<<1|1,Wo(m,d))a.push(i.facet(p));else{let g=p.combine(d.map(y=>y.value));a.push(i&&p.compare(g,i.facet(p))?i.facet(p):g)}else{for(let g of d)g.type==0?(l[g.id]=a.length<<1|1,a.push(g.value)):(l[g.id]=h.length<<1,h.push(y=>g.dynamicSlot(y)));l[p.id]=h.length<<1,h.push(g=>Dd(g,p,d))}}let f=h.map(u=>u(l));return new hs(e,o,f,l,a,r)}}function Ed(n,e,t){let i=[[],[],[],[],[]],s=new Map;function r(o,l){let a=s.get(o);if(a!=null){if(a<=l)return;let h=i[a].indexOf(o);h>-1&&i[a].splice(h,1),o instanceof zr&&t.delete(o.compartment)}if(s.set(o,l),Array.isArray(o))for(let h of o)r(h,l);else if(o instanceof zr){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let h=e.get(o.compartment)||o.inner;t.set(o.compartment,h),r(h,l)}else if(o instanceof tc)r(o.inner,o.prec);else if(o instanceof ue)i[l].push(o),o.provides&&r(o.provides,l);else if(o instanceof Zn)i[l].push(o),o.facet.extensions&&r(o.facet.extensions,It.default);else{let h=o.extension;if(!h)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(h,l)}}return r(n,It.default),i.reduce((o,l)=>o.concat(l))}function Vi(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let s=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|s}function cs(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}const ic=M.define(),Ir=M.define({combine:n=>n.some(e=>e),static:!0}),nc=M.define({combine:n=>n.length?n[0]:void 0,static:!0}),sc=M.define(),rc=M.define(),oc=M.define(),lc=M.define({combine:n=>n.length?n[0]:!1});class bt{constructor(e,t){this.type=e,this.value=t}static define(){return new qd}}class qd{of(e){return new bt(this,e)}}class $d{constructor(e){this.map=e}of(e){return new B(this,e)}}class B{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new B(this.type,t)}is(e){return this.type==e}static define(e={}){return new $d(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let s of e){let r=s.map(t);r&&i.push(r)}return i}}B.reconfigure=B.define();B.appendConfig=B.define();class oe{constructor(e,t,i,s,r,o){this.startState=e,this.changes=t,this.selection=i,this.effects=s,this.annotations=r,this.scrollIntoView=o,this._doc=null,this._state=null,i&&ec(i,t.newLength),r.some(l=>l.type==oe.time)||(this.annotations=r.concat(oe.time.of(Date.now())))}static create(e,t,i,s,r,o){return new oe(e,t,i,s,r,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(oe.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}}oe.time=bt.define();oe.userEvent=bt.define();oe.addToHistory=bt.define();oe.remote=bt.define();function Bd(n,e){let t=[];for(let i=0,s=0;;){let r,o;if(i=n[i]))r=n[i++],o=n[i++];else if(s=0;s--){let r=i[s](n);r instanceof oe?n=r:Array.isArray(r)&&r.length==1&&r[0]instanceof oe?n=r[0]:n=hc(e,ai(r),!1)}return n}function Wd(n){let e=n.startState,t=e.facet(oc),i=n;for(let s=t.length-1;s>=0;s--){let r=t[s](n);r&&Object.keys(r).length&&(i=ac(i,Vr(e,r,n.changes.newLength),!0))}return i==n?n:oe.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}const zd=[];function ai(n){return n==null?zd:Array.isArray(n)?n:[n]}var Y=function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n}(Y||(Y={}));const Id=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let Nr;try{Nr=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function Vd(n){if(Nr)return Nr.test(n);for(let e=0;e"€"&&(t.toUpperCase()!=t.toLowerCase()||Id.test(t)))return!0}return!1}function Nd(n){return e=>{if(!/\S/.test(e))return Y.Space;if(Vd(e))return Y.Word;for(let t=0;t-1)return Y.Word;return Y.Other}}class I{constructor(e,t,i,s,r,o){this.config=e,this.doc=t,this.selection=i,this.values=s,this.status=e.statusTemplate.slice(),this.computeSlot=r,o&&(o._state=this);for(let l=0;ls.set(h,a)),t=null),s.set(l.value.compartment,l.value.extension)):l.is(B.reconfigure)?(t=null,i=l.value):l.is(B.appendConfig)&&(t=null,i=ai(i).concat(l.value));let r;t?r=e.startState.values.slice():(t=hs.resolve(i,s,this),r=new I(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(a,h)=>h.reconfigure(a,this),null).values);let o=e.startState.facet(Ir)?e.newSelection:e.newSelection.asSingle();new I(t,e.newDoc,o,r,(l,a)=>a.update(l,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:b.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),s=this.changes(i.changes),r=[i.range],o=ai(i.effects);for(let l=1;lo.spec.fromJSON(l,a)))}}return I.create({doc:e.doc,selection:b.fromJSON(e.selection),extensions:t.extensions?s.concat([t.extensions]):s})}static create(e={}){let t=hs.resolve(e.extensions||[],new Map),i=e.doc instanceof V?e.doc:V.of((e.doc||"").split(t.staticFacet(I.lineSeparator)||$r)),s=e.selection?e.selection instanceof b?e.selection:b.single(e.selection.anchor,e.selection.head):b.single(0);return ec(s,i.length),t.staticFacet(Ir)||(s=s.asSingle()),new I(t,i,s,t.dynamicSlots.map(()=>null),(r,o)=>o.create(r),null)}get tabSize(){return this.facet(I.tabSize)}get lineBreak(){return this.facet(I.lineSeparator)||` -`}get readOnly(){return this.facet(lc)}phrase(e,...t){for(let i of this.facet(I.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(i,s)=>{if(s=="$")return"$";let r=+(s||1);return!r||r>t.length?i:t[r-1]})),e}languageDataAt(e,t,i=-1){let s=[];for(let r of this.facet(ic))for(let o of r(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&s.push(o[e]);return s}charCategorizer(e){return Nd(this.languageDataAt("wordChars",e).join(""))}wordAt(e){let{text:t,from:i,length:s}=this.doc.lineAt(e),r=this.charCategorizer(e),o=e-i,l=e-i;for(;o>0;){let a=Oe(t,o,!1);if(r(t.slice(a,o))!=Y.Word)break;o=a}for(;ln.length?n[0]:4});I.lineSeparator=nc;I.readOnly=lc;I.phrases=M.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(s=>n[s]==e[s])}});I.languageData=ic;I.changeFilter=sc;I.transactionFilter=rc;I.transactionExtender=oc;$s.reconfigure=B.define();function ot(n,e,t={}){let i={};for(let s of n)for(let r of Object.keys(s)){let o=s[r],l=i[r];if(l===void 0)i[r]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(t,r))i[r]=t[r](l,o);else throw new Error("Config merge conflict for field "+r)}for(let s in e)i[s]===void 0&&(i[s]=e[s]);return i}class Ht{eq(e){return this==e}range(e,t=e){return Fr.create(e,t,this)}}Ht.prototype.startSide=Ht.prototype.endSide=0;Ht.prototype.point=!1;Ht.prototype.mapMode=ge.TrackDel;let Fr=class cc{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new cc(e,t,i)}};function Xr(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}class zo{constructor(e,t,i,s){this.from=e,this.to=t,this.value=i,this.maxPoint=s}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,s=0){let r=i?this.to:this.from;for(let o=s,l=r.length;;){if(o==l)return o;let a=o+l>>1,h=r[a]-e||(i?this.value[a].endSide:this.value[a].startSide)-t;if(a==o)return h>=0?o:l;h>=0?l=a:o=a+1}}between(e,t,i,s){for(let r=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,r);rd||u==d&&h.startSide>0&&h.endSide<=0)continue;(d-u||h.endSide-h.startSide)<0||(o<0&&(o=u),h.point&&(l=Math.max(l,d-u)),i.push(h),s.push(u-o),r.push(d-o))}return{mapped:i.length?new zo(s,r,i,l):null,pos:o}}}class F{constructor(e,t,i,s){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=s}static create(e,t,i,s){return new F(e,t,i,s)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:s=0,filterTo:r=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(Xr)),this.isEmpty)return t.length?F.of(t):this;let l=new fc(this,null,-1).goto(0),a=0,h=[],c=new gt;for(;l.value||a=0){let f=t[a++];c.addInner(f.from,f.to,f.value)||h.push(f)}else l.rangeIndex==1&&l.chunkIndexthis.chunkEnd(l.chunkIndex)||rl.to||r=r&&e<=r+o.length&&o.between(r,e-r,t-r,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return Hi.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return Hi.from(e).goto(t)}static compare(e,t,i,s,r=-1){let o=e.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=r),l=t.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=r),a=$l(o,l,i),h=new Ai(o,a,r),c=new Ai(l,a,r);i.iterGaps((f,u,d)=>Bl(h,f,c,u,d,s)),i.empty&&i.length==0&&Bl(h,0,c,0,0,s)}static eq(e,t,i=0,s){s==null&&(s=999999999);let r=e.filter(c=>!c.isEmpty&&t.indexOf(c)<0),o=t.filter(c=>!c.isEmpty&&e.indexOf(c)<0);if(r.length!=o.length)return!1;if(!r.length)return!0;let l=$l(r,o),a=new Ai(r,l,0).goto(i),h=new Ai(o,l,0).goto(i);for(;;){if(a.to!=h.to||!_r(a.active,h.active)||a.point&&(!h.point||!a.point.eq(h.point)))return!1;if(a.to>s)return!0;a.next(),h.next()}}static spans(e,t,i,s,r=-1){let o=new Ai(e,null,r).goto(t),l=t,a=o.openStart;for(;;){let h=Math.min(o.to,i);if(o.point){let c=o.activeForPoint(o.to),f=o.pointFroml&&(s.span(l,h,o.active,a),a=o.openEnd(h));if(o.to>i)return a+(o.point&&o.to>i?1:0);l=o.to,o.next()}}static of(e,t=!1){let i=new gt;for(let s of e instanceof Fr?[e]:t?Fd(e):e)i.add(s.from,s.to,s.value);return i.finish()}static join(e){if(!e.length)return F.empty;let t=e[e.length-1];for(let i=e.length-2;i>=0;i--)for(let s=e[i];s!=F.empty;s=s.nextLayer)t=new F(s.chunkPos,s.chunk,t,Math.max(s.maxPoint,t.maxPoint));return t}}F.empty=new F([],[],null,-1);function Fd(n){if(n.length>1)for(let e=n[0],t=1;t0)return n.slice().sort(Xr);e=i}return n}F.empty.nextLayer=F.empty;class gt{finishChunk(e){this.chunks.push(new zo(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new gt)).add(e,t,i)}addInner(e,t,i){let s=e-this.lastTo||i.startSide-this.last.endSide;if(s<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return s<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(F.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=F.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}function $l(n,e,t){let i=new Map;for(let r of n)for(let o=0;o=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&s.push(new fc(o,t,i,r));return s.length==1?s[0]:new Hi(s)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let i=this.heap.length>>1;i>=0;i--)er(this.heap,i);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let i=this.heap.length>>1;i>=0;i--)er(this.heap,i);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),er(this.heap,0)}}}function er(n,e){for(let t=n[e];;){let i=(e<<1)+1;if(i>=n.length)break;let s=n[i];if(i+1=0&&(s=n[i+1],i++),t.compare(s)<0)break;n[i]=t,n[e]=s,e=i}}class Ai{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=Hi.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){Tn(this.active,e),Tn(this.activeTo,e),Tn(this.activeRank,e),this.minActive=Ll(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:s,rank:r}=this.cursor;for(;t0;)t++;Cn(this.active,t,i),Cn(this.activeTo,t,s),Cn(this.activeRank,t,r),e&&Cn(e,t,this.cursor.from),this.minActive=Ll(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let s=this.minActive;if(s>-1&&(this.activeTo[s]-this.cursor.from||this.active[s].endSide-this.cursor.startSide)<0){if(this.activeTo[s]>e){this.to=this.activeTo[s],this.endSide=this.active[s].endSide;break}this.removeActive(s),i&&Tn(i,s)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let r=this.cursor.value;if(!r.point)this.addActive(i),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&i[s]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}}function Bl(n,e,t,i,s,r){n.goto(e),t.goto(i);let o=i+s,l=i,a=i-e;for(;;){let h=n.to+a-t.to,c=h||n.endSide-t.endSide,f=c<0?n.to+a:t.to,u=Math.min(f,o);if(n.point||t.point?n.point&&t.point&&(n.point==t.point||n.point.eq(t.point))&&_r(n.activeForPoint(n.to),t.activeForPoint(t.to))||r.comparePoint(l,u,n.point,t.point):u>l&&!_r(n.active,t.active)&&r.compareRange(l,u,n.active,t.active),f>o)break;(h||n.openEnd!=t.openEnd)&&r.boundChange&&r.boundChange(f),l=f,c<=0&&n.next(),c>=0&&t.next()}}function _r(n,e){if(n.length!=e.length)return!1;for(let t=0;t=e;i--)n[i+1]=n[i];n[e]=t}function Ll(n,e){let t=-1,i=1e9;for(let s=0;s=e)return s;if(s==n.length)break;r+=n.charCodeAt(s)==9?t-r%t:1,s=Oe(n,s)}return i===!0?-1:n.length}const Hr="ͼ",Wl=typeof Symbol>"u"?"__"+Hr:Symbol.for(Hr),jr=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),zl=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{};let mi=class{constructor(e,t){this.rules=[];let{finish:i}=t||{};function s(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function r(o,l,a,h){let c=[],f=/^@(\w+)\b/.exec(o[0]),u=f&&f[1]=="keyframes";if(f&&l==null)return a.push(o[0]+";");for(let d in l){let p=l[d];if(/&/.test(d))r(d.split(/,\s*/).map(m=>o.map(g=>m.replace(/&/,g))).reduce((m,g)=>m.concat(g)),p,a);else if(p&&typeof p=="object"){if(!f)throw new RangeError("The value of a property ("+d+") should be a primitive value.");r(s(d),p,c,u)}else p!=null&&c.push(d.replace(/_.*/,"").replace(/[A-Z]/g,m=>"-"+m.toLowerCase())+": "+p+";")}(c.length||u)&&a.push((i&&!f&&!h?o.map(i):o).join(", ")+" {"+c.join(" ")+"}")}for(let o in e)r(s(o),e[o],this.rules)}getRules(){return this.rules.join(` +`){[e,t]=pi(this,e,t);let s="";for(let r=0,o=0;re&&r&&(s+=i),eo&&(s+=l.sliceString(e-o,t-o,i)),o=a+1}return s}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof Ye))return 0;let i=0,[s,r,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==l)return i;let a=this.children[s],h=e.children[r];if(a!=h)return i+a.scanIdentical(h,t);i+=a.length+1}}static from(e,t=e.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new J(d,t)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,l=[],a=0,h=-1,c=[];function f(d){let p;if(d.lines>r&&d instanceof Ye)for(let m of d.children)f(m);else d.lines>o&&(a>o||!a)?(u(),l.push(d)):d instanceof J&&a&&(p=c[c.length-1])instanceof J&&d.lines+p.lines<=32?(a+=d.lines,h+=d.length+1,c[c.length-1]=new J(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>s&&u(),a+=d.lines,h+=d.length+1,c.push(d))}function u(){a!=0&&(l.push(c.length==1?c[0]:Ye.from(c,h)),h=-1,a=c.length=0)}for(let d of e)f(d);return u(),l.length==1?l[0]:new Ye(l,t)}}V.empty=new J([""],0);function Qd(n){let e=-1;for(let t of n)e+=t.length+1;return e}function Zn(n,e,t=0,i=1e9){for(let s=0,r=0,o=!0;r=t&&(a>i&&(l=l.slice(0,i-s)),s0?1:(e instanceof J?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,l=s instanceof J?s.text.length:s.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=` +`,this;e--}else if(s instanceof J){let a=s.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=s.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof J?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class Yh{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new Vi(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:s}=this.cursor.next(e);return this.pos+=(s.length+e)*t,this.value=s.length<=i?s:t<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class Kh{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:s}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(V.prototype[Symbol.iterator]=function(){return this.iter()},Vi.prototype[Symbol.iterator]=Yh.prototype[Symbol.iterator]=Kh.prototype[Symbol.iterator]=function(){return this});class Ad{constructor(e,t,i,s){this.from=e,this.to=t,this.number=i,this.text=s}get length(){return this.to-this.from}}function pi(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function Oe(n,e,t=!0,i=!0){return Cd(n,e,t,i)}function Md(n){return n>=56320&&n<57344}function Rd(n){return n>=55296&&n<56320}function Ce(n,e){let t=n.charCodeAt(e);if(!Rd(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return Md(i)?(t-55296<<10)+(i-56320)+65536:t}function Bo(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function Ke(n){return n<65536?1:2}const $r=/\r\n?|\n/;var ge=function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n}(ge||(ge={}));class st{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return r+(e-s);r+=l}else{if(i!=ge.Simple&&h>=e&&(i==ge.TrackDel&&se||i==ge.TrackBefore&&se))return null;if(h>e||h==e&&t<0&&!l)return e==s||t<0?r:r+a;r+=a}s=h}if(e>s)throw new RangeError(`Position ${e} is out of range for changeset of length ${s}`);return r}touchesRange(e,t=e){for(let i=0,s=0;i=0&&s<=t&&l>=e)return st?"cover":!0;s=l}return!1}toString(){let e="";for(let t=0;t=0?":"+s:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new st(e)}static create(e){return new st(e)}}class ae extends st{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Br(this,(t,i,s,r,o)=>e=e.replace(s,s+(i-t),o),!1),e}mapDesc(e,t=!1){return Lr(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let s=0,r=0;s=0){t[s]=l,t[s+1]=o;let a=s>>1;for(;i.length0&&Tt(i,t,r.text),r.forward(c),l+=c}let h=e[o++];for(;l>1].toJSON()))}return e}static of(e,t,i){let s=[],r=[],o=0,l=null;function a(c=!1){if(!c&&!s.length)return;ou||f<0||u>t)throw new RangeError(`Invalid change range ${f} to ${u} (in doc of length ${t})`);let p=d?typeof d=="string"?V.of(d.split(i||$r)):d:V.empty,m=p.length;if(f==u&&m==0)return;fo&&ye(s,f-o,-1),ye(s,u-f,m),Tt(r,s,p),o=u}}return h(e),a(!l),l}static empty(e){return new ae(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let s=0;sl&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(r.length==1)t.push(r[0],0);else{for(;i.length=0&&t<=0&&t==n[s+1]?n[s]+=e:s>=0&&e==0&&n[s]==0?n[s+1]+=t:i?(n[s]+=e,n[s+1]+=t):n.push(e,t)}function Tt(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];e(s,h,r,c,f),s=h,r=c}}}function Lr(n,e,t,i=!1){let s=[],r=i?[]:null,o=new Hi(n),l=new Hi(e);for(let a=-1;;){if(o.done&&l.len||l.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&l.ins==-1){let h=Math.min(o.len,l.len);ye(s,h,-1),o.forward(h),l.forward(h)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len=0&&a=0){let h=0,c=o.len;for(;c;)if(l.ins==-1){let f=Math.min(c,l.len);h+=f,c-=f,l.forward(f)}else if(l.ins==0&&l.lena||o.ins>=0&&o.len>a)&&(l||i.length>h),r.forward2(a),o.forward(a)}}}}class Hi{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?V.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?V.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class Nt{constructor(e,t,i){this.from=e,this.to=t,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,t=-1){let i,s;return this.empty?i=s=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),s=e.mapPos(this.to,-1)),i==this.from&&s==this.to?this:new Nt(i,s,this.flags)}extend(e,t=e){if(e<=this.anchor&&t>=this.anchor)return b.range(e,t);let i=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return b.range(this.anchor,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return b.range(e.anchor,e.head)}static create(e,t,i){return new Nt(e,t,i)}}class b{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:b.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new b(e.ranges.map(t=>Nt.fromJSON(t)),e.main)}static single(e,t=e){return new b([b.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,s=0;se?8:0)|r)}static normalized(e,t=0){let i=e[t];e.sort((s,r)=>s.from-r.from),t=e.indexOf(i);for(let s=1;sr.head?b.range(a,l):b.range(l,a))}}return new b(e,t)}}function ec(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}let Lo=0;class M{constructor(e,t,i,s,r){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=s,this.id=Lo++,this.default=e([]),this.extensions=typeof r=="function"?r(this):r}get reader(){return this}static define(e={}){return new M(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:Wo),!!e.static,e.enables)}of(e){return new Yn([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Yn(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Yn(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}}function Wo(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}class Yn{constructor(e,t,i,s){this.dependencies=e,this.facet=t,this.type=i,this.value=s,this.id=Lo++}dynamicSlot(e){var t;let i=this.value,s=this.facet.compareInput,r=this.id,o=e[r]>>1,l=this.type==2,a=!1,h=!1,c=[];for(let f of this.dependencies)f=="doc"?a=!0:f=="selection"?h=!0:(((t=e[f.id])!==null&&t!==void 0?t:1)&1)==0&&c.push(e[f.id]);return{create(f){return f.values[o]=i(f),1},update(f,u){if(a&&u.docChanged||h&&(u.docChanged||u.selection)||Wr(f,c)){let d=i(f);if(l?!ql(d,f.values[o],s):!s(d,f.values[o]))return f.values[o]=d,1}return 0},reconfigure:(f,u)=>{let d,p=u.config.address[r];if(p!=null){let m=fs(u,p);if(this.dependencies.every(g=>g instanceof M?u.facet(g)===f.facet(g):g instanceof ue?u.field(g,!1)==f.field(g,!1):!0)||(l?ql(d=i(f),m,s):s(d=i(f),m)))return f.values[o]=m,0}else d=i(f);return f.values[o]=d,1}}}}function ql(n,e,t){if(n.length!=e.length)return!1;for(let i=0;in[a.id]),s=t.map(a=>a.type),r=i.filter(a=>!(a&1)),o=n[e.id]>>1;function l(a){let h=[];for(let c=0;ci===s),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(Tn).find(i=>i.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,s)=>{let r=i.values[t],o=this.updateF(r,s);return this.compareF(r,o)?0:(i.values[t]=o,1)},reconfigure:(i,s)=>{let r=i.facet(Tn),o=s.facet(Tn),l;return(l=r.find(a=>a.field==this))&&l!=o.find(a=>a.field==this)?(i.values[t]=l.create(i),1):s.config.address[this.id]!=null?(i.values[t]=s.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,Tn.of({field:this,create:e})]}get extension(){return this}}const It={lowest:4,low:3,default:2,high:1,highest:0};function Ai(n){return e=>new tc(e,n)}const Et={highest:Ai(It.highest),high:Ai(It.high),default:Ai(It.default),low:Ai(It.low),lowest:Ai(It.lowest)};class tc{constructor(e,t){this.inner=e,this.prec=t}}class Bs{of(e){return new zr(this,e)}reconfigure(e){return Bs.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class zr{constructor(e,t){this.compartment=e,this.inner=t}}class cs{constructor(e,t,i,s,r,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=s,this.staticValues=r,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let s=[],r=Object.create(null),o=new Map;for(let u of Ed(e,t,o))u instanceof ue?s.push(u):(r[u.facet.id]||(r[u.facet.id]=[])).push(u);let l=Object.create(null),a=[],h=[];for(let u of s)l[u.id]=h.length<<1,h.push(d=>u.slot(d));let c=i?.config.facets;for(let u in r){let d=r[u],p=d[0].facet,m=c&&c[u]||[];if(d.every(g=>g.type==0))if(l[p.id]=a.length<<1|1,Wo(m,d))a.push(i.facet(p));else{let g=p.combine(d.map(y=>y.value));a.push(i&&p.compare(g,i.facet(p))?i.facet(p):g)}else{for(let g of d)g.type==0?(l[g.id]=a.length<<1|1,a.push(g.value)):(l[g.id]=h.length<<1,h.push(y=>g.dynamicSlot(y)));l[p.id]=h.length<<1,h.push(g=>Dd(g,p,d))}}let f=h.map(u=>u(l));return new cs(e,o,f,l,a,r)}}function Ed(n,e,t){let i=[[],[],[],[],[]],s=new Map;function r(o,l){let a=s.get(o);if(a!=null){if(a<=l)return;let h=i[a].indexOf(o);h>-1&&i[a].splice(h,1),o instanceof zr&&t.delete(o.compartment)}if(s.set(o,l),Array.isArray(o))for(let h of o)r(h,l);else if(o instanceof zr){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let h=e.get(o.compartment)||o.inner;t.set(o.compartment,h),r(h,l)}else if(o instanceof tc)r(o.inner,o.prec);else if(o instanceof ue)i[l].push(o),o.provides&&r(o.provides,l);else if(o instanceof Yn)i[l].push(o),o.facet.extensions&&r(o.facet.extensions,It.default);else{let h=o.extension;if(!h)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(h,l)}}return r(n,It.default),i.reduce((o,l)=>o.concat(l))}function Ni(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let s=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|s}function fs(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}const ic=M.define(),Ir=M.define({combine:n=>n.some(e=>e),static:!0}),nc=M.define({combine:n=>n.length?n[0]:void 0,static:!0}),sc=M.define(),rc=M.define(),oc=M.define(),lc=M.define({combine:n=>n.length?n[0]:!1});class bt{constructor(e,t){this.type=e,this.value=t}static define(){return new qd}}class qd{of(e){return new bt(this,e)}}class $d{constructor(e){this.map=e}of(e){return new L(this,e)}}class L{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new L(this.type,t)}is(e){return this.type==e}static define(e={}){return new $d(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let s of e){let r=s.map(t);r&&i.push(r)}return i}}L.reconfigure=L.define();L.appendConfig=L.define();class oe{constructor(e,t,i,s,r,o){this.startState=e,this.changes=t,this.selection=i,this.effects=s,this.annotations=r,this.scrollIntoView=o,this._doc=null,this._state=null,i&&ec(i,t.newLength),r.some(l=>l.type==oe.time)||(this.annotations=r.concat(oe.time.of(Date.now())))}static create(e,t,i,s,r,o){return new oe(e,t,i,s,r,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(oe.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}}oe.time=bt.define();oe.userEvent=bt.define();oe.addToHistory=bt.define();oe.remote=bt.define();function Bd(n,e){let t=[];for(let i=0,s=0;;){let r,o;if(i=n[i]))r=n[i++],o=n[i++];else if(s=0;s--){let r=i[s](n);r instanceof oe?n=r:Array.isArray(r)&&r.length==1&&r[0]instanceof oe?n=r[0]:n=hc(e,ai(r),!1)}return n}function Wd(n){let e=n.startState,t=e.facet(oc),i=n;for(let s=t.length-1;s>=0;s--){let r=t[s](n);r&&Object.keys(r).length&&(i=ac(i,Vr(e,r,n.changes.newLength),!0))}return i==n?n:oe.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}const zd=[];function ai(n){return n==null?zd:Array.isArray(n)?n:[n]}var Y=function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n}(Y||(Y={}));const Id=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let Nr;try{Nr=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function Vd(n){if(Nr)return Nr.test(n);for(let e=0;e"€"&&(t.toUpperCase()!=t.toLowerCase()||Id.test(t)))return!0}return!1}function Nd(n){return e=>{if(!/\S/.test(e))return Y.Space;if(Vd(e))return Y.Word;for(let t=0;t-1)return Y.Word;return Y.Other}}class I{constructor(e,t,i,s,r,o){this.config=e,this.doc=t,this.selection=i,this.values=s,this.status=e.statusTemplate.slice(),this.computeSlot=r,o&&(o._state=this);for(let l=0;ls.set(h,a)),t=null),s.set(l.value.compartment,l.value.extension)):l.is(L.reconfigure)?(t=null,i=l.value):l.is(L.appendConfig)&&(t=null,i=ai(i).concat(l.value));let r;t?r=e.startState.values.slice():(t=cs.resolve(i,s,this),r=new I(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(a,h)=>h.reconfigure(a,this),null).values);let o=e.startState.facet(Ir)?e.newSelection:e.newSelection.asSingle();new I(t,e.newDoc,o,r,(l,a)=>a.update(l,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:b.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),s=this.changes(i.changes),r=[i.range],o=ai(i.effects);for(let l=1;lo.spec.fromJSON(l,a)))}}return I.create({doc:e.doc,selection:b.fromJSON(e.selection),extensions:t.extensions?s.concat([t.extensions]):s})}static create(e={}){let t=cs.resolve(e.extensions||[],new Map),i=e.doc instanceof V?e.doc:V.of((e.doc||"").split(t.staticFacet(I.lineSeparator)||$r)),s=e.selection?e.selection instanceof b?e.selection:b.single(e.selection.anchor,e.selection.head):b.single(0);return ec(s,i.length),t.staticFacet(Ir)||(s=s.asSingle()),new I(t,i,s,t.dynamicSlots.map(()=>null),(r,o)=>o.create(r),null)}get tabSize(){return this.facet(I.tabSize)}get lineBreak(){return this.facet(I.lineSeparator)||` +`}get readOnly(){return this.facet(lc)}phrase(e,...t){for(let i of this.facet(I.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(i,s)=>{if(s=="$")return"$";let r=+(s||1);return!r||r>t.length?i:t[r-1]})),e}languageDataAt(e,t,i=-1){let s=[];for(let r of this.facet(ic))for(let o of r(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&s.push(o[e]);return s}charCategorizer(e){return Nd(this.languageDataAt("wordChars",e).join(""))}wordAt(e){let{text:t,from:i,length:s}=this.doc.lineAt(e),r=this.charCategorizer(e),o=e-i,l=e-i;for(;o>0;){let a=Oe(t,o,!1);if(r(t.slice(a,o))!=Y.Word)break;o=a}for(;ln.length?n[0]:4});I.lineSeparator=nc;I.readOnly=lc;I.phrases=M.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(s=>n[s]==e[s])}});I.languageData=ic;I.changeFilter=sc;I.transactionFilter=rc;I.transactionExtender=oc;Bs.reconfigure=L.define();function ot(n,e,t={}){let i={};for(let s of n)for(let r of Object.keys(s)){let o=s[r],l=i[r];if(l===void 0)i[r]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(t,r))i[r]=t[r](l,o);else throw new Error("Config merge conflict for field "+r)}for(let s in e)i[s]===void 0&&(i[s]=e[s]);return i}class Ht{eq(e){return this==e}range(e,t=e){return Fr.create(e,t,this)}}Ht.prototype.startSide=Ht.prototype.endSide=0;Ht.prototype.point=!1;Ht.prototype.mapMode=ge.TrackDel;let Fr=class cc{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new cc(e,t,i)}};function Xr(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}class zo{constructor(e,t,i,s){this.from=e,this.to=t,this.value=i,this.maxPoint=s}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,s=0){let r=i?this.to:this.from;for(let o=s,l=r.length;;){if(o==l)return o;let a=o+l>>1,h=r[a]-e||(i?this.value[a].endSide:this.value[a].startSide)-t;if(a==o)return h>=0?o:l;h>=0?l=a:o=a+1}}between(e,t,i,s){for(let r=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,r);rd||u==d&&h.startSide>0&&h.endSide<=0)continue;(d-u||h.endSide-h.startSide)<0||(o<0&&(o=u),h.point&&(l=Math.max(l,d-u)),i.push(h),s.push(u-o),r.push(d-o))}return{mapped:i.length?new zo(s,r,i,l):null,pos:o}}}class F{constructor(e,t,i,s){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=s}static create(e,t,i,s){return new F(e,t,i,s)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:s=0,filterTo:r=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(Xr)),this.isEmpty)return t.length?F.of(t):this;let l=new fc(this,null,-1).goto(0),a=0,h=[],c=new gt;for(;l.value||a=0){let f=t[a++];c.addInner(f.from,f.to,f.value)||h.push(f)}else l.rangeIndex==1&&l.chunkIndexthis.chunkEnd(l.chunkIndex)||rl.to||r=r&&e<=r+o.length&&o.between(r,e-r,t-r,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return ji.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return ji.from(e).goto(t)}static compare(e,t,i,s,r=-1){let o=e.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=r),l=t.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=r),a=$l(o,l,i),h=new Mi(o,a,r),c=new Mi(l,a,r);i.iterGaps((f,u,d)=>Bl(h,f,c,u,d,s)),i.empty&&i.length==0&&Bl(h,0,c,0,0,s)}static eq(e,t,i=0,s){s==null&&(s=999999999);let r=e.filter(c=>!c.isEmpty&&t.indexOf(c)<0),o=t.filter(c=>!c.isEmpty&&e.indexOf(c)<0);if(r.length!=o.length)return!1;if(!r.length)return!0;let l=$l(r,o),a=new Mi(r,l,0).goto(i),h=new Mi(o,l,0).goto(i);for(;;){if(a.to!=h.to||!_r(a.active,h.active)||a.point&&(!h.point||!a.point.eq(h.point)))return!1;if(a.to>s)return!0;a.next(),h.next()}}static spans(e,t,i,s,r=-1){let o=new Mi(e,null,r).goto(t),l=t,a=o.openStart;for(;;){let h=Math.min(o.to,i);if(o.point){let c=o.activeForPoint(o.to),f=o.pointFroml&&(s.span(l,h,o.active,a),a=o.openEnd(h));if(o.to>i)return a+(o.point&&o.to>i?1:0);l=o.to,o.next()}}static of(e,t=!1){let i=new gt;for(let s of e instanceof Fr?[e]:t?Fd(e):e)i.add(s.from,s.to,s.value);return i.finish()}static join(e){if(!e.length)return F.empty;let t=e[e.length-1];for(let i=e.length-2;i>=0;i--)for(let s=e[i];s!=F.empty;s=s.nextLayer)t=new F(s.chunkPos,s.chunk,t,Math.max(s.maxPoint,t.maxPoint));return t}}F.empty=new F([],[],null,-1);function Fd(n){if(n.length>1)for(let e=n[0],t=1;t0)return n.slice().sort(Xr);e=i}return n}F.empty.nextLayer=F.empty;class gt{finishChunk(e){this.chunks.push(new zo(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new gt)).add(e,t,i)}addInner(e,t,i){let s=e-this.lastTo||i.startSide-this.last.endSide;if(s<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return s<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(F.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=F.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}function $l(n,e,t){let i=new Map;for(let r of n)for(let o=0;o=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&s.push(new fc(o,t,i,r));return s.length==1?s[0]:new ji(s)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let i=this.heap.length>>1;i>=0;i--)er(this.heap,i);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let i=this.heap.length>>1;i>=0;i--)er(this.heap,i);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),er(this.heap,0)}}}function er(n,e){for(let t=n[e];;){let i=(e<<1)+1;if(i>=n.length)break;let s=n[i];if(i+1=0&&(s=n[i+1],i++),t.compare(s)<0)break;n[i]=t,n[e]=s,e=i}}class Mi{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=ji.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){Cn(this.active,e),Cn(this.activeTo,e),Cn(this.activeRank,e),this.minActive=Ll(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:s,rank:r}=this.cursor;for(;t0;)t++;Pn(this.active,t,i),Pn(this.activeTo,t,s),Pn(this.activeRank,t,r),e&&Pn(e,t,this.cursor.from),this.minActive=Ll(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let s=this.minActive;if(s>-1&&(this.activeTo[s]-this.cursor.from||this.active[s].endSide-this.cursor.startSide)<0){if(this.activeTo[s]>e){this.to=this.activeTo[s],this.endSide=this.active[s].endSide;break}this.removeActive(s),i&&Cn(i,s)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let r=this.cursor.value;if(!r.point)this.addActive(i),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&i[s]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}}function Bl(n,e,t,i,s,r){n.goto(e),t.goto(i);let o=i+s,l=i,a=i-e;for(;;){let h=n.to+a-t.to,c=h||n.endSide-t.endSide,f=c<0?n.to+a:t.to,u=Math.min(f,o);if(n.point||t.point?n.point&&t.point&&(n.point==t.point||n.point.eq(t.point))&&_r(n.activeForPoint(n.to),t.activeForPoint(t.to))||r.comparePoint(l,u,n.point,t.point):u>l&&!_r(n.active,t.active)&&r.compareRange(l,u,n.active,t.active),f>o)break;(h||n.openEnd!=t.openEnd)&&r.boundChange&&r.boundChange(f),l=f,c<=0&&n.next(),c>=0&&t.next()}}function _r(n,e){if(n.length!=e.length)return!1;for(let t=0;t=e;i--)n[i+1]=n[i];n[e]=t}function Ll(n,e){let t=-1,i=1e9;for(let s=0;s=e)return s;if(s==n.length)break;r+=n.charCodeAt(s)==9?t-r%t:1,s=Oe(n,s)}return i===!0?-1:n.length}const Hr="ͼ",Wl=typeof Symbol>"u"?"__"+Hr:Symbol.for(Hr),jr=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),zl=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{};let mi=class{constructor(e,t){this.rules=[];let{finish:i}=t||{};function s(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function r(o,l,a,h){let c=[],f=/^@(\w+)\b/.exec(o[0]),u=f&&f[1]=="keyframes";if(f&&l==null)return a.push(o[0]+";");for(let d in l){let p=l[d];if(/&/.test(d))r(d.split(/,\s*/).map(m=>o.map(g=>m.replace(/&/,g))).reduce((m,g)=>m.concat(g)),p,a);else if(p&&typeof p=="object"){if(!f)throw new RangeError("The value of a property ("+d+") should be a primitive value.");r(s(d),p,c,u)}else p!=null&&c.push(d.replace(/_.*/,"").replace(/[A-Z]/g,m=>"-"+m.toLowerCase())+": "+p+";")}(c.length||u)&&a.push((i&&!f&&!h?o.map(i):o).join(", ")+" {"+c.join(" ")+"}")}for(let o in e)r(s(o),e[o],this.rules)}getRules(){return this.rules.join(` `)}static newName(){let e=zl[Wl]||1;return zl[Wl]=e+1,Hr+e.toString(36)}static mount(e,t,i){let s=e[jr],r=i&&i.nonce;s?r&&s.setNonce(r):s=new Xd(e,r),s.mount(Array.isArray(t)?t:[t],e)}},Il=new Map,Xd=class{constructor(e,t){let i=e.ownerDocument||e,s=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&s.CSSStyleSheet){let r=Il.get(i);if(r)return e[jr]=r;this.sheet=new s.CSSStyleSheet,Il.set(i,this)}else this.styleTag=i.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[jr]=this}mount(e,t){let i=this.sheet,s=0,r=0;for(let o=0;o-1&&(this.modules.splice(a,1),r--,a=-1),a==-1){if(this.modules.splice(r++,0,l),i)for(let h=0;h",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},_d=typeof navigator<"u"&&/Mac/.test(navigator.platform),Ud=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(var me=0;me<10;me++)At[48+me]=At[96+me]=String(me);for(var me=1;me<=24;me++)At[me+111]="F"+me;for(var me=65;me<=90;me++)At[me]=String.fromCharCode(me+32),ji[me]=String.fromCharCode(me);for(var tr in At)ji.hasOwnProperty(tr)||(ji[tr]=At[tr]);function Hd(n){var e=_d&&n.metaKey&&n.shiftKey&&!n.ctrlKey&&!n.altKey||Ud&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",t=!e&&n.key||(n.shiftKey?ji:At)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}function Gi(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function Gr(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function Yn(n,e){if(!e.anchorNode)return!1;try{return Gr(n,e.anchorNode)}catch{return!1}}function Zi(n){return n.nodeType==3?Gt(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function Ni(n,e,t,i){return t?Vl(n,e,t,i,-1)||Vl(n,e,t,i,1):!1}function jt(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function fs(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}function Vl(n,e,t,i,s){for(;;){if(n==t&&e==i)return!0;if(e==(s<0?0:rt(n))){if(n.nodeName=="DIV")return!1;let r=n.parentNode;if(!r||r.nodeType!=1)return!1;e=jt(n)+(s<0?0:1),n=r}else if(n.nodeType==1){if(n=n.childNodes[e+(s<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=s<0?rt(n):0}else return!1}}function rt(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function Bs(n,e){let t=e?n.left:n.right;return{left:t,right:t,top:n.top,bottom:n.bottom}}function jd(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function uc(n,e){let t=e.width/n.offsetWidth,i=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-n.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function Gd(n,e,t,i,s,r,o,l){let a=n.ownerDocument,h=a.defaultView||window;for(let c=n,f=!1;c&&!f;)if(c.nodeType==1){let u,d=c==a.body,p=1,m=1;if(d)u=jd(h);else{if(/^(fixed|sticky)$/.test(getComputedStyle(c).position)&&(f=!0),c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.assignedSlot||c.parentNode;continue}let S=c.getBoundingClientRect();({scaleX:p,scaleY:m}=uc(c,S)),u={left:S.left,right:S.left+c.clientWidth*p,top:S.top,bottom:S.top+c.clientHeight*m}}let g=0,y=0;if(s=="nearest")e.top0&&e.bottom>u.bottom+y&&(y=e.bottom-u.bottom+o)):e.bottom>u.bottom&&(y=e.bottom-u.bottom+o,t<0&&e.top-y0&&e.right>u.right+g&&(g=e.right-u.right+r)):e.right>u.right&&(g=e.right-u.right+r,t<0&&e.leftu.bottom||e.leftu.right)&&(e={left:Math.max(e.left,u.left),right:Math.min(e.right,u.right),top:Math.max(e.top,u.top),bottom:Math.min(e.bottom,u.bottom)}),c=c.assignedSlot||c.parentNode}else if(c.nodeType==11)c=c.host;else break}function Zd(n){let e=n.ownerDocument,t,i;for(let s=n.parentNode;s&&!(s==e.body||t&&i);)if(s.nodeType==1)!i&&s.scrollHeight>s.clientHeight&&(i=s),!t&&s.scrollWidth>s.clientWidth&&(t=s),s=s.assignedSlot||s.parentNode;else if(s.nodeType==11)s=s.host;else break;return{x:t,y:i}}class Yd{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?rt(t):0),i,Math.min(e.focusOffset,i?rt(i):0))}set(e,t,i,s){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=s}}let ii=null;function dc(n){if(n.setActive)return n.setActive();if(ii)return n.focus(ii);let e=[];for(let t=n;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(n.focus(ii==null?{get preventScroll(){return ii={preventScroll:!0},!0}}:void 0),!ii){ii=!1;for(let t=0;tMath.max(1,n.scrollHeight-n.clientHeight-4)}function gc(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable=="false")return null;t=t.childNodes[i-1],i=rt(t)}else if(t.parentNode&&!fs(t))i=jt(t),t=t.parentNode;else return null}}function Oc(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&it)return f.domBoundsAround(e,t,h);if(u>=e&&s==-1&&(s=a,r=h),h>t&&f.dom.parentNode==this.dom){o=a,l=c;break}c=u,h=u+f.breakAfter}return{from:r,to:l<0?i+this.length:l,startDOM:(s?this.children[s-1].dom.nextSibling:null)||this.dom.firstChild,endDOM:o=0?this.children[o].dom:null}}markDirty(e=!1){this.flags|=2,this.markParentsDirty(e)}markParentsDirty(e){for(let t=this.parent;t;t=t.parent){if(e&&(t.flags|=2),t.flags&1)return;t.flags|=1,e=!1}}setParent(e){this.parent!=e&&(this.parent=e,this.flags&7&&this.markParentsDirty(!0))}setDOM(e){this.dom!=e&&(this.dom&&(this.dom.cmView=null),this.dom=e,e.cmView=this)}get rootView(){for(let e=this;;){let t=e.parent;if(!t)return e;e=t}}replaceChildren(e,t,i=Io){this.markDirty();for(let s=e;sthis.pos||e==this.pos&&(t>0||this.i==0||this.children[this.i-1].breakAfter))return this.off=e-this.pos,this;let i=this.children[--this.i];this.pos-=i.length+i.breakAfter}}}function bc(n,e,t,i,s,r,o,l,a){let{children:h}=n,c=h.length?h[e]:null,f=r.length?r[r.length-1]:null,u=f?f.breakAfter:o;if(!(e==i&&c&&!o&&!u&&r.length<2&&c.merge(t,s,r.length?f:null,t==0,l,a))){if(i0&&(!o&&r.length&&c.merge(t,c.length,r[0],!1,l,0)?c.breakAfter=r.shift().breakAfter:(t2);var A={mac:_l||/Mac/.test(Pe.platform),windows:/Win/.test(Pe.platform),linux:/Linux|X11/.test(Pe.platform),ie:Ls,ie_version:Sc?Zr.documentMode||6:Kr?+Kr[1]:Yr?+Yr[1]:0,gecko:Xl,gecko_version:Xl?+(/Firefox\/(\d+)/.exec(Pe.userAgent)||[0,0])[1]:0,chrome:!!ir,chrome_version:ir?+ir[1]:0,ios:_l,android:/Android\b/.test(Pe.userAgent),safari:kc,webkit_version:ep?+(/\bAppleWebKit\/(\d+)/.exec(Pe.userAgent)||[0,0])[1]:0,tabSize:Zr.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};const tp=256;class Xe extends _{constructor(e){super(),this.text=e}get length(){return this.text.length}createDOM(e){this.setDOM(e||document.createTextNode(this.text))}sync(e,t){this.dom||this.createDOM(),this.dom.nodeValue!=this.text&&(t&&t.node==this.dom&&(t.written=!0),this.dom.nodeValue=this.text)}reuseDOM(e){e.nodeType==3&&this.createDOM(e)}merge(e,t,i){return this.flags&8||i&&(!(i instanceof Xe)||this.length-(t-e)+i.length>tp||i.flags&8)?!1:(this.text=this.text.slice(0,e)+(i?i.text:"")+this.text.slice(t),this.markDirty(),!0)}split(e){let t=new Xe(this.text.slice(e));return this.text=this.text.slice(0,e),this.markDirty(),t.flags|=this.flags&8,t}localPosFromDOM(e,t){return e==this.dom?t:t?this.text.length:0}domAtPos(e){return new be(this.dom,e)}domBoundsAround(e,t,i){return{from:i,to:i+this.length,startDOM:this.dom,endDOM:this.dom.nextSibling}}coordsAt(e,t){return ip(this.dom,e,t)}}class Ot extends _{constructor(e,t=[],i=0){super(),this.mark=e,this.children=t,this.length=i;for(let s of t)s.setParent(this)}setAttrs(e){if(pc(e),this.mark.class&&(e.className=this.mark.class),this.mark.attrs)for(let t in this.mark.attrs)e.setAttribute(t,this.mark.attrs[t]);return e}canReuseDOM(e){return super.canReuseDOM(e)&&!((this.flags|e.flags)&8)}reuseDOM(e){e.nodeName==this.mark.tagName.toUpperCase()&&(this.setDOM(e),this.flags|=6)}sync(e,t){this.dom?this.flags&4&&this.setAttrs(this.dom):this.setDOM(this.setAttrs(document.createElement(this.mark.tagName))),super.sync(e,t)}merge(e,t,i,s,r,o){return i&&(!(i instanceof Ot&&i.mark.eq(this.mark))||e&&r<=0||te&&t.push(i=e&&(s=r),i=a,r++}let o=this.length-e;return this.length=e,s>-1&&(this.children.length=s,this.markDirty()),new Ot(this.mark,t,o)}domAtPos(e){return wc(this,e)}coordsAt(e,t){return Tc(this,e,t)}}function ip(n,e,t){let i=n.nodeValue.length;e>i&&(e=i);let s=e,r=e,o=0;e==0&&t<0||e==i&&t>=0?A.chrome||A.gecko||(e?(s--,o=1):r=0)?0:l.length-1];return A.safari&&!o&&a.width==0&&(a=Array.prototype.find.call(l,h=>h.width)||a),o?Bs(a,o<0):a||null}class Ct extends _{static create(e,t,i){return new Ct(e,t,i)}constructor(e,t,i){super(),this.widget=e,this.length=t,this.side=i,this.prevWidget=null}split(e){let t=Ct.create(this.widget,this.length-e,this.side);return this.length-=e,t}sync(e){(!this.dom||!this.widget.updateDOM(this.dom,e))&&(this.dom&&this.prevWidget&&this.prevWidget.destroy(this.dom),this.prevWidget=null,this.setDOM(this.widget.toDOM(e)),this.widget.editable||(this.dom.contentEditable="false"))}getSide(){return this.side}merge(e,t,i,s,r,o){return i&&(!(i instanceof Ct)||!this.widget.compare(i.widget)||e>0&&r<=0||t0)?be.before(this.dom):be.after(this.dom,e==this.length)}domBoundsAround(){return null}coordsAt(e,t){let i=this.widget.coordsAt(this.dom,e,t);if(i)return i;let s=this.dom.getClientRects(),r=null;if(!s.length)return null;let o=this.side?this.side<0:e>0;for(let l=o?s.length-1:0;r=s[l],!(e>0?l==0:l==s.length-1||r.top0?be.before(this.dom):be.after(this.dom)}localPosFromDOM(){return 0}domBoundsAround(){return null}coordsAt(e){return this.dom.getBoundingClientRect()}get overrideDOMText(){return V.empty}get isHidden(){return!0}}Xe.prototype.children=Ct.prototype.children=gi.prototype.children=Io;function wc(n,e){let t=n.dom,{children:i}=n,s=0;for(let r=0;sr&&e0;r--){let o=i[r-1];if(o.dom.parentNode==t)return o.domAtPos(o.length)}for(let r=s;r0&&e instanceof Ot&&s.length&&(i=s[s.length-1])instanceof Ot&&i.mark.eq(e.mark)?vc(i,e.children[0],t-1):(s.push(e),e.setParent(n)),n.length+=e.length}function Tc(n,e,t){let i=null,s=-1,r=null,o=-1;function l(h,c){for(let f=0,u=0;f=c&&(d.children.length?l(d,c-u):(!r||r.isHidden&&(t>0||sp(r,d)))&&(p>c||u==p&&d.getSide()>0)?(r=d,o=c-u):(u-1?1:0)!=s.length-(t&&s.indexOf(t)>-1?1:0))return!1;for(let r of i)if(r!=t&&(s.indexOf(r)==-1||n[r]!==e[r]))return!1;return!0}function eo(n,e,t){let i=!1;if(e)for(let s in e)t&&s in t||(i=!0,s=="style"?n.style.cssText="":n.removeAttribute(s));if(t)for(let s in t)e&&e[s]==t[s]||(i=!0,s=="style"?n.style.cssText=t[s]:n.setAttribute(s,t[s]));return i}function rp(n){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new Mt(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,s;if(e.isBlockGap)i=-5e8,s=4e8;else{let{start:r,end:o}=Cc(e,t);i=(r?t?-3e8:-1:5e8)-1,s=(o?t?2e8:1:-6e8)+1}return new Mt(e,i,s,t,e.widget||null,!0)}static line(e){return new dn(e)}static set(e,t=!1){return F.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}}D.none=F.empty;class un extends D{constructor(e){let{start:t,end:i}=Cc(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.class=e.class||"",this.attrs=e.attributes||null}eq(e){var t,i;return this==e||e instanceof un&&this.tagName==e.tagName&&(this.class||((t=this.attrs)===null||t===void 0?void 0:t.class))==(e.class||((i=e.attrs)===null||i===void 0?void 0:i.class))&&us(this.attrs,e.attrs,"class")}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}}un.prototype.point=!1;class dn extends D{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof dn&&this.spec.class==e.spec.class&&us(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}}dn.prototype.mapMode=ge.TrackBefore;dn.prototype.point=!0;class Mt extends D{constructor(e,t,i,s,r,o){super(t,i,r,e),this.block=s,this.isReplace=o,this.mapMode=s?t<=0?ge.TrackBefore:ge.TrackAfter:ge.TrackDel}get type(){return this.startSide!=this.endSide?we.WidgetRange:this.startSide<=0?we.WidgetBefore:we.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof Mt&&op(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}}Mt.prototype.point=!0;function Cc(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t??e,end:i??e}}function op(n,e){return n==e||!!(n&&e&&n.compare(e))}function Kn(n,e,t,i=0){let s=t.length-1;s>=0&&t[s]+i>=n?t[s]=Math.max(t[s],e):t.push(n,e)}class re extends _{constructor(){super(...arguments),this.children=[],this.length=0,this.prevAttrs=void 0,this.attrs=null,this.breakAfter=0}merge(e,t,i,s,r,o){if(i){if(!(i instanceof re))return!1;this.dom||i.transferDOM(this)}return s&&this.setDeco(i?i.attrs:null),xc(this,e,t,i?i.children.slice():[],r,o),!0}split(e){let t=new re;if(t.breakAfter=this.breakAfter,this.length==0)return t;let{i,off:s}=this.childPos(e);s&&(t.append(this.children[i].split(s),0),this.children[i].merge(s,this.children[i].length,null,!1,0,0),i++);for(let r=i;r0&&this.children[i-1].length==0;)this.children[--i].destroy();return this.children.length=i,this.markDirty(),this.length=e,t}transferDOM(e){this.dom&&(this.markDirty(),e.setDOM(this.dom),e.prevAttrs=this.prevAttrs===void 0?this.attrs:this.prevAttrs,this.prevAttrs=void 0,this.dom=null)}setDeco(e){us(this.attrs,e)||(this.dom&&(this.prevAttrs=this.attrs,this.markDirty()),this.attrs=e)}append(e,t){vc(this,e,t)}addLineDeco(e){let t=e.spec.attributes,i=e.spec.class;t&&(this.attrs=Jr(t,this.attrs||{})),i&&(this.attrs=Jr({class:i},this.attrs||{}))}domAtPos(e){return wc(this,e)}reuseDOM(e){e.nodeName=="DIV"&&(this.setDOM(e),this.flags|=6)}sync(e,t){var i;this.dom?this.flags&4&&(pc(this.dom),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0):(this.setDOM(document.createElement("div")),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0),this.prevAttrs!==void 0&&(eo(this.dom,this.prevAttrs,this.attrs),this.dom.classList.add("cm-line"),this.prevAttrs=void 0),super.sync(e,t);let s=this.dom.lastChild;for(;s&&_.get(s)instanceof Ot;)s=s.lastChild;if(!s||!this.length||s.nodeName!="BR"&&((i=_.get(s))===null||i===void 0?void 0:i.isEditable)==!1&&(!A.ios||!this.children.some(r=>r instanceof Xe))){let r=document.createElement("BR");r.cmIgnore=!0,this.dom.appendChild(r)}}measureTextSize(){if(this.children.length==0||this.length>20)return null;let e=0,t;for(let i of this.children){if(!(i instanceof Xe)||/[^ -~]/.test(i.text))return null;let s=Zi(i.dom);if(s.length!=1)return null;e+=s[0].width,t=s[0].height}return e?{lineHeight:this.dom.getBoundingClientRect().height,charWidth:e/this.length,textHeight:t}:null}coordsAt(e,t){let i=Tc(this,e,t);if(!this.children.length&&i&&this.parent){let{heightOracle:s}=this.parent.view.viewState,r=i.bottom-i.top;if(Math.abs(r-s.lineHeight)<2&&s.textHeight=t){if(r instanceof re)return r;if(o>t)break}s=o+r.breakAfter}return null}}class mt extends _{constructor(e,t,i){super(),this.widget=e,this.length=t,this.deco=i,this.breakAfter=0,this.prevWidget=null}merge(e,t,i,s,r,o){return i&&(!(i instanceof mt)||!this.widget.compare(i.widget)||e>0&&r<=0||t0}}class to extends xt{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}class Fi{constructor(e,t,i,s){this.doc=e,this.pos=t,this.end=i,this.disallowBlockEffectsFor=s,this.content=[],this.curLine=null,this.breakAtStart=0,this.pendingBuffer=0,this.bufferMarks=[],this.atCursorPos=!0,this.openStart=-1,this.openEnd=-1,this.text="",this.textOff=0,this.cursor=e.iter(),this.skip=t}posCovered(){if(this.content.length==0)return!this.breakAtStart&&this.doc.lineAt(this.pos).from!=this.pos;let e=this.content[this.content.length-1];return!(e.breakAfter||e instanceof mt&&e.deco.endSide<0)}getLine(){return this.curLine||(this.content.push(this.curLine=new re),this.atCursorPos=!0),this.curLine}flushBuffer(e=this.bufferMarks){this.pendingBuffer&&(this.curLine.append(Pn(new gi(-1),e),e.length),this.pendingBuffer=0)}addBlockWidget(e){this.flushBuffer(),this.curLine=null,this.content.push(e)}finish(e){this.pendingBuffer&&e<=this.bufferMarks.length?this.flushBuffer():this.pendingBuffer=0,!this.posCovered()&&!(e&&this.content.length&&this.content[this.content.length-1]instanceof mt)&&this.getLine()}buildText(e,t,i){for(;e>0;){if(this.textOff==this.text.length){let{value:r,lineBreak:o,done:l}=this.cursor.next(this.skip);if(this.skip=0,l)throw new Error("Ran out of text content when drawing inline views");if(o){this.posCovered()||this.getLine(),this.content.length?this.content[this.content.length-1].breakAfter=1:this.breakAtStart=1,this.flushBuffer(),this.curLine=null,this.atCursorPos=!0,e--;continue}else this.text=r,this.textOff=0}let s=Math.min(this.text.length-this.textOff,e,512);this.flushBuffer(t.slice(t.length-i)),this.getLine().append(Pn(new Xe(this.text.slice(this.textOff,this.textOff+s)),t),i),this.atCursorPos=!0,this.textOff+=s,e-=s,i=0}}span(e,t,i,s){this.buildText(t-e,i,s),this.pos=t,this.openStart<0&&(this.openStart=s)}point(e,t,i,s,r,o){if(this.disallowBlockEffectsFor[o]&&i instanceof Mt){if(i.block)throw new RangeError("Block decorations may not be specified via plugins");if(t>this.doc.lineAt(this.pos).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}let l=t-e;if(i instanceof Mt)if(i.block)i.startSide>0&&!this.posCovered()&&this.getLine(),this.addBlockWidget(new mt(i.widget||Oi.block,l,i));else{let a=Ct.create(i.widget||Oi.inline,l,l?0:i.startSide),h=this.atCursorPos&&!a.isEditable&&r<=s.length&&(e0),c=!a.isEditable&&(es.length||i.startSide<=0),f=this.getLine();this.pendingBuffer==2&&!h&&!a.isEditable&&(this.pendingBuffer=0),this.flushBuffer(s),h&&(f.append(Pn(new gi(1),s),r),r=s.length+Math.max(0,r-s.length)),f.append(Pn(a,s),r),this.atCursorPos=c,this.pendingBuffer=c?es.length?1:2:0,this.pendingBuffer&&(this.bufferMarks=s.slice())}else this.doc.lineAt(this.pos).from==this.pos&&this.getLine().addLineDeco(i);l&&(this.textOff+l<=this.text.length?this.textOff+=l:(this.skip+=l-(this.text.length-this.textOff),this.text="",this.textOff=0),this.pos=t),this.openStart<0&&(this.openStart=r)}static build(e,t,i,s,r){let o=new Fi(e,t,i,r);return o.openEnd=F.spans(s,t,i,o),o.openStart<0&&(o.openStart=o.openEnd),o.finish(o.openEnd),o}}function Pn(n,e){for(let t of e)n=new Ot(t,[n],n.length);return n}class Oi extends xt{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}Oi.inline=new Oi("span");Oi.block=new Oi("div");var Z=function(n){return n[n.LTR=0]="LTR",n[n.RTL=1]="RTL",n}(Z||(Z={}));const Zt=Z.LTR,Vo=Z.RTL;function Pc(n){let e=[];for(let t=0;t=t){if(l.level==i)return o;(r<0||(s!=0?s<0?l.fromt:e[r].level>l.level))&&(r=o)}}if(r<0)throw new RangeError("Index out of range");return r}}function Ac(n,e){if(n.length!=e.length)return!1;for(let t=0;t=0;m-=3)if(He[m+1]==-d){let g=He[m+2],y=g&2?s:g&4?g&1?r:s:0;y&&(X[f]=X[He[m]]=y),l=m;break}}else{if(He.length==189)break;He[l++]=f,He[l++]=u,He[l++]=a}else if((p=X[f])==2||p==1){let m=p==s;a=m?0:1;for(let g=l-3;g>=0;g-=3){let y=He[g+2];if(y&2)break;if(m)He[g+2]|=2;else{if(y&4)break;He[g+2]|=4}}}}}function up(n,e,t,i){for(let s=0,r=i;s<=t.length;s++){let o=s?t[s-1].to:n,l=sa;)p==g&&(p=t[--m].from,g=m?t[m-1].to:n),X[--p]=d;a=c}else r=h,a++}}}function no(n,e,t,i,s,r,o){let l=i%2?2:1;if(i%2==s%2)for(let a=e,h=0;aa&&o.push(new Pt(a,m.from,d));let g=m.direction==Zt!=!(d%2);so(n,g?i+1:i,s,m.inner,m.from,m.to,o),a=m.to}p=m.to}else{if(p==t||(c?X[p]!=l:X[p]==l))break;p++}u?no(n,a,p,i+1,s,u,o):ae;){let c=!0,f=!1;if(!h||a>r[h-1].to){let m=X[a-1];m!=l&&(c=!1,f=m==16)}let u=!c&&l==1?[]:null,d=c?i:i+1,p=a;e:for(;;)if(h&&p==r[h-1].to){if(f)break e;let m=r[--h];if(!c)for(let g=m.from,y=h;;){if(g==e)break e;if(y&&r[y-1].to==g)g=r[--y].from;else{if(X[g-1]==l)break e;break}}if(u)u.push(m);else{m.toX.length;)X[X.length]=256;let i=[],s=e==Zt?0:1;return so(n,s,s,t,0,n.length,i),i}function Mc(n){return[new Pt(0,n,0)]}let Rc="";function pp(n,e,t,i,s){var r;let o=i.head-n.from,l=Pt.find(e,o,(r=i.bidiLevel)!==null&&r!==void 0?r:-1,i.assoc),a=e[l],h=a.side(s,t);if(o==h){let u=l+=s?1:-1;if(u<0||u>=e.length)return null;a=e[l=u],o=a.side(!s,t),h=a.side(s,t)}let c=Oe(n.text,o,a.forward(s,t));(ca.to)&&(c=h),Rc=n.text.slice(Math.min(o,c),Math.max(o,c));let f=l==(s?e.length-1:0)?null:e[l+(s?1:-1)];return f&&c==h&&f.level+(s?0:1)n.some(e=>e)}),zc=M.define({combine:n=>n.some(e=>e)}),Ic=M.define();class ci{constructor(e,t="nearest",i="nearest",s=5,r=5,o=!1){this.range=e,this.y=t,this.x=i,this.yMargin=s,this.xMargin=r,this.isSnapshot=o}map(e){return e.empty?this:new ci(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new ci(b.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}}const Qn=B.define({map:(n,e)=>n.map(e)}),Vc=B.define();function Ae(n,e,t){let i=n.facet($c);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}const pt=M.define({combine:n=>n.length?n[0]:!0});let gp=0;const ri=M.define({combine(n){return n.filter((e,t)=>{for(let i=0;i{let a=[];return o&&a.push(Yi.of(h=>{let c=h.plugin(l);return c?o(c):D.none})),r&&a.push(r(l)),a})}static fromClass(e,t){return le.define((i,s)=>new e(i,s),t)}}class nr{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(Ae(t.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){Ae(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){Ae(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const Nc=M.define(),Xo=M.define(),Yi=M.define(),Fc=M.define(),_o=M.define(),Xc=M.define();function Hl(n,e){let t=n.state.facet(Xc);if(!t.length)return t;let i=t.map(r=>r instanceof Function?r(n):r),s=[];return F.spans(i,e.from,e.to,{point(){},span(r,o,l,a){let h=r-e.from,c=o-e.from,f=s;for(let u=l.length-1;u>=0;u--,a--){let d=l[u].spec.bidiIsolate,p;if(d==null&&(d=mp(e.text,h,c)),a>0&&f.length&&(p=f[f.length-1]).to==h&&p.direction==d)p.to=c,f=p.inner;else{let m={from:h,to:c,direction:d,inner:[]};f.push(m),f=m.inner}}}}),s}const _c=M.define();function Uo(n){let e=0,t=0,i=0,s=0;for(let r of n.state.facet(_c)){let o=r(n);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(s=Math.max(s,o.bottom)))}return{left:e,right:t,top:i,bottom:s}}const qi=M.define();class Ve{constructor(e,t,i,s){this.fromA=e,this.toA=t,this.fromB=i,this.toB=s}join(e){return new Ve(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let s=e[t-1];if(!(s.fromA>i.toA)){if(s.toAc)break;r+=2}if(!a)return i;new Ve(a.fromA,a.toA,a.fromB,a.toB).addToSet(i),o=a.toA,l=a.toB}}}class ds{constructor(e,t,i){this.view=e,this.state=t,this.transactions=i,this.flags=0,this.startState=e.state,this.changes=ae.empty(this.startState.doc.length);for(let r of i)this.changes=this.changes.compose(r.changes);let s=[];this.changes.iterChangedRanges((r,o,l,a)=>s.push(new Ve(r,o,l,a))),this.changedRanges=s}static create(e,t,i){return new ds(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}}class jl extends _{get length(){return this.view.state.doc.length}constructor(e){super(),this.view=e,this.decorations=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.markedForComposition=new Set,this.editContextFormatting=D.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.setDOM(e.contentDOM),this.children=[new re],this.children[0].setParent(this),this.updateDeco(),this.updateInner([new Ve(0,0,0,e.state.doc.length)],0,null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:h,toA:c})=>cthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let s=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?s=this.domChanged.newSel.head:!wp(e.changes,this.hasComposition)&&!e.selectionSet&&(s=e.state.selection.main.head));let r=s>-1?yp(this.view,e.changes,s):null;if(this.domChanged=null,this.hasComposition){this.markedForComposition.clear();let{from:h,to:c}=this.hasComposition;i=new Ve(h,c,e.changes.mapPos(h,-1),e.changes.mapPos(c,1)).addToSet(i.slice())}this.hasComposition=r?{from:r.range.fromB,to:r.range.toB}:null,(A.ie||A.chrome)&&!r&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,l=this.updateDeco(),a=Sp(o,l,e.changes);return i=Ve.extendWithRanges(i,a),!(this.flags&7)&&i.length==0?!1:(this.updateInner(i,e.startState.doc.length,r),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t,i){this.view.viewState.mustMeasureContent=!0,this.updateChildren(e,t,i);let{observer:s}=this.view;s.ignore(()=>{this.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let o=A.chrome||A.ios?{node:s.selectionRange.focusNode,written:!1}:void 0;this.sync(this.view,o),this.flags&=-8,o&&(o.written||s.selectionRange.focusNode!=o.node)&&(this.forceSelection=!0),this.dom.style.height=""}),this.markedForComposition.forEach(o=>o.flags&=-9);let r=[];if(this.view.viewport.from||this.view.viewport.to=0?s[o]:null;if(!l)break;let{fromA:a,toA:h,fromB:c,toB:f}=l,u,d,p,m;if(i&&i.range.fromBc){let v=Fi.build(this.view.state.doc,c,i.range.fromB,this.decorations,this.dynamicDecorationMap),x=Fi.build(this.view.state.doc,i.range.toB,f,this.decorations,this.dynamicDecorationMap);d=v.breakAtStart,p=v.openStart,m=x.openEnd;let w=this.compositionView(i);x.breakAtStart?w.breakAfter=1:x.content.length&&w.merge(w.length,w.length,x.content[0],!1,x.openStart,0)&&(w.breakAfter=x.content[0].breakAfter,x.content.shift()),v.content.length&&w.merge(0,0,v.content[v.content.length-1],!0,0,v.openEnd)&&v.content.pop(),u=v.content.concat(w).concat(x.content)}else({content:u,breakAtStart:d,openStart:p,openEnd:m}=Fi.build(this.view.state.doc,c,f,this.decorations,this.dynamicDecorationMap));let{i:g,off:y}=r.findPos(h,1),{i:S,off:k}=r.findPos(a,-1);bc(this,S,k,g,y,u,d,p,m)}i&&this.fixCompositionDOM(i)}updateEditContextFormatting(e){this.editContextFormatting=this.editContextFormatting.map(e.changes);for(let t of e.transactions)for(let i of t.effects)i.is(Vc)&&(this.editContextFormatting=i.value)}compositionView(e){let t=new Xe(e.text.nodeValue);t.flags|=8;for(let{deco:s}of e.marks)t=new Ot(s,[t],t.length);let i=new re;return i.append(t,0),i}fixCompositionDOM(e){let t=(r,o)=>{o.flags|=8|(o.children.some(a=>a.flags&7)?1:0),this.markedForComposition.add(o);let l=_.get(r);l&&l!=o&&(l.dom=null),o.setDOM(r)},i=this.childPos(e.range.fromB,1),s=this.children[i.i];t(e.line,s);for(let r=e.marks.length-1;r>=-1;r--)i=s.childPos(i.off,1),s=s.children[i.i],t(r>=0?e.marks[r].node:e.text,s)}updateSelection(e=!1,t=!1){(e||!this.view.observer.selectionRange.focusNode)&&this.view.observer.readSelectionRange();let i=this.view.root.activeElement,s=i==this.dom,r=!s&&!(this.view.state.facet(pt)||this.dom.tabIndex>-1)&&Yn(this.dom,this.view.observer.selectionRange)&&!(i&&this.dom.contains(i));if(!(s||t||r))return;let o=this.forceSelection;this.forceSelection=!1;let l=this.view.state.selection.main,a=this.moveToLine(this.domAtPos(l.anchor)),h=l.empty?a:this.moveToLine(this.domAtPos(l.head));if(A.gecko&&l.empty&&!this.hasComposition&&Op(a)){let f=document.createTextNode("");this.view.observer.ignore(()=>a.node.insertBefore(f,a.node.childNodes[a.offset]||null)),a=h=new be(f,0),o=!0}let c=this.view.observer.selectionRange;(o||!c.focusNode||(!Ni(a.node,a.offset,c.anchorNode,c.anchorOffset)||!Ni(h.node,h.offset,c.focusNode,c.focusOffset))&&!this.suppressWidgetCursorChange(c,l))&&(this.view.observer.ignore(()=>{A.android&&A.chrome&&this.dom.contains(c.focusNode)&&kp(c.focusNode,this.dom)&&(this.dom.blur(),this.dom.focus({preventScroll:!0}));let f=Gi(this.view.root);if(f)if(l.empty){if(A.gecko){let u=bp(a.node,a.offset);if(u&&u!=3){let d=(u==1?gc:Oc)(a.node,a.offset);d&&(a=new be(d.node,d.offset))}}f.collapse(a.node,a.offset),l.bidiLevel!=null&&f.caretBidiLevel!==void 0&&(f.caretBidiLevel=l.bidiLevel)}else if(f.extend){f.collapse(a.node,a.offset);try{f.extend(h.node,h.offset)}catch{}}else{let u=document.createRange();l.anchor>l.head&&([a,h]=[h,a]),u.setEnd(h.node,h.offset),u.setStart(a.node,a.offset),f.removeAllRanges(),f.addRange(u)}r&&this.view.root.activeElement==this.dom&&(this.dom.blur(),i&&i.focus())}),this.view.observer.setSelectionRange(a,h)),this.impreciseAnchor=a.precise?null:new be(c.anchorNode,c.anchorOffset),this.impreciseHead=h.precise?null:new be(c.focusNode,c.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&Ni(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=Gi(e.root),{anchorNode:s,anchorOffset:r}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=re.find(this,t.head);if(!o)return;let l=o.posAtStart;if(t.head==l||t.head==l+o.length)return;let a=this.coordsAt(t.head,-1),h=this.coordsAt(t.head,1);if(!a||!h||a.bottom>h.top)return;let c=this.domAtPos(t.head+t.assoc);i.collapse(c.node,c.offset),i.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let f=e.observer.selectionRange;e.docView.posFromDOM(f.anchorNode,f.anchorOffset)!=t.from&&i.collapse(s,r)}moveToLine(e){let t=this.dom,i;if(e.node!=t)return e;for(let s=e.offset;!i&&s=0;s--){let r=_.get(t.childNodes[s]);r instanceof re&&(i=r.domAtPos(r.length))}return i?new be(i.node,i.offset,!0):e}nearest(e){for(let t=e;t;){let i=_.get(t);if(i&&i.rootView==this)return i;t=t.parentNode}return null}posFromDOM(e,t){let i=this.nearest(e);if(!i)throw new RangeError("Trying to find position for a DOM position outside of the document");return i.localPosFromDOM(e,t)+i.posAtStart}domAtPos(e){let{i:t,off:i}=this.childCursor().findPos(e,-1);for(;t=0;o--){let l=this.children[o],a=r-l.breakAfter,h=a-l.length;if(ae||l.covers(1))&&(!i||l instanceof re&&!(i instanceof re&&t>=0)))i=l,s=h;else if(i&&h==e&&a==e&&l instanceof mt&&Math.abs(t)<2){if(l.deco.startSide<0)break;o&&(i=null)}r=h}return i?i.coordsAt(e-s,t):null}coordsForChar(e){let{i:t,off:i}=this.childPos(e,1),s=this.children[t];if(!(s instanceof re))return null;for(;s.children.length;){let{i:l,off:a}=s.childPos(i,1);for(;;l++){if(l==s.children.length)return null;if((s=s.children[l]).length)break}i=a}if(!(s instanceof Xe))return null;let r=Oe(s.text,i);if(r==i)return null;let o=Gt(s.dom,i,r).getClientRects();for(let l=0;lMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==Z.LTR;for(let h=0,c=0;cs)break;if(h>=i){let d=f.dom.getBoundingClientRect();if(t.push(d.height),o){let p=f.dom.lastChild,m=p?Zi(p):[];if(m.length){let g=m[m.length-1],y=a?g.right-d.left:d.right-g.left;y>l&&(l=y,this.minWidth=r,this.minWidthFrom=h,this.minWidthTo=u)}}}h=u+f.breakAfter}return t}textDirectionAt(e){let{i:t}=this.childPos(e,1);return getComputedStyle(this.children[t].dom).direction=="rtl"?Z.RTL:Z.LTR}measureTextSize(){for(let r of this.children)if(r instanceof re){let o=r.measureTextSize();if(o)return o}let e=document.createElement("div"),t,i,s;return e.className="cm-line",e.style.width="99999px",e.style.position="absolute",e.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.dom.appendChild(e);let r=Zi(e.firstChild)[0];t=e.getBoundingClientRect().height,i=r?r.width/27:7,s=r?r.height:t,e.remove()}),{lineHeight:t,charWidth:i,textHeight:s}}childCursor(e=this.length){let t=this.children.length;return t&&(e-=this.children[--t].length),new yc(this.children,e,t)}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,s=0;;s++){let r=s==t.viewports.length?null:t.viewports[s],o=r?r.from-1:this.length;if(o>i){let l=(t.lineBlockAt(o).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(D.replace({widget:new to(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!r)break;i=r.to+1}return D.set(e)}updateDeco(){let e=1,t=this.view.state.facet(Yi).map(r=>(this.dynamicDecorationMap[e++]=typeof r=="function")?r(this.view):r),i=!1,s=this.view.state.facet(Fc).map((r,o)=>{let l=typeof r=="function";return l&&(i=!0),l?r(this.view):r});for(s.length&&(this.dynamicDecorationMap[e++]=i,t.push(F.join(s))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];et.anchor?-1:1),s;if(!i)return;!t.empty&&(s=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(i={left:Math.min(i.left,s.left),top:Math.min(i.top,s.top),right:Math.max(i.right,s.right),bottom:Math.max(i.bottom,s.bottom)});let r=Uo(this.view),o={left:i.left-r.left,top:i.top-r.top,right:i.right+r.right,bottom:i.bottom+r.bottom},{offsetWidth:l,offsetHeight:a}=this.view.scrollDOM;Gd(this.view.scrollDOM,o,t.head{ie.from&&(t=!0)}),t}function vp(n,e,t=1){let i=n.charCategorizer(e),s=n.doc.lineAt(e),r=e-s.from;if(s.length==0)return b.cursor(e);r==0?t=1:r==s.length&&(t=-1);let o=r,l=r;t<0?o=Oe(s.text,r,!1):l=Oe(s.text,r);let a=i(s.text.slice(o,l));for(;o>0;){let h=Oe(s.text,o,!1);if(i(s.text.slice(h,o))!=a)break;o=h}for(;ln?e.left-n:Math.max(0,n-e.right)}function Cp(n,e){return e.top>n?e.top-n:Math.max(0,n-e.bottom)}function sr(n,e){return n.tope.top+1}function Gl(n,e){return en.bottom?{top:n.top,left:n.left,right:n.right,bottom:e}:n}function oo(n,e,t){let i,s,r,o,l=!1,a,h,c,f;for(let p=n.firstChild;p;p=p.nextSibling){let m=Zi(p);for(let g=0;gk||o==k&&r>S)&&(i=p,s=y,r=S,o=k,l=S?e0:gy.bottom&&(!c||c.bottomy.top)&&(h=p,f=y):c&&sr(c,y)?c=Zl(c,y.bottom):f&&sr(f,y)&&(f=Gl(f,y.top))}}if(c&&c.bottom>=t?(i=a,s=c):f&&f.top<=t&&(i=h,s=f),!i)return{node:n,offset:0};let u=Math.max(s.left,Math.min(s.right,e));if(i.nodeType==3)return Yl(i,u,t);if(l&&i.contentEditable!="false")return oo(i,u,t);let d=Array.prototype.indexOf.call(n.childNodes,i)+(e>=(s.left+s.right)/2?1:0);return{node:n,offset:d}}function Yl(n,e,t){let i=n.nodeValue.length,s=-1,r=1e9,o=0;for(let l=0;lt?c.top-t:t-c.bottom)-1;if(c.left-1<=e&&c.right+1>=e&&f=(c.left+c.right)/2,d=u;if((A.chrome||A.gecko)&&Gt(n,l).getBoundingClientRect().left==c.right&&(d=!u),f<=0)return{node:n,offset:l+(d?1:0)};s=l+(d?1:0),r=f}}}return{node:n,offset:s>-1?s:o>0?n.nodeValue.length:0}}function Hc(n,e,t,i=-1){var s,r;let o=n.contentDOM.getBoundingClientRect(),l=o.top+n.viewState.paddingTop,a,{docHeight:h}=n.viewState,{x:c,y:f}=e,u=f-l;if(u<0)return 0;if(u>h)return n.state.doc.length;for(let v=n.viewState.heightOracle.textHeight/2,x=!1;a=n.elementAtHeight(u),a.type!=we.Text;)for(;u=i>0?a.bottom+v:a.top-v,!(u>=0&&u<=h);){if(x)return t?null:0;x=!0,i=-i}f=l+u;let d=a.from;if(dn.viewport.to)return n.viewport.to==n.state.doc.length?n.state.doc.length:t?null:Kl(n,o,a,c,f);let p=n.dom.ownerDocument,m=n.root.elementFromPoint?n.root:p,g=m.elementFromPoint(c,f);g&&!n.contentDOM.contains(g)&&(g=null),g||(c=Math.max(o.left+1,Math.min(o.right-1,c)),g=m.elementFromPoint(c,f),g&&!n.contentDOM.contains(g)&&(g=null));let y,S=-1;if(g&&((s=n.docView.nearest(g))===null||s===void 0?void 0:s.isEditable)!=!1){if(p.caretPositionFromPoint){let v=p.caretPositionFromPoint(c,f);v&&({offsetNode:y,offset:S}=v)}else if(p.caretRangeFromPoint){let v=p.caretRangeFromPoint(c,f);v&&({startContainer:y,startOffset:S}=v,(!n.contentDOM.contains(y)||A.safari&&Pp(y,S,c)||A.chrome&&Qp(y,S,c))&&(y=void 0))}y&&(S=Math.min(rt(y),S))}if(!y||!n.docView.dom.contains(y)){let v=re.find(n.docView,d);if(!v)return u>a.top+a.height/2?a.to:a.from;({node:y,offset:S}=oo(v.dom,c,f))}let k=n.docView.nearest(y);if(!k)return null;if(k.isWidget&&((r=k.dom)===null||r===void 0?void 0:r.nodeType)==1){let v=k.dom.getBoundingClientRect();return e.yn.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,a=Math.floor((s-t.top-(n.defaultLineHeight-l)*.5)/l);r+=a*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+Ur(o,r,n.state.tabSize)}function Pp(n,e,t){let i,s=n;if(n.nodeType!=3||e!=(i=n.nodeValue.length))return!1;for(;;){let r=s.nextSibling;if(r){if(r.nodeName=="BR")break;return!1}else{let o=s.parentNode;if(!o||o.nodeName=="DIV")break;s=o}}return Gt(n,i-1,i).getBoundingClientRect().right>t}function Qp(n,e,t){if(e!=0)return!1;for(let s=n;;){let r=s.parentNode;if(!r||r.nodeType!=1||r.firstChild!=s)return!1;if(r.classList.contains("cm-line"))break;s=r}let i=n.nodeType==1?n.getBoundingClientRect():Gt(n,0,Math.max(n.nodeValue.length,1)).getBoundingClientRect();return t-i.left>5}function lo(n,e,t){let i=n.lineBlockAt(e);if(Array.isArray(i.type)){let s;for(let r of i.type){if(r.from>e)break;if(!(r.toe)return r;(!s||r.type==we.Text&&(s.type!=r.type||(t<0?r.frome)))&&(s=r)}}return s||i}return i}function Ap(n,e,t,i){let s=lo(n,e.head,e.assoc||-1),r=!i||s.type!=we.Text||!(n.lineWrapping||s.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>s.from?e.head-1:e.head);if(r){let o=n.dom.getBoundingClientRect(),l=n.textDirectionAt(s.from),a=n.posAtCoords({x:t==(l==Z.LTR)?o.right-1:o.left+1,y:(r.top+r.bottom)/2});if(a!=null)return b.cursor(a,t?-1:1)}return b.cursor(t?s.to:s.from,t?-1:1)}function Jl(n,e,t,i){let s=n.state.doc.lineAt(e.head),r=n.bidiSpans(s),o=n.textDirectionAt(s.from);for(let l=e,a=null;;){let h=pp(s,r,o,l,t),c=Rc;if(!h){if(s.number==(t?n.state.doc.lines:1))return l;c=` -`,s=n.state.doc.line(s.number+(t?1:-1)),r=n.bidiSpans(s),h=n.visualLineSide(s,!t)}if(a){if(!a(c))return l}else{if(!i)return h;a=i(c)}l=h}}function Mp(n,e,t){let i=n.state.charCategorizer(e),s=i(t);return r=>{let o=i(r);return s==Y.Space&&(s=o),s==o}}function Rp(n,e,t,i){let s=e.head,r=t?1:-1;if(s==(t?n.state.doc.length:0))return b.cursor(s,e.assoc);let o=e.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),h=n.coordsAtPos(s,e.assoc||-1),c=n.documentTop;if(h)o==null&&(o=h.left-a.left),l=r<0?h.top:h.bottom;else{let d=n.viewState.lineBlockAt(s);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(s-d.from))),l=(r<0?d.top:d.bottom)+c}let f=a.left+o,u=i??n.viewState.heightOracle.textHeight>>1;for(let d=0;;d+=10){let p=l+(u+d)*r,m=Hc(n,{x:f,y:p},!1,r);if(pa.bottom||(r<0?ms)){let g=n.docView.coordsForChar(m),y=!g||p{if(e>r&&es(n)),t.from,e.head>t.from?-1:1);return i==t.from?t:b.cursor(i,ir)&&this.lineBreak(),s=o}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,s=this.lineSeparator?null:/\r\n?|\n/g;;){let r=-1,o=1,l;if(this.lineSeparator?(r=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=s.exec(t))&&(r=l.index,o=l[0].length),this.append(t.slice(i,r<0?t.length:r)),r<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==e&&a.pos>this.text.length&&(a.pos-=o-1);i=r+o}}readNode(e){if(e.cmIgnore)return;let t=_.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let s=i.iter();!s.next().done;)s.lineBreak?this.lineBreak():this.append(s.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(Ep(e,i.node,i.offset)?t:0))}}function Ep(n,e,t){for(;;){if(!e||t-1;let{impreciseHead:r,impreciseAnchor:o}=e.docView;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=e.docView.domBoundsAround(t,i,0))){let l=r||o?[]:Lp(e),a=new Dp(l,e.state);a.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=a.text,this.newSel=Wp(l,this.bounds.from)}else{let l=e.observer.selectionRange,a=r&&r.node==l.focusNode&&r.offset==l.focusOffset||!Gr(e.contentDOM,l.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(l.focusNode,l.focusOffset),h=o&&o.node==l.anchorNode&&o.offset==l.anchorOffset||!Gr(e.contentDOM,l.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(l.anchorNode,l.anchorOffset),c=e.viewport;if((A.ios||A.chrome)&&e.state.selection.main.empty&&a!=h&&(c.from>0||c.toDate.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:o,to:l}=e.bounds,a=s.from,h=null;(r===8||A.android&&e.text.length=s.from&&t.to<=s.to&&(t.from!=s.from||t.to!=s.to)&&s.to-s.from-(t.to-t.from)<=4?t={from:s.from,to:s.to,insert:n.state.doc.slice(s.from,t.from).append(t.insert).append(n.state.doc.slice(t.to,s.to))}:A.chrome&&t&&t.from==t.to&&t.from==s.head&&t.insert.toString()==` - `&&n.lineWrapping&&(i&&(i=b.single(i.main.anchor-1,i.main.head-1)),t={from:s.from,to:s.to,insert:V.of([" "])}),t)return Ho(n,t,i,r);if(i&&!i.main.eq(s)){let o=!1,l="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(o=!0),l=n.inputState.lastSelectionOrigin),n.dispatch({selection:i,scrollIntoView:o,userEvent:l}),!0}else return!1}function Ho(n,e,t,i=-1){if(A.ios&&n.inputState.flushIOSKey(e))return!0;let s=n.state.selection.main;if(A.android&&(e.to==s.to&&(e.from==s.from||e.from==s.from-1&&n.state.sliceDoc(e.from,s.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&hi(n.contentDOM,"Enter",13)||(e.from==s.from-1&&e.to==s.to&&e.insert.length==0||i==8&&e.insert.lengths.head)&&hi(n.contentDOM,"Backspace",8)||e.from==s.from&&e.to==s.to+1&&e.insert.length==0&&hi(n.contentDOM,"Delete",46)))return!0;let r=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,l=()=>o||(o=$p(n,e,t));return n.state.facet(Bc).some(a=>a(n,e.from,e.to,r,l))||n.dispatch(l()),!0}function $p(n,e,t){let i,s=n.state,r=s.selection.main;if(e.from>=r.from&&e.to<=r.to&&e.to-e.from>=(r.to-r.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let l=r.frome.to?s.sliceDoc(e.to,r.to):"";i=s.replaceSelection(n.state.toText(l+e.insert.sliceString(0,void 0,n.state.lineBreak)+a))}else{let l=s.changes(e),a=t&&t.main.to<=l.newLength?t.main:void 0;if(s.selection.ranges.length>1&&n.inputState.composing>=0&&e.to<=r.to&&e.to>=r.to-10){let h=n.state.sliceDoc(e.from,e.to),c,f=t&&Uc(n,t.main.head);if(f){let p=e.insert.length-(e.to-e.from);c={from:f.from,to:f.to-p}}else c=n.state.doc.lineAt(r.head);let u=r.to-e.to,d=r.to-r.from;i=s.changeByRange(p=>{if(p.from==r.from&&p.to==r.to)return{changes:l,range:a||p.map(l)};let m=p.to-u,g=m-h.length;if(p.to-p.from!=d||n.state.sliceDoc(g,m)!=h||p.to>=c.from&&p.from<=c.to)return{range:p};let y=s.changes({from:g,to:m,insert:e.insert}),S=p.to-r.to;return{changes:y,range:a?b.range(Math.max(0,a.anchor+S),Math.max(0,a.head+S)):p.map(y)}})}else i={changes:l,selection:a&&s.selection.replaceRange(a)}}let o="input.type";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,o+=".compose",n.inputState.compositionFirstChange&&(o+=".start",n.inputState.compositionFirstChange=!1)),s.update(i,{userEvent:o,scrollIntoView:!0})}function Bp(n,e,t,i){let s=Math.min(n.length,e.length),r=0;for(;r0&&l>0&&n.charCodeAt(o-1)==e.charCodeAt(l-1);)o--,l--;if(i=="end"){let a=Math.max(0,r-Math.min(o,l));t-=o+a-r}if(o=o?r-t:0;r-=a,l=r+(l-o),o=r}else if(l=l?r-t:0;r-=a,o=r+(o-l),l=r}return{from:r,toA:o,toB:l}}function Lp(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}=n.observer.selectionRange;return t&&(e.push(new ea(t,i)),(s!=t||r!=i)&&e.push(new ea(s,r))),e}function Wp(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?b.single(t+e,i+e):null}class zp{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,A.safari&&e.contentDOM.addEventListener("input",()=>null),A.gecko&&tm(e.contentDOM.ownerDocument)}handleEvent(e){!Hp(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let s of i.observers)s(this.view,t);for(let s of i.handlers){if(t.defaultPrevented)break;if(s(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=Ip(e),i=this.handlers,s=this.view.contentDOM;for(let r in t)if(r!="scroll"){let o=!t[r].handlers.length,l=i[r];l&&o!=!l.handlers.length&&(s.removeEventListener(r,this.handleEvent),l=null),l||s.addEventListener(r,this.handleEvent,{passive:o})}for(let r in i)r!="scroll"&&!t[r]&&s.removeEventListener(r,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&Zc.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),A.android&&A.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let t;return A.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&((t=Gc.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||Vp.indexOf(e.key)>-1&&e.ctrlKey&&!e.shiftKey)?(this.pendingIOSKey=t||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key=="Enter"&&e&&e.from0?!0:A.safari&&!A.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1:!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function ta(n,e){return(t,i)=>{try{return e.call(n,i,t)}catch(s){Ae(t.state,s)}}}function Ip(n){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of n){let s=i.spec,r=s&&s.plugin.domEventHandlers,o=s&&s.plugin.domEventObservers;if(r)for(let l in r){let a=r[l];a&&t(l).handlers.push(ta(i.value,a))}if(o)for(let l in o){let a=o[l];a&&t(l).observers.push(ta(i.value,a))}}for(let i in _e)t(i).handlers.push(_e[i]);for(let i in Ne)t(i).observers.push(Ne[i]);return e}const Gc=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],Vp="dthko",Zc=[16,17,18,20,91,92,224,225],An=6;function Mn(n){return Math.max(0,n)*.7+8}function Np(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}class Fp{constructor(e,t,i,s){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=s,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=Zd(e.contentDOM),this.atoms=e.state.facet(_o).map(o=>o(e));let r=e.contentDOM.ownerDocument;r.addEventListener("mousemove",this.move=this.move.bind(this)),r.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(I.allowMultipleSelections)&&Xp(e,t),this.dragging=Up(e,t)&&Jc(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&Np(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,s=0,r=0,o=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:s,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:r,bottom:l}=this.scrollParents.y.getBoundingClientRect());let a=Uo(this.view);e.clientX-a.left<=s+An?t=-Mn(s-e.clientX):e.clientX+a.right>=o-An&&(t=Mn(e.clientX-o)),e.clientY-a.top<=r+An?i=-Mn(r-e.clientY):e.clientY+a.bottom>=l-An&&(i=Mn(e.clientY-l)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}skipAtoms(e){let t=null;for(let i=0;it.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}}function Xp(n,e){let t=n.state.facet(Dc);return t.length?t[0](e):A.mac?e.metaKey:e.ctrlKey}function _p(n,e){let t=n.state.facet(Ec);return t.length?t[0](e):A.mac?!e.altKey:!e.ctrlKey}function Up(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=Gi(n.root);if(!i||i.rangeCount==0)return!0;let s=i.getRangeAt(0).getClientRects();for(let r=0;r=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function Hp(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=_.get(t))&&i.ignoreEvent(e))return!1;return!0}const _e=Object.create(null),Ne=Object.create(null),Yc=A.ie&&A.ie_version<15||A.ios&&A.webkit_version<604;function jp(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{n.focus(),t.remove(),Kc(n,t.value)},50)}function Ws(n,e,t){for(let i of n.facet(e))t=i(t,n);return t}function Kc(n,e){e=Ws(n.state,No,e);let{state:t}=n,i,s=1,r=t.toText(e),o=r.lines==t.selection.ranges.length;if(ao!=null&&t.selection.ranges.every(a=>a.empty)&&ao==r.toString()){let a=-1;i=t.changeByRange(h=>{let c=t.doc.lineAt(h.from);if(c.from==a)return{range:h};a=c.from;let f=t.toText((o?r.line(s++).text:e)+t.lineBreak);return{changes:{from:c.from,insert:f},range:b.cursor(h.from+f.length)}})}else o?i=t.changeByRange(a=>{let h=r.line(s++);return{changes:{from:a.from,to:a.to,insert:h.text},range:b.cursor(a.from+h.length)}}):i=t.replaceSelection(r);n.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}Ne.scroll=n=>{n.inputState.lastScrollTop=n.scrollDOM.scrollTop,n.inputState.lastScrollLeft=n.scrollDOM.scrollLeft};_e.keydown=(n,e)=>(n.inputState.setSelectionOrigin("select"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);Ne.touchstart=(n,e)=>{n.inputState.lastTouchTime=Date.now(),n.inputState.setSelectionOrigin("select.pointer")};Ne.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};_e.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of n.state.facet(qc))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=Yp(n,e)),t){let i=!n.hasFocus;n.inputState.startMouseSelection(new Fp(n,e,t,i)),i&&n.observer.ignore(()=>{dc(n.contentDOM);let r=n.root.activeElement;r&&!r.contains(n.contentDOM)&&r.blur()});let s=n.inputState.mouseSelection;if(s)return s.start(e),s.dragging===!1}return!1};function ia(n,e,t,i){if(i==1)return b.cursor(e,t);if(i==2)return vp(n.state,e,t);{let s=re.find(n.docView,e),r=n.state.doc.lineAt(s?s.posAtEnd:e),o=s?s.posAtStart:r.from,l=s?s.posAtEnd:r.to;return le>=t.top&&e<=t.bottom&&n>=t.left&&n<=t.right;function Gp(n,e,t,i){let s=re.find(n.docView,e);if(!s)return 1;let r=e-s.posAtStart;if(r==0)return 1;if(r==s.length)return-1;let o=s.coordsAt(r,-1);if(o&&na(t,i,o))return-1;let l=s.coordsAt(r,1);return l&&na(t,i,l)?1:o&&o.bottom>=i?-1:1}function sa(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1);return{pos:t,bias:Gp(n,t,e.clientX,e.clientY)}}const Zp=A.ie&&A.ie_version<=11;let ra=null,oa=0,la=0;function Jc(n){if(!Zp)return n.detail;let e=ra,t=la;return ra=n,la=Date.now(),oa=!e||t>Date.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(oa+1)%3:1}function Yp(n,e){let t=sa(n,e),i=Jc(e),s=n.state.selection;return{update(r){r.docChanged&&(t.pos=r.changes.mapPos(t.pos),s=s.map(r.changes))},get(r,o,l){let a=sa(n,r),h,c=ia(n,a.pos,a.bias,i);if(t.pos!=a.pos&&!o){let f=ia(n,t.pos,t.bias,i),u=Math.min(f.from,c.from),d=Math.max(f.to,c.to);c=u1&&(h=Kp(s,a.pos))?h:l?s.addRange(c):b.create([c])}}}function Kp(n,e){for(let t=0;t=e)return b.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}_e.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let s=n.docView.nearest(e.target);if(s&&s.isWidget){let r=s.posAtStart,o=r+s.length;(r>=t.to||o<=t.from)&&(t=b.range(r,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",Ws(n.state,Fo,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};_e.dragend=n=>(n.inputState.draggedContent=null,!1);function aa(n,e,t,i){if(t=Ws(n.state,No,t),!t)return;let s=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:r}=n.inputState,o=i&&r&&_p(n,e)?{from:r.from,to:r.to}:null,l={from:s,insert:t},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(s,-1),head:a.mapPos(s,1)},userEvent:o?"move.drop":"input.drop"}),n.inputState.draggedContent=null}_e.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),s=0,r=()=>{++s==t.length&&aa(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o{/[\x00-\x08\x0e-\x1f]{2}/.test(l.result)||(i[o]=l.result),r()},l.readAsText(t[o])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return aa(n,e,i,!0),!0}return!1};_e.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=Yc?null:e.clipboardData;return t?(Kc(n,t.getData("text/plain")||t.getData("text/uri-list")),!0):(jp(n),!1)};function Jp(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function em(n){let e=[],t=[],i=!1;for(let s of n.selection.ranges)s.empty||(e.push(n.sliceDoc(s.from,s.to)),t.push(s));if(!e.length){let s=-1;for(let{from:r}of n.selection.ranges){let o=n.doc.lineAt(r);o.number>s&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),s=o.number}i=!0}return{text:Ws(n,Fo,e.join(n.lineBreak)),ranges:t,linewise:i}}let ao=null;_e.copy=_e.cut=(n,e)=>{let{text:t,ranges:i,linewise:s}=em(n.state);if(!t&&!s)return!1;ao=s?t:null,e.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let r=Yc?null:e.clipboardData;return r?(r.clearData(),r.setData("text/plain",t),!0):(Jp(n,t),!1)};const ef=bt.define();function tf(n,e){let t=[];for(let i of n.facet(Lc)){let s=i(n,e);s&&t.push(s)}return t.length?n.update({effects:t,annotations:ef.of(!0)}):null}function nf(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=tf(n.state,e);t?n.dispatch(t):n.update([])}},10)}Ne.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),nf(n)};Ne.blur=n=>{n.observer.clearSelectionRange(),nf(n)};Ne.compositionstart=Ne.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};Ne.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,A.chrome&&A.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};Ne.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};_e.beforeinput=(n,e)=>{var t,i;if(e.inputType=="insertReplacementText"&&n.observer.editContext){let r=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),o=e.getTargetRanges();if(r&&o.length){let l=o[0],a=n.posAtDOM(l.startContainer,l.startOffset),h=n.posAtDOM(l.endContainer,l.endOffset);return Ho(n,{from:a,to:h,insert:n.state.toText(r)},null),!0}}let s;if(A.chrome&&A.android&&(s=Gc.find(r=>r.inputType==e.inputType))&&(n.observer.delayAndroidKey(s.key,s.keyCode),s.key=="Backspace"||s.key=="Delete")){let r=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>r+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return A.ios&&e.inputType=="deleteContentForward"&&n.observer.flushSoon(),A.safari&&e.inputType=="insertText"&&n.inputState.composing>=0&&setTimeout(()=>Ne.compositionend(n,e),20),!1};const ha=new Set;function tm(n){ha.has(n)||(ha.add(n),n.addEventListener("copy",()=>{}),n.addEventListener("cut",()=>{}))}const ca=["pre-wrap","normal","pre-line","break-spaces"];let yi=!1;function fa(){yi=!1}class im{constructor(e){this.lineWrapping=e,this.doc=V.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return ca.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i-1,a=Math.round(t)!=Math.round(this.lineHeight)||this.lineWrapping!=l;if(this.lineWrapping=l,this.lineHeight=t,this.charWidth=i,this.textHeight=s,this.lineLength=r,a){this.heightSamples={};for(let h=0;h0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>es&&(yi=!0),this.height=e)}replace(e,t,i){return ve.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,s){let r=this,o=i.doc;for(let l=s.length-1;l>=0;l--){let{fromA:a,toA:h,fromB:c,toB:f}=s[l],u=r.lineAt(a,G.ByPosNoHeight,i.setDoc(t),0,0),d=u.to>=h?u:r.lineAt(h,G.ByPosNoHeight,i,0,0);for(f+=d.to-h,h=d.to;l>0&&u.from<=s[l-1].toA;)a=s[l-1].fromA,c=s[l-1].fromB,l--,ar*2){let l=e[t-1];l.break?e.splice(--t,1,l.left,null,l.right):e.splice(--t,1,l.left,l.right),i+=1+l.break,s-=l.size}else if(r>s*2){let l=e[i];l.break?e.splice(i,1,l.left,null,l.right):e.splice(i,1,l.left,l.right),i+=2+l.break,r-=l.size}else break;else if(s=r&&o(this.blockAt(0,i,s,r))}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more&&this.setHeight(s.heights[s.index++]),this.outdated=!1,this}toString(){return`block(${this.length})`}}class qe extends sf{constructor(e,t){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0}blockAt(e,t,i,s){return new Je(s,this.length,i,this.height,this.breaks)}replace(e,t,i){let s=i[0];return i.length==1&&(s instanceof qe||s instanceof pe&&s.flags&4)&&Math.abs(this.length-s.length)<10?(s instanceof pe?s=new qe(s.length,this.height):s.height=this.height,this.outdated||(s.outdated=!1),s):ve.of(i)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more?this.setHeight(s.heights[s.index++]):(i||this.outdated)&&this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class pe extends ve{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,s=e.doc.lineAt(t+this.length).number,r=s-i+1,o,l=0;if(e.lineWrapping){let a=Math.min(this.height,e.lineHeight*r);o=a/r,this.length>r+1&&(l=(this.height-a)/(this.length-r-1))}else o=this.height/r;return{firstLine:i,lastLine:s,perLine:o,perChar:l}}blockAt(e,t,i,s){let{firstLine:r,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(t,s);if(t.lineWrapping){let h=s+(e0){let r=i[i.length-1];r instanceof pe?i[i.length-1]=new pe(r.length+s):i.push(null,new pe(s-1))}if(e>0){let r=i[0];r instanceof pe?i[0]=new pe(e+r.length):i.unshift(new pe(e-1),null)}return ve.of(i)}decomposeLeft(e,t){t.push(new pe(e-1),null)}decomposeRight(e,t){t.push(null,new pe(this.length-e-1))}updateHeight(e,t=0,i=!1,s){let r=t+this.length;if(s&&s.from<=t+this.length&&s.more){let o=[],l=Math.max(t,s.from),a=-1;for(s.from>t&&o.push(new pe(s.from-t-1).updateHeight(e,t));l<=r&&s.more;){let c=e.doc.lineAt(l).length;o.length&&o.push(null);let f=s.heights[s.index++];a==-1?a=f:Math.abs(f-a)>=es&&(a=-2);let u=new qe(c,f);u.outdated=!1,o.push(u),l+=c+1}l<=r&&o.push(null,new pe(r-l).updateHeight(e,l));let h=ve.of(o);return(a<0||Math.abs(h.height-this.height)>=es||Math.abs(a-this.heightMetrics(e,t).perLine)>=es)&&(yi=!0),ps(this,h)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}}class sm extends ve{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,s){let r=i+this.left.height;return el))return h;let c=t==G.ByPosNoHeight?G.ByPosNoHeight:G.ByPos;return a?h.join(this.right.lineAt(l,c,i,o,l)):this.left.lineAt(l,c,i,s,r).join(h)}forEachLine(e,t,i,s,r,o){let l=s+this.left.height,a=r+this.left.length+this.break;if(this.break)e=a&&this.right.forEachLine(e,t,i,l,a,o);else{let h=this.lineAt(a,G.ByPos,i,s,r);e=e&&h.from<=t&&o(h),t>h.to&&this.right.forEachLine(h.to+1,t,i,l,a,o)}}replace(e,t,i){let s=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-s,t-s,i));let r=[];e>0&&this.decomposeLeft(e,r);let o=r.length;for(let l of i)r.push(l);if(e>0&&ua(r,o-1),t=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,s=i+this.break;if(e>=s)return this.right.decomposeRight(e-s,t);e2*t.size||t.size>2*e.size?ve.of(this.break?[e,null,t]:[e,t]):(this.left=ps(this.left,e),this.right=ps(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,s){let{left:r,right:o}=this,l=t+r.length+this.break,a=null;return s&&s.from<=t+r.length&&s.more?a=r=r.updateHeight(e,t,i,s):r.updateHeight(e,t,i),s&&s.from<=l+o.length&&s.more?a=o=o.updateHeight(e,l,i,s):o.updateHeight(e,l,i),a?this.balanced(r,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function ua(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof pe&&(i=n[e+1])instanceof pe&&n.splice(e-1,3,new pe(t.length+1+i.length))}const rm=5;class jo{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),s=this.nodes[this.nodes.length-1];s instanceof qe?s.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new qe(i-this.pos,-1)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e=rm)&&this.addLineDeco(s,r,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new qe(this.pos-e,-1)),this.writtenTo=this.pos}blankContent(e,t){let i=new pe(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof qe)return e;let t=new qe(0,-1);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let s=this.ensureLine();s.length+=i,s.collapsed+=i,s.widgetHeight=Math.max(s.widgetHeight,e),s.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof qe)&&!this.isCovered?this.nodes.push(new qe(0,-1)):(this.writtenToc.clientHeight||c.scrollWidth>c.clientWidth)&&f.overflow!="visible"){let u=c.getBoundingClientRect();r=Math.max(r,u.left),o=Math.min(o,u.right),l=Math.max(l,u.top),a=Math.min(h==n.parentNode?s.innerHeight:a,u.bottom)}h=f.position=="absolute"||f.position=="fixed"?c.offsetParent:c.parentNode}else if(h.nodeType==11)h=h.host;else break;return{left:r-t.left,right:Math.max(r,o)-t.left,top:l-(t.top+e),bottom:Math.max(l,a)-(t.top+e)}}function hm(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left0&&e.top0}function cm(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}class or{constructor(e,t,i,s){this.from=e,this.to=t,this.size=i,this.displaySize=s}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;itypeof i!="function"&&i.class=="cm-lineWrapping");this.heightOracle=new im(t),this.stateDeco=e.facet(Yi).filter(i=>typeof i!="function"),this.heightMap=ve.empty().applyChanges(this.stateDeco,V.empty,this.heightOracle.setDoc(e.doc),[new Ve(0,0,0,e.doc.length)]);for(let i=0;i<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());i++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=D.set(this.lineGaps.map(i=>i.draw(this,!1))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let s=i?t.head:t.anchor;if(!e.some(({from:r,to:o})=>s>=r&&s<=o)){let{from:r,to:o}=this.lineBlockAt(s);e.push(new Rn(r,o))}}return this.viewports=e.sort((i,s)=>i.from-s.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?pa:new Go(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(Bi(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=this.state.facet(Yi).filter(c=>typeof c!="function");let s=e.changedRanges,r=Ve.extendWithRanges(s,om(i,this.stateDeco,e?e.changes:ae.empty(this.state.doc.length))),o=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollTop);fa(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),r),(this.heightMap.height!=o||yi)&&(e.flags|=2),l?(this.scrollAnchorPos=e.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let a=r.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.heada.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,t));let h=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,e.flags|=this.updateForViewport(),(h||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&e.selectionSet&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(zc)&&(this.mustEnforceCursorAssoc=!0)}measure(e){let t=e.contentDOM,i=window.getComputedStyle(t),s=this.heightOracle,r=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?Z.RTL:Z.LTR;let o=this.heightOracle.mustRefreshForWrapping(r),l=t.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let h=0,c=0;if(l.width&&l.height){let{scaleX:v,scaleY:x}=uc(t,l);(v>.005&&Math.abs(this.scaleX-v)>.005||x>.005&&Math.abs(this.scaleY-x)>.005)&&(this.scaleX=v,this.scaleY=x,h|=16,o=a=!0)}let f=(parseInt(i.paddingTop)||0)*this.scaleY,u=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=f||this.paddingBottom!=u)&&(this.paddingTop=f,this.paddingBottom=u,h|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(s.lineWrapping&&(a=!0),this.editorWidth=e.scrollDOM.clientWidth,h|=16);let d=e.scrollDOM.scrollTop*this.scaleY;this.scrollTop!=d&&(this.scrollAnchorHeight=-1,this.scrollTop=d),this.scrolledToBottom=mc(e.scrollDOM);let p=(this.printing?cm:am)(t,this.paddingTop),m=p.top-this.pixelViewport.top,g=p.bottom-this.pixelViewport.bottom;this.pixelViewport=p;let y=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(y!=this.inView&&(this.inView=y,y&&(a=!0)),!this.inView&&!this.scrollTarget&&!hm(e.dom))return 0;let S=l.width;if((this.contentDOMWidth!=S||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=e.scrollDOM.clientHeight,h|=16),a){let v=e.docView.measureVisibleLineHeights(this.viewport);if(s.mustRefreshForHeights(v)&&(o=!0),o||s.lineWrapping&&Math.abs(S-this.contentDOMWidth)>s.charWidth){let{lineHeight:x,charWidth:w,textHeight:T}=e.docView.measureTextSize();o=x>0&&s.refresh(r,x,w,T,Math.max(5,S/w),v),o&&(e.docView.minWidth=0,h|=16)}m>0&&g>0?c=Math.max(m,g):m<0&&g<0&&(c=Math.min(m,g)),fa();for(let x of this.viewports){let w=x.from==this.viewport.from?v:e.docView.measureVisibleLineHeights(x);this.heightMap=(o?ve.empty().applyChanges(this.stateDeco,V.empty,this.heightOracle,[new Ve(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(s,0,o,new nm(x.from,w))}yi&&(h|=2)}let k=!this.viewportIsAppropriate(this.viewport,c)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return k&&(h&2&&(h|=this.updateScaler()),this.viewport=this.getViewport(c,this.scrollTarget),h|=this.updateForViewport()),(h&2||k)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),s=this.heightMap,r=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new Rn(s.lineAt(o-i*1e3,G.ByHeight,r,0,0).from,s.lineAt(l+(1-i)*1e3,G.ByHeight,r,0,0).to);if(t){let{head:h}=t.range;if(ha.to){let c=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),f=s.lineAt(h,G.ByPos,r,0,0),u;t.y=="center"?u=(f.top+f.bottom)/2-c/2:t.y=="start"||t.y=="nearest"&&h=l+Math.max(10,Math.min(i,250)))&&s>o-2*1e3&&r>1,o=s<<1;if(this.defaultTextDirection!=Z.LTR&&!i)return[];let l=[],a=(c,f,u,d)=>{if(f-cc&&yy.from>=u.from&&y.to<=u.to&&Math.abs(y.from-c)y.fromS));if(!g){if(fk.from<=f&&k.to>=f)){let k=t.moveToLineBoundary(b.cursor(f),!1,!0).head;k>c&&(f=k)}let y=this.gapSize(u,c,f,d),S=i||y<2e6?y:2e6;g=new or(c,f,y,S)}l.push(g)},h=c=>{if(c.length2e6)for(let w of e)w.from>=c.from&&w.fromc.from&&a(c.from,d,c,f),pt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];F.spans(t,this.viewport.from,this.viewport.to,{span(r,o){i.push({from:r,to:o})},point(){}},20);let s=0;if(i.length!=this.visibleRanges.length)s=12;else for(let r=0;r=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||Bi(this.heightMap.lineAt(e,G.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||Bi(this.heightMap.lineAt(this.scaler.fromDOM(e),G.ByHeight,this.heightOracle,0,0),this.scaler)}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return Bi(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class Rn{constructor(e,t){this.from=e,this.to=t}}function um(n,e,t){let i=[],s=n,r=0;return F.spans(t,n,e,{span(){},point(o,l){o>s&&(i.push({from:s,to:o}),r+=o-s),s=l}},20),s=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let s=0;;s++){let{from:r,to:o}=e[s],l=o-r;if(i<=l)return r+i;i-=l}}function En(n,e){let t=0;for(let{from:i,to:s}of n.ranges){if(e<=s){t+=e-i;break}t+=s-i}return t/n.total}function dm(n,e){for(let t of n)if(e(t))return t}const pa={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};class Go{constructor(e,t,i){let s=0,r=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let h=t.lineAt(l,G.ByPos,e,0,0).top,c=t.lineAt(a,G.ByPos,e,0,0).bottom;return s+=c-h,{from:l,to:a,top:h,bottom:c,domTop:0,domBottom:0}}),this.scale=(7e6-s)/(t.height-s);for(let l of this.viewports)l.domTop=o+(l.top-r)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),r=l.bottom}toDOM(e){for(let t=0,i=0,s=0;;t++){let r=tt.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}}function Bi(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new Je(n.from,n.length,t,i-t,Array.isArray(n._content)?n._content.map(s=>Bi(s,e)):n._content)}const qn=M.define({combine:n=>n.join(" ")}),ho=M.define({combine:n=>n.indexOf(!0)>-1}),co=mi.newName(),rf=mi.newName(),of=mi.newName(),lf={"&light":"."+rf,"&dark":"."+of};function fo(n,e,t){return new mi(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,s=>{if(s=="&")return n;if(!t||!t[s])throw new RangeError(`Unsupported selector: ${s}`);return t[s]}):n+" "+i}})}const pm=fo("."+co,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},lf),mm={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},lr=A.ie&&A.ie_version<=11;class gm{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new Yd,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);(A.ie&&A.ie_version<=11||A.ios&&e.composing)&&t.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&A.android&&e.constructor.EDIT_CONTEXT!==!1&&!(A.chrome&&A.chrome_version<126)&&(this.editContext=new ym(e),e.state.facet(pt)&&(e.contentDOM.editContext=this.editContext.editContext)),lr&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,s=this.selectionRange;if(i.state.facet(pt)?i.root.activeElement!=this.dom:!Yn(this.dom,s))return;let r=s.anchorNode&&i.docView.nearest(s.anchorNode);if(r&&r.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(A.ie&&A.ie_version<=11||A.android&&A.chrome)&&!i.state.selection.main.empty&&s.focusNode&&Ni(s.focusNode,s.focusOffset,s.anchorNode,s.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=Gi(e.root);if(!t)return!1;let i=A.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&Om(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let s=Yn(this.dom,i);return s&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let r=this.delayedAndroidKey;r&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=r.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&r.force&&hi(this.dom,r.key,r.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(s)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,s=!1;for(let r of e){let o=this.readMutation(r);o&&(o.typeOver&&(s=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:s}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),s=this.selectionChanged&&Yn(this.dom,this.selectionRange);if(e<0&&!s)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let r=new qp(this.view,e,t,i);return this.view.docView.domChanged={newSel:r.newSel?r.newSel.main:null},r}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,s=jc(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!t.newSel.main.eq(this.view.state.selection.main))&&this.view.update([]),s}readMutation(e){let t=this.view.docView.nearest(e.target);if(!t||t.ignoreMutation(e))return null;if(t.markDirty(e.type=="attributes"),e.type=="attributes"&&(t.flags|=4),e.type=="childList"){let i=ma(t,e.previousSibling||e.target.previousSibling,-1),s=ma(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:s?t.posBefore(s):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(pt)!=e.state.facet(pt)&&(e.view.contentDOM.editContext=e.state.facet(pt)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let s of this.scrollTargets)s.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}}function ma(n,e,t){for(;e;){let i=_.get(e);if(i&&i.parent==n)return i;let s=e.parentNode;e=s!=n.dom?s:t>0?e.nextSibling:e.previousSibling}return null}function ga(n,e){let t=e.startContainer,i=e.startOffset,s=e.endContainer,r=e.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor);return Ni(o.node,o.offset,s,r)&&([t,i,s,r]=[s,r,t,i]),{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}}function Om(n,e){if(e.getComposedRanges){let s=e.getComposedRanges(n.root)[0];if(s)return ga(n,s)}let t=null;function i(s){s.preventDefault(),s.stopImmediatePropagation(),t=s.getTargetRanges()[0]}return n.contentDOM.addEventListener("beforeinput",i,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",i,!0),t?ga(n,t):null}class ym{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let s=e.state.selection.main,{anchor:r,head:o}=s,l=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:l,drifted:!1});let h={from:l,to:a,insert:V.of(i.text.split(` -`))};if(h.from==this.from&&rthis.to&&(h.to=r),h.from==h.to&&!h.insert.length){let c=b.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));c.main.eq(s)||e.dispatch({selection:c,userEvent:"select"});return}if((A.mac||A.android)&&h.from==o-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(h={from:l,to:a,insert:V.of([i.text.replace("."," ")])}),this.pendingContextChange=h,!e.state.readOnly){let c=this.to-this.from+(h.to-h.from+h.insert.length);Ho(e,h,b.single(this.toEditorPos(i.selectionStart,c),this.toEditorPos(i.selectionEnd,c)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state))},this.handlers.characterboundsupdate=i=>{let s=[],r=null;for(let o=this.toEditorPos(i.rangeStart),l=this.toEditorPos(i.rangeEnd);o{let s=[];for(let r of i.getTextFormats()){let o=r.underlineStyle,l=r.underlineThickness;if(o!="None"&&l!="None"){let a=this.toEditorPos(r.rangeStart),h=this.toEditorPos(r.rangeEnd);if(a{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let s=Gi(i.root);s&&s.rangeCount&&this.editContext.updateSelectionBounds(s.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,s=this.pendingContextChange;return e.changes.iterChanges((r,o,l,a,h)=>{if(i)return;let c=h.length-(o-r);if(s&&o>=s.to)if(s.from==r&&s.to==o&&s.insert.eq(h)){s=this.pendingContextChange=null,t+=c,this.to+=c;return}else s=null,this.revertPending(e.state);if(r+=t,o+=t,o<=this.from)this.from+=c,this.to+=c;else if(rthis.to||this.to-this.from+h.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(r),this.toContextPos(o),h.toString()),this.to+=c}t+=c}),s&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(s=>!s.isUserEvent("input.type")&&s.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),s=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=s)&&this.editContext.updateSelection(i,s)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}}class Q{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(s=>s.forEach(r=>i(r,this)))||(s=>this.update(s)),this.dispatch=this.dispatch.bind(this),this._root=e.root||Kd(e.parent)||document,this.viewState=new da(e.state||I.create(e)),e.scrollTo&&e.scrollTo.is(Qn)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(ri).map(s=>new nr(s));for(let s of this.plugins)s.update(this);this.observer=new gm(this),this.inputState=new zp(this),this.inputState.ensureHandlers(this.plugins),this.docView=new jl(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>this.requestMeasure())}dispatch(...e){let t=e.length==1&&e[0]instanceof oe?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,i=!1,s,r=this.state;for(let u of e){if(u.startState!=r)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");r=u.state}if(this.destroyed){this.viewState.state=r;return}let o=this.hasFocus,l=0,a=null;e.some(u=>u.annotation(ef))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=tf(r,o),a||(l=1));let h=this.observer.delayedAndroidKey,c=null;if(h?(this.observer.clearDelayedAndroidKey(),c=this.observer.readChange(),(c&&!this.state.doc.eq(r.doc)||!this.state.selection.eq(r.selection))&&(c=null)):this.observer.clear(),r.facet(I.phrases)!=this.state.facet(I.phrases))return this.setState(r);s=ds.create(this,r,e),s.flags|=l;let f=this.viewState.scrollTarget;try{this.updateState=2;for(let u of e){if(f&&(f=f.map(u.changes)),u.scrollIntoView){let{main:d}=u.state.selection;f=new ci(d.empty?d:b.cursor(d.head,d.head>d.anchor?-1:1))}for(let d of u.effects)d.is(Qn)&&(f=d.value.clip(this.state))}this.viewState.update(s,f),this.bidiCache=ms.update(this.bidiCache,s.changes),s.empty||(this.updatePlugins(s),this.inputState.update(s)),t=this.docView.update(s),this.state.facet(qi)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(u=>u.isUserEvent("select.pointer")))}finally{this.updateState=0}if(s.startState.facet(qn)!=s.state.facet(qn)&&(this.viewState.mustMeasureContent=!0),(t||i||f||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!s.empty)for(let u of this.state.facet(ro))try{u(s)}catch(d){Ae(this.state,d,"update listener")}(a||c)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),c&&!jc(this,c)&&h.force&&hi(this.contentDOM,h.key,h.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new da(e),this.plugins=e.facet(ri).map(i=>new nr(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new jl(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(ri),i=e.state.facet(ri);if(t!=i){let s=[];for(let r of i){let o=t.indexOf(r);if(o<0)s.push(new nr(r));else{let l=this.plugins[o];l.mustUpdate=e,s.push(l)}}for(let r of this.plugins)r.mustUpdate!=e&&r.destroy(this);this.plugins=s,this.pluginMap.clear()}else for(let s of this.plugins)s.mustUpdate=e;for(let s=0;s-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.scrollDOM,s=i.scrollTop*this.scaleY,{scrollAnchorPos:r,scrollAnchorHeight:o}=this.viewState;Math.abs(s-this.viewState.scrollTop)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(o<0)if(mc(i))r=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(s);r=d.from,o=d.top}this.updateState=1;let a=this.viewState.measure(this);if(!a&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let h=[];a&4||([this.measureRequests,h]=[h,this.measureRequests]);let c=h.map(d=>{try{return d.read(this)}catch(p){return Ae(this.state,p),Oa}}),f=ds.create(this,this.state,[]),u=!1;f.flags|=a,t?t.flags|=a:t=f,this.updateState=2,f.empty||(this.updatePlugins(f),this.inputState.update(f),this.updateAttrs(),u=this.docView.update(f),u&&this.docViewUpdate());for(let d=0;d1||p<-1){s=s+p,i.scrollTop=s/this.scaleY,o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(ro))l(t)}get themeClasses(){return co+" "+(this.state.facet(ho)?of:rf)+" "+this.state.facet(qn)}updateAttrs(){let e=ya(this,Nc,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(pt)?"true":"false",class:"cm-content",style:`${A.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),ya(this,Xo,t);let i=this.observer.ignore(()=>{let s=eo(this.contentDOM,this.contentAttrs,t),r=eo(this.dom,this.editorAttrs,e);return s||r});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let s of i.effects)if(s.is(Q.announce)){t&&(this.announceDOM.textContent=""),t=!1;let r=this.announceDOM.appendChild(document.createElement("div"));r.textContent=s.value}}mountStyles(){this.styleModules=this.state.facet(qi);let e=this.state.facet(Q.cspNonce);mi.mount(this.root,this.styleModules.concat(pm).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;ti.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return rr(this,e,Jl(this,e,t,i))}moveByGroup(e,t){return rr(this,e,Jl(this,e,t,i=>Mp(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),s=this.textDirectionAt(e.from),r=i[t?i.length-1:0];return b.cursor(r.side(t,s)+e.from,r.forward(!t,s)?1:-1)}moveToLineBoundary(e,t,i=!0){return Ap(this,e,t,i)}moveVertically(e,t,i){return rr(this,e,Rp(this,e,t,i))}domAtPos(e){return this.docView.domAtPos(e)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){return this.readMeasured(),Hc(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.docView.coordsAt(e,t);if(!i||i.left==i.right)return i;let s=this.state.doc.lineAt(e),r=this.bidiSpans(s),o=r[Pt.find(r,e-s.from,-1,t)];return Bs(i,o.dir==Z.LTR==t>0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(Wc)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>bm)return Mc(e.length);let t=this.textDirectionAt(e.from),i;for(let r of this.bidiCache)if(r.from==e.from&&r.dir==t&&(r.fresh||Ac(r.isolates,i=Hl(this,e))))return r.order;i||(i=Hl(this,e));let s=dp(e.text,t,i);return this.bidiCache.push(new ms(e.from,e.to,t,i,!0,s)),s}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||A.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{dc(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){return Qn.of(new ci(typeof e=="number"?b.cursor(e):e,t.y,t.x,t.yMargin,t.xMargin))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return Qn.of(new ci(b.cursor(i.from),"start","start",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return le.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return le.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=mi.newName(),s=[qn.of(i),qi.of(fo(`.${i}`,e))];return t&&t.dark&&s.push(ho.of(!0)),s}static baseTheme(e){return Et.lowest(qi.of(fo("."+co,e,lf)))}static findFromDOM(e){var t;let i=e.querySelector(".cm-content"),s=i&&_.get(i)||_.get(e);return((t=s?.rootView)===null||t===void 0?void 0:t.view)||null}}Q.styleModule=qi;Q.inputHandler=Bc;Q.clipboardInputFilter=No;Q.clipboardOutputFilter=Fo;Q.scrollHandler=Ic;Q.focusChangeEffect=Lc;Q.perLineTextDirection=Wc;Q.exceptionSink=$c;Q.updateListener=ro;Q.editable=pt;Q.mouseSelectionStyle=qc;Q.dragMovesSelection=Ec;Q.clickAddsSelectionRange=Dc;Q.decorations=Yi;Q.outerDecorations=Fc;Q.atomicRanges=_o;Q.bidiIsolatedRanges=Xc;Q.scrollMargins=_c;Q.darkTheme=ho;Q.cspNonce=M.define({combine:n=>n.length?n[0]:""});Q.contentAttributes=Xo;Q.editorAttributes=Nc;Q.lineWrapping=Q.contentAttributes.of({class:"cm-lineWrapping"});Q.announce=B.define();const bm=4096,Oa={};class ms{constructor(e,t,i,s,r,o){this.from=e,this.to=t,this.dir=i,this.isolates=s,this.fresh=r,this.order=o}static update(e,t){if(t.empty&&!e.some(r=>r.fresh))return e;let i=[],s=e.length?e[e.length-1].dir:Z.LTR;for(let r=Math.max(0,e.length-10);r=0;s--){let r=i[s],o=typeof r=="function"?r(n):r;o&&Jr(o,t)}return t}const xm=A.mac?"mac":A.windows?"win":A.linux?"linux":"key";function Sm(n,e){const t=n.split(/-(?!$)/);let i=t[t.length-1];i=="Space"&&(i=" ");let s,r,o,l;for(let a=0;ai.concat(s),[]))),t}function wm(n,e,t){return hf(af(n.state),e,n,t)}let vt=null;const vm=4e3;function Tm(n,e=xm){let t=Object.create(null),i=Object.create(null),s=(o,l)=>{let a=i[o];if(a==null)i[o]=l;else if(a!=l)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},r=(o,l,a,h,c)=>{var f,u;let d=t[o]||(t[o]=Object.create(null)),p=l.split(/ (?!$)/).map(y=>Sm(y,e));for(let y=1;y{let v=vt={view:k,prefix:S,scope:o};return setTimeout(()=>{vt==v&&(vt=null)},vm),!0}]})}let m=p.join(" ");s(m,!1);let g=d[m]||(d[m]={preventDefault:!1,stopPropagation:!1,run:((u=(f=d._any)===null||f===void 0?void 0:f.run)===null||u===void 0?void 0:u.slice())||[]});a&&g.run.push(a),h&&(g.preventDefault=!0),c&&(g.stopPropagation=!0)};for(let o of n){let l=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let h of l){let c=t[h]||(t[h]=Object.create(null));c._any||(c._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:f}=o;for(let u in c)c[u].run.push(d=>f(d,uo))}let a=o[e]||o.key;if(a)for(let h of l)r(h,a,o.run,o.preventDefault,o.stopPropagation),o.shift&&r(h,"Shift-"+a,o.shift,o.preventDefault,o.stopPropagation)}return t}let uo=null;function hf(n,e,t,i){uo=e;let s=Hd(e),r=Ce(s,0),o=Ke(r)==s.length&&s!=" ",l="",a=!1,h=!1,c=!1;vt&&vt.view==t&&vt.scope==i&&(l=vt.prefix+" ",Zc.indexOf(e.keyCode)<0&&(h=!0,vt=null));let f=new Set,u=g=>{if(g){for(let y of g.run)if(!f.has(y)&&(f.add(y),y(t)))return g.stopPropagation&&(c=!0),!0;g.preventDefault&&(g.stopPropagation&&(c=!0),h=!0)}return!1},d=n[i],p,m;return d&&(u(d[l+$n(s,e,!o)])?a=!0:o&&(e.altKey||e.metaKey||e.ctrlKey)&&!(A.windows&&e.ctrlKey&&e.altKey)&&!(A.mac&&e.altKey&&!e.ctrlKey)&&(p=At[e.keyCode])&&p!=s?(u(d[l+$n(p,e,!0)])||e.shiftKey&&(m=ji[e.keyCode])!=s&&m!=p&&u(d[l+$n(m,e,!1)]))&&(a=!0):o&&e.shiftKey&&u(d[l+$n(s,e,!0)])&&(a=!0),!a&&u(d._any)&&(a=!0)),h&&(a=!0),a&&c&&e.stopPropagation(),uo=null,a}class pn{constructor(e,t,i,s,r){this.className=e,this.left=t,this.top=i,this.width=s,this.height=r}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,i){if(i.empty){let s=e.coordsAtPos(i.head,i.assoc||1);if(!s)return[];let r=cf(e);return[new pn(t,s.left-r.left,s.top-r.top,null,s.bottom-s.top)]}else return Cm(e,t,i)}}function cf(n){let e=n.scrollDOM.getBoundingClientRect();return{left:(n.textDirection==Z.LTR?e.left:e.right-n.scrollDOM.clientWidth*n.scaleX)-n.scrollDOM.scrollLeft*n.scaleX,top:e.top-n.scrollDOM.scrollTop*n.scaleY}}function xa(n,e,t,i){let s=n.coordsAtPos(e,t*2);if(!s)return i;let r=n.dom.getBoundingClientRect(),o=(s.top+s.bottom)/2,l=n.posAtCoords({x:r.left+1,y:o}),a=n.posAtCoords({x:r.right-1,y:o});return l==null||a==null?i:{from:Math.max(i.from,Math.min(l,a)),to:Math.min(i.to,Math.max(l,a))}}function Cm(n,e,t){if(t.to<=n.viewport.from||t.from>=n.viewport.to)return[];let i=Math.max(t.from,n.viewport.from),s=Math.min(t.to,n.viewport.to),r=n.textDirection==Z.LTR,o=n.contentDOM,l=o.getBoundingClientRect(),a=cf(n),h=o.querySelector(".cm-line"),c=h&&window.getComputedStyle(h),f=l.left+(c?parseInt(c.paddingLeft)+Math.min(0,parseInt(c.textIndent)):0),u=l.right-(c?parseInt(c.paddingRight):0),d=lo(n,i,1),p=lo(n,s,-1),m=d.type==we.Text?d:null,g=p.type==we.Text?p:null;if(m&&(n.lineWrapping||d.widgetLineBreaks)&&(m=xa(n,i,1,m)),g&&(n.lineWrapping||p.widgetLineBreaks)&&(g=xa(n,s,-1,g)),m&&g&&m.from==g.from&&m.to==g.to)return S(k(t.from,t.to,m));{let x=m?k(t.from,null,m):v(d,!1),w=g?k(null,t.to,g):v(p,!0),T=[];return(m||d).to<(g||p).from-(m&&g?1:0)||d.widgetLineBreaks>1&&x.bottom+n.defaultLineHeight/2P&&W.from=ee)break;Se>N&&E(Math.max(ie,N),x==null&&ie<=P,Math.min(Se,ee),w==null&&Se>=q,te.dir)}if(N=K.to+1,N>=ee)break}return R.length==0&&E(P,x==null,q,w==null,n.textDirection),{top:$,bottom:L,horizontal:R}}function v(x,w){let T=l.top+(w?x.top:x.bottom);return{top:T,bottom:T,horizontal:[]}}}function Pm(n,e){return n.constructor==e.constructor&&n.eq(e)}class Qm{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(ts)!=e.state.facet(ts)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,i=e.facet(ts);for(;t!Pm(t,this.drawn[i]))){let t=this.dom.firstChild,i=0;for(let s of e)s.update&&t&&s.constructor&&this.drawn[i].constructor&&s.update(t,this.drawn[i])?(t=t.nextSibling,i++):this.dom.insertBefore(s.draw(),t);for(;t;){let s=t.nextSibling;t.remove(),t=s}this.drawn=e}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}}const ts=M.define();function ff(n){return[le.define(e=>new Qm(e,n)),ts.of(n)]}const Ki=M.define({combine(n){return ot(n,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function Am(n={}){return[Ki.of(n),Mm,Rm,Dm,zc.of(!0)]}function uf(n){return n.startState.facet(Ki)!=n.state.facet(Ki)}const Mm=ff({above:!0,markers(n){let{state:e}=n,t=e.facet(Ki),i=[];for(let s of e.selection.ranges){let r=s==e.selection.main;if(s.empty||t.drawRangeCursor){let o=r?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",l=s.empty?s:b.cursor(s.head,s.head>s.anchor?-1:1);for(let a of pn.forRange(n,o,l))i.push(a)}}return i},update(n,e){n.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let t=uf(n);return t&&Sa(n.state,e),n.docChanged||n.selectionSet||t},mount(n,e){Sa(e.state,n)},class:"cm-cursorLayer"});function Sa(n,e){e.style.animationDuration=n.facet(Ki).cursorBlinkRate+"ms"}const Rm=ff({above:!1,markers(n){return n.state.selection.ranges.map(e=>e.empty?[]:pn.forRange(n,"cm-selectionBackground",e)).reduce((e,t)=>e.concat(t))},update(n,e){return n.docChanged||n.selectionSet||n.viewportChanged||uf(n)},class:"cm-selectionLayer"}),Dm=Et.highest(Q.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:"transparent !important"},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}})),df=B.define({map(n,e){return n==null?null:e.mapPos(n)}}),Li=ue.define({create(){return null},update(n,e){return n!=null&&(n=e.changes.mapPos(n)),e.effects.reduce((t,i)=>i.is(df)?i.value:t,n)}}),Em=le.fromClass(class{constructor(n){this.view=n,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(n){var e;let t=n.state.field(Li);t==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(n.startState.field(Li)!=t||n.docChanged||n.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:n}=this,e=n.state.field(Li),t=e!=null&&n.coordsAtPos(e);if(!t)return null;let i=n.scrollDOM.getBoundingClientRect();return{left:t.left-i.left+n.scrollDOM.scrollLeft*n.scaleX,top:t.top-i.top+n.scrollDOM.scrollTop*n.scaleY,height:t.bottom-t.top}}drawCursor(n){if(this.cursor){let{scaleX:e,scaleY:t}=this.view;n?(this.cursor.style.left=n.left/e+"px",this.cursor.style.top=n.top/t+"px",this.cursor.style.height=n.height/t+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(n){this.view.state.field(Li)!=n&&this.view.dispatch({effects:df.of(n)})}},{eventObservers:{dragover(n){this.setDropPos(this.view.posAtCoords({x:n.clientX,y:n.clientY}))},dragleave(n){(n.target==this.view.contentDOM||!this.view.contentDOM.contains(n.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function qm(){return[Li,Em]}function ka(n,e,t,i,s){e.lastIndex=0;for(let r=n.iterRange(t,i),o=t,l;!r.next().done;o+=r.value.length)if(!r.lineBreak)for(;l=e.exec(r.value);)s(o+l.index,l)}function $m(n,e){let t=n.visibleRanges;if(t.length==1&&t[0].from==n.viewport.from&&t[0].to==n.viewport.to)return t;let i=[];for(let{from:s,to:r}of t)s=Math.max(n.state.doc.lineAt(s).from,s-e),r=Math.min(n.state.doc.lineAt(r).to,r+e),i.length&&i[i.length-1].to>=s?i[i.length-1].to=r:i.push({from:s,to:r});return i}class Bm{constructor(e){const{regexp:t,decoration:i,decorate:s,boundary:r,maxLength:o=1e3}=e;if(!t.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=t,s)this.addMatch=(l,a,h,c)=>s(c,h,h+l[0].length,l,a);else if(typeof i=="function")this.addMatch=(l,a,h,c)=>{let f=i(l,a,h);f&&c(h,h+l[0].length,f)};else if(i)this.addMatch=(l,a,h,c)=>c(h,h+l[0].length,i);else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=r,this.maxLength=o}createDeco(e){let t=new gt,i=t.add.bind(t);for(let{from:s,to:r}of $m(e,this.maxLength))ka(e.state.doc,this.regexp,s,r,(o,l)=>this.addMatch(l,e,o,i));return t.finish()}updateDeco(e,t){let i=1e9,s=-1;return e.docChanged&&e.changes.iterChanges((r,o,l,a)=>{a>=e.view.viewport.from&&l<=e.view.viewport.to&&(i=Math.min(l,i),s=Math.max(a,s))}),e.viewportMoved||s-i>1e3?this.createDeco(e.view):s>-1?this.updateRange(e.view,t.map(e.changes),i,s):t}updateRange(e,t,i,s){for(let r of e.visibleRanges){let o=Math.max(r.from,i),l=Math.min(r.to,s);if(l>=o){let a=e.state.doc.lineAt(o),h=a.toa.from;o--)if(this.boundary.test(a.text[o-1-a.from])){c=o;break}for(;lu.push(y.range(m,g));if(a==h)for(this.regexp.lastIndex=c-a.from;(d=this.regexp.exec(a.text))&&d.indexthis.addMatch(g,e,m,p));t=t.update({filterFrom:c,filterTo:f,filter:(m,g)=>mf,add:u})}}return t}}const po=/x/.unicode!=null?"gu":"g",Lm=new RegExp(`[\0-\b ---Ÿ­؜​‎‏\u2028\u2029‭‮⁦⁧⁩\uFEFF-]`,po),Wm={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"};let ar=null;function zm(){var n;if(ar==null&&typeof document<"u"&&document.body){let e=document.body.style;ar=((n=e.tabSize)!==null&&n!==void 0?n:e.MozTabSize)!=null}return ar||!1}const is=M.define({combine(n){let e=ot(n,{render:null,specialChars:Lm,addSpecialChars:null});return(e.replaceTabs=!zm())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,po)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,po)),e}});function Im(n={}){return[is.of(n),Vm()]}let wa=null;function Vm(){return wa||(wa=le.fromClass(class{constructor(n){this.view=n,this.decorations=D.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(n.state.facet(is)),this.decorations=this.decorator.createDeco(n)}makeDecorator(n){return new Bm({regexp:n.specialChars,decoration:(e,t,i)=>{let{doc:s}=t.state,r=Ce(e[0],0);if(r==9){let o=s.lineAt(i),l=t.state.tabSize,a=vi(o.text,l,i-o.from);return D.replace({widget:new _m((l-a%l)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[r]||(this.decorationCache[r]=D.replace({widget:new Xm(n,r)}))},boundary:n.replaceTabs?void 0:/[^]/})}update(n){let e=n.state.facet(is);n.startState.facet(is)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(n.view)):this.decorations=this.decorator.updateDeco(n,this.decorations)}},{decorations:n=>n.decorations}))}const Nm="•";function Fm(n){return n>=32?Nm:n==10?"␤":String.fromCharCode(9216+n)}class Xm extends xt{constructor(e,t){super(),this.options=e,this.code=t}eq(e){return e.code==this.code}toDOM(e){let t=Fm(this.code),i=e.state.phrase("Control character")+" "+(Wm[this.code]||"0x"+this.code.toString(16)),s=this.options.render&&this.options.render(this.code,i,t);if(s)return s;let r=document.createElement("span");return r.textContent=t,r.title=i,r.setAttribute("aria-label",i),r.className="cm-specialChar",r}ignoreEvent(){return!1}}class _m extends xt{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}}function Um(){return jm}const Hm=D.line({class:"cm-activeLine"}),jm=le.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=-1,t=[];for(let i of n.state.selection.ranges){let s=n.lineBlockAt(i.head);s.from>e&&(t.push(Hm.range(s.from)),e=s.from)}return D.set(t)}},{decorations:n=>n.decorations}),mo=2e3;function Gm(n,e,t){let i=Math.min(e.line,t.line),s=Math.max(e.line,t.line),r=[];if(e.off>mo||t.off>mo||e.col<0||t.col<0){let o=Math.min(e.off,t.off),l=Math.max(e.off,t.off);for(let a=i;a<=s;a++){let h=n.doc.line(a);h.length<=l&&r.push(b.range(h.from+o,h.to+l))}}else{let o=Math.min(e.col,t.col),l=Math.max(e.col,t.col);for(let a=i;a<=s;a++){let h=n.doc.line(a),c=Ur(h.text,o,n.tabSize,!0);if(c<0)r.push(b.cursor(h.to));else{let f=Ur(h.text,l,n.tabSize);r.push(b.range(h.from+c,h.from+f))}}}return r}function Zm(n,e){let t=n.coordsAtPos(n.viewport.from);return t?Math.round(Math.abs((t.left-e)/n.defaultCharacterWidth)):-1}function va(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1),i=n.state.doc.lineAt(t),s=t-i.from,r=s>mo?-1:s==i.length?Zm(n,e.clientX):vi(i.text,n.state.tabSize,t-i.from);return{line:i.number,col:r,off:s}}function Ym(n,e){let t=va(n,e),i=n.state.selection;return t?{update(s){if(s.docChanged){let r=s.changes.mapPos(s.startState.doc.line(t.line).from),o=s.state.doc.lineAt(r);t={line:o.number,col:t.col,off:Math.min(t.off,o.length)},i=i.map(s.changes)}},get(s,r,o){let l=va(n,s);if(!l)return i;let a=Gm(n.state,t,l);return a.length?o?b.create(a.concat(i.ranges)):b.create(a):i}}:null}function Km(n){let e=t=>t.altKey&&t.button==0;return Q.mouseSelectionStyle.of((t,i)=>e(i)?Ym(t,i):null)}const Jm={Alt:[18,n=>!!n.altKey],Control:[17,n=>!!n.ctrlKey],Shift:[16,n=>!!n.shiftKey],Meta:[91,n=>!!n.metaKey]},eg={style:"cursor: crosshair"};function tg(n={}){let[e,t]=Jm[n.key||"Alt"],i=le.fromClass(class{constructor(s){this.view=s,this.isDown=!1}set(s){this.isDown!=s&&(this.isDown=s,this.view.update([]))}},{eventObservers:{keydown(s){this.set(s.keyCode==e||t(s))},keyup(s){(s.keyCode==e||!t(s))&&this.set(!1)},mousemove(s){this.set(t(s))}}});return[i,Q.contentAttributes.of(s=>{var r;return!((r=s.plugin(i))===null||r===void 0)&&r.isDown?eg:null})]}const Mi="-10000px";class pf{constructor(e,t,i,s){this.facet=t,this.createTooltipView=i,this.removeTooltipView=s,this.input=e.state.facet(t),this.tooltips=this.input.filter(o=>o);let r=null;this.tooltipViews=this.tooltips.map(o=>r=i(o,r))}update(e,t){var i;let s=e.state.facet(this.facet),r=s.filter(a=>a);if(s===this.input){for(let a of this.tooltipViews)a.update&&a.update(e);return!1}let o=[],l=t?[]:null;for(let a=0;at[h]=a),t.length=l.length),this.input=s,this.tooltips=r,this.tooltipViews=o,!0}}function ig(n){let e=n.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}const hr=M.define({combine:n=>{var e,t,i;return{position:A.ios?"absolute":((e=n.find(s=>s.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((t=n.find(s=>s.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((i=n.find(s=>s.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||ig}}}),Ta=new WeakMap,Zo=le.fromClass(class{constructor(n){this.view=n,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=n.state.facet(hr);this.position=e.position,this.parent=e.parent,this.classes=n.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new pf(n,Yo,(t,i)=>this.createTooltip(t,i),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),n.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let n of this.manager.tooltipViews)this.intersectionObserver.observe(n.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(n){n.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(n,this.above);e&&this.observeIntersection();let t=e||n.geometryChanged,i=n.state.facet(hr);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let s of this.manager.tooltipViews)s.dom.style.position=this.position;t=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let s of this.manager.tooltipViews)this.container.appendChild(s.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(n,e){let t=n.create(this.view),i=e?e.dom:null;if(t.dom.classList.add("cm-tooltip"),n.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let s=document.createElement("div");s.className="cm-tooltip-arrow",t.dom.appendChild(s)}return t.dom.style.position=this.position,t.dom.style.top=Mi,t.dom.style.left="0px",this.container.insertBefore(t.dom,i),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var n,e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(n=i.destroy)===null||n===void 0||n.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let n=1,e=1,t=!1;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:r}=this.manager.tooltipViews[0];if(A.gecko)t=r.offsetParent!=this.container.ownerDocument.body;else if(r.style.top==Mi&&r.style.left=="0px"){let o=r.getBoundingClientRect();t=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}}if(t||this.position=="absolute")if(this.parent){let r=this.parent.getBoundingClientRect();r.width&&r.height&&(n=r.width/this.parent.offsetWidth,e=r.height/this.parent.offsetHeight)}else({scaleX:n,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),s=Uo(this.view);return{visible:{left:i.left+s.left,top:i.top+s.top,right:i.right-s.right,bottom:i.bottom-s.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((r,o)=>{let l=this.manager.tooltipViews[o];return l.getCoords?l.getCoords(r.pos):this.view.coordsAtPos(r.pos)}),size:this.manager.tooltipViews.map(({dom:r})=>r.getBoundingClientRect()),space:this.view.state.facet(hr).tooltipSpace(this.view),scaleX:n,scaleY:e,makeAbsolute:t}}writeMeasure(n){var e;if(n.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let l of this.manager.tooltipViews)l.dom.style.position="absolute"}let{visible:t,space:i,scaleX:s,scaleY:r}=n,o=[];for(let l=0;l=Math.min(t.bottom,i.bottom)||f.rightMath.min(t.right,i.right)+.1)){c.style.top=Mi;continue}let d=a.arrow?h.dom.querySelector(".cm-tooltip-arrow"):null,p=d?7:0,m=u.right-u.left,g=(e=Ta.get(h))!==null&&e!==void 0?e:u.bottom-u.top,y=h.offset||sg,S=this.view.textDirection==Z.LTR,k=u.width>i.right-i.left?S?i.left:i.right-u.width:S?Math.max(i.left,Math.min(f.left-(d?14:0)+y.x,i.right-m)):Math.min(Math.max(i.left,f.left-m+(d?14:0)-y.x),i.right-m),v=this.above[l];!a.strictSide&&(v?f.top-g-p-y.yi.bottom)&&v==i.bottom-f.bottom>f.top-i.top&&(v=this.above[l]=!v);let x=(v?f.top-i.top:i.bottom-f.bottom)-p;if(xk&&$.topw&&(w=v?$.top-g-2-p:$.bottom+p+2);if(this.position=="absolute"?(c.style.top=(w-n.parent.top)/r+"px",Ca(c,(k-n.parent.left)/s)):(c.style.top=w/r+"px",Ca(c,k/s)),d){let $=f.left+(S?y.x:-y.x)-(k+14-7);d.style.left=$/s+"px"}h.overlap!==!0&&o.push({left:k,top:w,right:T,bottom:w+g}),c.classList.toggle("cm-tooltip-above",v),c.classList.toggle("cm-tooltip-below",!v),h.positioned&&h.positioned(n.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let n of this.manager.tooltipViews)n.dom.style.top=Mi}},{eventObservers:{scroll(){this.maybeMeasure()}}});function Ca(n,e){let t=parseInt(n.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(n.style.left=e+"px")}const ng=Q.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),sg={x:0,y:0},Yo=M.define({enables:[Zo,ng]}),gs=M.define({combine:n=>n.reduce((e,t)=>e.concat(t),[])});class Is{static create(e){return new Is(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new pf(e,gs,(t,i)=>this.createHostedView(t,i),t=>t.dom.remove())}createHostedView(e,t){let i=e.create(this.view);return i.dom.classList.add("cm-tooltip-section"),this.dom.insertBefore(i.dom,t?t.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(e){for(let t of this.manager.tooltipViews)t.mount&&t.mount(e);this.mounted=!0}positioned(e){for(let t of this.manager.tooltipViews)t.positioned&&t.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let t of this.manager.tooltipViews)(e=t.destroy)===null||e===void 0||e.call(t)}passProp(e){let t;for(let i of this.manager.tooltipViews){let s=i[e];if(s!==void 0){if(t===void 0)t=s;else if(t!==s)return}}return t}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}}const rg=Yo.compute([gs],n=>{let e=n.facet(gs);return e.length===0?null:{pos:Math.min(...e.map(t=>t.pos)),end:Math.max(...e.map(t=>{var i;return(i=t.end)!==null&&i!==void 0?i:t.pos})),create:Is.create,above:e[0].above,arrow:e.some(t=>t.arrow)}});class og{constructor(e,t,i,s,r){this.view=e,this.source=t,this.field=i,this.setHover=s,this.hoverTime=r,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;el.bottom||t.xl.right+e.defaultCharacterWidth)return;let a=e.bidiSpans(e.state.doc.lineAt(s)).find(c=>c.from<=s&&c.to>=s),h=a&&a.dir==Z.RTL?-1:1;r=t.x{this.pending==l&&(this.pending=null,a&&!(Array.isArray(a)&&!a.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(a)?a:[a])}))},a=>Ae(e.state,a,"hover tooltip"))}else o&&!(Array.isArray(o)&&!o.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(o)?o:[o])})}get tooltip(){let e=this.view.plugin(Zo),t=e?e.manager.tooltips.findIndex(i=>i.create==Is.create):-1;return t>-1?e.manager.tooltipViews[t]:null}mousemove(e){var t,i;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:s,tooltip:r}=this;if(s.length&&r&&!lg(r.dom,e)||this.pending){let{pos:o}=s[0]||this.pending,l=(i=(t=s[0])===null||t===void 0?void 0:t.end)!==null&&i!==void 0?i:o;(o==l?this.view.posAtCoords(this.lastMove)!=o:!ag(this.view,o,l,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:t}=this;if(t.length){let{tooltip:i}=this;i&&i.dom.contains(e.relatedTarget)?this.watchTooltipLeave(i.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let t=i=>{e.removeEventListener("mouseleave",t),this.active.length&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener("mouseleave",t)}destroy(){clearTimeout(this.hoverTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}}const Bn=4;function lg(n,e){let{left:t,right:i,top:s,bottom:r}=n.getBoundingClientRect(),o;if(o=n.querySelector(".cm-tooltip-arrow")){let l=o.getBoundingClientRect();s=Math.min(l.top,s),r=Math.max(l.bottom,r)}return e.clientX>=t-Bn&&e.clientX<=i+Bn&&e.clientY>=s-Bn&&e.clientY<=r+Bn}function ag(n,e,t,i,s,r){let o=n.scrollDOM.getBoundingClientRect(),l=n.documentTop+n.documentPadding.top+n.contentHeight;if(o.left>i||o.rights||Math.min(o.bottom,l)=e&&a<=t}function hg(n,e={}){let t=B.define(),i=ue.define({create(){return[]},update(s,r){if(s.length&&(e.hideOnChange&&(r.docChanged||r.selection)?s=[]:e.hideOn&&(s=s.filter(o=>!e.hideOn(r,o))),r.docChanged)){let o=[];for(let l of s){let a=r.changes.mapPos(l.pos,-1,ge.TrackDel);if(a!=null){let h=Object.assign(Object.create(null),l);h.pos=a,h.end!=null&&(h.end=r.changes.mapPos(h.end)),o.push(h)}}s=o}for(let o of r.effects)o.is(t)&&(s=o.value),o.is(cg)&&(s=[]);return s},provide:s=>gs.from(s)});return{active:i,extension:[i,le.define(s=>new og(s,n,i,t,e.hoverTime||300)),rg]}}function mf(n,e){let t=n.plugin(Zo);if(!t)return null;let i=t.manager.tooltips.indexOf(e);return i<0?null:t.manager.tooltipViews[i]}const cg=B.define(),Pa=M.define({combine(n){let e,t;for(let i of n)e=e||i.topContainer,t=t||i.bottomContainer;return{topContainer:e,bottomContainer:t}}});function Ji(n,e){let t=n.plugin(gf),i=t?t.specs.indexOf(e):-1;return i>-1?t.panels[i]:null}const gf=le.fromClass(class{constructor(n){this.input=n.state.facet(en),this.specs=this.input.filter(t=>t),this.panels=this.specs.map(t=>t(n));let e=n.state.facet(Pa);this.top=new Ln(n,!0,e.topContainer),this.bottom=new Ln(n,!1,e.bottomContainer),this.top.sync(this.panels.filter(t=>t.top)),this.bottom.sync(this.panels.filter(t=>!t.top));for(let t of this.panels)t.dom.classList.add("cm-panel"),t.mount&&t.mount()}update(n){let e=n.state.facet(Pa);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new Ln(n.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new Ln(n.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let t=n.state.facet(en);if(t!=this.input){let i=t.filter(a=>a),s=[],r=[],o=[],l=[];for(let a of i){let h=this.specs.indexOf(a),c;h<0?(c=a(n.view),l.push(c)):(c=this.panels[h],c.update&&c.update(n)),s.push(c),(c.top?r:o).push(c)}this.specs=i,this.panels=s,this.top.sync(r),this.bottom.sync(o);for(let a of l)a.dom.classList.add("cm-panel"),a.mount&&a.mount()}else for(let i of this.panels)i.update&&i.update(n)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:n=>Q.scrollMargins.of(e=>{let t=e.plugin(n);return t&&{top:t.top.scrollMargin(),bottom:t.bottom.scrollMargin()}})});class Ln{constructor(e,t,i){this.view=e,this.top=t,this.container=i,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let t of this.panels)t.destroy&&e.indexOf(t)<0&&t.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom",this.dom.style[this.top?"top":"bottom"]="0";let t=this.container||this.view.dom;t.insertBefore(this.dom,this.top?t.firstChild:null)}let e=this.dom.firstChild;for(let t of this.panels)if(t.dom.parentNode==this.dom){for(;e!=t.dom;)e=Qa(e);e=e.nextSibling}else this.dom.insertBefore(t.dom,e);for(;e;)e=Qa(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}}function Qa(n){let e=n.nextSibling;return n.remove(),e}const en=M.define({enables:gf});class yt extends Ht{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}yt.prototype.elementClass="";yt.prototype.toDOM=void 0;yt.prototype.mapMode=ge.TrackBefore;yt.prototype.startSide=yt.prototype.endSide=-1;yt.prototype.point=!0;const ns=M.define(),fg=M.define(),ug={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>F.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},Xi=M.define();function dg(n){return[Of(),Xi.of({...ug,...n})]}const Aa=M.define({combine:n=>n.some(e=>e)});function Of(n){return[pg]}const pg=le.fromClass(class{constructor(n){this.view=n,this.domAfter=null,this.prevViewport=n.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=n.state.facet(Xi).map(e=>new Ra(n,e)),this.fixed=!n.state.facet(Aa);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(n){if(this.updateGutters(n)){let e=this.prevViewport,t=n.view.viewport,i=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(i<(t.to-t.from)*.8)}if(n.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(Aa)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=n.view.viewport}syncGutters(n){let e=this.dom.nextSibling;n&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=F.iter(this.view.state.facet(ns),this.view.viewport.from),i=[],s=this.gutters.map(r=>new mg(r,this.view.viewport,-this.view.documentPadding.top));for(let r of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(r.type)){let o=!0;for(let l of r.type)if(l.type==we.Text&&o){go(t,i,l.from);for(let a of s)a.line(this.view,l,i);o=!1}else if(l.widget)for(let a of s)a.widget(this.view,l)}else if(r.type==we.Text){go(t,i,r.from);for(let o of s)o.line(this.view,r,i)}else if(r.widget)for(let o of s)o.widget(this.view,r);for(let r of s)r.finish();n&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(n){let e=n.startState.facet(Xi),t=n.state.facet(Xi),i=n.docChanged||n.heightChanged||n.viewportChanged||!F.eq(n.startState.facet(ns),n.state.facet(ns),n.view.viewport.from,n.view.viewport.to);if(e==t)for(let s of this.gutters)s.update(n)&&(i=!0);else{i=!0;let s=[];for(let r of t){let o=e.indexOf(r);o<0?s.push(new Ra(this.view,r)):(this.gutters[o].update(n),s.push(this.gutters[o]))}for(let r of this.gutters)r.dom.remove(),s.indexOf(r)<0&&r.destroy();for(let r of s)r.config.side=="after"?this.getDOMAfter().appendChild(r.dom):this.dom.appendChild(r.dom);this.gutters=s}return i}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:n=>Q.scrollMargins.of(e=>{let t=e.plugin(n);if(!t||t.gutters.length==0||!t.fixed)return null;let i=t.dom.offsetWidth*e.scaleX,s=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==Z.LTR?{left:i,right:s}:{right:i,left:s}})});function Ma(n){return Array.isArray(n)?n:[n]}function go(n,e,t){for(;n.value&&n.from<=t;)n.from==t&&e.push(n.value),n.next()}class mg{constructor(e,t,i){this.gutter=e,this.height=i,this.i=0,this.cursor=F.iter(e.markers,t.from)}addElement(e,t,i){let{gutter:s}=this,r=(t.top-this.height)/e.scaleY,o=t.height/e.scaleY;if(this.i==s.elements.length){let l=new yf(e,o,r,i);s.elements.push(l),s.dom.appendChild(l.dom)}else s.elements[this.i].update(e,o,r,i);this.height=t.bottom,this.i++}line(e,t,i){let s=[];go(this.cursor,s,t.from),i.length&&(s=s.concat(i));let r=this.gutter.config.lineMarker(e,t,s);r&&s.unshift(r);let o=this.gutter;s.length==0&&!o.config.renderEmptyElements||this.addElement(e,t,s)}widget(e,t){let i=this.gutter.config.widgetMarker(e,t.widget,t),s=i?[i]:null;for(let r of e.state.facet(fg)){let o=r(e,t.widget,t);o&&(s||(s=[])).push(o)}s&&this.addElement(e,t,s)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}}class Ra{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in t.domEventHandlers)this.dom.addEventListener(i,s=>{let r=s.target,o;if(r!=this.dom&&this.dom.contains(r)){for(;r.parentNode!=this.dom;)r=r.parentNode;let a=r.getBoundingClientRect();o=(a.top+a.bottom)/2}else o=s.clientY;let l=e.lineBlockAtHeight(o-e.documentTop);t.domEventHandlers[i](e,l,s)&&s.preventDefault()});this.markers=Ma(t.markers(e)),t.initialSpacer&&(this.spacer=new yf(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=Ma(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let s=this.config.updateSpacer(this.spacer.markers[0],e);s!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[s])}let i=e.view.viewport;return!F.eq(this.markers,t,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}}class yf{constructor(e,t,i,s){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,i,s)}update(e,t,i,s){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),gg(this.markers,s)||this.setMarkers(e,s)}setMarkers(e,t){let i="cm-gutterElement",s=this.dom.firstChild;for(let r=0,o=0;;){let l=o,a=rr(l,a,h)||o(l,a,h):o}return i}})}});class cr extends yt{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}}function fr(n,e){return n.state.facet(oi).formatNumber(e,n.state)}const bg=Xi.compute([oi],n=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(Og)},lineMarker(e,t,i){return i.some(s=>s.toDOM)?null:new cr(fr(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,i)=>{for(let s of e.state.facet(yg)){let r=s(e,t,i);if(r)return r}return null},lineMarkerChange:e=>e.startState.facet(oi)!=e.state.facet(oi),initialSpacer(e){return new cr(fr(e,Da(e.state.doc.lines)))},updateSpacer(e,t){let i=fr(t.view,Da(t.view.state.doc.lines));return i==e.number?e:new cr(i)},domEventHandlers:n.facet(oi).domEventHandlers,side:"before"}));function xg(n={}){return[oi.of(n),Of(),bg]}function Da(n){let e=9;for(;e{let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.head).from;s>t&&(t=s,e.push(Sg.range(s)))}return F.of(e)});function wg(){return kg}const bf=1024;let vg=0;class ur{constructor(e,t){this.from=e,this.to=t}}class z{constructor(e={}){this.id=vg++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")})}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=Te.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}}z.closedBy=new z({deserialize:n=>n.split(" ")});z.openedBy=new z({deserialize:n=>n.split(" ")});z.group=new z({deserialize:n=>n.split(" ")});z.isolate=new z({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});z.contextHash=new z({perNode:!0});z.lookAhead=new z({perNode:!0});z.mounted=new z({perNode:!0});class Os{constructor(e,t,i){this.tree=e,this.overlay=t,this.parser=i}static get(e){return e&&e.props&&e.props[z.mounted.id]}}const Tg=Object.create(null);class Te{constructor(e,t,i,s=0){this.name=e,this.props=t,this.id=i,this.flags=s}static define(e){let t=e.props&&e.props.length?Object.create(null):Tg,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),s=new Te(e.name||"",t,e.id,i);if(e.props){for(let r of e.props)if(Array.isArray(r)||(r=r(s)),r){if(r[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[r[0].id]=r[1]}}return s}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(z.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let s of i.split(" "))t[s]=e[i];return i=>{for(let s=i.prop(z.group),r=-1;r<(s?s.length:0);r++){let o=t[r<0?i.name:s[r]];if(o)return o}}}}Te.none=new Te("",Object.create(null),0,8);class Vs{constructor(e){this.types=e;for(let t=0;t0;for(let a=this.cursor(o|he.IncludeAnonymous);;){let h=!1;if(a.from<=r&&a.to>=s&&(!l&&a.type.isAnonymous||t(a)!==!1)){if(a.firstChild())continue;h=!0}for(;h&&i&&(l||!a.type.isAnonymous)&&i(a),!a.nextSibling();){if(!a.parent())return;h=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:el(Te.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,s)=>new U(this.type,t,i,s,this.propValues),e.makeTree||((t,i,s)=>new U(Te.none,t,i,s)))}static build(e){return Ag(e)}}U.empty=new U(Te.none,[],[],0);class Ko{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new Ko(this.buffer,this.index)}}class Rt{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return Te.none}toString(){let e=[];for(let t=0;t0));a=o[a+3]);return l}slice(e,t,i){let s=this.buffer,r=new Uint16Array(t-e),o=0;for(let l=e,a=0;l=e&&te;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function tn(n,e,t,i){for(var s;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to0?l.length:-1;e!=h;e+=t){let c=l[e],f=a[e]+o.from;if(xf(s,i,f,f+c.length)){if(c instanceof Rt){if(r&he.ExcludeBuffers)continue;let u=c.findChild(0,c.buffer.length,t,i-f,s);if(u>-1)return new tt(new Cg(o,c,e,f),null,u)}else if(r&he.IncludeAnonymous||!c.type.isAnonymous||Jo(c)){let u;if(!(r&he.IgnoreMounts)&&(u=Os.get(c))&&!u.overlay)return new Re(u.tree,f,e,o);let d=new Re(c,f,e,o);return r&he.IncludeAnonymous||!d.type.isAnonymous?d:d.nextChild(t<0?c.children.length-1:0,t,i,s)}}}if(r&he.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}enter(e,t,i=0){let s;if(!(i&he.IgnoreOverlays)&&(s=Os.get(this._tree))&&s.overlay){let r=e-this.from;for(let{from:o,to:l}of s.overlay)if((t>0?o<=r:o=r:l>r))return new Re(s.tree,s.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function qa(n,e,t,i){let s=n.cursor(),r=[];if(!s.firstChild())return r;if(t!=null){for(let o=!1;!o;)if(o=s.type.is(t),!s.nextSibling())return r}for(;;){if(i!=null&&s.type.is(i))return r;if(s.type.is(e)&&r.push(s.node),!s.nextSibling())return i==null?r:[]}}function Oo(n,e,t=e.length-1){for(let i=n;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}class Cg{constructor(e,t,i,s){this.parent=e,this.buffer=t,this.index=i,this.start=s}}class tt extends Sf{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.context.start,i);return r<0?null:new tt(this.context,this,r)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}enter(e,t,i=0){if(i&he.ExcludeBuffers)return null;let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return r<0?null:new tt(this.context,this,r)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new tt(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new tt(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,s=this.index+4,r=i.buffer[this.index+3];if(r>s){let o=i.buffer[this.index+1];e.push(i.slice(s,r,o)),t.push(0)}return new U(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function kf(n){if(!n.length)return null;let e=0,t=n[0];for(let r=1;rt.from||o.to=e){let l=new Re(o.tree,o.overlay[0].from+r.from,-1,r);(s||(s=[i])).push(tn(l,e,t,!1))}}return s?kf(s):i}class yo{get name(){return this.type.name}constructor(e,t=0){if(this.mode=t,this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,e instanceof Re)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:s}=this.buffer;return this.type=t||s.set.types[s.buffer[e]],this.from=i+s.buffer[e+1],this.to=i+s.buffer[e+2],!0}yield(e){return e?e instanceof Re?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:s}=this.buffer,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.buffer.start,i);return r<0?!1:(this.stack.push(this.index),this.yieldBuf(r))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&he.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&he.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&he.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let s=i<0?0:this.stack[i]+4;if(this.index!=s)return this.yieldBuf(t.findChild(s,this.index,-1,0,4))}else{let s=t.buffer[this.index+3];if(s<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(s)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:s}=this;if(s){if(e>0){if(this.index-1)for(let r=t+e,o=e<0?-1:i._tree.children.length;r!=o;r+=e){let l=i._tree.children[r];if(this.mode&he.IncludeAnonymous||l instanceof Rt||!l.type.isAnonymous||Jo(l))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let o=e;o;o=o._parent)if(o.index==s){if(s==this.index)return o;t=o,i=r+1;break e}s=this.stack[--r]}for(let s=i;s=0;r--){if(r<0)return Oo(this._tree,e,s);let o=i[t.buffer[this.stack[r]]];if(!o.isAnonymous){if(e[s]&&e[s]!=o.name)return!1;s--}}return!0}}function Jo(n){return n.children.some(e=>e instanceof Rt||!e.type.isAnonymous||Jo(e))}function Ag(n){var e;let{buffer:t,nodeSet:i,maxBufferLength:s=bf,reused:r=[],minRepeatType:o=i.types.length}=n,l=Array.isArray(t)?new Ko(t,t.length):t,a=i.types,h=0,c=0;function f(x,w,T,$,L,R){let{id:E,start:P,end:q,size:W}=l,N=c,ee=h;for(;W<0;)if(l.next(),W==-1){let H=r[E];T.push(H),$.push(P-x);return}else if(W==-3){h=E;return}else if(W==-4){c=E;return}else throw new RangeError(`Unrecognized record size: ${W}`);let K=a[E],te,ie,Se=P-x;if(q-P<=s&&(ie=g(l.pos-w,L))){let H=new Uint16Array(ie.size-ie.skip),ke=l.pos-ie.size,ne=H.length;for(;l.pos>ke;)ne=y(ie.start,H,ne);te=new Rt(H,q-ie.start,i),Se=ie.start-x}else{let H=l.pos-W;l.next();let ke=[],ne=[],se=E>=o?E:-1,ei=0,xn=q;for(;l.pos>H;)se>=0&&l.id==se&&l.size>=0?(l.end<=xn-s&&(p(ke,ne,P,ei,l.end,xn,se,N,ee),ei=ke.length,xn=l.end),l.next()):R>2500?u(P,H,ke,ne):f(P,H,ke,ne,se,R+1);if(se>=0&&ei>0&&ei-1&&ei>0){let Tl=d(K,ee);te=el(K,ke,ne,0,ke.length,0,q-P,Tl,Tl)}else te=m(K,ke,ne,q-P,N-q,ee)}T.push(te),$.push(Se)}function u(x,w,T,$){let L=[],R=0,E=-1;for(;l.pos>w;){let{id:P,start:q,end:W,size:N}=l;if(N>4)l.next();else{if(E>-1&&q=0;W-=3)P[N++]=L[W],P[N++]=L[W+1]-q,P[N++]=L[W+2]-q,P[N++]=N;T.push(new Rt(P,L[2]-q,i)),$.push(q-x)}}function d(x,w){return(T,$,L)=>{let R=0,E=T.length-1,P,q;if(E>=0&&(P=T[E])instanceof U){if(!E&&P.type==x&&P.length==L)return P;(q=P.prop(z.lookAhead))&&(R=$[E]+P.length+q)}return m(x,T,$,L,R,w)}}function p(x,w,T,$,L,R,E,P,q){let W=[],N=[];for(;x.length>$;)W.push(x.pop()),N.push(w.pop()+T-L);x.push(m(i.types[E],W,N,R-L,P-R,q)),w.push(L-T)}function m(x,w,T,$,L,R,E){if(R){let P=[z.contextHash,R];E=E?[P].concat(E):[P]}if(L>25){let P=[z.lookAhead,L];E=E?[P].concat(E):[P]}return new U(x,w,T,$,E)}function g(x,w){let T=l.fork(),$=0,L=0,R=0,E=T.end-s,P={size:0,start:0,skip:0};e:for(let q=T.pos-x;T.pos>q;){let W=T.size;if(T.id==w&&W>=0){P.size=$,P.start=L,P.skip=R,R+=4,$+=4,T.next();continue}let N=T.pos-W;if(W<0||N=o?4:0,K=T.start;for(T.next();T.pos>N;){if(T.size<0)if(T.size==-3)ee+=4;else break e;else T.id>=o&&(ee+=4);T.next()}L=K,$+=W,R+=ee}return(w<0||$==x)&&(P.size=$,P.start=L,P.skip=R),P.size>4?P:void 0}function y(x,w,T){let{id:$,start:L,end:R,size:E}=l;if(l.next(),E>=0&&$4){let q=l.pos-(E-4);for(;l.pos>q;)T=y(x,w,T)}w[--T]=P,w[--T]=R-x,w[--T]=L-x,w[--T]=$}else E==-3?h=$:E==-4&&(c=$);return T}let S=[],k=[];for(;l.pos>0;)f(n.start||0,n.bufferStart||0,S,k,-1,0);let v=(e=n.length)!==null&&e!==void 0?e:S.length?k[0]+S[0].length:0;return new U(a[n.topID],S.reverse(),k.reverse(),v)}const $a=new WeakMap;function ss(n,e){if(!n.isAnonymous||e instanceof Rt||e.type!=n)return 1;let t=$a.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=n||!(i instanceof U)){t=1;break}t+=ss(n,i)}$a.set(e,t)}return t}function el(n,e,t,i,s,r,o,l,a){let h=0;for(let p=i;p=c)break;w+=T}if(k==v+1){if(w>c){let T=p[v];d(T.children,T.positions,0,T.children.length,m[v]+S);continue}f.push(p[v])}else{let T=m[k-1]+p[k-1].length-x;f.push(el(n,p,m,v,k,x,T,null,a))}u.push(x+S-r)}}return d(e,t,i,s,0),(l||a)(f,u,o)}class Mg{constructor(){this.map=new WeakMap}setBuffer(e,t,i){let s=this.map.get(e);s||this.map.set(e,s=new Map),s.set(t,i)}getBuffer(e,t){let i=this.map.get(e);return i&&i.get(t)}set(e,t){e instanceof tt?this.setBuffer(e.context.buffer,e.index,t):e instanceof Re&&this.map.set(e.tree,t)}get(e){return e instanceof tt?this.getBuffer(e.context.buffer,e.index):e instanceof Re?this.map.get(e.tree):void 0}cursorSet(e,t){e.buffer?this.setBuffer(e.buffer.buffer,e.index,t):this.map.set(e.tree,t)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}}class _t{constructor(e,t,i,s,r=!1,o=!1){this.from=e,this.to=t,this.tree=i,this.offset=s,this.open=(r?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let s=[new _t(0,e.length,e,0,!1,i)];for(let r of t)r.to>e.length&&s.push(r);return s}static applyChanges(e,t,i=128){if(!t.length)return e;let s=[],r=1,o=e.length?e[0]:null;for(let l=0,a=0,h=0;;l++){let c=l=i)for(;o&&o.from=u.from||f<=u.to||h){let d=Math.max(u.from,a)-h,p=Math.min(u.to,f)-h;u=d>=p?null:new _t(d,p,u.tree,u.offset+h,l>0,!!c)}if(u&&s.push(u),o.to>f)break;o=rnew ur(s.from,s.to)):[new ur(0,0)]:[new ur(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let s=this.startParse(e,t,i);for(;;){let r=s.advance();if(r)return r}}}class Rg{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}}new z({perNode:!0});let Dg=0;class Le{constructor(e,t,i,s){this.name=e,this.set=t,this.base=i,this.modified=s,this.id=Dg++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i=typeof e=="string"?e:"?";if(e instanceof Le&&(t=e),t?.base)throw new Error("Can not derive from a modified tag");let s=new Le(i,[],null,[]);if(s.set.push(s),t)for(let r of t.set)s.set.push(r);return s}static defineModifier(e){let t=new ys(e);return i=>i.modified.indexOf(t)>-1?i:ys.get(i.base||i,i.modified.concat(t).sort((s,r)=>s.id-r.id))}}let Eg=0;class ys{constructor(e){this.name=e,this.instances=[],this.id=Eg++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(l=>l.base==e&&qg(t,l.modified));if(i)return i;let s=[],r=new Le(e.name,s,e,t);for(let l of t)l.instances.push(r);let o=$g(t);for(let l of e.set)if(!l.modified.length)for(let a of o)s.push(ys.get(l,a));return r}}function qg(n,e){return n.length==e.length&&n.every((t,i)=>t==e[i])}function $g(n){let e=[[]];for(let t=0;ti.length-t.length)}function wf(n){let e=Object.create(null);for(let t in n){let i=n[t];Array.isArray(i)||(i=[i]);for(let s of t.split(" "))if(s){let r=[],o=2,l=s;for(let f=0;;){if(l=="..."&&f>0&&f+3==s.length){o=1;break}let u=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(l);if(!u)throw new RangeError("Invalid path: "+s);if(r.push(u[0]=="*"?"":u[0][0]=='"'?JSON.parse(u[0]):u[0]),f+=u[0].length,f==s.length)break;let d=s[f++];if(f==s.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+s);l=s.slice(f)}let a=r.length-1,h=r[a];if(!h)throw new RangeError("Invalid path: "+s);let c=new bs(i,o,a>0?r.slice(0,a):null);e[h]=c.sort(e[h])}}return vf.add(e)}const vf=new z;class bs{constructor(e,t,i,s){this.tags=e,this.mode=t,this.context=i,this.next=s}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let o=s;for(let l of r)for(let a of l.set){let h=t[a.id];if(h){o=o?o+" "+h:h;break}}return o},scope:i}}function Bg(n,e){let t=null;for(let i of n){let s=i.style(e);s&&(t=t?t+" "+s:s)}return t}function Lg(n,e,t,i=0,s=n.length){let r=new Wg(i,Array.isArray(e)?e:[e],t);r.highlightRange(n.cursor(),i,s,"",r.highlighters),r.flush(s)}class Wg{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,s,r){let{type:o,from:l,to:a}=e;if(l>=i||a<=t)return;o.isTop&&(r=this.highlighters.filter(d=>!d.scope||d.scope(o)));let h=s,c=zg(e)||bs.empty,f=Bg(r,c.tags);if(f&&(h&&(h+=" "),h+=f,c.mode==1&&(s+=(s?" ":"")+f)),this.startSpan(Math.max(t,l),h),c.opaque)return;let u=e.tree&&e.tree.prop(z.mounted);if(u&&u.overlay){let d=e.node.enter(u.overlay[0].from+l,1),p=this.highlighters.filter(g=>!g.scope||g.scope(u.tree.type)),m=e.firstChild();for(let g=0,y=l;;g++){let S=g=k||!e.nextSibling())););if(!S||k>i)break;y=S.to+l,y>t&&(this.highlightRange(d.cursor(),Math.max(t,S.from+l),Math.min(i,y),"",p),this.startSpan(Math.min(i,y),h))}m&&e.parent()}else if(e.firstChild()){u&&(s="");do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,s,r),this.startSpan(Math.min(i,e.to),h)}while(e.nextSibling());e.parent()}}}function zg(n){let e=n.type.prop(vf);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}const C=Le.define,zn=C(),kt=C(),Ba=C(kt),La=C(kt),wt=C(),In=C(wt),dr=C(wt),Ze=C(),Lt=C(Ze),je=C(),Ge=C(),bo=C(),Ri=C(bo),Vn=C(),O={comment:zn,lineComment:C(zn),blockComment:C(zn),docComment:C(zn),name:kt,variableName:C(kt),typeName:Ba,tagName:C(Ba),propertyName:La,attributeName:C(La),className:C(kt),labelName:C(kt),namespace:C(kt),macroName:C(kt),literal:wt,string:In,docString:C(In),character:C(In),attributeValue:C(In),number:dr,integer:C(dr),float:C(dr),bool:C(wt),regexp:C(wt),escape:C(wt),color:C(wt),url:C(wt),keyword:je,self:C(je),null:C(je),atom:C(je),unit:C(je),modifier:C(je),operatorKeyword:C(je),controlKeyword:C(je),definitionKeyword:C(je),moduleKeyword:C(je),operator:Ge,derefOperator:C(Ge),arithmeticOperator:C(Ge),logicOperator:C(Ge),bitwiseOperator:C(Ge),compareOperator:C(Ge),updateOperator:C(Ge),definitionOperator:C(Ge),typeOperator:C(Ge),controlOperator:C(Ge),punctuation:bo,separator:C(bo),bracket:Ri,angleBracket:C(Ri),squareBracket:C(Ri),paren:C(Ri),brace:C(Ri),content:Ze,heading:Lt,heading1:C(Lt),heading2:C(Lt),heading3:C(Lt),heading4:C(Lt),heading5:C(Lt),heading6:C(Lt),contentSeparator:C(Ze),list:C(Ze),quote:C(Ze),emphasis:C(Ze),strong:C(Ze),link:C(Ze),monospace:C(Ze),strikethrough:C(Ze),inserted:C(),deleted:C(),changed:C(),invalid:C(),meta:Vn,documentMeta:C(Vn),annotation:C(Vn),processingInstruction:C(Vn),definition:Le.defineModifier("definition"),constant:Le.defineModifier("constant"),function:Le.defineModifier("function"),standard:Le.defineModifier("standard"),local:Le.defineModifier("local"),special:Le.defineModifier("special")};for(let n in O){let e=O[n];e instanceof Le&&(e.name=n)}Tf([{tag:O.link,class:"tok-link"},{tag:O.heading,class:"tok-heading"},{tag:O.emphasis,class:"tok-emphasis"},{tag:O.strong,class:"tok-strong"},{tag:O.keyword,class:"tok-keyword"},{tag:O.atom,class:"tok-atom"},{tag:O.bool,class:"tok-bool"},{tag:O.url,class:"tok-url"},{tag:O.labelName,class:"tok-labelName"},{tag:O.inserted,class:"tok-inserted"},{tag:O.deleted,class:"tok-deleted"},{tag:O.literal,class:"tok-literal"},{tag:O.string,class:"tok-string"},{tag:O.number,class:"tok-number"},{tag:[O.regexp,O.escape,O.special(O.string)],class:"tok-string2"},{tag:O.variableName,class:"tok-variableName"},{tag:O.local(O.variableName),class:"tok-variableName tok-local"},{tag:O.definition(O.variableName),class:"tok-variableName tok-definition"},{tag:O.special(O.variableName),class:"tok-variableName2"},{tag:O.definition(O.propertyName),class:"tok-propertyName tok-definition"},{tag:O.typeName,class:"tok-typeName"},{tag:O.namespace,class:"tok-namespace"},{tag:O.className,class:"tok-className"},{tag:O.macroName,class:"tok-macroName"},{tag:O.propertyName,class:"tok-propertyName"},{tag:O.operator,class:"tok-operator"},{tag:O.comment,class:"tok-comment"},{tag:O.meta,class:"tok-meta"},{tag:O.invalid,class:"tok-invalid"},{tag:O.punctuation,class:"tok-punctuation"}]);const xo="ͼ",Wa=typeof Symbol>"u"?"__"+xo:Symbol.for(xo),So=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),za=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{};class Ia{constructor(e,t){this.rules=[];let{finish:i}=t||{};function s(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function r(o,l,a,h){let c=[],f=/^@(\w+)\b/.exec(o[0]),u=f&&f[1]=="keyframes";if(f&&l==null)return a.push(o[0]+";");for(let d in l){let p=l[d];if(/&/.test(d))r(d.split(/,\s*/).map(m=>o.map(g=>m.replace(/&/,g))).reduce((m,g)=>m.concat(g)),p,a);else if(p&&typeof p=="object"){if(!f)throw new RangeError("The value of a property ("+d+") should be a primitive value.");r(s(d),p,c,u)}else p!=null&&c.push(d.replace(/_.*/,"").replace(/[A-Z]/g,m=>"-"+m.toLowerCase())+": "+p+";")}(c.length||u)&&a.push((i&&!f&&!h?o.map(i):o).join(", ")+" {"+c.join(" ")+"}")}for(let o in e)r(s(o),e[o],this.rules)}getRules(){return this.rules.join(` +`;this.styleTag.textContent=o;let l=t.head||t;this.styleTag.parentNode!=l&&l.insertBefore(this.styleTag,l.firstChild)}}setNonce(e){this.styleTag&&this.styleTag.getAttribute("nonce")!=e&&this.styleTag.setAttribute("nonce",e)}};var At={8:"Backspace",9:"Tab",10:"Enter",12:"NumLock",13:"Enter",16:"Shift",17:"Control",18:"Alt",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",44:"PrintScreen",45:"Insert",46:"Delete",59:";",61:"=",91:"Meta",92:"Meta",106:"*",107:"+",108:",",109:"-",110:".",111:"/",144:"NumLock",145:"ScrollLock",160:"Shift",161:"Shift",162:"Control",163:"Control",164:"Alt",165:"Alt",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},Gi={48:")",49:"!",50:"@",51:"#",52:"$",53:"%",54:"^",55:"&",56:"*",57:"(",59:":",61:"+",173:"_",186:":",187:"+",188:"<",189:"_",190:">",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},_d=typeof navigator<"u"&&/Mac/.test(navigator.platform),Ud=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(var me=0;me<10;me++)At[48+me]=At[96+me]=String(me);for(var me=1;me<=24;me++)At[me+111]="F"+me;for(var me=65;me<=90;me++)At[me]=String.fromCharCode(me+32),Gi[me]=String.fromCharCode(me);for(var tr in At)Gi.hasOwnProperty(tr)||(Gi[tr]=At[tr]);function Hd(n){var e=_d&&n.metaKey&&n.shiftKey&&!n.ctrlKey&&!n.altKey||Ud&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",t=!e&&n.key||(n.shiftKey?Gi:At)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}function Zi(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function Gr(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function Kn(n,e){if(!e.anchorNode)return!1;try{return Gr(n,e.anchorNode)}catch{return!1}}function Yi(n){return n.nodeType==3?Gt(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function Fi(n,e,t,i){return t?Vl(n,e,t,i,-1)||Vl(n,e,t,i,1):!1}function jt(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function us(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}function Vl(n,e,t,i,s){for(;;){if(n==t&&e==i)return!0;if(e==(s<0?0:rt(n))){if(n.nodeName=="DIV")return!1;let r=n.parentNode;if(!r||r.nodeType!=1)return!1;e=jt(n)+(s<0?0:1),n=r}else if(n.nodeType==1){if(n=n.childNodes[e+(s<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=s<0?rt(n):0}else return!1}}function rt(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function Ls(n,e){let t=e?n.left:n.right;return{left:t,right:t,top:n.top,bottom:n.bottom}}function jd(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function uc(n,e){let t=e.width/n.offsetWidth,i=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-n.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function Gd(n,e,t,i,s,r,o,l){let a=n.ownerDocument,h=a.defaultView||window;for(let c=n,f=!1;c&&!f;)if(c.nodeType==1){let u,d=c==a.body,p=1,m=1;if(d)u=jd(h);else{if(/^(fixed|sticky)$/.test(getComputedStyle(c).position)&&(f=!0),c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.assignedSlot||c.parentNode;continue}let S=c.getBoundingClientRect();({scaleX:p,scaleY:m}=uc(c,S)),u={left:S.left,right:S.left+c.clientWidth*p,top:S.top,bottom:S.top+c.clientHeight*m}}let g=0,y=0;if(s=="nearest")e.top0&&e.bottom>u.bottom+y&&(y=e.bottom-u.bottom+o)):e.bottom>u.bottom&&(y=e.bottom-u.bottom+o,t<0&&e.top-y0&&e.right>u.right+g&&(g=e.right-u.right+r)):e.right>u.right&&(g=e.right-u.right+r,t<0&&e.leftu.bottom||e.leftu.right)&&(e={left:Math.max(e.left,u.left),right:Math.min(e.right,u.right),top:Math.max(e.top,u.top),bottom:Math.min(e.bottom,u.bottom)}),c=c.assignedSlot||c.parentNode}else if(c.nodeType==11)c=c.host;else break}function Zd(n){let e=n.ownerDocument,t,i;for(let s=n.parentNode;s&&!(s==e.body||t&&i);)if(s.nodeType==1)!i&&s.scrollHeight>s.clientHeight&&(i=s),!t&&s.scrollWidth>s.clientWidth&&(t=s),s=s.assignedSlot||s.parentNode;else if(s.nodeType==11)s=s.host;else break;return{x:t,y:i}}class Yd{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?rt(t):0),i,Math.min(e.focusOffset,i?rt(i):0))}set(e,t,i,s){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=s}}let ii=null;function dc(n){if(n.setActive)return n.setActive();if(ii)return n.focus(ii);let e=[];for(let t=n;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(n.focus(ii==null?{get preventScroll(){return ii={preventScroll:!0},!0}}:void 0),!ii){ii=!1;for(let t=0;tMath.max(1,n.scrollHeight-n.clientHeight-4)}function gc(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable=="false")return null;t=t.childNodes[i-1],i=rt(t)}else if(t.parentNode&&!us(t))i=jt(t),t=t.parentNode;else return null}}function Oc(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&it)return f.domBoundsAround(e,t,h);if(u>=e&&s==-1&&(s=a,r=h),h>t&&f.dom.parentNode==this.dom){o=a,l=c;break}c=u,h=u+f.breakAfter}return{from:r,to:l<0?i+this.length:l,startDOM:(s?this.children[s-1].dom.nextSibling:null)||this.dom.firstChild,endDOM:o=0?this.children[o].dom:null}}markDirty(e=!1){this.flags|=2,this.markParentsDirty(e)}markParentsDirty(e){for(let t=this.parent;t;t=t.parent){if(e&&(t.flags|=2),t.flags&1)return;t.flags|=1,e=!1}}setParent(e){this.parent!=e&&(this.parent=e,this.flags&7&&this.markParentsDirty(!0))}setDOM(e){this.dom!=e&&(this.dom&&(this.dom.cmView=null),this.dom=e,e.cmView=this)}get rootView(){for(let e=this;;){let t=e.parent;if(!t)return e;e=t}}replaceChildren(e,t,i=Io){this.markDirty();for(let s=e;sthis.pos||e==this.pos&&(t>0||this.i==0||this.children[this.i-1].breakAfter))return this.off=e-this.pos,this;let i=this.children[--this.i];this.pos-=i.length+i.breakAfter}}}function bc(n,e,t,i,s,r,o,l,a){let{children:h}=n,c=h.length?h[e]:null,f=r.length?r[r.length-1]:null,u=f?f.breakAfter:o;if(!(e==i&&c&&!o&&!u&&r.length<2&&c.merge(t,s,r.length?f:null,t==0,l,a))){if(i0&&(!o&&r.length&&c.merge(t,c.length,r[0],!1,l,0)?c.breakAfter=r.shift().breakAfter:(t2);var A={mac:_l||/Mac/.test(Pe.platform),windows:/Win/.test(Pe.platform),linux:/Linux|X11/.test(Pe.platform),ie:Ws,ie_version:Sc?Zr.documentMode||6:Kr?+Kr[1]:Yr?+Yr[1]:0,gecko:Xl,gecko_version:Xl?+(/Firefox\/(\d+)/.exec(Pe.userAgent)||[0,0])[1]:0,chrome:!!ir,chrome_version:ir?+ir[1]:0,ios:_l,android:/Android\b/.test(Pe.userAgent),safari:kc,webkit_version:ep?+(/\bAppleWebKit\/(\d+)/.exec(Pe.userAgent)||[0,0])[1]:0,tabSize:Zr.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};const tp=256;class Xe extends _{constructor(e){super(),this.text=e}get length(){return this.text.length}createDOM(e){this.setDOM(e||document.createTextNode(this.text))}sync(e,t){this.dom||this.createDOM(),this.dom.nodeValue!=this.text&&(t&&t.node==this.dom&&(t.written=!0),this.dom.nodeValue=this.text)}reuseDOM(e){e.nodeType==3&&this.createDOM(e)}merge(e,t,i){return this.flags&8||i&&(!(i instanceof Xe)||this.length-(t-e)+i.length>tp||i.flags&8)?!1:(this.text=this.text.slice(0,e)+(i?i.text:"")+this.text.slice(t),this.markDirty(),!0)}split(e){let t=new Xe(this.text.slice(e));return this.text=this.text.slice(0,e),this.markDirty(),t.flags|=this.flags&8,t}localPosFromDOM(e,t){return e==this.dom?t:t?this.text.length:0}domAtPos(e){return new be(this.dom,e)}domBoundsAround(e,t,i){return{from:i,to:i+this.length,startDOM:this.dom,endDOM:this.dom.nextSibling}}coordsAt(e,t){return ip(this.dom,e,t)}}class Ot extends _{constructor(e,t=[],i=0){super(),this.mark=e,this.children=t,this.length=i;for(let s of t)s.setParent(this)}setAttrs(e){if(pc(e),this.mark.class&&(e.className=this.mark.class),this.mark.attrs)for(let t in this.mark.attrs)e.setAttribute(t,this.mark.attrs[t]);return e}canReuseDOM(e){return super.canReuseDOM(e)&&!((this.flags|e.flags)&8)}reuseDOM(e){e.nodeName==this.mark.tagName.toUpperCase()&&(this.setDOM(e),this.flags|=6)}sync(e,t){this.dom?this.flags&4&&this.setAttrs(this.dom):this.setDOM(this.setAttrs(document.createElement(this.mark.tagName))),super.sync(e,t)}merge(e,t,i,s,r,o){return i&&(!(i instanceof Ot&&i.mark.eq(this.mark))||e&&r<=0||te&&t.push(i=e&&(s=r),i=a,r++}let o=this.length-e;return this.length=e,s>-1&&(this.children.length=s,this.markDirty()),new Ot(this.mark,t,o)}domAtPos(e){return wc(this,e)}coordsAt(e,t){return Tc(this,e,t)}}function ip(n,e,t){let i=n.nodeValue.length;e>i&&(e=i);let s=e,r=e,o=0;e==0&&t<0||e==i&&t>=0?A.chrome||A.gecko||(e?(s--,o=1):r=0)?0:l.length-1];return A.safari&&!o&&a.width==0&&(a=Array.prototype.find.call(l,h=>h.width)||a),o?Ls(a,o<0):a||null}class Ct extends _{static create(e,t,i){return new Ct(e,t,i)}constructor(e,t,i){super(),this.widget=e,this.length=t,this.side=i,this.prevWidget=null}split(e){let t=Ct.create(this.widget,this.length-e,this.side);return this.length-=e,t}sync(e){(!this.dom||!this.widget.updateDOM(this.dom,e))&&(this.dom&&this.prevWidget&&this.prevWidget.destroy(this.dom),this.prevWidget=null,this.setDOM(this.widget.toDOM(e)),this.widget.editable||(this.dom.contentEditable="false"))}getSide(){return this.side}merge(e,t,i,s,r,o){return i&&(!(i instanceof Ct)||!this.widget.compare(i.widget)||e>0&&r<=0||t0)?be.before(this.dom):be.after(this.dom,e==this.length)}domBoundsAround(){return null}coordsAt(e,t){let i=this.widget.coordsAt(this.dom,e,t);if(i)return i;let s=this.dom.getClientRects(),r=null;if(!s.length)return null;let o=this.side?this.side<0:e>0;for(let l=o?s.length-1:0;r=s[l],!(e>0?l==0:l==s.length-1||r.top0?be.before(this.dom):be.after(this.dom)}localPosFromDOM(){return 0}domBoundsAround(){return null}coordsAt(e){return this.dom.getBoundingClientRect()}get overrideDOMText(){return V.empty}get isHidden(){return!0}}Xe.prototype.children=Ct.prototype.children=gi.prototype.children=Io;function wc(n,e){let t=n.dom,{children:i}=n,s=0;for(let r=0;sr&&e0;r--){let o=i[r-1];if(o.dom.parentNode==t)return o.domAtPos(o.length)}for(let r=s;r0&&e instanceof Ot&&s.length&&(i=s[s.length-1])instanceof Ot&&i.mark.eq(e.mark)?vc(i,e.children[0],t-1):(s.push(e),e.setParent(n)),n.length+=e.length}function Tc(n,e,t){let i=null,s=-1,r=null,o=-1;function l(h,c){for(let f=0,u=0;f=c&&(d.children.length?l(d,c-u):(!r||r.isHidden&&(t>0||sp(r,d)))&&(p>c||u==p&&d.getSide()>0)?(r=d,o=c-u):(u-1?1:0)!=s.length-(t&&s.indexOf(t)>-1?1:0))return!1;for(let r of i)if(r!=t&&(s.indexOf(r)==-1||n[r]!==e[r]))return!1;return!0}function eo(n,e,t){let i=!1;if(e)for(let s in e)t&&s in t||(i=!0,s=="style"?n.style.cssText="":n.removeAttribute(s));if(t)for(let s in t)e&&e[s]==t[s]||(i=!0,s=="style"?n.style.cssText=t[s]:n.setAttribute(s,t[s]));return i}function rp(n){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new Mt(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,s;if(e.isBlockGap)i=-5e8,s=4e8;else{let{start:r,end:o}=Cc(e,t);i=(r?t?-3e8:-1:5e8)-1,s=(o?t?2e8:1:-6e8)+1}return new Mt(e,i,s,t,e.widget||null,!0)}static line(e){return new pn(e)}static set(e,t=!1){return F.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}}D.none=F.empty;class dn extends D{constructor(e){let{start:t,end:i}=Cc(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.class=e.class||"",this.attrs=e.attributes||null}eq(e){var t,i;return this==e||e instanceof dn&&this.tagName==e.tagName&&(this.class||((t=this.attrs)===null||t===void 0?void 0:t.class))==(e.class||((i=e.attrs)===null||i===void 0?void 0:i.class))&&ds(this.attrs,e.attrs,"class")}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}}dn.prototype.point=!1;class pn extends D{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof pn&&this.spec.class==e.spec.class&&ds(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}}pn.prototype.mapMode=ge.TrackBefore;pn.prototype.point=!0;class Mt extends D{constructor(e,t,i,s,r,o){super(t,i,r,e),this.block=s,this.isReplace=o,this.mapMode=s?t<=0?ge.TrackBefore:ge.TrackAfter:ge.TrackDel}get type(){return this.startSide!=this.endSide?we.WidgetRange:this.startSide<=0?we.WidgetBefore:we.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof Mt&&op(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}}Mt.prototype.point=!0;function Cc(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t??e,end:i??e}}function op(n,e){return n==e||!!(n&&e&&n.compare(e))}function Jn(n,e,t,i=0){let s=t.length-1;s>=0&&t[s]+i>=n?t[s]=Math.max(t[s],e):t.push(n,e)}class re extends _{constructor(){super(...arguments),this.children=[],this.length=0,this.prevAttrs=void 0,this.attrs=null,this.breakAfter=0}merge(e,t,i,s,r,o){if(i){if(!(i instanceof re))return!1;this.dom||i.transferDOM(this)}return s&&this.setDeco(i?i.attrs:null),xc(this,e,t,i?i.children.slice():[],r,o),!0}split(e){let t=new re;if(t.breakAfter=this.breakAfter,this.length==0)return t;let{i,off:s}=this.childPos(e);s&&(t.append(this.children[i].split(s),0),this.children[i].merge(s,this.children[i].length,null,!1,0,0),i++);for(let r=i;r0&&this.children[i-1].length==0;)this.children[--i].destroy();return this.children.length=i,this.markDirty(),this.length=e,t}transferDOM(e){this.dom&&(this.markDirty(),e.setDOM(this.dom),e.prevAttrs=this.prevAttrs===void 0?this.attrs:this.prevAttrs,this.prevAttrs=void 0,this.dom=null)}setDeco(e){ds(this.attrs,e)||(this.dom&&(this.prevAttrs=this.attrs,this.markDirty()),this.attrs=e)}append(e,t){vc(this,e,t)}addLineDeco(e){let t=e.spec.attributes,i=e.spec.class;t&&(this.attrs=Jr(t,this.attrs||{})),i&&(this.attrs=Jr({class:i},this.attrs||{}))}domAtPos(e){return wc(this,e)}reuseDOM(e){e.nodeName=="DIV"&&(this.setDOM(e),this.flags|=6)}sync(e,t){var i;this.dom?this.flags&4&&(pc(this.dom),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0):(this.setDOM(document.createElement("div")),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0),this.prevAttrs!==void 0&&(eo(this.dom,this.prevAttrs,this.attrs),this.dom.classList.add("cm-line"),this.prevAttrs=void 0),super.sync(e,t);let s=this.dom.lastChild;for(;s&&_.get(s)instanceof Ot;)s=s.lastChild;if(!s||!this.length||s.nodeName!="BR"&&((i=_.get(s))===null||i===void 0?void 0:i.isEditable)==!1&&(!A.ios||!this.children.some(r=>r instanceof Xe))){let r=document.createElement("BR");r.cmIgnore=!0,this.dom.appendChild(r)}}measureTextSize(){if(this.children.length==0||this.length>20)return null;let e=0,t;for(let i of this.children){if(!(i instanceof Xe)||/[^ -~]/.test(i.text))return null;let s=Yi(i.dom);if(s.length!=1)return null;e+=s[0].width,t=s[0].height}return e?{lineHeight:this.dom.getBoundingClientRect().height,charWidth:e/this.length,textHeight:t}:null}coordsAt(e,t){let i=Tc(this,e,t);if(!this.children.length&&i&&this.parent){let{heightOracle:s}=this.parent.view.viewState,r=i.bottom-i.top;if(Math.abs(r-s.lineHeight)<2&&s.textHeight=t){if(r instanceof re)return r;if(o>t)break}s=o+r.breakAfter}return null}}class mt extends _{constructor(e,t,i){super(),this.widget=e,this.length=t,this.deco=i,this.breakAfter=0,this.prevWidget=null}merge(e,t,i,s,r,o){return i&&(!(i instanceof mt)||!this.widget.compare(i.widget)||e>0&&r<=0||t0}}class to extends xt{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}class Xi{constructor(e,t,i,s){this.doc=e,this.pos=t,this.end=i,this.disallowBlockEffectsFor=s,this.content=[],this.curLine=null,this.breakAtStart=0,this.pendingBuffer=0,this.bufferMarks=[],this.atCursorPos=!0,this.openStart=-1,this.openEnd=-1,this.text="",this.textOff=0,this.cursor=e.iter(),this.skip=t}posCovered(){if(this.content.length==0)return!this.breakAtStart&&this.doc.lineAt(this.pos).from!=this.pos;let e=this.content[this.content.length-1];return!(e.breakAfter||e instanceof mt&&e.deco.endSide<0)}getLine(){return this.curLine||(this.content.push(this.curLine=new re),this.atCursorPos=!0),this.curLine}flushBuffer(e=this.bufferMarks){this.pendingBuffer&&(this.curLine.append(Qn(new gi(-1),e),e.length),this.pendingBuffer=0)}addBlockWidget(e){this.flushBuffer(),this.curLine=null,this.content.push(e)}finish(e){this.pendingBuffer&&e<=this.bufferMarks.length?this.flushBuffer():this.pendingBuffer=0,!this.posCovered()&&!(e&&this.content.length&&this.content[this.content.length-1]instanceof mt)&&this.getLine()}buildText(e,t,i){for(;e>0;){if(this.textOff==this.text.length){let{value:r,lineBreak:o,done:l}=this.cursor.next(this.skip);if(this.skip=0,l)throw new Error("Ran out of text content when drawing inline views");if(o){this.posCovered()||this.getLine(),this.content.length?this.content[this.content.length-1].breakAfter=1:this.breakAtStart=1,this.flushBuffer(),this.curLine=null,this.atCursorPos=!0,e--;continue}else this.text=r,this.textOff=0}let s=Math.min(this.text.length-this.textOff,e,512);this.flushBuffer(t.slice(t.length-i)),this.getLine().append(Qn(new Xe(this.text.slice(this.textOff,this.textOff+s)),t),i),this.atCursorPos=!0,this.textOff+=s,e-=s,i=0}}span(e,t,i,s){this.buildText(t-e,i,s),this.pos=t,this.openStart<0&&(this.openStart=s)}point(e,t,i,s,r,o){if(this.disallowBlockEffectsFor[o]&&i instanceof Mt){if(i.block)throw new RangeError("Block decorations may not be specified via plugins");if(t>this.doc.lineAt(this.pos).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}let l=t-e;if(i instanceof Mt)if(i.block)i.startSide>0&&!this.posCovered()&&this.getLine(),this.addBlockWidget(new mt(i.widget||Oi.block,l,i));else{let a=Ct.create(i.widget||Oi.inline,l,l?0:i.startSide),h=this.atCursorPos&&!a.isEditable&&r<=s.length&&(e0),c=!a.isEditable&&(es.length||i.startSide<=0),f=this.getLine();this.pendingBuffer==2&&!h&&!a.isEditable&&(this.pendingBuffer=0),this.flushBuffer(s),h&&(f.append(Qn(new gi(1),s),r),r=s.length+Math.max(0,r-s.length)),f.append(Qn(a,s),r),this.atCursorPos=c,this.pendingBuffer=c?es.length?1:2:0,this.pendingBuffer&&(this.bufferMarks=s.slice())}else this.doc.lineAt(this.pos).from==this.pos&&this.getLine().addLineDeco(i);l&&(this.textOff+l<=this.text.length?this.textOff+=l:(this.skip+=l-(this.text.length-this.textOff),this.text="",this.textOff=0),this.pos=t),this.openStart<0&&(this.openStart=r)}static build(e,t,i,s,r){let o=new Xi(e,t,i,r);return o.openEnd=F.spans(s,t,i,o),o.openStart<0&&(o.openStart=o.openEnd),o.finish(o.openEnd),o}}function Qn(n,e){for(let t of e)n=new Ot(t,[n],n.length);return n}class Oi extends xt{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}Oi.inline=new Oi("span");Oi.block=new Oi("div");var Z=function(n){return n[n.LTR=0]="LTR",n[n.RTL=1]="RTL",n}(Z||(Z={}));const Zt=Z.LTR,Vo=Z.RTL;function Pc(n){let e=[];for(let t=0;t=t){if(l.level==i)return o;(r<0||(s!=0?s<0?l.fromt:e[r].level>l.level))&&(r=o)}}if(r<0)throw new RangeError("Index out of range");return r}}function Ac(n,e){if(n.length!=e.length)return!1;for(let t=0;t=0;m-=3)if(He[m+1]==-d){let g=He[m+2],y=g&2?s:g&4?g&1?r:s:0;y&&(X[f]=X[He[m]]=y),l=m;break}}else{if(He.length==189)break;He[l++]=f,He[l++]=u,He[l++]=a}else if((p=X[f])==2||p==1){let m=p==s;a=m?0:1;for(let g=l-3;g>=0;g-=3){let y=He[g+2];if(y&2)break;if(m)He[g+2]|=2;else{if(y&4)break;He[g+2]|=4}}}}}function up(n,e,t,i){for(let s=0,r=i;s<=t.length;s++){let o=s?t[s-1].to:n,l=sa;)p==g&&(p=t[--m].from,g=m?t[m-1].to:n),X[--p]=d;a=c}else r=h,a++}}}function no(n,e,t,i,s,r,o){let l=i%2?2:1;if(i%2==s%2)for(let a=e,h=0;aa&&o.push(new Pt(a,m.from,d));let g=m.direction==Zt!=!(d%2);so(n,g?i+1:i,s,m.inner,m.from,m.to,o),a=m.to}p=m.to}else{if(p==t||(c?X[p]!=l:X[p]==l))break;p++}u?no(n,a,p,i+1,s,u,o):ae;){let c=!0,f=!1;if(!h||a>r[h-1].to){let m=X[a-1];m!=l&&(c=!1,f=m==16)}let u=!c&&l==1?[]:null,d=c?i:i+1,p=a;e:for(;;)if(h&&p==r[h-1].to){if(f)break e;let m=r[--h];if(!c)for(let g=m.from,y=h;;){if(g==e)break e;if(y&&r[y-1].to==g)g=r[--y].from;else{if(X[g-1]==l)break e;break}}if(u)u.push(m);else{m.toX.length;)X[X.length]=256;let i=[],s=e==Zt?0:1;return so(n,s,s,t,0,n.length,i),i}function Mc(n){return[new Pt(0,n,0)]}let Rc="";function pp(n,e,t,i,s){var r;let o=i.head-n.from,l=Pt.find(e,o,(r=i.bidiLevel)!==null&&r!==void 0?r:-1,i.assoc),a=e[l],h=a.side(s,t);if(o==h){let u=l+=s?1:-1;if(u<0||u>=e.length)return null;a=e[l=u],o=a.side(!s,t),h=a.side(s,t)}let c=Oe(n.text,o,a.forward(s,t));(ca.to)&&(c=h),Rc=n.text.slice(Math.min(o,c),Math.max(o,c));let f=l==(s?e.length-1:0)?null:e[l+(s?1:-1)];return f&&c==h&&f.level+(s?0:1)n.some(e=>e)}),zc=M.define({combine:n=>n.some(e=>e)}),Ic=M.define();class ci{constructor(e,t="nearest",i="nearest",s=5,r=5,o=!1){this.range=e,this.y=t,this.x=i,this.yMargin=s,this.xMargin=r,this.isSnapshot=o}map(e){return e.empty?this:new ci(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new ci(b.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}}const An=L.define({map:(n,e)=>n.map(e)}),Vc=L.define();function Ae(n,e,t){let i=n.facet($c);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}const pt=M.define({combine:n=>n.length?n[0]:!0});let gp=0;const ri=M.define({combine(n){return n.filter((e,t)=>{for(let i=0;i{let a=[];return o&&a.push(Ki.of(h=>{let c=h.plugin(l);return c?o(c):D.none})),r&&a.push(r(l)),a})}static fromClass(e,t){return le.define((i,s)=>new e(i,s),t)}}class nr{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(Ae(t.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){Ae(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){Ae(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const Nc=M.define(),Xo=M.define(),Ki=M.define(),Fc=M.define(),_o=M.define(),Xc=M.define();function Hl(n,e){let t=n.state.facet(Xc);if(!t.length)return t;let i=t.map(r=>r instanceof Function?r(n):r),s=[];return F.spans(i,e.from,e.to,{point(){},span(r,o,l,a){let h=r-e.from,c=o-e.from,f=s;for(let u=l.length-1;u>=0;u--,a--){let d=l[u].spec.bidiIsolate,p;if(d==null&&(d=mp(e.text,h,c)),a>0&&f.length&&(p=f[f.length-1]).to==h&&p.direction==d)p.to=c,f=p.inner;else{let m={from:h,to:c,direction:d,inner:[]};f.push(m),f=m.inner}}}}),s}const _c=M.define();function Uo(n){let e=0,t=0,i=0,s=0;for(let r of n.state.facet(_c)){let o=r(n);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(s=Math.max(s,o.bottom)))}return{left:e,right:t,top:i,bottom:s}}const $i=M.define();class Ve{constructor(e,t,i,s){this.fromA=e,this.toA=t,this.fromB=i,this.toB=s}join(e){return new Ve(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let s=e[t-1];if(!(s.fromA>i.toA)){if(s.toAc)break;r+=2}if(!a)return i;new Ve(a.fromA,a.toA,a.fromB,a.toB).addToSet(i),o=a.toA,l=a.toB}}}class ps{constructor(e,t,i){this.view=e,this.state=t,this.transactions=i,this.flags=0,this.startState=e.state,this.changes=ae.empty(this.startState.doc.length);for(let r of i)this.changes=this.changes.compose(r.changes);let s=[];this.changes.iterChangedRanges((r,o,l,a)=>s.push(new Ve(r,o,l,a))),this.changedRanges=s}static create(e,t,i){return new ps(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}}class jl extends _{get length(){return this.view.state.doc.length}constructor(e){super(),this.view=e,this.decorations=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.markedForComposition=new Set,this.editContextFormatting=D.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.setDOM(e.contentDOM),this.children=[new re],this.children[0].setParent(this),this.updateDeco(),this.updateInner([new Ve(0,0,0,e.state.doc.length)],0,null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:h,toA:c})=>cthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let s=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?s=this.domChanged.newSel.head:!wp(e.changes,this.hasComposition)&&!e.selectionSet&&(s=e.state.selection.main.head));let r=s>-1?yp(this.view,e.changes,s):null;if(this.domChanged=null,this.hasComposition){this.markedForComposition.clear();let{from:h,to:c}=this.hasComposition;i=new Ve(h,c,e.changes.mapPos(h,-1),e.changes.mapPos(c,1)).addToSet(i.slice())}this.hasComposition=r?{from:r.range.fromB,to:r.range.toB}:null,(A.ie||A.chrome)&&!r&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,l=this.updateDeco(),a=Sp(o,l,e.changes);return i=Ve.extendWithRanges(i,a),!(this.flags&7)&&i.length==0?!1:(this.updateInner(i,e.startState.doc.length,r),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t,i){this.view.viewState.mustMeasureContent=!0,this.updateChildren(e,t,i);let{observer:s}=this.view;s.ignore(()=>{this.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let o=A.chrome||A.ios?{node:s.selectionRange.focusNode,written:!1}:void 0;this.sync(this.view,o),this.flags&=-8,o&&(o.written||s.selectionRange.focusNode!=o.node)&&(this.forceSelection=!0),this.dom.style.height=""}),this.markedForComposition.forEach(o=>o.flags&=-9);let r=[];if(this.view.viewport.from||this.view.viewport.to=0?s[o]:null;if(!l)break;let{fromA:a,toA:h,fromB:c,toB:f}=l,u,d,p,m;if(i&&i.range.fromBc){let v=Xi.build(this.view.state.doc,c,i.range.fromB,this.decorations,this.dynamicDecorationMap),x=Xi.build(this.view.state.doc,i.range.toB,f,this.decorations,this.dynamicDecorationMap);d=v.breakAtStart,p=v.openStart,m=x.openEnd;let w=this.compositionView(i);x.breakAtStart?w.breakAfter=1:x.content.length&&w.merge(w.length,w.length,x.content[0],!1,x.openStart,0)&&(w.breakAfter=x.content[0].breakAfter,x.content.shift()),v.content.length&&w.merge(0,0,v.content[v.content.length-1],!0,0,v.openEnd)&&v.content.pop(),u=v.content.concat(w).concat(x.content)}else({content:u,breakAtStart:d,openStart:p,openEnd:m}=Xi.build(this.view.state.doc,c,f,this.decorations,this.dynamicDecorationMap));let{i:g,off:y}=r.findPos(h,1),{i:S,off:k}=r.findPos(a,-1);bc(this,S,k,g,y,u,d,p,m)}i&&this.fixCompositionDOM(i)}updateEditContextFormatting(e){this.editContextFormatting=this.editContextFormatting.map(e.changes);for(let t of e.transactions)for(let i of t.effects)i.is(Vc)&&(this.editContextFormatting=i.value)}compositionView(e){let t=new Xe(e.text.nodeValue);t.flags|=8;for(let{deco:s}of e.marks)t=new Ot(s,[t],t.length);let i=new re;return i.append(t,0),i}fixCompositionDOM(e){let t=(r,o)=>{o.flags|=8|(o.children.some(a=>a.flags&7)?1:0),this.markedForComposition.add(o);let l=_.get(r);l&&l!=o&&(l.dom=null),o.setDOM(r)},i=this.childPos(e.range.fromB,1),s=this.children[i.i];t(e.line,s);for(let r=e.marks.length-1;r>=-1;r--)i=s.childPos(i.off,1),s=s.children[i.i],t(r>=0?e.marks[r].node:e.text,s)}updateSelection(e=!1,t=!1){(e||!this.view.observer.selectionRange.focusNode)&&this.view.observer.readSelectionRange();let i=this.view.root.activeElement,s=i==this.dom,r=!s&&!(this.view.state.facet(pt)||this.dom.tabIndex>-1)&&Kn(this.dom,this.view.observer.selectionRange)&&!(i&&this.dom.contains(i));if(!(s||t||r))return;let o=this.forceSelection;this.forceSelection=!1;let l=this.view.state.selection.main,a=this.moveToLine(this.domAtPos(l.anchor)),h=l.empty?a:this.moveToLine(this.domAtPos(l.head));if(A.gecko&&l.empty&&!this.hasComposition&&Op(a)){let f=document.createTextNode("");this.view.observer.ignore(()=>a.node.insertBefore(f,a.node.childNodes[a.offset]||null)),a=h=new be(f,0),o=!0}let c=this.view.observer.selectionRange;(o||!c.focusNode||(!Fi(a.node,a.offset,c.anchorNode,c.anchorOffset)||!Fi(h.node,h.offset,c.focusNode,c.focusOffset))&&!this.suppressWidgetCursorChange(c,l))&&(this.view.observer.ignore(()=>{A.android&&A.chrome&&this.dom.contains(c.focusNode)&&kp(c.focusNode,this.dom)&&(this.dom.blur(),this.dom.focus({preventScroll:!0}));let f=Zi(this.view.root);if(f)if(l.empty){if(A.gecko){let u=bp(a.node,a.offset);if(u&&u!=3){let d=(u==1?gc:Oc)(a.node,a.offset);d&&(a=new be(d.node,d.offset))}}f.collapse(a.node,a.offset),l.bidiLevel!=null&&f.caretBidiLevel!==void 0&&(f.caretBidiLevel=l.bidiLevel)}else if(f.extend){f.collapse(a.node,a.offset);try{f.extend(h.node,h.offset)}catch{}}else{let u=document.createRange();l.anchor>l.head&&([a,h]=[h,a]),u.setEnd(h.node,h.offset),u.setStart(a.node,a.offset),f.removeAllRanges(),f.addRange(u)}r&&this.view.root.activeElement==this.dom&&(this.dom.blur(),i&&i.focus())}),this.view.observer.setSelectionRange(a,h)),this.impreciseAnchor=a.precise?null:new be(c.anchorNode,c.anchorOffset),this.impreciseHead=h.precise?null:new be(c.focusNode,c.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&Fi(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=Zi(e.root),{anchorNode:s,anchorOffset:r}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=re.find(this,t.head);if(!o)return;let l=o.posAtStart;if(t.head==l||t.head==l+o.length)return;let a=this.coordsAt(t.head,-1),h=this.coordsAt(t.head,1);if(!a||!h||a.bottom>h.top)return;let c=this.domAtPos(t.head+t.assoc);i.collapse(c.node,c.offset),i.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let f=e.observer.selectionRange;e.docView.posFromDOM(f.anchorNode,f.anchorOffset)!=t.from&&i.collapse(s,r)}moveToLine(e){let t=this.dom,i;if(e.node!=t)return e;for(let s=e.offset;!i&&s=0;s--){let r=_.get(t.childNodes[s]);r instanceof re&&(i=r.domAtPos(r.length))}return i?new be(i.node,i.offset,!0):e}nearest(e){for(let t=e;t;){let i=_.get(t);if(i&&i.rootView==this)return i;t=t.parentNode}return null}posFromDOM(e,t){let i=this.nearest(e);if(!i)throw new RangeError("Trying to find position for a DOM position outside of the document");return i.localPosFromDOM(e,t)+i.posAtStart}domAtPos(e){let{i:t,off:i}=this.childCursor().findPos(e,-1);for(;t=0;o--){let l=this.children[o],a=r-l.breakAfter,h=a-l.length;if(ae||l.covers(1))&&(!i||l instanceof re&&!(i instanceof re&&t>=0)))i=l,s=h;else if(i&&h==e&&a==e&&l instanceof mt&&Math.abs(t)<2){if(l.deco.startSide<0)break;o&&(i=null)}r=h}return i?i.coordsAt(e-s,t):null}coordsForChar(e){let{i:t,off:i}=this.childPos(e,1),s=this.children[t];if(!(s instanceof re))return null;for(;s.children.length;){let{i:l,off:a}=s.childPos(i,1);for(;;l++){if(l==s.children.length)return null;if((s=s.children[l]).length)break}i=a}if(!(s instanceof Xe))return null;let r=Oe(s.text,i);if(r==i)return null;let o=Gt(s.dom,i,r).getClientRects();for(let l=0;lMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==Z.LTR;for(let h=0,c=0;cs)break;if(h>=i){let d=f.dom.getBoundingClientRect();if(t.push(d.height),o){let p=f.dom.lastChild,m=p?Yi(p):[];if(m.length){let g=m[m.length-1],y=a?g.right-d.left:d.right-g.left;y>l&&(l=y,this.minWidth=r,this.minWidthFrom=h,this.minWidthTo=u)}}}h=u+f.breakAfter}return t}textDirectionAt(e){let{i:t}=this.childPos(e,1);return getComputedStyle(this.children[t].dom).direction=="rtl"?Z.RTL:Z.LTR}measureTextSize(){for(let r of this.children)if(r instanceof re){let o=r.measureTextSize();if(o)return o}let e=document.createElement("div"),t,i,s;return e.className="cm-line",e.style.width="99999px",e.style.position="absolute",e.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.dom.appendChild(e);let r=Yi(e.firstChild)[0];t=e.getBoundingClientRect().height,i=r?r.width/27:7,s=r?r.height:t,e.remove()}),{lineHeight:t,charWidth:i,textHeight:s}}childCursor(e=this.length){let t=this.children.length;return t&&(e-=this.children[--t].length),new yc(this.children,e,t)}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,s=0;;s++){let r=s==t.viewports.length?null:t.viewports[s],o=r?r.from-1:this.length;if(o>i){let l=(t.lineBlockAt(o).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(D.replace({widget:new to(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!r)break;i=r.to+1}return D.set(e)}updateDeco(){let e=1,t=this.view.state.facet(Ki).map(r=>(this.dynamicDecorationMap[e++]=typeof r=="function")?r(this.view):r),i=!1,s=this.view.state.facet(Fc).map((r,o)=>{let l=typeof r=="function";return l&&(i=!0),l?r(this.view):r});for(s.length&&(this.dynamicDecorationMap[e++]=i,t.push(F.join(s))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];et.anchor?-1:1),s;if(!i)return;!t.empty&&(s=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(i={left:Math.min(i.left,s.left),top:Math.min(i.top,s.top),right:Math.max(i.right,s.right),bottom:Math.max(i.bottom,s.bottom)});let r=Uo(this.view),o={left:i.left-r.left,top:i.top-r.top,right:i.right+r.right,bottom:i.bottom+r.bottom},{offsetWidth:l,offsetHeight:a}=this.view.scrollDOM;Gd(this.view.scrollDOM,o,t.head{ie.from&&(t=!0)}),t}function vp(n,e,t=1){let i=n.charCategorizer(e),s=n.doc.lineAt(e),r=e-s.from;if(s.length==0)return b.cursor(e);r==0?t=1:r==s.length&&(t=-1);let o=r,l=r;t<0?o=Oe(s.text,r,!1):l=Oe(s.text,r);let a=i(s.text.slice(o,l));for(;o>0;){let h=Oe(s.text,o,!1);if(i(s.text.slice(h,o))!=a)break;o=h}for(;ln?e.left-n:Math.max(0,n-e.right)}function Cp(n,e){return e.top>n?e.top-n:Math.max(0,n-e.bottom)}function sr(n,e){return n.tope.top+1}function Gl(n,e){return en.bottom?{top:n.top,left:n.left,right:n.right,bottom:e}:n}function oo(n,e,t){let i,s,r,o,l=!1,a,h,c,f;for(let p=n.firstChild;p;p=p.nextSibling){let m=Yi(p);for(let g=0;gk||o==k&&r>S)&&(i=p,s=y,r=S,o=k,l=S?e0:gy.bottom&&(!c||c.bottomy.top)&&(h=p,f=y):c&&sr(c,y)?c=Zl(c,y.bottom):f&&sr(f,y)&&(f=Gl(f,y.top))}}if(c&&c.bottom>=t?(i=a,s=c):f&&f.top<=t&&(i=h,s=f),!i)return{node:n,offset:0};let u=Math.max(s.left,Math.min(s.right,e));if(i.nodeType==3)return Yl(i,u,t);if(l&&i.contentEditable!="false")return oo(i,u,t);let d=Array.prototype.indexOf.call(n.childNodes,i)+(e>=(s.left+s.right)/2?1:0);return{node:n,offset:d}}function Yl(n,e,t){let i=n.nodeValue.length,s=-1,r=1e9,o=0;for(let l=0;lt?c.top-t:t-c.bottom)-1;if(c.left-1<=e&&c.right+1>=e&&f=(c.left+c.right)/2,d=u;if((A.chrome||A.gecko)&&Gt(n,l).getBoundingClientRect().left==c.right&&(d=!u),f<=0)return{node:n,offset:l+(d?1:0)};s=l+(d?1:0),r=f}}}return{node:n,offset:s>-1?s:o>0?n.nodeValue.length:0}}function Hc(n,e,t,i=-1){var s,r;let o=n.contentDOM.getBoundingClientRect(),l=o.top+n.viewState.paddingTop,a,{docHeight:h}=n.viewState,{x:c,y:f}=e,u=f-l;if(u<0)return 0;if(u>h)return n.state.doc.length;for(let v=n.viewState.heightOracle.textHeight/2,x=!1;a=n.elementAtHeight(u),a.type!=we.Text;)for(;u=i>0?a.bottom+v:a.top-v,!(u>=0&&u<=h);){if(x)return t?null:0;x=!0,i=-i}f=l+u;let d=a.from;if(dn.viewport.to)return n.viewport.to==n.state.doc.length?n.state.doc.length:t?null:Kl(n,o,a,c,f);let p=n.dom.ownerDocument,m=n.root.elementFromPoint?n.root:p,g=m.elementFromPoint(c,f);g&&!n.contentDOM.contains(g)&&(g=null),g||(c=Math.max(o.left+1,Math.min(o.right-1,c)),g=m.elementFromPoint(c,f),g&&!n.contentDOM.contains(g)&&(g=null));let y,S=-1;if(g&&((s=n.docView.nearest(g))===null||s===void 0?void 0:s.isEditable)!=!1){if(p.caretPositionFromPoint){let v=p.caretPositionFromPoint(c,f);v&&({offsetNode:y,offset:S}=v)}else if(p.caretRangeFromPoint){let v=p.caretRangeFromPoint(c,f);v&&({startContainer:y,startOffset:S}=v,(!n.contentDOM.contains(y)||A.safari&&Pp(y,S,c)||A.chrome&&Qp(y,S,c))&&(y=void 0))}y&&(S=Math.min(rt(y),S))}if(!y||!n.docView.dom.contains(y)){let v=re.find(n.docView,d);if(!v)return u>a.top+a.height/2?a.to:a.from;({node:y,offset:S}=oo(v.dom,c,f))}let k=n.docView.nearest(y);if(!k)return null;if(k.isWidget&&((r=k.dom)===null||r===void 0?void 0:r.nodeType)==1){let v=k.dom.getBoundingClientRect();return e.yn.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,a=Math.floor((s-t.top-(n.defaultLineHeight-l)*.5)/l);r+=a*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+Ur(o,r,n.state.tabSize)}function Pp(n,e,t){let i,s=n;if(n.nodeType!=3||e!=(i=n.nodeValue.length))return!1;for(;;){let r=s.nextSibling;if(r){if(r.nodeName=="BR")break;return!1}else{let o=s.parentNode;if(!o||o.nodeName=="DIV")break;s=o}}return Gt(n,i-1,i).getBoundingClientRect().right>t}function Qp(n,e,t){if(e!=0)return!1;for(let s=n;;){let r=s.parentNode;if(!r||r.nodeType!=1||r.firstChild!=s)return!1;if(r.classList.contains("cm-line"))break;s=r}let i=n.nodeType==1?n.getBoundingClientRect():Gt(n,0,Math.max(n.nodeValue.length,1)).getBoundingClientRect();return t-i.left>5}function lo(n,e,t){let i=n.lineBlockAt(e);if(Array.isArray(i.type)){let s;for(let r of i.type){if(r.from>e)break;if(!(r.toe)return r;(!s||r.type==we.Text&&(s.type!=r.type||(t<0?r.frome)))&&(s=r)}}return s||i}return i}function Ap(n,e,t,i){let s=lo(n,e.head,e.assoc||-1),r=!i||s.type!=we.Text||!(n.lineWrapping||s.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>s.from?e.head-1:e.head);if(r){let o=n.dom.getBoundingClientRect(),l=n.textDirectionAt(s.from),a=n.posAtCoords({x:t==(l==Z.LTR)?o.right-1:o.left+1,y:(r.top+r.bottom)/2});if(a!=null)return b.cursor(a,t?-1:1)}return b.cursor(t?s.to:s.from,t?-1:1)}function Jl(n,e,t,i){let s=n.state.doc.lineAt(e.head),r=n.bidiSpans(s),o=n.textDirectionAt(s.from);for(let l=e,a=null;;){let h=pp(s,r,o,l,t),c=Rc;if(!h){if(s.number==(t?n.state.doc.lines:1))return l;c=` +`,s=n.state.doc.line(s.number+(t?1:-1)),r=n.bidiSpans(s),h=n.visualLineSide(s,!t)}if(a){if(!a(c))return l}else{if(!i)return h;a=i(c)}l=h}}function Mp(n,e,t){let i=n.state.charCategorizer(e),s=i(t);return r=>{let o=i(r);return s==Y.Space&&(s=o),s==o}}function Rp(n,e,t,i){let s=e.head,r=t?1:-1;if(s==(t?n.state.doc.length:0))return b.cursor(s,e.assoc);let o=e.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),h=n.coordsAtPos(s,e.assoc||-1),c=n.documentTop;if(h)o==null&&(o=h.left-a.left),l=r<0?h.top:h.bottom;else{let d=n.viewState.lineBlockAt(s);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(s-d.from))),l=(r<0?d.top:d.bottom)+c}let f=a.left+o,u=i??n.viewState.heightOracle.textHeight>>1;for(let d=0;;d+=10){let p=l+(u+d)*r,m=Hc(n,{x:f,y:p},!1,r);if(pa.bottom||(r<0?ms)){let g=n.docView.coordsForChar(m),y=!g||p{if(e>r&&es(n)),t.from,e.head>t.from?-1:1);return i==t.from?t:b.cursor(i,ir)&&this.lineBreak(),s=o}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,s=this.lineSeparator?null:/\r\n?|\n/g;;){let r=-1,o=1,l;if(this.lineSeparator?(r=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=s.exec(t))&&(r=l.index,o=l[0].length),this.append(t.slice(i,r<0?t.length:r)),r<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==e&&a.pos>this.text.length&&(a.pos-=o-1);i=r+o}}readNode(e){if(e.cmIgnore)return;let t=_.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let s=i.iter();!s.next().done;)s.lineBreak?this.lineBreak():this.append(s.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(Ep(e,i.node,i.offset)?t:0))}}function Ep(n,e,t){for(;;){if(!e||t-1;let{impreciseHead:r,impreciseAnchor:o}=e.docView;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=e.docView.domBoundsAround(t,i,0))){let l=r||o?[]:Lp(e),a=new Dp(l,e.state);a.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=a.text,this.newSel=Wp(l,this.bounds.from)}else{let l=e.observer.selectionRange,a=r&&r.node==l.focusNode&&r.offset==l.focusOffset||!Gr(e.contentDOM,l.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(l.focusNode,l.focusOffset),h=o&&o.node==l.anchorNode&&o.offset==l.anchorOffset||!Gr(e.contentDOM,l.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(l.anchorNode,l.anchorOffset),c=e.viewport;if((A.ios||A.chrome)&&e.state.selection.main.empty&&a!=h&&(c.from>0||c.toDate.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:o,to:l}=e.bounds,a=s.from,h=null;(r===8||A.android&&e.text.length=s.from&&t.to<=s.to&&(t.from!=s.from||t.to!=s.to)&&s.to-s.from-(t.to-t.from)<=4?t={from:s.from,to:s.to,insert:n.state.doc.slice(s.from,t.from).append(t.insert).append(n.state.doc.slice(t.to,s.to))}:A.chrome&&t&&t.from==t.to&&t.from==s.head&&t.insert.toString()==` + `&&n.lineWrapping&&(i&&(i=b.single(i.main.anchor-1,i.main.head-1)),t={from:s.from,to:s.to,insert:V.of([" "])}),t)return Ho(n,t,i,r);if(i&&!i.main.eq(s)){let o=!1,l="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(o=!0),l=n.inputState.lastSelectionOrigin),n.dispatch({selection:i,scrollIntoView:o,userEvent:l}),!0}else return!1}function Ho(n,e,t,i=-1){if(A.ios&&n.inputState.flushIOSKey(e))return!0;let s=n.state.selection.main;if(A.android&&(e.to==s.to&&(e.from==s.from||e.from==s.from-1&&n.state.sliceDoc(e.from,s.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&hi(n.contentDOM,"Enter",13)||(e.from==s.from-1&&e.to==s.to&&e.insert.length==0||i==8&&e.insert.lengths.head)&&hi(n.contentDOM,"Backspace",8)||e.from==s.from&&e.to==s.to+1&&e.insert.length==0&&hi(n.contentDOM,"Delete",46)))return!0;let r=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,l=()=>o||(o=$p(n,e,t));return n.state.facet(Bc).some(a=>a(n,e.from,e.to,r,l))||n.dispatch(l()),!0}function $p(n,e,t){let i,s=n.state,r=s.selection.main;if(e.from>=r.from&&e.to<=r.to&&e.to-e.from>=(r.to-r.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let l=r.frome.to?s.sliceDoc(e.to,r.to):"";i=s.replaceSelection(n.state.toText(l+e.insert.sliceString(0,void 0,n.state.lineBreak)+a))}else{let l=s.changes(e),a=t&&t.main.to<=l.newLength?t.main:void 0;if(s.selection.ranges.length>1&&n.inputState.composing>=0&&e.to<=r.to&&e.to>=r.to-10){let h=n.state.sliceDoc(e.from,e.to),c,f=t&&Uc(n,t.main.head);if(f){let p=e.insert.length-(e.to-e.from);c={from:f.from,to:f.to-p}}else c=n.state.doc.lineAt(r.head);let u=r.to-e.to,d=r.to-r.from;i=s.changeByRange(p=>{if(p.from==r.from&&p.to==r.to)return{changes:l,range:a||p.map(l)};let m=p.to-u,g=m-h.length;if(p.to-p.from!=d||n.state.sliceDoc(g,m)!=h||p.to>=c.from&&p.from<=c.to)return{range:p};let y=s.changes({from:g,to:m,insert:e.insert}),S=p.to-r.to;return{changes:y,range:a?b.range(Math.max(0,a.anchor+S),Math.max(0,a.head+S)):p.map(y)}})}else i={changes:l,selection:a&&s.selection.replaceRange(a)}}let o="input.type";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,o+=".compose",n.inputState.compositionFirstChange&&(o+=".start",n.inputState.compositionFirstChange=!1)),s.update(i,{userEvent:o,scrollIntoView:!0})}function Bp(n,e,t,i){let s=Math.min(n.length,e.length),r=0;for(;r0&&l>0&&n.charCodeAt(o-1)==e.charCodeAt(l-1);)o--,l--;if(i=="end"){let a=Math.max(0,r-Math.min(o,l));t-=o+a-r}if(o=o?r-t:0;r-=a,l=r+(l-o),o=r}else if(l=l?r-t:0;r-=a,o=r+(o-l),l=r}return{from:r,toA:o,toB:l}}function Lp(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}=n.observer.selectionRange;return t&&(e.push(new ea(t,i)),(s!=t||r!=i)&&e.push(new ea(s,r))),e}function Wp(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?b.single(t+e,i+e):null}class zp{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,A.safari&&e.contentDOM.addEventListener("input",()=>null),A.gecko&&tm(e.contentDOM.ownerDocument)}handleEvent(e){!Hp(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let s of i.observers)s(this.view,t);for(let s of i.handlers){if(t.defaultPrevented)break;if(s(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=Ip(e),i=this.handlers,s=this.view.contentDOM;for(let r in t)if(r!="scroll"){let o=!t[r].handlers.length,l=i[r];l&&o!=!l.handlers.length&&(s.removeEventListener(r,this.handleEvent),l=null),l||s.addEventListener(r,this.handleEvent,{passive:o})}for(let r in i)r!="scroll"&&!t[r]&&s.removeEventListener(r,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&Zc.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),A.android&&A.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let t;return A.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&((t=Gc.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||Vp.indexOf(e.key)>-1&&e.ctrlKey&&!e.shiftKey)?(this.pendingIOSKey=t||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key=="Enter"&&e&&e.from0?!0:A.safari&&!A.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1:!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function ta(n,e){return(t,i)=>{try{return e.call(n,i,t)}catch(s){Ae(t.state,s)}}}function Ip(n){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of n){let s=i.spec,r=s&&s.plugin.domEventHandlers,o=s&&s.plugin.domEventObservers;if(r)for(let l in r){let a=r[l];a&&t(l).handlers.push(ta(i.value,a))}if(o)for(let l in o){let a=o[l];a&&t(l).observers.push(ta(i.value,a))}}for(let i in _e)t(i).handlers.push(_e[i]);for(let i in Ne)t(i).observers.push(Ne[i]);return e}const Gc=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],Vp="dthko",Zc=[16,17,18,20,91,92,224,225],Mn=6;function Rn(n){return Math.max(0,n)*.7+8}function Np(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}class Fp{constructor(e,t,i,s){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=s,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=Zd(e.contentDOM),this.atoms=e.state.facet(_o).map(o=>o(e));let r=e.contentDOM.ownerDocument;r.addEventListener("mousemove",this.move=this.move.bind(this)),r.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(I.allowMultipleSelections)&&Xp(e,t),this.dragging=Up(e,t)&&Jc(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&Np(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,s=0,r=0,o=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:s,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:r,bottom:l}=this.scrollParents.y.getBoundingClientRect());let a=Uo(this.view);e.clientX-a.left<=s+Mn?t=-Rn(s-e.clientX):e.clientX+a.right>=o-Mn&&(t=Rn(e.clientX-o)),e.clientY-a.top<=r+Mn?i=-Rn(r-e.clientY):e.clientY+a.bottom>=l-Mn&&(i=Rn(e.clientY-l)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}skipAtoms(e){let t=null;for(let i=0;it.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}}function Xp(n,e){let t=n.state.facet(Dc);return t.length?t[0](e):A.mac?e.metaKey:e.ctrlKey}function _p(n,e){let t=n.state.facet(Ec);return t.length?t[0](e):A.mac?!e.altKey:!e.ctrlKey}function Up(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=Zi(n.root);if(!i||i.rangeCount==0)return!0;let s=i.getRangeAt(0).getClientRects();for(let r=0;r=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function Hp(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=_.get(t))&&i.ignoreEvent(e))return!1;return!0}const _e=Object.create(null),Ne=Object.create(null),Yc=A.ie&&A.ie_version<15||A.ios&&A.webkit_version<604;function jp(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{n.focus(),t.remove(),Kc(n,t.value)},50)}function zs(n,e,t){for(let i of n.facet(e))t=i(t,n);return t}function Kc(n,e){e=zs(n.state,No,e);let{state:t}=n,i,s=1,r=t.toText(e),o=r.lines==t.selection.ranges.length;if(ao!=null&&t.selection.ranges.every(a=>a.empty)&&ao==r.toString()){let a=-1;i=t.changeByRange(h=>{let c=t.doc.lineAt(h.from);if(c.from==a)return{range:h};a=c.from;let f=t.toText((o?r.line(s++).text:e)+t.lineBreak);return{changes:{from:c.from,insert:f},range:b.cursor(h.from+f.length)}})}else o?i=t.changeByRange(a=>{let h=r.line(s++);return{changes:{from:a.from,to:a.to,insert:h.text},range:b.cursor(a.from+h.length)}}):i=t.replaceSelection(r);n.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}Ne.scroll=n=>{n.inputState.lastScrollTop=n.scrollDOM.scrollTop,n.inputState.lastScrollLeft=n.scrollDOM.scrollLeft};_e.keydown=(n,e)=>(n.inputState.setSelectionOrigin("select"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);Ne.touchstart=(n,e)=>{n.inputState.lastTouchTime=Date.now(),n.inputState.setSelectionOrigin("select.pointer")};Ne.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};_e.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of n.state.facet(qc))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=Yp(n,e)),t){let i=!n.hasFocus;n.inputState.startMouseSelection(new Fp(n,e,t,i)),i&&n.observer.ignore(()=>{dc(n.contentDOM);let r=n.root.activeElement;r&&!r.contains(n.contentDOM)&&r.blur()});let s=n.inputState.mouseSelection;if(s)return s.start(e),s.dragging===!1}return!1};function ia(n,e,t,i){if(i==1)return b.cursor(e,t);if(i==2)return vp(n.state,e,t);{let s=re.find(n.docView,e),r=n.state.doc.lineAt(s?s.posAtEnd:e),o=s?s.posAtStart:r.from,l=s?s.posAtEnd:r.to;return le>=t.top&&e<=t.bottom&&n>=t.left&&n<=t.right;function Gp(n,e,t,i){let s=re.find(n.docView,e);if(!s)return 1;let r=e-s.posAtStart;if(r==0)return 1;if(r==s.length)return-1;let o=s.coordsAt(r,-1);if(o&&na(t,i,o))return-1;let l=s.coordsAt(r,1);return l&&na(t,i,l)?1:o&&o.bottom>=i?-1:1}function sa(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1);return{pos:t,bias:Gp(n,t,e.clientX,e.clientY)}}const Zp=A.ie&&A.ie_version<=11;let ra=null,oa=0,la=0;function Jc(n){if(!Zp)return n.detail;let e=ra,t=la;return ra=n,la=Date.now(),oa=!e||t>Date.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(oa+1)%3:1}function Yp(n,e){let t=sa(n,e),i=Jc(e),s=n.state.selection;return{update(r){r.docChanged&&(t.pos=r.changes.mapPos(t.pos),s=s.map(r.changes))},get(r,o,l){let a=sa(n,r),h,c=ia(n,a.pos,a.bias,i);if(t.pos!=a.pos&&!o){let f=ia(n,t.pos,t.bias,i),u=Math.min(f.from,c.from),d=Math.max(f.to,c.to);c=u1&&(h=Kp(s,a.pos))?h:l?s.addRange(c):b.create([c])}}}function Kp(n,e){for(let t=0;t=e)return b.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}_e.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let s=n.docView.nearest(e.target);if(s&&s.isWidget){let r=s.posAtStart,o=r+s.length;(r>=t.to||o<=t.from)&&(t=b.range(r,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",zs(n.state,Fo,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};_e.dragend=n=>(n.inputState.draggedContent=null,!1);function aa(n,e,t,i){if(t=zs(n.state,No,t),!t)return;let s=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:r}=n.inputState,o=i&&r&&_p(n,e)?{from:r.from,to:r.to}:null,l={from:s,insert:t},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(s,-1),head:a.mapPos(s,1)},userEvent:o?"move.drop":"input.drop"}),n.inputState.draggedContent=null}_e.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),s=0,r=()=>{++s==t.length&&aa(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o{/[\x00-\x08\x0e-\x1f]{2}/.test(l.result)||(i[o]=l.result),r()},l.readAsText(t[o])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return aa(n,e,i,!0),!0}return!1};_e.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=Yc?null:e.clipboardData;return t?(Kc(n,t.getData("text/plain")||t.getData("text/uri-list")),!0):(jp(n),!1)};function Jp(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function em(n){let e=[],t=[],i=!1;for(let s of n.selection.ranges)s.empty||(e.push(n.sliceDoc(s.from,s.to)),t.push(s));if(!e.length){let s=-1;for(let{from:r}of n.selection.ranges){let o=n.doc.lineAt(r);o.number>s&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),s=o.number}i=!0}return{text:zs(n,Fo,e.join(n.lineBreak)),ranges:t,linewise:i}}let ao=null;_e.copy=_e.cut=(n,e)=>{let{text:t,ranges:i,linewise:s}=em(n.state);if(!t&&!s)return!1;ao=s?t:null,e.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let r=Yc?null:e.clipboardData;return r?(r.clearData(),r.setData("text/plain",t),!0):(Jp(n,t),!1)};const ef=bt.define();function tf(n,e){let t=[];for(let i of n.facet(Lc)){let s=i(n,e);s&&t.push(s)}return t.length?n.update({effects:t,annotations:ef.of(!0)}):null}function nf(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=tf(n.state,e);t?n.dispatch(t):n.update([])}},10)}Ne.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),nf(n)};Ne.blur=n=>{n.observer.clearSelectionRange(),nf(n)};Ne.compositionstart=Ne.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};Ne.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,A.chrome&&A.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};Ne.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};_e.beforeinput=(n,e)=>{var t,i;if(e.inputType=="insertReplacementText"&&n.observer.editContext){let r=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),o=e.getTargetRanges();if(r&&o.length){let l=o[0],a=n.posAtDOM(l.startContainer,l.startOffset),h=n.posAtDOM(l.endContainer,l.endOffset);return Ho(n,{from:a,to:h,insert:n.state.toText(r)},null),!0}}let s;if(A.chrome&&A.android&&(s=Gc.find(r=>r.inputType==e.inputType))&&(n.observer.delayAndroidKey(s.key,s.keyCode),s.key=="Backspace"||s.key=="Delete")){let r=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>r+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return A.ios&&e.inputType=="deleteContentForward"&&n.observer.flushSoon(),A.safari&&e.inputType=="insertText"&&n.inputState.composing>=0&&setTimeout(()=>Ne.compositionend(n,e),20),!1};const ha=new Set;function tm(n){ha.has(n)||(ha.add(n),n.addEventListener("copy",()=>{}),n.addEventListener("cut",()=>{}))}const ca=["pre-wrap","normal","pre-line","break-spaces"];let yi=!1;function fa(){yi=!1}class im{constructor(e){this.lineWrapping=e,this.doc=V.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return ca.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i-1,a=Math.round(t)!=Math.round(this.lineHeight)||this.lineWrapping!=l;if(this.lineWrapping=l,this.lineHeight=t,this.charWidth=i,this.textHeight=s,this.lineLength=r,a){this.heightSamples={};for(let h=0;h0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>ts&&(yi=!0),this.height=e)}replace(e,t,i){return ve.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,s){let r=this,o=i.doc;for(let l=s.length-1;l>=0;l--){let{fromA:a,toA:h,fromB:c,toB:f}=s[l],u=r.lineAt(a,G.ByPosNoHeight,i.setDoc(t),0,0),d=u.to>=h?u:r.lineAt(h,G.ByPosNoHeight,i,0,0);for(f+=d.to-h,h=d.to;l>0&&u.from<=s[l-1].toA;)a=s[l-1].fromA,c=s[l-1].fromB,l--,ar*2){let l=e[t-1];l.break?e.splice(--t,1,l.left,null,l.right):e.splice(--t,1,l.left,l.right),i+=1+l.break,s-=l.size}else if(r>s*2){let l=e[i];l.break?e.splice(i,1,l.left,null,l.right):e.splice(i,1,l.left,l.right),i+=2+l.break,r-=l.size}else break;else if(s=r&&o(this.blockAt(0,i,s,r))}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more&&this.setHeight(s.heights[s.index++]),this.outdated=!1,this}toString(){return`block(${this.length})`}}class qe extends sf{constructor(e,t){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0}blockAt(e,t,i,s){return new Je(s,this.length,i,this.height,this.breaks)}replace(e,t,i){let s=i[0];return i.length==1&&(s instanceof qe||s instanceof pe&&s.flags&4)&&Math.abs(this.length-s.length)<10?(s instanceof pe?s=new qe(s.length,this.height):s.height=this.height,this.outdated||(s.outdated=!1),s):ve.of(i)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more?this.setHeight(s.heights[s.index++]):(i||this.outdated)&&this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class pe extends ve{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,s=e.doc.lineAt(t+this.length).number,r=s-i+1,o,l=0;if(e.lineWrapping){let a=Math.min(this.height,e.lineHeight*r);o=a/r,this.length>r+1&&(l=(this.height-a)/(this.length-r-1))}else o=this.height/r;return{firstLine:i,lastLine:s,perLine:o,perChar:l}}blockAt(e,t,i,s){let{firstLine:r,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(t,s);if(t.lineWrapping){let h=s+(e0){let r=i[i.length-1];r instanceof pe?i[i.length-1]=new pe(r.length+s):i.push(null,new pe(s-1))}if(e>0){let r=i[0];r instanceof pe?i[0]=new pe(e+r.length):i.unshift(new pe(e-1),null)}return ve.of(i)}decomposeLeft(e,t){t.push(new pe(e-1),null)}decomposeRight(e,t){t.push(null,new pe(this.length-e-1))}updateHeight(e,t=0,i=!1,s){let r=t+this.length;if(s&&s.from<=t+this.length&&s.more){let o=[],l=Math.max(t,s.from),a=-1;for(s.from>t&&o.push(new pe(s.from-t-1).updateHeight(e,t));l<=r&&s.more;){let c=e.doc.lineAt(l).length;o.length&&o.push(null);let f=s.heights[s.index++];a==-1?a=f:Math.abs(f-a)>=ts&&(a=-2);let u=new qe(c,f);u.outdated=!1,o.push(u),l+=c+1}l<=r&&o.push(null,new pe(r-l).updateHeight(e,l));let h=ve.of(o);return(a<0||Math.abs(h.height-this.height)>=ts||Math.abs(a-this.heightMetrics(e,t).perLine)>=ts)&&(yi=!0),ms(this,h)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}}class sm extends ve{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,s){let r=i+this.left.height;return el))return h;let c=t==G.ByPosNoHeight?G.ByPosNoHeight:G.ByPos;return a?h.join(this.right.lineAt(l,c,i,o,l)):this.left.lineAt(l,c,i,s,r).join(h)}forEachLine(e,t,i,s,r,o){let l=s+this.left.height,a=r+this.left.length+this.break;if(this.break)e=a&&this.right.forEachLine(e,t,i,l,a,o);else{let h=this.lineAt(a,G.ByPos,i,s,r);e=e&&h.from<=t&&o(h),t>h.to&&this.right.forEachLine(h.to+1,t,i,l,a,o)}}replace(e,t,i){let s=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-s,t-s,i));let r=[];e>0&&this.decomposeLeft(e,r);let o=r.length;for(let l of i)r.push(l);if(e>0&&ua(r,o-1),t=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,s=i+this.break;if(e>=s)return this.right.decomposeRight(e-s,t);e2*t.size||t.size>2*e.size?ve.of(this.break?[e,null,t]:[e,t]):(this.left=ms(this.left,e),this.right=ms(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,s){let{left:r,right:o}=this,l=t+r.length+this.break,a=null;return s&&s.from<=t+r.length&&s.more?a=r=r.updateHeight(e,t,i,s):r.updateHeight(e,t,i),s&&s.from<=l+o.length&&s.more?a=o=o.updateHeight(e,l,i,s):o.updateHeight(e,l,i),a?this.balanced(r,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function ua(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof pe&&(i=n[e+1])instanceof pe&&n.splice(e-1,3,new pe(t.length+1+i.length))}const rm=5;class jo{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),s=this.nodes[this.nodes.length-1];s instanceof qe?s.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new qe(i-this.pos,-1)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e=rm)&&this.addLineDeco(s,r,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new qe(this.pos-e,-1)),this.writtenTo=this.pos}blankContent(e,t){let i=new pe(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof qe)return e;let t=new qe(0,-1);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let s=this.ensureLine();s.length+=i,s.collapsed+=i,s.widgetHeight=Math.max(s.widgetHeight,e),s.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof qe)&&!this.isCovered?this.nodes.push(new qe(0,-1)):(this.writtenToc.clientHeight||c.scrollWidth>c.clientWidth)&&f.overflow!="visible"){let u=c.getBoundingClientRect();r=Math.max(r,u.left),o=Math.min(o,u.right),l=Math.max(l,u.top),a=Math.min(h==n.parentNode?s.innerHeight:a,u.bottom)}h=f.position=="absolute"||f.position=="fixed"?c.offsetParent:c.parentNode}else if(h.nodeType==11)h=h.host;else break;return{left:r-t.left,right:Math.max(r,o)-t.left,top:l-(t.top+e),bottom:Math.max(l,a)-(t.top+e)}}function hm(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left0&&e.top0}function cm(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}class or{constructor(e,t,i,s){this.from=e,this.to=t,this.size=i,this.displaySize=s}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;itypeof i!="function"&&i.class=="cm-lineWrapping");this.heightOracle=new im(t),this.stateDeco=e.facet(Ki).filter(i=>typeof i!="function"),this.heightMap=ve.empty().applyChanges(this.stateDeco,V.empty,this.heightOracle.setDoc(e.doc),[new Ve(0,0,0,e.doc.length)]);for(let i=0;i<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());i++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=D.set(this.lineGaps.map(i=>i.draw(this,!1))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let s=i?t.head:t.anchor;if(!e.some(({from:r,to:o})=>s>=r&&s<=o)){let{from:r,to:o}=this.lineBlockAt(s);e.push(new Dn(r,o))}}return this.viewports=e.sort((i,s)=>i.from-s.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?pa:new Go(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(Li(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=this.state.facet(Ki).filter(c=>typeof c!="function");let s=e.changedRanges,r=Ve.extendWithRanges(s,om(i,this.stateDeco,e?e.changes:ae.empty(this.state.doc.length))),o=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollTop);fa(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),r),(this.heightMap.height!=o||yi)&&(e.flags|=2),l?(this.scrollAnchorPos=e.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let a=r.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.heada.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,t));let h=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,e.flags|=this.updateForViewport(),(h||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&e.selectionSet&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(zc)&&(this.mustEnforceCursorAssoc=!0)}measure(e){let t=e.contentDOM,i=window.getComputedStyle(t),s=this.heightOracle,r=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?Z.RTL:Z.LTR;let o=this.heightOracle.mustRefreshForWrapping(r),l=t.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let h=0,c=0;if(l.width&&l.height){let{scaleX:v,scaleY:x}=uc(t,l);(v>.005&&Math.abs(this.scaleX-v)>.005||x>.005&&Math.abs(this.scaleY-x)>.005)&&(this.scaleX=v,this.scaleY=x,h|=16,o=a=!0)}let f=(parseInt(i.paddingTop)||0)*this.scaleY,u=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=f||this.paddingBottom!=u)&&(this.paddingTop=f,this.paddingBottom=u,h|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(s.lineWrapping&&(a=!0),this.editorWidth=e.scrollDOM.clientWidth,h|=16);let d=e.scrollDOM.scrollTop*this.scaleY;this.scrollTop!=d&&(this.scrollAnchorHeight=-1,this.scrollTop=d),this.scrolledToBottom=mc(e.scrollDOM);let p=(this.printing?cm:am)(t,this.paddingTop),m=p.top-this.pixelViewport.top,g=p.bottom-this.pixelViewport.bottom;this.pixelViewport=p;let y=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(y!=this.inView&&(this.inView=y,y&&(a=!0)),!this.inView&&!this.scrollTarget&&!hm(e.dom))return 0;let S=l.width;if((this.contentDOMWidth!=S||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=e.scrollDOM.clientHeight,h|=16),a){let v=e.docView.measureVisibleLineHeights(this.viewport);if(s.mustRefreshForHeights(v)&&(o=!0),o||s.lineWrapping&&Math.abs(S-this.contentDOMWidth)>s.charWidth){let{lineHeight:x,charWidth:w,textHeight:T}=e.docView.measureTextSize();o=x>0&&s.refresh(r,x,w,T,Math.max(5,S/w),v),o&&(e.docView.minWidth=0,h|=16)}m>0&&g>0?c=Math.max(m,g):m<0&&g<0&&(c=Math.min(m,g)),fa();for(let x of this.viewports){let w=x.from==this.viewport.from?v:e.docView.measureVisibleLineHeights(x);this.heightMap=(o?ve.empty().applyChanges(this.stateDeco,V.empty,this.heightOracle,[new Ve(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(s,0,o,new nm(x.from,w))}yi&&(h|=2)}let k=!this.viewportIsAppropriate(this.viewport,c)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return k&&(h&2&&(h|=this.updateScaler()),this.viewport=this.getViewport(c,this.scrollTarget),h|=this.updateForViewport()),(h&2||k)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),s=this.heightMap,r=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new Dn(s.lineAt(o-i*1e3,G.ByHeight,r,0,0).from,s.lineAt(l+(1-i)*1e3,G.ByHeight,r,0,0).to);if(t){let{head:h}=t.range;if(ha.to){let c=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),f=s.lineAt(h,G.ByPos,r,0,0),u;t.y=="center"?u=(f.top+f.bottom)/2-c/2:t.y=="start"||t.y=="nearest"&&h=l+Math.max(10,Math.min(i,250)))&&s>o-2*1e3&&r>1,o=s<<1;if(this.defaultTextDirection!=Z.LTR&&!i)return[];let l=[],a=(c,f,u,d)=>{if(f-cc&&yy.from>=u.from&&y.to<=u.to&&Math.abs(y.from-c)y.fromS));if(!g){if(fk.from<=f&&k.to>=f)){let k=t.moveToLineBoundary(b.cursor(f),!1,!0).head;k>c&&(f=k)}let y=this.gapSize(u,c,f,d),S=i||y<2e6?y:2e6;g=new or(c,f,y,S)}l.push(g)},h=c=>{if(c.length2e6)for(let w of e)w.from>=c.from&&w.fromc.from&&a(c.from,d,c,f),pt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];F.spans(t,this.viewport.from,this.viewport.to,{span(r,o){i.push({from:r,to:o})},point(){}},20);let s=0;if(i.length!=this.visibleRanges.length)s=12;else for(let r=0;r=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||Li(this.heightMap.lineAt(e,G.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||Li(this.heightMap.lineAt(this.scaler.fromDOM(e),G.ByHeight,this.heightOracle,0,0),this.scaler)}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return Li(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class Dn{constructor(e,t){this.from=e,this.to=t}}function um(n,e,t){let i=[],s=n,r=0;return F.spans(t,n,e,{span(){},point(o,l){o>s&&(i.push({from:s,to:o}),r+=o-s),s=l}},20),s=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let s=0;;s++){let{from:r,to:o}=e[s],l=o-r;if(i<=l)return r+i;i-=l}}function qn(n,e){let t=0;for(let{from:i,to:s}of n.ranges){if(e<=s){t+=e-i;break}t+=s-i}return t/n.total}function dm(n,e){for(let t of n)if(e(t))return t}const pa={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};class Go{constructor(e,t,i){let s=0,r=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let h=t.lineAt(l,G.ByPos,e,0,0).top,c=t.lineAt(a,G.ByPos,e,0,0).bottom;return s+=c-h,{from:l,to:a,top:h,bottom:c,domTop:0,domBottom:0}}),this.scale=(7e6-s)/(t.height-s);for(let l of this.viewports)l.domTop=o+(l.top-r)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),r=l.bottom}toDOM(e){for(let t=0,i=0,s=0;;t++){let r=tt.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}}function Li(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new Je(n.from,n.length,t,i-t,Array.isArray(n._content)?n._content.map(s=>Li(s,e)):n._content)}const $n=M.define({combine:n=>n.join(" ")}),ho=M.define({combine:n=>n.indexOf(!0)>-1}),co=mi.newName(),rf=mi.newName(),of=mi.newName(),lf={"&light":"."+rf,"&dark":"."+of};function fo(n,e,t){return new mi(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,s=>{if(s=="&")return n;if(!t||!t[s])throw new RangeError(`Unsupported selector: ${s}`);return t[s]}):n+" "+i}})}const pm=fo("."+co,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},lf),mm={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},lr=A.ie&&A.ie_version<=11;class gm{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new Yd,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);(A.ie&&A.ie_version<=11||A.ios&&e.composing)&&t.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&A.android&&e.constructor.EDIT_CONTEXT!==!1&&!(A.chrome&&A.chrome_version<126)&&(this.editContext=new ym(e),e.state.facet(pt)&&(e.contentDOM.editContext=this.editContext.editContext)),lr&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,s=this.selectionRange;if(i.state.facet(pt)?i.root.activeElement!=this.dom:!Kn(this.dom,s))return;let r=s.anchorNode&&i.docView.nearest(s.anchorNode);if(r&&r.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(A.ie&&A.ie_version<=11||A.android&&A.chrome)&&!i.state.selection.main.empty&&s.focusNode&&Fi(s.focusNode,s.focusOffset,s.anchorNode,s.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=Zi(e.root);if(!t)return!1;let i=A.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&Om(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let s=Kn(this.dom,i);return s&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let r=this.delayedAndroidKey;r&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=r.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&r.force&&hi(this.dom,r.key,r.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(s)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,s=!1;for(let r of e){let o=this.readMutation(r);o&&(o.typeOver&&(s=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:s}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),s=this.selectionChanged&&Kn(this.dom,this.selectionRange);if(e<0&&!s)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let r=new qp(this.view,e,t,i);return this.view.docView.domChanged={newSel:r.newSel?r.newSel.main:null},r}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,s=jc(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!t.newSel.main.eq(this.view.state.selection.main))&&this.view.update([]),s}readMutation(e){let t=this.view.docView.nearest(e.target);if(!t||t.ignoreMutation(e))return null;if(t.markDirty(e.type=="attributes"),e.type=="attributes"&&(t.flags|=4),e.type=="childList"){let i=ma(t,e.previousSibling||e.target.previousSibling,-1),s=ma(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:s?t.posBefore(s):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(pt)!=e.state.facet(pt)&&(e.view.contentDOM.editContext=e.state.facet(pt)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let s of this.scrollTargets)s.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}}function ma(n,e,t){for(;e;){let i=_.get(e);if(i&&i.parent==n)return i;let s=e.parentNode;e=s!=n.dom?s:t>0?e.nextSibling:e.previousSibling}return null}function ga(n,e){let t=e.startContainer,i=e.startOffset,s=e.endContainer,r=e.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor);return Fi(o.node,o.offset,s,r)&&([t,i,s,r]=[s,r,t,i]),{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}}function Om(n,e){if(e.getComposedRanges){let s=e.getComposedRanges(n.root)[0];if(s)return ga(n,s)}let t=null;function i(s){s.preventDefault(),s.stopImmediatePropagation(),t=s.getTargetRanges()[0]}return n.contentDOM.addEventListener("beforeinput",i,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",i,!0),t?ga(n,t):null}class ym{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let s=e.state.selection.main,{anchor:r,head:o}=s,l=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:l,drifted:!1});let h={from:l,to:a,insert:V.of(i.text.split(` +`))};if(h.from==this.from&&rthis.to&&(h.to=r),h.from==h.to&&!h.insert.length){let c=b.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));c.main.eq(s)||e.dispatch({selection:c,userEvent:"select"});return}if((A.mac||A.android)&&h.from==o-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(h={from:l,to:a,insert:V.of([i.text.replace("."," ")])}),this.pendingContextChange=h,!e.state.readOnly){let c=this.to-this.from+(h.to-h.from+h.insert.length);Ho(e,h,b.single(this.toEditorPos(i.selectionStart,c),this.toEditorPos(i.selectionEnd,c)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state))},this.handlers.characterboundsupdate=i=>{let s=[],r=null;for(let o=this.toEditorPos(i.rangeStart),l=this.toEditorPos(i.rangeEnd);o{let s=[];for(let r of i.getTextFormats()){let o=r.underlineStyle,l=r.underlineThickness;if(o!="None"&&l!="None"){let a=this.toEditorPos(r.rangeStart),h=this.toEditorPos(r.rangeEnd);if(a{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let s=Zi(i.root);s&&s.rangeCount&&this.editContext.updateSelectionBounds(s.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,s=this.pendingContextChange;return e.changes.iterChanges((r,o,l,a,h)=>{if(i)return;let c=h.length-(o-r);if(s&&o>=s.to)if(s.from==r&&s.to==o&&s.insert.eq(h)){s=this.pendingContextChange=null,t+=c,this.to+=c;return}else s=null,this.revertPending(e.state);if(r+=t,o+=t,o<=this.from)this.from+=c,this.to+=c;else if(rthis.to||this.to-this.from+h.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(r),this.toContextPos(o),h.toString()),this.to+=c}t+=c}),s&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(s=>!s.isUserEvent("input.type")&&s.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),s=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=s)&&this.editContext.updateSelection(i,s)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}}class Q{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(s=>s.forEach(r=>i(r,this)))||(s=>this.update(s)),this.dispatch=this.dispatch.bind(this),this._root=e.root||Kd(e.parent)||document,this.viewState=new da(e.state||I.create(e)),e.scrollTo&&e.scrollTo.is(An)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(ri).map(s=>new nr(s));for(let s of this.plugins)s.update(this);this.observer=new gm(this),this.inputState=new zp(this),this.inputState.ensureHandlers(this.plugins),this.docView=new jl(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>this.requestMeasure())}dispatch(...e){let t=e.length==1&&e[0]instanceof oe?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,i=!1,s,r=this.state;for(let u of e){if(u.startState!=r)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");r=u.state}if(this.destroyed){this.viewState.state=r;return}let o=this.hasFocus,l=0,a=null;e.some(u=>u.annotation(ef))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=tf(r,o),a||(l=1));let h=this.observer.delayedAndroidKey,c=null;if(h?(this.observer.clearDelayedAndroidKey(),c=this.observer.readChange(),(c&&!this.state.doc.eq(r.doc)||!this.state.selection.eq(r.selection))&&(c=null)):this.observer.clear(),r.facet(I.phrases)!=this.state.facet(I.phrases))return this.setState(r);s=ps.create(this,r,e),s.flags|=l;let f=this.viewState.scrollTarget;try{this.updateState=2;for(let u of e){if(f&&(f=f.map(u.changes)),u.scrollIntoView){let{main:d}=u.state.selection;f=new ci(d.empty?d:b.cursor(d.head,d.head>d.anchor?-1:1))}for(let d of u.effects)d.is(An)&&(f=d.value.clip(this.state))}this.viewState.update(s,f),this.bidiCache=gs.update(this.bidiCache,s.changes),s.empty||(this.updatePlugins(s),this.inputState.update(s)),t=this.docView.update(s),this.state.facet($i)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(u=>u.isUserEvent("select.pointer")))}finally{this.updateState=0}if(s.startState.facet($n)!=s.state.facet($n)&&(this.viewState.mustMeasureContent=!0),(t||i||f||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!s.empty)for(let u of this.state.facet(ro))try{u(s)}catch(d){Ae(this.state,d,"update listener")}(a||c)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),c&&!jc(this,c)&&h.force&&hi(this.contentDOM,h.key,h.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new da(e),this.plugins=e.facet(ri).map(i=>new nr(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new jl(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(ri),i=e.state.facet(ri);if(t!=i){let s=[];for(let r of i){let o=t.indexOf(r);if(o<0)s.push(new nr(r));else{let l=this.plugins[o];l.mustUpdate=e,s.push(l)}}for(let r of this.plugins)r.mustUpdate!=e&&r.destroy(this);this.plugins=s,this.pluginMap.clear()}else for(let s of this.plugins)s.mustUpdate=e;for(let s=0;s-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.scrollDOM,s=i.scrollTop*this.scaleY,{scrollAnchorPos:r,scrollAnchorHeight:o}=this.viewState;Math.abs(s-this.viewState.scrollTop)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(o<0)if(mc(i))r=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(s);r=d.from,o=d.top}this.updateState=1;let a=this.viewState.measure(this);if(!a&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let h=[];a&4||([this.measureRequests,h]=[h,this.measureRequests]);let c=h.map(d=>{try{return d.read(this)}catch(p){return Ae(this.state,p),Oa}}),f=ps.create(this,this.state,[]),u=!1;f.flags|=a,t?t.flags|=a:t=f,this.updateState=2,f.empty||(this.updatePlugins(f),this.inputState.update(f),this.updateAttrs(),u=this.docView.update(f),u&&this.docViewUpdate());for(let d=0;d1||p<-1){s=s+p,i.scrollTop=s/this.scaleY,o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(ro))l(t)}get themeClasses(){return co+" "+(this.state.facet(ho)?of:rf)+" "+this.state.facet($n)}updateAttrs(){let e=ya(this,Nc,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(pt)?"true":"false",class:"cm-content",style:`${A.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),ya(this,Xo,t);let i=this.observer.ignore(()=>{let s=eo(this.contentDOM,this.contentAttrs,t),r=eo(this.dom,this.editorAttrs,e);return s||r});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let s of i.effects)if(s.is(Q.announce)){t&&(this.announceDOM.textContent=""),t=!1;let r=this.announceDOM.appendChild(document.createElement("div"));r.textContent=s.value}}mountStyles(){this.styleModules=this.state.facet($i);let e=this.state.facet(Q.cspNonce);mi.mount(this.root,this.styleModules.concat(pm).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;ti.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return rr(this,e,Jl(this,e,t,i))}moveByGroup(e,t){return rr(this,e,Jl(this,e,t,i=>Mp(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),s=this.textDirectionAt(e.from),r=i[t?i.length-1:0];return b.cursor(r.side(t,s)+e.from,r.forward(!t,s)?1:-1)}moveToLineBoundary(e,t,i=!0){return Ap(this,e,t,i)}moveVertically(e,t,i){return rr(this,e,Rp(this,e,t,i))}domAtPos(e){return this.docView.domAtPos(e)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){return this.readMeasured(),Hc(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.docView.coordsAt(e,t);if(!i||i.left==i.right)return i;let s=this.state.doc.lineAt(e),r=this.bidiSpans(s),o=r[Pt.find(r,e-s.from,-1,t)];return Ls(i,o.dir==Z.LTR==t>0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(Wc)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>bm)return Mc(e.length);let t=this.textDirectionAt(e.from),i;for(let r of this.bidiCache)if(r.from==e.from&&r.dir==t&&(r.fresh||Ac(r.isolates,i=Hl(this,e))))return r.order;i||(i=Hl(this,e));let s=dp(e.text,t,i);return this.bidiCache.push(new gs(e.from,e.to,t,i,!0,s)),s}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||A.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{dc(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){return An.of(new ci(typeof e=="number"?b.cursor(e):e,t.y,t.x,t.yMargin,t.xMargin))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return An.of(new ci(b.cursor(i.from),"start","start",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return le.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return le.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=mi.newName(),s=[$n.of(i),$i.of(fo(`.${i}`,e))];return t&&t.dark&&s.push(ho.of(!0)),s}static baseTheme(e){return Et.lowest($i.of(fo("."+co,e,lf)))}static findFromDOM(e){var t;let i=e.querySelector(".cm-content"),s=i&&_.get(i)||_.get(e);return((t=s?.rootView)===null||t===void 0?void 0:t.view)||null}}Q.styleModule=$i;Q.inputHandler=Bc;Q.clipboardInputFilter=No;Q.clipboardOutputFilter=Fo;Q.scrollHandler=Ic;Q.focusChangeEffect=Lc;Q.perLineTextDirection=Wc;Q.exceptionSink=$c;Q.updateListener=ro;Q.editable=pt;Q.mouseSelectionStyle=qc;Q.dragMovesSelection=Ec;Q.clickAddsSelectionRange=Dc;Q.decorations=Ki;Q.outerDecorations=Fc;Q.atomicRanges=_o;Q.bidiIsolatedRanges=Xc;Q.scrollMargins=_c;Q.darkTheme=ho;Q.cspNonce=M.define({combine:n=>n.length?n[0]:""});Q.contentAttributes=Xo;Q.editorAttributes=Nc;Q.lineWrapping=Q.contentAttributes.of({class:"cm-lineWrapping"});Q.announce=L.define();const bm=4096,Oa={};class gs{constructor(e,t,i,s,r,o){this.from=e,this.to=t,this.dir=i,this.isolates=s,this.fresh=r,this.order=o}static update(e,t){if(t.empty&&!e.some(r=>r.fresh))return e;let i=[],s=e.length?e[e.length-1].dir:Z.LTR;for(let r=Math.max(0,e.length-10);r=0;s--){let r=i[s],o=typeof r=="function"?r(n):r;o&&Jr(o,t)}return t}const xm=A.mac?"mac":A.windows?"win":A.linux?"linux":"key";function Sm(n,e){const t=n.split(/-(?!$)/);let i=t[t.length-1];i=="Space"&&(i=" ");let s,r,o,l;for(let a=0;ai.concat(s),[]))),t}function wm(n,e,t){return hf(af(n.state),e,n,t)}let vt=null;const vm=4e3;function Tm(n,e=xm){let t=Object.create(null),i=Object.create(null),s=(o,l)=>{let a=i[o];if(a==null)i[o]=l;else if(a!=l)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},r=(o,l,a,h,c)=>{var f,u;let d=t[o]||(t[o]=Object.create(null)),p=l.split(/ (?!$)/).map(y=>Sm(y,e));for(let y=1;y{let v=vt={view:k,prefix:S,scope:o};return setTimeout(()=>{vt==v&&(vt=null)},vm),!0}]})}let m=p.join(" ");s(m,!1);let g=d[m]||(d[m]={preventDefault:!1,stopPropagation:!1,run:((u=(f=d._any)===null||f===void 0?void 0:f.run)===null||u===void 0?void 0:u.slice())||[]});a&&g.run.push(a),h&&(g.preventDefault=!0),c&&(g.stopPropagation=!0)};for(let o of n){let l=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let h of l){let c=t[h]||(t[h]=Object.create(null));c._any||(c._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:f}=o;for(let u in c)c[u].run.push(d=>f(d,uo))}let a=o[e]||o.key;if(a)for(let h of l)r(h,a,o.run,o.preventDefault,o.stopPropagation),o.shift&&r(h,"Shift-"+a,o.shift,o.preventDefault,o.stopPropagation)}return t}let uo=null;function hf(n,e,t,i){uo=e;let s=Hd(e),r=Ce(s,0),o=Ke(r)==s.length&&s!=" ",l="",a=!1,h=!1,c=!1;vt&&vt.view==t&&vt.scope==i&&(l=vt.prefix+" ",Zc.indexOf(e.keyCode)<0&&(h=!0,vt=null));let f=new Set,u=g=>{if(g){for(let y of g.run)if(!f.has(y)&&(f.add(y),y(t)))return g.stopPropagation&&(c=!0),!0;g.preventDefault&&(g.stopPropagation&&(c=!0),h=!0)}return!1},d=n[i],p,m;return d&&(u(d[l+Bn(s,e,!o)])?a=!0:o&&(e.altKey||e.metaKey||e.ctrlKey)&&!(A.windows&&e.ctrlKey&&e.altKey)&&!(A.mac&&e.altKey&&!e.ctrlKey)&&(p=At[e.keyCode])&&p!=s?(u(d[l+Bn(p,e,!0)])||e.shiftKey&&(m=Gi[e.keyCode])!=s&&m!=p&&u(d[l+Bn(m,e,!1)]))&&(a=!0):o&&e.shiftKey&&u(d[l+Bn(s,e,!0)])&&(a=!0),!a&&u(d._any)&&(a=!0)),h&&(a=!0),a&&c&&e.stopPropagation(),uo=null,a}class mn{constructor(e,t,i,s,r){this.className=e,this.left=t,this.top=i,this.width=s,this.height=r}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,i){if(i.empty){let s=e.coordsAtPos(i.head,i.assoc||1);if(!s)return[];let r=cf(e);return[new mn(t,s.left-r.left,s.top-r.top,null,s.bottom-s.top)]}else return Cm(e,t,i)}}function cf(n){let e=n.scrollDOM.getBoundingClientRect();return{left:(n.textDirection==Z.LTR?e.left:e.right-n.scrollDOM.clientWidth*n.scaleX)-n.scrollDOM.scrollLeft*n.scaleX,top:e.top-n.scrollDOM.scrollTop*n.scaleY}}function xa(n,e,t,i){let s=n.coordsAtPos(e,t*2);if(!s)return i;let r=n.dom.getBoundingClientRect(),o=(s.top+s.bottom)/2,l=n.posAtCoords({x:r.left+1,y:o}),a=n.posAtCoords({x:r.right-1,y:o});return l==null||a==null?i:{from:Math.max(i.from,Math.min(l,a)),to:Math.min(i.to,Math.max(l,a))}}function Cm(n,e,t){if(t.to<=n.viewport.from||t.from>=n.viewport.to)return[];let i=Math.max(t.from,n.viewport.from),s=Math.min(t.to,n.viewport.to),r=n.textDirection==Z.LTR,o=n.contentDOM,l=o.getBoundingClientRect(),a=cf(n),h=o.querySelector(".cm-line"),c=h&&window.getComputedStyle(h),f=l.left+(c?parseInt(c.paddingLeft)+Math.min(0,parseInt(c.textIndent)):0),u=l.right-(c?parseInt(c.paddingRight):0),d=lo(n,i,1),p=lo(n,s,-1),m=d.type==we.Text?d:null,g=p.type==we.Text?p:null;if(m&&(n.lineWrapping||d.widgetLineBreaks)&&(m=xa(n,i,1,m)),g&&(n.lineWrapping||p.widgetLineBreaks)&&(g=xa(n,s,-1,g)),m&&g&&m.from==g.from&&m.to==g.to)return S(k(t.from,t.to,m));{let x=m?k(t.from,null,m):v(d,!1),w=g?k(null,t.to,g):v(p,!0),T=[];return(m||d).to<(g||p).from-(m&&g?1:0)||d.widgetLineBreaks>1&&x.bottom+n.defaultLineHeight/2C&&q.from=ee)break;Se>N&&$(Math.max(ie,N),x==null&&ie<=C,Math.min(Se,ee),w==null&&Se>=E,te.dir)}if(N=K.to+1,N>=ee)break}return R.length==0&&$(C,x==null,E,w==null,n.textDirection),{top:B,bottom:W,horizontal:R}}function v(x,w){let T=l.top+(w?x.top:x.bottom);return{top:T,bottom:T,horizontal:[]}}}function Pm(n,e){return n.constructor==e.constructor&&n.eq(e)}class Qm{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(is)!=e.state.facet(is)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,i=e.facet(is);for(;t!Pm(t,this.drawn[i]))){let t=this.dom.firstChild,i=0;for(let s of e)s.update&&t&&s.constructor&&this.drawn[i].constructor&&s.update(t,this.drawn[i])?(t=t.nextSibling,i++):this.dom.insertBefore(s.draw(),t);for(;t;){let s=t.nextSibling;t.remove(),t=s}this.drawn=e}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}}const is=M.define();function ff(n){return[le.define(e=>new Qm(e,n)),is.of(n)]}const Ji=M.define({combine(n){return ot(n,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function Am(n={}){return[Ji.of(n),Mm,Rm,Dm,zc.of(!0)]}function uf(n){return n.startState.facet(Ji)!=n.state.facet(Ji)}const Mm=ff({above:!0,markers(n){let{state:e}=n,t=e.facet(Ji),i=[];for(let s of e.selection.ranges){let r=s==e.selection.main;if(s.empty||t.drawRangeCursor){let o=r?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",l=s.empty?s:b.cursor(s.head,s.head>s.anchor?-1:1);for(let a of mn.forRange(n,o,l))i.push(a)}}return i},update(n,e){n.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let t=uf(n);return t&&Sa(n.state,e),n.docChanged||n.selectionSet||t},mount(n,e){Sa(e.state,n)},class:"cm-cursorLayer"});function Sa(n,e){e.style.animationDuration=n.facet(Ji).cursorBlinkRate+"ms"}const Rm=ff({above:!1,markers(n){return n.state.selection.ranges.map(e=>e.empty?[]:mn.forRange(n,"cm-selectionBackground",e)).reduce((e,t)=>e.concat(t))},update(n,e){return n.docChanged||n.selectionSet||n.viewportChanged||uf(n)},class:"cm-selectionLayer"}),Dm=Et.highest(Q.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:"transparent !important"},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}})),df=L.define({map(n,e){return n==null?null:e.mapPos(n)}}),Wi=ue.define({create(){return null},update(n,e){return n!=null&&(n=e.changes.mapPos(n)),e.effects.reduce((t,i)=>i.is(df)?i.value:t,n)}}),Em=le.fromClass(class{constructor(n){this.view=n,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(n){var e;let t=n.state.field(Wi);t==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(n.startState.field(Wi)!=t||n.docChanged||n.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:n}=this,e=n.state.field(Wi),t=e!=null&&n.coordsAtPos(e);if(!t)return null;let i=n.scrollDOM.getBoundingClientRect();return{left:t.left-i.left+n.scrollDOM.scrollLeft*n.scaleX,top:t.top-i.top+n.scrollDOM.scrollTop*n.scaleY,height:t.bottom-t.top}}drawCursor(n){if(this.cursor){let{scaleX:e,scaleY:t}=this.view;n?(this.cursor.style.left=n.left/e+"px",this.cursor.style.top=n.top/t+"px",this.cursor.style.height=n.height/t+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(n){this.view.state.field(Wi)!=n&&this.view.dispatch({effects:df.of(n)})}},{eventObservers:{dragover(n){this.setDropPos(this.view.posAtCoords({x:n.clientX,y:n.clientY}))},dragleave(n){(n.target==this.view.contentDOM||!this.view.contentDOM.contains(n.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function qm(){return[Wi,Em]}function ka(n,e,t,i,s){e.lastIndex=0;for(let r=n.iterRange(t,i),o=t,l;!r.next().done;o+=r.value.length)if(!r.lineBreak)for(;l=e.exec(r.value);)s(o+l.index,l)}function $m(n,e){let t=n.visibleRanges;if(t.length==1&&t[0].from==n.viewport.from&&t[0].to==n.viewport.to)return t;let i=[];for(let{from:s,to:r}of t)s=Math.max(n.state.doc.lineAt(s).from,s-e),r=Math.min(n.state.doc.lineAt(r).to,r+e),i.length&&i[i.length-1].to>=s?i[i.length-1].to=r:i.push({from:s,to:r});return i}class Bm{constructor(e){const{regexp:t,decoration:i,decorate:s,boundary:r,maxLength:o=1e3}=e;if(!t.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=t,s)this.addMatch=(l,a,h,c)=>s(c,h,h+l[0].length,l,a);else if(typeof i=="function")this.addMatch=(l,a,h,c)=>{let f=i(l,a,h);f&&c(h,h+l[0].length,f)};else if(i)this.addMatch=(l,a,h,c)=>c(h,h+l[0].length,i);else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=r,this.maxLength=o}createDeco(e){let t=new gt,i=t.add.bind(t);for(let{from:s,to:r}of $m(e,this.maxLength))ka(e.state.doc,this.regexp,s,r,(o,l)=>this.addMatch(l,e,o,i));return t.finish()}updateDeco(e,t){let i=1e9,s=-1;return e.docChanged&&e.changes.iterChanges((r,o,l,a)=>{a>=e.view.viewport.from&&l<=e.view.viewport.to&&(i=Math.min(l,i),s=Math.max(a,s))}),e.viewportMoved||s-i>1e3?this.createDeco(e.view):s>-1?this.updateRange(e.view,t.map(e.changes),i,s):t}updateRange(e,t,i,s){for(let r of e.visibleRanges){let o=Math.max(r.from,i),l=Math.min(r.to,s);if(l>=o){let a=e.state.doc.lineAt(o),h=a.toa.from;o--)if(this.boundary.test(a.text[o-1-a.from])){c=o;break}for(;lu.push(y.range(m,g));if(a==h)for(this.regexp.lastIndex=c-a.from;(d=this.regexp.exec(a.text))&&d.indexthis.addMatch(g,e,m,p));t=t.update({filterFrom:c,filterTo:f,filter:(m,g)=>mf,add:u})}}return t}}const po=/x/.unicode!=null?"gu":"g",Lm=new RegExp(`[\0-\b +--Ÿ­؜​‎‏\u2028\u2029‭‮⁦⁧⁩\uFEFF-]`,po),Wm={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"};let ar=null;function zm(){var n;if(ar==null&&typeof document<"u"&&document.body){let e=document.body.style;ar=((n=e.tabSize)!==null&&n!==void 0?n:e.MozTabSize)!=null}return ar||!1}const ns=M.define({combine(n){let e=ot(n,{render:null,specialChars:Lm,addSpecialChars:null});return(e.replaceTabs=!zm())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,po)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,po)),e}});function Im(n={}){return[ns.of(n),Vm()]}let wa=null;function Vm(){return wa||(wa=le.fromClass(class{constructor(n){this.view=n,this.decorations=D.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(n.state.facet(ns)),this.decorations=this.decorator.createDeco(n)}makeDecorator(n){return new Bm({regexp:n.specialChars,decoration:(e,t,i)=>{let{doc:s}=t.state,r=Ce(e[0],0);if(r==9){let o=s.lineAt(i),l=t.state.tabSize,a=Ti(o.text,l,i-o.from);return D.replace({widget:new _m((l-a%l)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[r]||(this.decorationCache[r]=D.replace({widget:new Xm(n,r)}))},boundary:n.replaceTabs?void 0:/[^]/})}update(n){let e=n.state.facet(ns);n.startState.facet(ns)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(n.view)):this.decorations=this.decorator.updateDeco(n,this.decorations)}},{decorations:n=>n.decorations}))}const Nm="•";function Fm(n){return n>=32?Nm:n==10?"␤":String.fromCharCode(9216+n)}class Xm extends xt{constructor(e,t){super(),this.options=e,this.code=t}eq(e){return e.code==this.code}toDOM(e){let t=Fm(this.code),i=e.state.phrase("Control character")+" "+(Wm[this.code]||"0x"+this.code.toString(16)),s=this.options.render&&this.options.render(this.code,i,t);if(s)return s;let r=document.createElement("span");return r.textContent=t,r.title=i,r.setAttribute("aria-label",i),r.className="cm-specialChar",r}ignoreEvent(){return!1}}class _m extends xt{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}}function Um(){return jm}const Hm=D.line({class:"cm-activeLine"}),jm=le.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=-1,t=[];for(let i of n.state.selection.ranges){let s=n.lineBlockAt(i.head);s.from>e&&(t.push(Hm.range(s.from)),e=s.from)}return D.set(t)}},{decorations:n=>n.decorations}),mo=2e3;function Gm(n,e,t){let i=Math.min(e.line,t.line),s=Math.max(e.line,t.line),r=[];if(e.off>mo||t.off>mo||e.col<0||t.col<0){let o=Math.min(e.off,t.off),l=Math.max(e.off,t.off);for(let a=i;a<=s;a++){let h=n.doc.line(a);h.length<=l&&r.push(b.range(h.from+o,h.to+l))}}else{let o=Math.min(e.col,t.col),l=Math.max(e.col,t.col);for(let a=i;a<=s;a++){let h=n.doc.line(a),c=Ur(h.text,o,n.tabSize,!0);if(c<0)r.push(b.cursor(h.to));else{let f=Ur(h.text,l,n.tabSize);r.push(b.range(h.from+c,h.from+f))}}}return r}function Zm(n,e){let t=n.coordsAtPos(n.viewport.from);return t?Math.round(Math.abs((t.left-e)/n.defaultCharacterWidth)):-1}function va(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1),i=n.state.doc.lineAt(t),s=t-i.from,r=s>mo?-1:s==i.length?Zm(n,e.clientX):Ti(i.text,n.state.tabSize,t-i.from);return{line:i.number,col:r,off:s}}function Ym(n,e){let t=va(n,e),i=n.state.selection;return t?{update(s){if(s.docChanged){let r=s.changes.mapPos(s.startState.doc.line(t.line).from),o=s.state.doc.lineAt(r);t={line:o.number,col:t.col,off:Math.min(t.off,o.length)},i=i.map(s.changes)}},get(s,r,o){let l=va(n,s);if(!l)return i;let a=Gm(n.state,t,l);return a.length?o?b.create(a.concat(i.ranges)):b.create(a):i}}:null}function Km(n){let e=t=>t.altKey&&t.button==0;return Q.mouseSelectionStyle.of((t,i)=>e(i)?Ym(t,i):null)}const Jm={Alt:[18,n=>!!n.altKey],Control:[17,n=>!!n.ctrlKey],Shift:[16,n=>!!n.shiftKey],Meta:[91,n=>!!n.metaKey]},eg={style:"cursor: crosshair"};function tg(n={}){let[e,t]=Jm[n.key||"Alt"],i=le.fromClass(class{constructor(s){this.view=s,this.isDown=!1}set(s){this.isDown!=s&&(this.isDown=s,this.view.update([]))}},{eventObservers:{keydown(s){this.set(s.keyCode==e||t(s))},keyup(s){(s.keyCode==e||!t(s))&&this.set(!1)},mousemove(s){this.set(t(s))}}});return[i,Q.contentAttributes.of(s=>{var r;return!((r=s.plugin(i))===null||r===void 0)&&r.isDown?eg:null})]}const Ri="-10000px";class pf{constructor(e,t,i,s){this.facet=t,this.createTooltipView=i,this.removeTooltipView=s,this.input=e.state.facet(t),this.tooltips=this.input.filter(o=>o);let r=null;this.tooltipViews=this.tooltips.map(o=>r=i(o,r))}update(e,t){var i;let s=e.state.facet(this.facet),r=s.filter(a=>a);if(s===this.input){for(let a of this.tooltipViews)a.update&&a.update(e);return!1}let o=[],l=t?[]:null;for(let a=0;at[h]=a),t.length=l.length),this.input=s,this.tooltips=r,this.tooltipViews=o,!0}}function ig(n){let e=n.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}const hr=M.define({combine:n=>{var e,t,i;return{position:A.ios?"absolute":((e=n.find(s=>s.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((t=n.find(s=>s.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((i=n.find(s=>s.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||ig}}}),Ta=new WeakMap,Zo=le.fromClass(class{constructor(n){this.view=n,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=n.state.facet(hr);this.position=e.position,this.parent=e.parent,this.classes=n.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new pf(n,Yo,(t,i)=>this.createTooltip(t,i),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),n.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let n of this.manager.tooltipViews)this.intersectionObserver.observe(n.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(n){n.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(n,this.above);e&&this.observeIntersection();let t=e||n.geometryChanged,i=n.state.facet(hr);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let s of this.manager.tooltipViews)s.dom.style.position=this.position;t=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let s of this.manager.tooltipViews)this.container.appendChild(s.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(n,e){let t=n.create(this.view),i=e?e.dom:null;if(t.dom.classList.add("cm-tooltip"),n.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let s=document.createElement("div");s.className="cm-tooltip-arrow",t.dom.appendChild(s)}return t.dom.style.position=this.position,t.dom.style.top=Ri,t.dom.style.left="0px",this.container.insertBefore(t.dom,i),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var n,e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(n=i.destroy)===null||n===void 0||n.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let n=1,e=1,t=!1;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:r}=this.manager.tooltipViews[0];if(A.gecko)t=r.offsetParent!=this.container.ownerDocument.body;else if(r.style.top==Ri&&r.style.left=="0px"){let o=r.getBoundingClientRect();t=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}}if(t||this.position=="absolute")if(this.parent){let r=this.parent.getBoundingClientRect();r.width&&r.height&&(n=r.width/this.parent.offsetWidth,e=r.height/this.parent.offsetHeight)}else({scaleX:n,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),s=Uo(this.view);return{visible:{left:i.left+s.left,top:i.top+s.top,right:i.right-s.right,bottom:i.bottom-s.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((r,o)=>{let l=this.manager.tooltipViews[o];return l.getCoords?l.getCoords(r.pos):this.view.coordsAtPos(r.pos)}),size:this.manager.tooltipViews.map(({dom:r})=>r.getBoundingClientRect()),space:this.view.state.facet(hr).tooltipSpace(this.view),scaleX:n,scaleY:e,makeAbsolute:t}}writeMeasure(n){var e;if(n.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let l of this.manager.tooltipViews)l.dom.style.position="absolute"}let{visible:t,space:i,scaleX:s,scaleY:r}=n,o=[];for(let l=0;l=Math.min(t.bottom,i.bottom)||f.rightMath.min(t.right,i.right)+.1)){c.style.top=Ri;continue}let d=a.arrow?h.dom.querySelector(".cm-tooltip-arrow"):null,p=d?7:0,m=u.right-u.left,g=(e=Ta.get(h))!==null&&e!==void 0?e:u.bottom-u.top,y=h.offset||sg,S=this.view.textDirection==Z.LTR,k=u.width>i.right-i.left?S?i.left:i.right-u.width:S?Math.max(i.left,Math.min(f.left-(d?14:0)+y.x,i.right-m)):Math.min(Math.max(i.left,f.left-m+(d?14:0)-y.x),i.right-m),v=this.above[l];!a.strictSide&&(v?f.top-g-p-y.yi.bottom)&&v==i.bottom-f.bottom>f.top-i.top&&(v=this.above[l]=!v);let x=(v?f.top-i.top:i.bottom-f.bottom)-p;if(xk&&B.topw&&(w=v?B.top-g-2-p:B.bottom+p+2);if(this.position=="absolute"?(c.style.top=(w-n.parent.top)/r+"px",Ca(c,(k-n.parent.left)/s)):(c.style.top=w/r+"px",Ca(c,k/s)),d){let B=f.left+(S?y.x:-y.x)-(k+14-7);d.style.left=B/s+"px"}h.overlap!==!0&&o.push({left:k,top:w,right:T,bottom:w+g}),c.classList.toggle("cm-tooltip-above",v),c.classList.toggle("cm-tooltip-below",!v),h.positioned&&h.positioned(n.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let n of this.manager.tooltipViews)n.dom.style.top=Ri}},{eventObservers:{scroll(){this.maybeMeasure()}}});function Ca(n,e){let t=parseInt(n.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(n.style.left=e+"px")}const ng=Q.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),sg={x:0,y:0},Yo=M.define({enables:[Zo,ng]}),Os=M.define({combine:n=>n.reduce((e,t)=>e.concat(t),[])});class Is{static create(e){return new Is(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new pf(e,Os,(t,i)=>this.createHostedView(t,i),t=>t.dom.remove())}createHostedView(e,t){let i=e.create(this.view);return i.dom.classList.add("cm-tooltip-section"),this.dom.insertBefore(i.dom,t?t.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(e){for(let t of this.manager.tooltipViews)t.mount&&t.mount(e);this.mounted=!0}positioned(e){for(let t of this.manager.tooltipViews)t.positioned&&t.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let t of this.manager.tooltipViews)(e=t.destroy)===null||e===void 0||e.call(t)}passProp(e){let t;for(let i of this.manager.tooltipViews){let s=i[e];if(s!==void 0){if(t===void 0)t=s;else if(t!==s)return}}return t}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}}const rg=Yo.compute([Os],n=>{let e=n.facet(Os);return e.length===0?null:{pos:Math.min(...e.map(t=>t.pos)),end:Math.max(...e.map(t=>{var i;return(i=t.end)!==null&&i!==void 0?i:t.pos})),create:Is.create,above:e[0].above,arrow:e.some(t=>t.arrow)}});class og{constructor(e,t,i,s,r){this.view=e,this.source=t,this.field=i,this.setHover=s,this.hoverTime=r,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;el.bottom||t.xl.right+e.defaultCharacterWidth)return;let a=e.bidiSpans(e.state.doc.lineAt(s)).find(c=>c.from<=s&&c.to>=s),h=a&&a.dir==Z.RTL?-1:1;r=t.x{this.pending==l&&(this.pending=null,a&&!(Array.isArray(a)&&!a.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(a)?a:[a])}))},a=>Ae(e.state,a,"hover tooltip"))}else o&&!(Array.isArray(o)&&!o.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(o)?o:[o])})}get tooltip(){let e=this.view.plugin(Zo),t=e?e.manager.tooltips.findIndex(i=>i.create==Is.create):-1;return t>-1?e.manager.tooltipViews[t]:null}mousemove(e){var t,i;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:s,tooltip:r}=this;if(s.length&&r&&!lg(r.dom,e)||this.pending){let{pos:o}=s[0]||this.pending,l=(i=(t=s[0])===null||t===void 0?void 0:t.end)!==null&&i!==void 0?i:o;(o==l?this.view.posAtCoords(this.lastMove)!=o:!ag(this.view,o,l,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:t}=this;if(t.length){let{tooltip:i}=this;i&&i.dom.contains(e.relatedTarget)?this.watchTooltipLeave(i.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let t=i=>{e.removeEventListener("mouseleave",t),this.active.length&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener("mouseleave",t)}destroy(){clearTimeout(this.hoverTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}}const Ln=4;function lg(n,e){let{left:t,right:i,top:s,bottom:r}=n.getBoundingClientRect(),o;if(o=n.querySelector(".cm-tooltip-arrow")){let l=o.getBoundingClientRect();s=Math.min(l.top,s),r=Math.max(l.bottom,r)}return e.clientX>=t-Ln&&e.clientX<=i+Ln&&e.clientY>=s-Ln&&e.clientY<=r+Ln}function ag(n,e,t,i,s,r){let o=n.scrollDOM.getBoundingClientRect(),l=n.documentTop+n.documentPadding.top+n.contentHeight;if(o.left>i||o.rights||Math.min(o.bottom,l)=e&&a<=t}function hg(n,e={}){let t=L.define(),i=ue.define({create(){return[]},update(s,r){if(s.length&&(e.hideOnChange&&(r.docChanged||r.selection)?s=[]:e.hideOn&&(s=s.filter(o=>!e.hideOn(r,o))),r.docChanged)){let o=[];for(let l of s){let a=r.changes.mapPos(l.pos,-1,ge.TrackDel);if(a!=null){let h=Object.assign(Object.create(null),l);h.pos=a,h.end!=null&&(h.end=r.changes.mapPos(h.end)),o.push(h)}}s=o}for(let o of r.effects)o.is(t)&&(s=o.value),o.is(cg)&&(s=[]);return s},provide:s=>Os.from(s)});return{active:i,extension:[i,le.define(s=>new og(s,n,i,t,e.hoverTime||300)),rg]}}function mf(n,e){let t=n.plugin(Zo);if(!t)return null;let i=t.manager.tooltips.indexOf(e);return i<0?null:t.manager.tooltipViews[i]}const cg=L.define(),Pa=M.define({combine(n){let e,t;for(let i of n)e=e||i.topContainer,t=t||i.bottomContainer;return{topContainer:e,bottomContainer:t}}});function en(n,e){let t=n.plugin(gf),i=t?t.specs.indexOf(e):-1;return i>-1?t.panels[i]:null}const gf=le.fromClass(class{constructor(n){this.input=n.state.facet(tn),this.specs=this.input.filter(t=>t),this.panels=this.specs.map(t=>t(n));let e=n.state.facet(Pa);this.top=new Wn(n,!0,e.topContainer),this.bottom=new Wn(n,!1,e.bottomContainer),this.top.sync(this.panels.filter(t=>t.top)),this.bottom.sync(this.panels.filter(t=>!t.top));for(let t of this.panels)t.dom.classList.add("cm-panel"),t.mount&&t.mount()}update(n){let e=n.state.facet(Pa);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new Wn(n.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new Wn(n.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let t=n.state.facet(tn);if(t!=this.input){let i=t.filter(a=>a),s=[],r=[],o=[],l=[];for(let a of i){let h=this.specs.indexOf(a),c;h<0?(c=a(n.view),l.push(c)):(c=this.panels[h],c.update&&c.update(n)),s.push(c),(c.top?r:o).push(c)}this.specs=i,this.panels=s,this.top.sync(r),this.bottom.sync(o);for(let a of l)a.dom.classList.add("cm-panel"),a.mount&&a.mount()}else for(let i of this.panels)i.update&&i.update(n)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:n=>Q.scrollMargins.of(e=>{let t=e.plugin(n);return t&&{top:t.top.scrollMargin(),bottom:t.bottom.scrollMargin()}})});class Wn{constructor(e,t,i){this.view=e,this.top=t,this.container=i,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let t of this.panels)t.destroy&&e.indexOf(t)<0&&t.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom",this.dom.style[this.top?"top":"bottom"]="0";let t=this.container||this.view.dom;t.insertBefore(this.dom,this.top?t.firstChild:null)}let e=this.dom.firstChild;for(let t of this.panels)if(t.dom.parentNode==this.dom){for(;e!=t.dom;)e=Qa(e);e=e.nextSibling}else this.dom.insertBefore(t.dom,e);for(;e;)e=Qa(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}}function Qa(n){let e=n.nextSibling;return n.remove(),e}const tn=M.define({enables:gf});class yt extends Ht{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}yt.prototype.elementClass="";yt.prototype.toDOM=void 0;yt.prototype.mapMode=ge.TrackBefore;yt.prototype.startSide=yt.prototype.endSide=-1;yt.prototype.point=!0;const ss=M.define(),fg=M.define(),ug={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>F.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},_i=M.define();function dg(n){return[Of(),_i.of({...ug,...n})]}const Aa=M.define({combine:n=>n.some(e=>e)});function Of(n){return[pg]}const pg=le.fromClass(class{constructor(n){this.view=n,this.domAfter=null,this.prevViewport=n.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=n.state.facet(_i).map(e=>new Ra(n,e)),this.fixed=!n.state.facet(Aa);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(n){if(this.updateGutters(n)){let e=this.prevViewport,t=n.view.viewport,i=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(i<(t.to-t.from)*.8)}if(n.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(Aa)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=n.view.viewport}syncGutters(n){let e=this.dom.nextSibling;n&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=F.iter(this.view.state.facet(ss),this.view.viewport.from),i=[],s=this.gutters.map(r=>new mg(r,this.view.viewport,-this.view.documentPadding.top));for(let r of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(r.type)){let o=!0;for(let l of r.type)if(l.type==we.Text&&o){go(t,i,l.from);for(let a of s)a.line(this.view,l,i);o=!1}else if(l.widget)for(let a of s)a.widget(this.view,l)}else if(r.type==we.Text){go(t,i,r.from);for(let o of s)o.line(this.view,r,i)}else if(r.widget)for(let o of s)o.widget(this.view,r);for(let r of s)r.finish();n&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(n){let e=n.startState.facet(_i),t=n.state.facet(_i),i=n.docChanged||n.heightChanged||n.viewportChanged||!F.eq(n.startState.facet(ss),n.state.facet(ss),n.view.viewport.from,n.view.viewport.to);if(e==t)for(let s of this.gutters)s.update(n)&&(i=!0);else{i=!0;let s=[];for(let r of t){let o=e.indexOf(r);o<0?s.push(new Ra(this.view,r)):(this.gutters[o].update(n),s.push(this.gutters[o]))}for(let r of this.gutters)r.dom.remove(),s.indexOf(r)<0&&r.destroy();for(let r of s)r.config.side=="after"?this.getDOMAfter().appendChild(r.dom):this.dom.appendChild(r.dom);this.gutters=s}return i}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:n=>Q.scrollMargins.of(e=>{let t=e.plugin(n);if(!t||t.gutters.length==0||!t.fixed)return null;let i=t.dom.offsetWidth*e.scaleX,s=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==Z.LTR?{left:i,right:s}:{right:i,left:s}})});function Ma(n){return Array.isArray(n)?n:[n]}function go(n,e,t){for(;n.value&&n.from<=t;)n.from==t&&e.push(n.value),n.next()}class mg{constructor(e,t,i){this.gutter=e,this.height=i,this.i=0,this.cursor=F.iter(e.markers,t.from)}addElement(e,t,i){let{gutter:s}=this,r=(t.top-this.height)/e.scaleY,o=t.height/e.scaleY;if(this.i==s.elements.length){let l=new yf(e,o,r,i);s.elements.push(l),s.dom.appendChild(l.dom)}else s.elements[this.i].update(e,o,r,i);this.height=t.bottom,this.i++}line(e,t,i){let s=[];go(this.cursor,s,t.from),i.length&&(s=s.concat(i));let r=this.gutter.config.lineMarker(e,t,s);r&&s.unshift(r);let o=this.gutter;s.length==0&&!o.config.renderEmptyElements||this.addElement(e,t,s)}widget(e,t){let i=this.gutter.config.widgetMarker(e,t.widget,t),s=i?[i]:null;for(let r of e.state.facet(fg)){let o=r(e,t.widget,t);o&&(s||(s=[])).push(o)}s&&this.addElement(e,t,s)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}}class Ra{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in t.domEventHandlers)this.dom.addEventListener(i,s=>{let r=s.target,o;if(r!=this.dom&&this.dom.contains(r)){for(;r.parentNode!=this.dom;)r=r.parentNode;let a=r.getBoundingClientRect();o=(a.top+a.bottom)/2}else o=s.clientY;let l=e.lineBlockAtHeight(o-e.documentTop);t.domEventHandlers[i](e,l,s)&&s.preventDefault()});this.markers=Ma(t.markers(e)),t.initialSpacer&&(this.spacer=new yf(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=Ma(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let s=this.config.updateSpacer(this.spacer.markers[0],e);s!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[s])}let i=e.view.viewport;return!F.eq(this.markers,t,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}}class yf{constructor(e,t,i,s){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,i,s)}update(e,t,i,s){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),gg(this.markers,s)||this.setMarkers(e,s)}setMarkers(e,t){let i="cm-gutterElement",s=this.dom.firstChild;for(let r=0,o=0;;){let l=o,a=rr(l,a,h)||o(l,a,h):o}return i}})}});class cr extends yt{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}}function fr(n,e){return n.state.facet(oi).formatNumber(e,n.state)}const bg=_i.compute([oi],n=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(Og)},lineMarker(e,t,i){return i.some(s=>s.toDOM)?null:new cr(fr(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,i)=>{for(let s of e.state.facet(yg)){let r=s(e,t,i);if(r)return r}return null},lineMarkerChange:e=>e.startState.facet(oi)!=e.state.facet(oi),initialSpacer(e){return new cr(fr(e,Da(e.state.doc.lines)))},updateSpacer(e,t){let i=fr(t.view,Da(t.view.state.doc.lines));return i==e.number?e:new cr(i)},domEventHandlers:n.facet(oi).domEventHandlers,side:"before"}));function xg(n={}){return[oi.of(n),Of(),bg]}function Da(n){let e=9;for(;e{let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.head).from;s>t&&(t=s,e.push(Sg.range(s)))}return F.of(e)});function wg(){return kg}const bf=1024;let vg=0;class ur{constructor(e,t){this.from=e,this.to=t}}class z{constructor(e={}){this.id=vg++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")})}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=Te.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}}z.closedBy=new z({deserialize:n=>n.split(" ")});z.openedBy=new z({deserialize:n=>n.split(" ")});z.group=new z({deserialize:n=>n.split(" ")});z.isolate=new z({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});z.contextHash=new z({perNode:!0});z.lookAhead=new z({perNode:!0});z.mounted=new z({perNode:!0});class ys{constructor(e,t,i){this.tree=e,this.overlay=t,this.parser=i}static get(e){return e&&e.props&&e.props[z.mounted.id]}}const Tg=Object.create(null);class Te{constructor(e,t,i,s=0){this.name=e,this.props=t,this.id=i,this.flags=s}static define(e){let t=e.props&&e.props.length?Object.create(null):Tg,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),s=new Te(e.name||"",t,e.id,i);if(e.props){for(let r of e.props)if(Array.isArray(r)||(r=r(s)),r){if(r[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[r[0].id]=r[1]}}return s}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(z.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let s of i.split(" "))t[s]=e[i];return i=>{for(let s=i.prop(z.group),r=-1;r<(s?s.length:0);r++){let o=t[r<0?i.name:s[r]];if(o)return o}}}}Te.none=new Te("",Object.create(null),0,8);class Vs{constructor(e){this.types=e;for(let t=0;t0;for(let a=this.cursor(o|he.IncludeAnonymous);;){let h=!1;if(a.from<=r&&a.to>=s&&(!l&&a.type.isAnonymous||t(a)!==!1)){if(a.firstChild())continue;h=!0}for(;h&&i&&(l||!a.type.isAnonymous)&&i(a),!a.nextSibling();){if(!a.parent())return;h=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:el(Te.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,s)=>new U(this.type,t,i,s,this.propValues),e.makeTree||((t,i,s)=>new U(Te.none,t,i,s)))}static build(e){return Ag(e)}}U.empty=new U(Te.none,[],[],0);class Ko{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new Ko(this.buffer,this.index)}}class Rt{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return Te.none}toString(){let e=[];for(let t=0;t0));a=o[a+3]);return l}slice(e,t,i){let s=this.buffer,r=new Uint16Array(t-e),o=0;for(let l=e,a=0;l=e&&te;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function nn(n,e,t,i){for(var s;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to0?l.length:-1;e!=h;e+=t){let c=l[e],f=a[e]+o.from;if(xf(s,i,f,f+c.length)){if(c instanceof Rt){if(r&he.ExcludeBuffers)continue;let u=c.findChild(0,c.buffer.length,t,i-f,s);if(u>-1)return new tt(new Cg(o,c,e,f),null,u)}else if(r&he.IncludeAnonymous||!c.type.isAnonymous||Jo(c)){let u;if(!(r&he.IgnoreMounts)&&(u=ys.get(c))&&!u.overlay)return new Re(u.tree,f,e,o);let d=new Re(c,f,e,o);return r&he.IncludeAnonymous||!d.type.isAnonymous?d:d.nextChild(t<0?c.children.length-1:0,t,i,s)}}}if(r&he.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}enter(e,t,i=0){let s;if(!(i&he.IgnoreOverlays)&&(s=ys.get(this._tree))&&s.overlay){let r=e-this.from;for(let{from:o,to:l}of s.overlay)if((t>0?o<=r:o=r:l>r))return new Re(s.tree,s.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function qa(n,e,t,i){let s=n.cursor(),r=[];if(!s.firstChild())return r;if(t!=null){for(let o=!1;!o;)if(o=s.type.is(t),!s.nextSibling())return r}for(;;){if(i!=null&&s.type.is(i))return r;if(s.type.is(e)&&r.push(s.node),!s.nextSibling())return i==null?r:[]}}function Oo(n,e,t=e.length-1){for(let i=n;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}class Cg{constructor(e,t,i,s){this.parent=e,this.buffer=t,this.index=i,this.start=s}}class tt extends Sf{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.context.start,i);return r<0?null:new tt(this.context,this,r)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}enter(e,t,i=0){if(i&he.ExcludeBuffers)return null;let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return r<0?null:new tt(this.context,this,r)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new tt(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new tt(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,s=this.index+4,r=i.buffer[this.index+3];if(r>s){let o=i.buffer[this.index+1];e.push(i.slice(s,r,o)),t.push(0)}return new U(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function kf(n){if(!n.length)return null;let e=0,t=n[0];for(let r=1;rt.from||o.to=e){let l=new Re(o.tree,o.overlay[0].from+r.from,-1,r);(s||(s=[i])).push(nn(l,e,t,!1))}}return s?kf(s):i}class yo{get name(){return this.type.name}constructor(e,t=0){if(this.mode=t,this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,e instanceof Re)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:s}=this.buffer;return this.type=t||s.set.types[s.buffer[e]],this.from=i+s.buffer[e+1],this.to=i+s.buffer[e+2],!0}yield(e){return e?e instanceof Re?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:s}=this.buffer,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.buffer.start,i);return r<0?!1:(this.stack.push(this.index),this.yieldBuf(r))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&he.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&he.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&he.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let s=i<0?0:this.stack[i]+4;if(this.index!=s)return this.yieldBuf(t.findChild(s,this.index,-1,0,4))}else{let s=t.buffer[this.index+3];if(s<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(s)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:s}=this;if(s){if(e>0){if(this.index-1)for(let r=t+e,o=e<0?-1:i._tree.children.length;r!=o;r+=e){let l=i._tree.children[r];if(this.mode&he.IncludeAnonymous||l instanceof Rt||!l.type.isAnonymous||Jo(l))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let o=e;o;o=o._parent)if(o.index==s){if(s==this.index)return o;t=o,i=r+1;break e}s=this.stack[--r]}for(let s=i;s=0;r--){if(r<0)return Oo(this._tree,e,s);let o=i[t.buffer[this.stack[r]]];if(!o.isAnonymous){if(e[s]&&e[s]!=o.name)return!1;s--}}return!0}}function Jo(n){return n.children.some(e=>e instanceof Rt||!e.type.isAnonymous||Jo(e))}function Ag(n){var e;let{buffer:t,nodeSet:i,maxBufferLength:s=bf,reused:r=[],minRepeatType:o=i.types.length}=n,l=Array.isArray(t)?new Ko(t,t.length):t,a=i.types,h=0,c=0;function f(x,w,T,B,W,R){let{id:$,start:C,end:E,size:q}=l,N=c,ee=h;for(;q<0;)if(l.next(),q==-1){let H=r[$];T.push(H),B.push(C-x);return}else if(q==-3){h=$;return}else if(q==-4){c=$;return}else throw new RangeError(`Unrecognized record size: ${q}`);let K=a[$],te,ie,Se=C-x;if(E-C<=s&&(ie=g(l.pos-w,W))){let H=new Uint16Array(ie.size-ie.skip),ke=l.pos-ie.size,ne=H.length;for(;l.pos>ke;)ne=y(ie.start,H,ne);te=new Rt(H,E-ie.start,i),Se=ie.start-x}else{let H=l.pos-q;l.next();let ke=[],ne=[],se=$>=o?$:-1,ei=0,Sn=E;for(;l.pos>H;)se>=0&&l.id==se&&l.size>=0?(l.end<=Sn-s&&(p(ke,ne,C,ei,l.end,Sn,se,N,ee),ei=ke.length,Sn=l.end),l.next()):R>2500?u(C,H,ke,ne):f(C,H,ke,ne,se,R+1);if(se>=0&&ei>0&&ei-1&&ei>0){let Tl=d(K,ee);te=el(K,ke,ne,0,ke.length,0,E-C,Tl,Tl)}else te=m(K,ke,ne,E-C,N-E,ee)}T.push(te),B.push(Se)}function u(x,w,T,B){let W=[],R=0,$=-1;for(;l.pos>w;){let{id:C,start:E,end:q,size:N}=l;if(N>4)l.next();else{if($>-1&&E<$)break;$<0&&($=q-s),W.push(C,E,q),R++,l.next()}}if(R){let C=new Uint16Array(R*4),E=W[W.length-2];for(let q=W.length-3,N=0;q>=0;q-=3)C[N++]=W[q],C[N++]=W[q+1]-E,C[N++]=W[q+2]-E,C[N++]=N;T.push(new Rt(C,W[2]-E,i)),B.push(E-x)}}function d(x,w){return(T,B,W)=>{let R=0,$=T.length-1,C,E;if($>=0&&(C=T[$])instanceof U){if(!$&&C.type==x&&C.length==W)return C;(E=C.prop(z.lookAhead))&&(R=B[$]+C.length+E)}return m(x,T,B,W,R,w)}}function p(x,w,T,B,W,R,$,C,E){let q=[],N=[];for(;x.length>B;)q.push(x.pop()),N.push(w.pop()+T-W);x.push(m(i.types[$],q,N,R-W,C-R,E)),w.push(W-T)}function m(x,w,T,B,W,R,$){if(R){let C=[z.contextHash,R];$=$?[C].concat($):[C]}if(W>25){let C=[z.lookAhead,W];$=$?[C].concat($):[C]}return new U(x,w,T,B,$)}function g(x,w){let T=l.fork(),B=0,W=0,R=0,$=T.end-s,C={size:0,start:0,skip:0};e:for(let E=T.pos-x;T.pos>E;){let q=T.size;if(T.id==w&&q>=0){C.size=B,C.start=W,C.skip=R,R+=4,B+=4,T.next();continue}let N=T.pos-q;if(q<0||N=o?4:0,K=T.start;for(T.next();T.pos>N;){if(T.size<0)if(T.size==-3)ee+=4;else break e;else T.id>=o&&(ee+=4);T.next()}W=K,B+=q,R+=ee}return(w<0||B==x)&&(C.size=B,C.start=W,C.skip=R),C.size>4?C:void 0}function y(x,w,T){let{id:B,start:W,end:R,size:$}=l;if(l.next(),$>=0&&B4){let E=l.pos-($-4);for(;l.pos>E;)T=y(x,w,T)}w[--T]=C,w[--T]=R-x,w[--T]=W-x,w[--T]=B}else $==-3?h=B:$==-4&&(c=B);return T}let S=[],k=[];for(;l.pos>0;)f(n.start||0,n.bufferStart||0,S,k,-1,0);let v=(e=n.length)!==null&&e!==void 0?e:S.length?k[0]+S[0].length:0;return new U(a[n.topID],S.reverse(),k.reverse(),v)}const $a=new WeakMap;function rs(n,e){if(!n.isAnonymous||e instanceof Rt||e.type!=n)return 1;let t=$a.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=n||!(i instanceof U)){t=1;break}t+=rs(n,i)}$a.set(e,t)}return t}function el(n,e,t,i,s,r,o,l,a){let h=0;for(let p=i;p=c)break;w+=T}if(k==v+1){if(w>c){let T=p[v];d(T.children,T.positions,0,T.children.length,m[v]+S);continue}f.push(p[v])}else{let T=m[k-1]+p[k-1].length-x;f.push(el(n,p,m,v,k,x,T,null,a))}u.push(x+S-r)}}return d(e,t,i,s,0),(l||a)(f,u,o)}class Mg{constructor(){this.map=new WeakMap}setBuffer(e,t,i){let s=this.map.get(e);s||this.map.set(e,s=new Map),s.set(t,i)}getBuffer(e,t){let i=this.map.get(e);return i&&i.get(t)}set(e,t){e instanceof tt?this.setBuffer(e.context.buffer,e.index,t):e instanceof Re&&this.map.set(e.tree,t)}get(e){return e instanceof tt?this.getBuffer(e.context.buffer,e.index):e instanceof Re?this.map.get(e.tree):void 0}cursorSet(e,t){e.buffer?this.setBuffer(e.buffer.buffer,e.index,t):this.map.set(e.tree,t)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}}class _t{constructor(e,t,i,s,r=!1,o=!1){this.from=e,this.to=t,this.tree=i,this.offset=s,this.open=(r?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let s=[new _t(0,e.length,e,0,!1,i)];for(let r of t)r.to>e.length&&s.push(r);return s}static applyChanges(e,t,i=128){if(!t.length)return e;let s=[],r=1,o=e.length?e[0]:null;for(let l=0,a=0,h=0;;l++){let c=l=i)for(;o&&o.from=u.from||f<=u.to||h){let d=Math.max(u.from,a)-h,p=Math.min(u.to,f)-h;u=d>=p?null:new _t(d,p,u.tree,u.offset+h,l>0,!!c)}if(u&&s.push(u),o.to>f)break;o=rnew ur(s.from,s.to)):[new ur(0,0)]:[new ur(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let s=this.startParse(e,t,i);for(;;){let r=s.advance();if(r)return r}}}class Rg{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}}new z({perNode:!0});let Dg=0;class Le{constructor(e,t,i,s){this.name=e,this.set=t,this.base=i,this.modified=s,this.id=Dg++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i=typeof e=="string"?e:"?";if(e instanceof Le&&(t=e),t?.base)throw new Error("Can not derive from a modified tag");let s=new Le(i,[],null,[]);if(s.set.push(s),t)for(let r of t.set)s.set.push(r);return s}static defineModifier(e){let t=new bs(e);return i=>i.modified.indexOf(t)>-1?i:bs.get(i.base||i,i.modified.concat(t).sort((s,r)=>s.id-r.id))}}let Eg=0;class bs{constructor(e){this.name=e,this.instances=[],this.id=Eg++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(l=>l.base==e&&qg(t,l.modified));if(i)return i;let s=[],r=new Le(e.name,s,e,t);for(let l of t)l.instances.push(r);let o=$g(t);for(let l of e.set)if(!l.modified.length)for(let a of o)s.push(bs.get(l,a));return r}}function qg(n,e){return n.length==e.length&&n.every((t,i)=>t==e[i])}function $g(n){let e=[[]];for(let t=0;ti.length-t.length)}function wf(n){let e=Object.create(null);for(let t in n){let i=n[t];Array.isArray(i)||(i=[i]);for(let s of t.split(" "))if(s){let r=[],o=2,l=s;for(let f=0;;){if(l=="..."&&f>0&&f+3==s.length){o=1;break}let u=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(l);if(!u)throw new RangeError("Invalid path: "+s);if(r.push(u[0]=="*"?"":u[0][0]=='"'?JSON.parse(u[0]):u[0]),f+=u[0].length,f==s.length)break;let d=s[f++];if(f==s.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+s);l=s.slice(f)}let a=r.length-1,h=r[a];if(!h)throw new RangeError("Invalid path: "+s);let c=new xs(i,o,a>0?r.slice(0,a):null);e[h]=c.sort(e[h])}}return vf.add(e)}const vf=new z;class xs{constructor(e,t,i,s){this.tags=e,this.mode=t,this.context=i,this.next=s}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let o=s;for(let l of r)for(let a of l.set){let h=t[a.id];if(h){o=o?o+" "+h:h;break}}return o},scope:i}}function Bg(n,e){let t=null;for(let i of n){let s=i.style(e);s&&(t=t?t+" "+s:s)}return t}function Lg(n,e,t,i=0,s=n.length){let r=new Wg(i,Array.isArray(e)?e:[e],t);r.highlightRange(n.cursor(),i,s,"",r.highlighters),r.flush(s)}class Wg{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,s,r){let{type:o,from:l,to:a}=e;if(l>=i||a<=t)return;o.isTop&&(r=this.highlighters.filter(d=>!d.scope||d.scope(o)));let h=s,c=zg(e)||xs.empty,f=Bg(r,c.tags);if(f&&(h&&(h+=" "),h+=f,c.mode==1&&(s+=(s?" ":"")+f)),this.startSpan(Math.max(t,l),h),c.opaque)return;let u=e.tree&&e.tree.prop(z.mounted);if(u&&u.overlay){let d=e.node.enter(u.overlay[0].from+l,1),p=this.highlighters.filter(g=>!g.scope||g.scope(u.tree.type)),m=e.firstChild();for(let g=0,y=l;;g++){let S=g=k||!e.nextSibling())););if(!S||k>i)break;y=S.to+l,y>t&&(this.highlightRange(d.cursor(),Math.max(t,S.from+l),Math.min(i,y),"",p),this.startSpan(Math.min(i,y),h))}m&&e.parent()}else if(e.firstChild()){u&&(s="");do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,s,r),this.startSpan(Math.min(i,e.to),h)}while(e.nextSibling());e.parent()}}}function zg(n){let e=n.type.prop(vf);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}const P=Le.define,In=P(),kt=P(),Ba=P(kt),La=P(kt),wt=P(),Vn=P(wt),dr=P(wt),Ze=P(),Lt=P(Ze),je=P(),Ge=P(),bo=P(),Di=P(bo),Nn=P(),O={comment:In,lineComment:P(In),blockComment:P(In),docComment:P(In),name:kt,variableName:P(kt),typeName:Ba,tagName:P(Ba),propertyName:La,attributeName:P(La),className:P(kt),labelName:P(kt),namespace:P(kt),macroName:P(kt),literal:wt,string:Vn,docString:P(Vn),character:P(Vn),attributeValue:P(Vn),number:dr,integer:P(dr),float:P(dr),bool:P(wt),regexp:P(wt),escape:P(wt),color:P(wt),url:P(wt),keyword:je,self:P(je),null:P(je),atom:P(je),unit:P(je),modifier:P(je),operatorKeyword:P(je),controlKeyword:P(je),definitionKeyword:P(je),moduleKeyword:P(je),operator:Ge,derefOperator:P(Ge),arithmeticOperator:P(Ge),logicOperator:P(Ge),bitwiseOperator:P(Ge),compareOperator:P(Ge),updateOperator:P(Ge),definitionOperator:P(Ge),typeOperator:P(Ge),controlOperator:P(Ge),punctuation:bo,separator:P(bo),bracket:Di,angleBracket:P(Di),squareBracket:P(Di),paren:P(Di),brace:P(Di),content:Ze,heading:Lt,heading1:P(Lt),heading2:P(Lt),heading3:P(Lt),heading4:P(Lt),heading5:P(Lt),heading6:P(Lt),contentSeparator:P(Ze),list:P(Ze),quote:P(Ze),emphasis:P(Ze),strong:P(Ze),link:P(Ze),monospace:P(Ze),strikethrough:P(Ze),inserted:P(),deleted:P(),changed:P(),invalid:P(),meta:Nn,documentMeta:P(Nn),annotation:P(Nn),processingInstruction:P(Nn),definition:Le.defineModifier("definition"),constant:Le.defineModifier("constant"),function:Le.defineModifier("function"),standard:Le.defineModifier("standard"),local:Le.defineModifier("local"),special:Le.defineModifier("special")};for(let n in O){let e=O[n];e instanceof Le&&(e.name=n)}Tf([{tag:O.link,class:"tok-link"},{tag:O.heading,class:"tok-heading"},{tag:O.emphasis,class:"tok-emphasis"},{tag:O.strong,class:"tok-strong"},{tag:O.keyword,class:"tok-keyword"},{tag:O.atom,class:"tok-atom"},{tag:O.bool,class:"tok-bool"},{tag:O.url,class:"tok-url"},{tag:O.labelName,class:"tok-labelName"},{tag:O.inserted,class:"tok-inserted"},{tag:O.deleted,class:"tok-deleted"},{tag:O.literal,class:"tok-literal"},{tag:O.string,class:"tok-string"},{tag:O.number,class:"tok-number"},{tag:[O.regexp,O.escape,O.special(O.string)],class:"tok-string2"},{tag:O.variableName,class:"tok-variableName"},{tag:O.local(O.variableName),class:"tok-variableName tok-local"},{tag:O.definition(O.variableName),class:"tok-variableName tok-definition"},{tag:O.special(O.variableName),class:"tok-variableName2"},{tag:O.definition(O.propertyName),class:"tok-propertyName tok-definition"},{tag:O.typeName,class:"tok-typeName"},{tag:O.namespace,class:"tok-namespace"},{tag:O.className,class:"tok-className"},{tag:O.macroName,class:"tok-macroName"},{tag:O.propertyName,class:"tok-propertyName"},{tag:O.operator,class:"tok-operator"},{tag:O.comment,class:"tok-comment"},{tag:O.meta,class:"tok-meta"},{tag:O.invalid,class:"tok-invalid"},{tag:O.punctuation,class:"tok-punctuation"}]);const xo="ͼ",Wa=typeof Symbol>"u"?"__"+xo:Symbol.for(xo),So=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),za=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{};class Ia{constructor(e,t){this.rules=[];let{finish:i}=t||{};function s(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function r(o,l,a,h){let c=[],f=/^@(\w+)\b/.exec(o[0]),u=f&&f[1]=="keyframes";if(f&&l==null)return a.push(o[0]+";");for(let d in l){let p=l[d];if(/&/.test(d))r(d.split(/,\s*/).map(m=>o.map(g=>m.replace(/&/,g))).reduce((m,g)=>m.concat(g)),p,a);else if(p&&typeof p=="object"){if(!f)throw new RangeError("The value of a property ("+d+") should be a primitive value.");r(s(d),p,c,u)}else p!=null&&c.push(d.replace(/_.*/,"").replace(/[A-Z]/g,m=>"-"+m.toLowerCase())+": "+p+";")}(c.length||u)&&a.push((i&&!f&&!h?o.map(i):o).join(", ")+" {"+c.join(" ")+"}")}for(let o in e)r(s(o),e[o],this.rules)}getRules(){return this.rules.join(` `)}static newName(){let e=za[Wa]||1;return za[Wa]=e+1,xo+e.toString(36)}static mount(e,t,i){let s=e[So],r=i&&i.nonce;s?r&&s.setNonce(r):s=new Ig(e,r),s.mount(Array.isArray(t)?t:[t],e)}}let Va=new Map;class Ig{constructor(e,t){let i=e.ownerDocument||e,s=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&s.CSSStyleSheet){let r=Va.get(i);if(r)return e[So]=r;this.sheet=new s.CSSStyleSheet,Va.set(i,this)}else this.styleTag=i.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[So]=this}mount(e,t){let i=this.sheet,s=0,r=0;for(let o=0;o-1&&(this.modules.splice(a,1),r--,a=-1),a==-1){if(this.modules.splice(r++,0,l),i)for(let h=0;he.concat(n):void 0})}const Vg=new z;class We{constructor(e,t,i=[],s=""){this.data=e,this.name=s,I.prototype.hasOwnProperty("tree")||Object.defineProperty(I.prototype,"tree",{get(){return fe(this)}}),this.parser=t,this.extension=[Dt.of(this),I.languageData.of((r,o,l)=>{let a=Na(r,o,l),h=a.type.prop(Ft);if(!h)return[];let c=r.facet(h),f=a.type.prop(Vg);if(f){let u=a.resolve(o-a.from,l);for(let d of f)if(d.test(u,r)){let p=r.facet(d.facet);return d.type=="replace"?p:p.concat(c)}}return c})].concat(i)}isActiveAt(e,t,i=-1){return Na(e,t,i).type.prop(Ft)==this.data}findRegions(e){let t=e.facet(Dt);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],s=(r,o)=>{if(r.prop(Ft)==this.data){i.push({from:o,to:o+r.length});return}let l=r.prop(z.mounted);if(l){if(l.tree.prop(Ft)==this.data){if(l.overlay)for(let a of l.overlay)i.push({from:a.from+o,to:a.to+o});else i.push({from:o,to:o+r.length});return}else if(l.overlay){let a=i.length;if(s(l.tree,l.overlay[0].from+o),i.length>a)return}}for(let a=0;ai.isTop?t:void 0)]}),e.name)}configure(e,t){return new xs(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}}function fe(n){let e=n.field(We.state,!1);return e?e.tree:U.empty}class Ng{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let i=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}}let Di=null;class bi{constructor(e,t,i=[],s,r,o,l,a){this.parser=e,this.state=t,this.fragments=i,this.tree=s,this.treeLen=r,this.viewport=o,this.skipped=l,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new bi(e,t,[],U.empty,0,i,[],null)}startParse(){return this.parser.startParse(new Ng(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=U.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let s=Date.now()+e;e=()=>Date.now()>s}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(_t.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=Di;Di=this;try{return e()}finally{Di=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=Fa(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:s,treeLen:r,viewport:o,skipped:l}=this;if(this.takeTree(),!e.empty){let a=[];if(e.iterChangedRanges((h,c,f,u)=>a.push({fromA:h,toA:c,fromB:f,toB:u})),i=_t.applyChanges(i,a),s=U.empty,r=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){l=[];for(let h of this.skipped){let c=e.mapPos(h.from,1),f=e.mapPos(h.to,-1);ce.from&&(this.fragments=Fa(this.fragments,s,r),this.skipped.splice(i--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends tl{createParse(t,i,s){let r=s[0].from,o=s[s.length-1].to;return{parsedPos:r,advance(){let a=Di;if(a){for(let h of s)a.tempSkipped.push(h);e&&(a.scheduleOn=a.scheduleOn?Promise.all([a.scheduleOn,e]):e)}return this.parsedPos=o,new U(Te.none,[],[],o-r)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return Di}}function Fa(n,e,t){return _t.applyChanges(n,[{fromA:e,toA:t,fromB:e,toB:t}])}class xi{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new xi(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=bi.create(e.facet(Dt).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new xi(i)}}We.state=ue.define({create:xi.init,update(n,e){for(let t of e.effects)if(t.is(We.setState))return t.value;return e.startState.facet(Dt)!=e.state.facet(Dt)?xi.init(e.state):n.apply(e)}});let Pf=n=>{let e=setTimeout(()=>n(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(Pf=n=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(n,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});const mr=typeof navigator<"u"&&(!((pr=navigator.scheduling)===null||pr===void 0)&&pr.isInputPending)?()=>navigator.scheduling.isInputPending():null,Fg=le.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(We.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(We.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=Pf(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnds+1e3,a=r.context.work(()=>mr&&mr()||Date.now()>o,s+(l?0:1e5));this.chunkBudget-=Date.now()-t,(a||this.chunkBudget<=0)&&(r.context.takeTree(),this.view.dispatch({effects:We.setState.of(new xi(r.context))})),this.chunkBudget>0&&!(a&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(r.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>Ae(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),Dt=M.define({combine(n){return n.length?n[0]:null},enables:n=>[We.state,Fg,Q.contentAttributes.compute([n],e=>{let t=e.facet(n);return t&&t.name?{"data-language":t.name}:{}})]});class Xg{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}}const _g=M.define(),Ns=M.define({combine:n=>{if(!n.length)return" ";let e=n[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return e}});function Yt(n){let e=n.facet(Ns);return e.charCodeAt(0)==9?n.tabSize*e.length:e.length}function nn(n,e){let t="",i=n.tabSize,s=n.facet(Ns)[0];if(s==" "){for(;e>=i;)t+=" ",e-=i;s=" "}for(let r=0;r=e?Ug(n,t,e):null}class Fs{constructor(e,t={}){this.state=e,this.options=t,this.unit=Yt(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:s,simulateDoubleBreak:r}=this.options;return s!=null&&s>=i.from&&s<=i.to?r&&s==e?{text:"",from:e}:(t<0?s-1&&(r+=o-this.countColumn(i,i.search(/\S|$/))),r}countColumn(e,t=e.length){return vi(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:s}=this.lineAt(e,t),r=this.options.overrideIndentation;if(r){let o=r(s);if(o>-1)return o}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const nl=new z;function Ug(n,e,t){let i=e.resolveStack(t),s=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(s!=i.node){let r=[];for(let o=s;o&&!(o.fromi.node.to||o.from==i.node.from&&o.type==i.node.type);o=o.parent)r.push(o);for(let o=r.length-1;o>=0;o--)i={node:r[o],next:i}}return Qf(i,n,t)}function Qf(n,e,t){for(let i=n;i;i=i.next){let s=jg(i.node);if(s)return s(sl.create(e,t,i))}return 0}function Hg(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function jg(n){let e=n.type.prop(nl);if(e)return e;let t=n.firstChild,i;if(t&&(i=t.type.prop(z.closedBy))){let s=n.lastChild,r=s&&i.indexOf(s.name)>-1;return o=>Af(o,!0,1,void 0,r&&!Hg(o)?s.from:void 0)}return n.parent==null?Gg:null}function Gg(){return 0}class sl extends Fs{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.context=i}get node(){return this.context.node}static create(e,t,i){return new sl(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(t.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(Zg(i,e))break;t=this.state.doc.lineAt(i.from)}return this.lineIndent(t.from)}continue(){return Qf(this.context.next,this.base,this.pos)}}function Zg(n,e){for(let t=e;t;t=t.parent)if(n==t)return!0;return!1}function Yg(n){let e=n.node,t=e.childAfter(e.from),i=e.lastChild;if(!t)return null;let s=n.options.simulateBreak,r=n.state.doc.lineAt(t.from),o=s==null||s<=r.from?r.to:Math.min(r.to,s);for(let l=t.to;;){let a=e.childAfter(l);if(!a||a==i)return null;if(!a.type.isSkipped){if(a.from>=o)return null;let h=/^ */.exec(r.text.slice(t.to-r.from))[0].length;return{from:t.from,to:t.to+h}}l=a.to}}function gr({closing:n,align:e=!0,units:t=1}){return i=>Af(i,e,t,n)}function Af(n,e,t,i,s){let r=n.textAfter,o=r.match(/^\s*/)[0].length,l=i&&r.slice(o,o+i.length)==i||s==n.pos+o,a=e?Yg(n):null;return a?l?n.column(a.from):n.column(a.to):n.baseIndent+(l?0:n.unit*t)}const Kg=200;function Jg(){return I.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent("input.type")&&!n.isUserEvent("input.complete"))return n;let e=n.startState.languageDataAt("indentOnInput",n.startState.selection.main.head);if(!e.length)return n;let t=n.newDoc,{head:i}=n.newSelection.main,s=t.lineAt(i);if(i>s.from+Kg)return n;let r=t.sliceString(s.from,i);if(!e.some(h=>h.test(r)))return n;let{state:o}=n,l=-1,a=[];for(let{head:h}of o.selection.ranges){let c=o.doc.lineAt(h);if(c.from==l)continue;l=c.from;let f=il(o,c.from);if(f==null)continue;let u=/^\s*/.exec(c.text)[0],d=nn(o,f);u!=d&&a.push({from:c.from,to:c.from+u.length,insert:d})}return a.length?[n,{changes:a,sequential:!0}]:n})}const eO=M.define(),Mf=new z;function tO(n){let e=n.firstChild,t=n.lastChild;return e&&e.tot)continue;if(r&&l.from=e&&h.to>t&&(r=h)}}return r}function nO(n){let e=n.lastChild;return e&&e.to==n.to&&e.type.isError}function Ss(n,e,t){for(let i of n.facet(eO)){let s=i(n,e,t);if(s)return s}return iO(n,e,t)}function Rf(n,e){let t=e.mapPos(n.from,1),i=e.mapPos(n.to,-1);return t>=i?void 0:{from:t,to:i}}const Xs=B.define({map:Rf}),mn=B.define({map:Rf});function Df(n){let e=[];for(let{head:t}of n.state.selection.ranges)e.some(i=>i.from<=t&&i.to>=t)||e.push(n.lineBlockAt(t));return e}const Kt=ue.define({create(){return D.none},update(n,e){e.isUserEvent("delete")&&e.changes.iterChangedRanges((t,i)=>n=Xa(n,t,i)),n=n.map(e.changes);for(let t of e.effects)if(t.is(Xs)&&!sO(n,t.value.from,t.value.to)){let{preparePlaceholder:i}=e.state.facet($f),s=i?D.replace({widget:new fO(i(e.state,t.value))}):_a;n=n.update({add:[s.range(t.value.from,t.value.to)]})}else t.is(mn)&&(n=n.update({filter:(i,s)=>t.value.from!=i||t.value.to!=s,filterFrom:t.value.from,filterTo:t.value.to}));return e.selection&&(n=Xa(n,e.selection.main.head)),n},provide:n=>Q.decorations.from(n),toJSON(n,e){let t=[];return n.between(0,e.doc.length,(i,s)=>{t.push(i,s)}),t},fromJSON(n){if(!Array.isArray(n)||n.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let t=0;t{se&&(i=!0)}),i?n.update({filterFrom:e,filterTo:t,filter:(s,r)=>s>=t||r<=e}):n}function ks(n,e,t){var i;let s=null;return(i=n.field(Kt,!1))===null||i===void 0||i.between(e,t,(r,o)=>{(!s||s.from>r)&&(s={from:r,to:o})}),s}function sO(n,e,t){let i=!1;return n.between(e,e,(s,r)=>{s==e&&r==t&&(i=!0)}),i}function Ef(n,e){return n.field(Kt,!1)?e:e.concat(B.appendConfig.of(Bf()))}const rO=n=>{for(let e of Df(n)){let t=Ss(n.state,e.from,e.to);if(t)return n.dispatch({effects:Ef(n.state,[Xs.of(t),qf(n,t)])}),!0}return!1},oO=n=>{if(!n.state.field(Kt,!1))return!1;let e=[];for(let t of Df(n)){let i=ks(n.state,t.from,t.to);i&&e.push(mn.of(i),qf(n,i,!1))}return e.length&&n.dispatch({effects:e}),e.length>0};function qf(n,e,t=!0){let i=n.state.doc.lineAt(e.from).number,s=n.state.doc.lineAt(e.to).number;return Q.announce.of(`${n.state.phrase(t?"Folded lines":"Unfolded lines")} ${i} ${n.state.phrase("to")} ${s}.`)}const lO=n=>{let{state:e}=n,t=[];for(let i=0;i{let e=n.state.field(Kt,!1);if(!e||!e.size)return!1;let t=[];return e.between(0,n.state.doc.length,(i,s)=>{t.push(mn.of({from:i,to:s}))}),n.dispatch({effects:t}),!0},hO=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:rO},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:oO},{key:"Ctrl-Alt-[",run:lO},{key:"Ctrl-Alt-]",run:aO}],cO={placeholderDOM:null,preparePlaceholder:null,placeholderText:"…"},$f=M.define({combine(n){return ot(n,cO)}});function Bf(n){return[Kt,pO]}function Lf(n,e){let{state:t}=n,i=t.facet($f),s=o=>{let l=n.lineBlockAt(n.posAtDOM(o.target)),a=ks(n.state,l.from,l.to);a&&n.dispatch({effects:mn.of(a)}),o.preventDefault()};if(i.placeholderDOM)return i.placeholderDOM(n,s,e);let r=document.createElement("span");return r.textContent=i.placeholderText,r.setAttribute("aria-label",t.phrase("folded code")),r.title=t.phrase("unfold"),r.className="cm-foldPlaceholder",r.onclick=s,r}const _a=D.replace({widget:new class extends xt{toDOM(n){return Lf(n,null)}}});class fO extends xt{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return Lf(e,this.value)}}const uO={openText:"⌄",closedText:"›",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1};class Or extends yt{constructor(e,t){super(),this.config=e,this.open=t}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let t=document.createElement("span");return t.textContent=this.open?this.config.openText:this.config.closedText,t.title=e.state.phrase(this.open?"Fold line":"Unfold line"),t}}function dO(n={}){let e={...uO,...n},t=new Or(e,!0),i=new Or(e,!1),s=le.fromClass(class{constructor(o){this.from=o.viewport.from,this.markers=this.buildMarkers(o)}update(o){(o.docChanged||o.viewportChanged||o.startState.facet(Dt)!=o.state.facet(Dt)||o.startState.field(Kt,!1)!=o.state.field(Kt,!1)||fe(o.startState)!=fe(o.state)||e.foldingChanged(o))&&(this.markers=this.buildMarkers(o.view))}buildMarkers(o){let l=new gt;for(let a of o.viewportLineBlocks){let h=ks(o.state,a.from,a.to)?i:Ss(o.state,a.from,a.to)?t:null;h&&l.add(a.from,a.from,h)}return l.finish()}}),{domEventHandlers:r}=e;return[s,dg({class:"cm-foldGutter",markers(o){var l;return((l=o.plugin(s))===null||l===void 0?void 0:l.markers)||F.empty},initialSpacer(){return new Or(e,!1)},domEventHandlers:{...r,click:(o,l,a)=>{if(r.click&&r.click(o,l,a))return!0;let h=ks(o.state,l.from,l.to);if(h)return o.dispatch({effects:mn.of(h)}),!0;let c=Ss(o.state,l.from,l.to);return c?(o.dispatch({effects:Xs.of(c)}),!0):!1}}}),Bf()]}const pO=Q.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}});class gn{constructor(e,t){this.specs=e;let i;function s(l){let a=Ia.newName();return(i||(i=Object.create(null)))["."+a]=l,a}const r=typeof t.all=="string"?t.all:t.all?s(t.all):void 0,o=t.scope;this.scope=o instanceof We?l=>l.prop(Ft)==o.data:o?l=>l==o:void 0,this.style=Tf(e.map(l=>({tag:l.tag,class:l.class||s(Object.assign({},l,{tag:null}))})),{all:r}).style,this.module=i?new Ia(i):null,this.themeType=t.themeType}static define(e,t){return new gn(e,t||{})}}const ko=M.define(),Wf=M.define({combine(n){return n.length?[n[0]]:null}});function yr(n){let e=n.facet(ko);return e.length?e:n.facet(Wf)}function zf(n,e){let t=[gO],i;return n instanceof gn&&(n.module&&t.push(Q.styleModule.of(n.module)),i=n.themeType),e?.fallback?t.push(Wf.of(n)):i?t.push(ko.computeN([Q.darkTheme],s=>s.facet(Q.darkTheme)==(i=="dark")?[n]:[])):t.push(ko.of(n)),t}class mO{constructor(e){this.markCache=Object.create(null),this.tree=fe(e.state),this.decorations=this.buildDeco(e,yr(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=fe(e.state),i=yr(e.state),s=i!=yr(e.startState),{viewport:r}=e.view,o=e.changes.mapPos(this.decoratedTo,1);t.length=r.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=o):(t!=this.tree||e.viewportChanged||s)&&(this.tree=t,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=r.to)}buildDeco(e,t){if(!t||!this.tree.length)return D.none;let i=new gt;for(let{from:s,to:r}of e.visibleRanges)Lg(this.tree,t,(o,l,a)=>{i.add(o,l,this.markCache[a]||(this.markCache[a]=D.mark({class:a})))},s,r);return i.finish()}}const gO=Et.high(le.fromClass(mO,{decorations:n=>n.decorations})),OO=gn.define([{tag:O.meta,color:"#404740"},{tag:O.link,textDecoration:"underline"},{tag:O.heading,textDecoration:"underline",fontWeight:"bold"},{tag:O.emphasis,fontStyle:"italic"},{tag:O.strong,fontWeight:"bold"},{tag:O.strikethrough,textDecoration:"line-through"},{tag:O.keyword,color:"#708"},{tag:[O.atom,O.bool,O.url,O.contentSeparator,O.labelName],color:"#219"},{tag:[O.literal,O.inserted],color:"#164"},{tag:[O.string,O.deleted],color:"#a11"},{tag:[O.regexp,O.escape,O.special(O.string)],color:"#e40"},{tag:O.definition(O.variableName),color:"#00f"},{tag:O.local(O.variableName),color:"#30a"},{tag:[O.typeName,O.namespace],color:"#085"},{tag:O.className,color:"#167"},{tag:[O.special(O.variableName),O.macroName],color:"#256"},{tag:O.definition(O.propertyName),color:"#00c"},{tag:O.comment,color:"#940"},{tag:O.invalid,color:"#f00"}]),yO=Q.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),If=1e4,Vf="()[]{}",Nf=M.define({combine(n){return ot(n,{afterCursor:!0,brackets:Vf,maxScanDistance:If,renderMatch:SO})}}),bO=D.mark({class:"cm-matchingBracket"}),xO=D.mark({class:"cm-nonmatchingBracket"});function SO(n){let e=[],t=n.matched?bO:xO;return e.push(t.range(n.start.from,n.start.to)),n.end&&e.push(t.range(n.end.from,n.end.to)),e}const kO=ue.define({create(){return D.none},update(n,e){if(!e.docChanged&&!e.selection)return n;let t=[],i=e.state.facet(Nf);for(let s of e.state.selection.ranges){if(!s.empty)continue;let r=it(e.state,s.head,-1,i)||s.head>0&&it(e.state,s.head-1,1,i)||i.afterCursor&&(it(e.state,s.head,1,i)||s.headQ.decorations.from(n)}),wO=[kO,yO];function vO(n={}){return[Nf.of(n),wO]}const TO=new z;function wo(n,e,t){let i=n.prop(e<0?z.openedBy:z.closedBy);if(i)return i;if(n.name.length==1){let s=t.indexOf(n.name);if(s>-1&&s%2==(e<0?1:0))return[t[s+e]]}return null}function vo(n){let e=n.type.prop(TO);return e?e(n.node):n}function it(n,e,t,i={}){let s=i.maxScanDistance||If,r=i.brackets||Vf,o=fe(n),l=o.resolveInner(e,t);for(let a=l;a;a=a.parent){let h=wo(a.type,t,r);if(h&&a.from0?e>=c.from&&ec.from&&e<=c.to))return CO(n,e,t,a,c,h,r)}}return PO(n,e,t,o,l.type,s,r)}function CO(n,e,t,i,s,r,o){let l=i.parent,a={from:s.from,to:s.to},h=0,c=l?.cursor();if(c&&(t<0?c.childBefore(i.from):c.childAfter(i.to)))do if(t<0?c.to<=i.from:c.from>=i.to){if(h==0&&r.indexOf(c.type.name)>-1&&c.from0)return null;let h={from:t<0?e-1:e,to:t>0?e+1:e},c=n.doc.iterRange(e,t>0?n.doc.length:0),f=0;for(let u=0;!c.next().done&&u<=r;){let d=c.value;t<0&&(u+=d.length);let p=e+u*t;for(let m=t>0?0:d.length-1,g=t>0?d.length:-1;m!=g;m+=t){let y=o.indexOf(d[m]);if(!(y<0||i.resolveInner(p+m,1).type!=s))if(y%2==0==t>0)f++;else{if(f==1)return{start:h,end:{from:p+m,to:p+m+1},matched:y>>1==a>>1};f--}}t>0&&(u+=d.length)}return c.done?{start:h,matched:!1}:null}function Ua(n,e,t,i=0,s=0){e==null&&(e=n.search(/[^\s\u00a0]/),e==-1&&(e=n.length));let r=s;for(let o=i;o=this.string.length}sol(){return this.pos==0}peek(){return this.string.charAt(this.pos)||void 0}next(){if(this.post}eatSpace(){let e=this.pos;for(;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e}skipToEnd(){this.pos=this.string.length}skipTo(e){let t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0}backUp(e){this.pos-=e}column(){return this.lastColumnPosi?o.toLowerCase():o,r=this.string.substr(this.pos,e.length);return s(r)==s(e)?(t!==!1&&(this.pos+=e.length),!0):null}else{let s=this.string.slice(this.pos).match(e);return s&&s.index>0?null:(s&&t!==!1&&(this.pos+=s[0].length),s)}}current(){return this.string.slice(this.start,this.pos)}}function QO(n){return{name:n.name||"",token:n.token,blankLine:n.blankLine||(()=>{}),startState:n.startState||(()=>!0),copyState:n.copyState||AO,indent:n.indent||(()=>null),languageData:n.languageData||{},tokenTable:n.tokenTable||ol,mergeTokens:n.mergeTokens!==!1}}function AO(n){if(typeof n!="object")return n;let e={};for(let t in n){let i=n[t];e[t]=i instanceof Array?i.slice():i}return e}const Ha=new WeakMap;class ws extends We{constructor(e){let t=Cf(e.languageData),i=QO(e),s,r=new class extends tl{createParse(o,l,a){return new RO(s,o,l,a)}};super(t,r,[],e.name),this.topNode=qO(t,this),s=this,this.streamParser=i,this.stateAfter=new z({perNode:!0}),this.tokenTable=e.tokenTable?new Hf(i.tokenTable):EO}static define(e){return new ws(e)}getIndent(e){let t,{overrideIndentation:i}=e.options;i&&(t=Ha.get(e.state),t!=null&&t1e4)return null;for(;r=i&&t+e.length<=s&&e.prop(n.stateAfter);if(r)return{state:n.streamParser.copyState(r),pos:t+e.length};for(let o=e.children.length-1;o>=0;o--){let l=e.children[o],a=t+e.positions[o],h=l instanceof U&&a=e.length)return e;!s&&t==0&&e.type==n.topNode&&(s=!0);for(let r=e.children.length-1;r>=0;r--){let o=e.positions[r],l=e.children[r],a;if(ot&&rl(n,r.tree,0-r.offset,t,l),h;if(a&&a.pos<=i&&(h=Xf(n,r.tree,t+r.offset,a.pos+r.offset,!1)))return{state:a.state,tree:h}}return{state:n.streamParser.startState(s?Yt(s):4),tree:U.empty}}let RO=class{constructor(e,t,i,s){this.lang=e,this.input=t,this.fragments=i,this.ranges=s,this.stoppedAt=null,this.chunks=[],this.chunkPos=[],this.chunk=[],this.chunkReused=void 0,this.rangeIndex=0,this.to=s[s.length-1].to;let r=bi.get(),o=s[0].from,{state:l,tree:a}=MO(e,i,o,this.to,r?.state);this.state=l,this.parsedPos=this.chunkStart=o+a.length;for(let h=0;hh.from<=r.viewport.from&&h.to>=r.viewport.from)&&(this.state=this.lang.streamParser.startState(Yt(r.state)),r.skipUntilInView(this.parsedPos,r.viewport.from),this.parsedPos=r.viewport.from),this.moveRangeIndex()}advance(){let e=bi.get(),t=this.stoppedAt==null?this.to:Math.min(this.to,this.stoppedAt),i=Math.min(t,this.chunkStart+512);for(e&&(i=Math.min(i,e.viewport.to));this.parsedPos=t?this.finish():e&&this.parsedPos>=e.viewport.to?(e.skipUntilInView(this.parsedPos,t),this.finish()):null}stopAt(e){this.stoppedAt=e}lineAfter(e){let t=this.input.chunk(e);if(this.input.lineChunks)t==` +`;this.styleTag.textContent=o;let l=t.head||t;this.styleTag.parentNode!=l&&l.insertBefore(this.styleTag,l.firstChild)}}setNonce(e){this.styleTag&&this.styleTag.getAttribute("nonce")!=e&&this.styleTag.setAttribute("nonce",e)}}var pr;const Ft=new z;function Cf(n){return M.define({combine:n?e=>e.concat(n):void 0})}const Vg=new z;class We{constructor(e,t,i=[],s=""){this.data=e,this.name=s,I.prototype.hasOwnProperty("tree")||Object.defineProperty(I.prototype,"tree",{get(){return fe(this)}}),this.parser=t,this.extension=[Dt.of(this),I.languageData.of((r,o,l)=>{let a=Na(r,o,l),h=a.type.prop(Ft);if(!h)return[];let c=r.facet(h),f=a.type.prop(Vg);if(f){let u=a.resolve(o-a.from,l);for(let d of f)if(d.test(u,r)){let p=r.facet(d.facet);return d.type=="replace"?p:p.concat(c)}}return c})].concat(i)}isActiveAt(e,t,i=-1){return Na(e,t,i).type.prop(Ft)==this.data}findRegions(e){let t=e.facet(Dt);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],s=(r,o)=>{if(r.prop(Ft)==this.data){i.push({from:o,to:o+r.length});return}let l=r.prop(z.mounted);if(l){if(l.tree.prop(Ft)==this.data){if(l.overlay)for(let a of l.overlay)i.push({from:a.from+o,to:a.to+o});else i.push({from:o,to:o+r.length});return}else if(l.overlay){let a=i.length;if(s(l.tree,l.overlay[0].from+o),i.length>a)return}}for(let a=0;ai.isTop?t:void 0)]}),e.name)}configure(e,t){return new Ss(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}}function fe(n){let e=n.field(We.state,!1);return e?e.tree:U.empty}class Ng{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let i=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}}let Ei=null;class xi{constructor(e,t,i=[],s,r,o,l,a){this.parser=e,this.state=t,this.fragments=i,this.tree=s,this.treeLen=r,this.viewport=o,this.skipped=l,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new xi(e,t,[],U.empty,0,i,[],null)}startParse(){return this.parser.startParse(new Ng(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=U.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let s=Date.now()+e;e=()=>Date.now()>s}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(_t.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=Ei;Ei=this;try{return e()}finally{Ei=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=Fa(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:s,treeLen:r,viewport:o,skipped:l}=this;if(this.takeTree(),!e.empty){let a=[];if(e.iterChangedRanges((h,c,f,u)=>a.push({fromA:h,toA:c,fromB:f,toB:u})),i=_t.applyChanges(i,a),s=U.empty,r=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){l=[];for(let h of this.skipped){let c=e.mapPos(h.from,1),f=e.mapPos(h.to,-1);ce.from&&(this.fragments=Fa(this.fragments,s,r),this.skipped.splice(i--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends tl{createParse(t,i,s){let r=s[0].from,o=s[s.length-1].to;return{parsedPos:r,advance(){let a=Ei;if(a){for(let h of s)a.tempSkipped.push(h);e&&(a.scheduleOn=a.scheduleOn?Promise.all([a.scheduleOn,e]):e)}return this.parsedPos=o,new U(Te.none,[],[],o-r)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return Ei}}function Fa(n,e,t){return _t.applyChanges(n,[{fromA:e,toA:t,fromB:e,toB:t}])}class Si{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new Si(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=xi.create(e.facet(Dt).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new Si(i)}}We.state=ue.define({create:Si.init,update(n,e){for(let t of e.effects)if(t.is(We.setState))return t.value;return e.startState.facet(Dt)!=e.state.facet(Dt)?Si.init(e.state):n.apply(e)}});let Pf=n=>{let e=setTimeout(()=>n(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(Pf=n=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(n,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});const mr=typeof navigator<"u"&&(!((pr=navigator.scheduling)===null||pr===void 0)&&pr.isInputPending)?()=>navigator.scheduling.isInputPending():null,Fg=le.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(We.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(We.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=Pf(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnds+1e3,a=r.context.work(()=>mr&&mr()||Date.now()>o,s+(l?0:1e5));this.chunkBudget-=Date.now()-t,(a||this.chunkBudget<=0)&&(r.context.takeTree(),this.view.dispatch({effects:We.setState.of(new Si(r.context))})),this.chunkBudget>0&&!(a&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(r.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>Ae(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),Dt=M.define({combine(n){return n.length?n[0]:null},enables:n=>[We.state,Fg,Q.contentAttributes.compute([n],e=>{let t=e.facet(n);return t&&t.name?{"data-language":t.name}:{}})]});class Xg{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}}const _g=M.define(),Ns=M.define({combine:n=>{if(!n.length)return" ";let e=n[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return e}});function Yt(n){let e=n.facet(Ns);return e.charCodeAt(0)==9?n.tabSize*e.length:e.length}function sn(n,e){let t="",i=n.tabSize,s=n.facet(Ns)[0];if(s==" "){for(;e>=i;)t+=" ",e-=i;s=" "}for(let r=0;r=e?Ug(n,t,e):null}class Fs{constructor(e,t={}){this.state=e,this.options=t,this.unit=Yt(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:s,simulateDoubleBreak:r}=this.options;return s!=null&&s>=i.from&&s<=i.to?r&&s==e?{text:"",from:e}:(t<0?s-1&&(r+=o-this.countColumn(i,i.search(/\S|$/))),r}countColumn(e,t=e.length){return Ti(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:s}=this.lineAt(e,t),r=this.options.overrideIndentation;if(r){let o=r(s);if(o>-1)return o}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const nl=new z;function Ug(n,e,t){let i=e.resolveStack(t),s=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(s!=i.node){let r=[];for(let o=s;o&&!(o.fromi.node.to||o.from==i.node.from&&o.type==i.node.type);o=o.parent)r.push(o);for(let o=r.length-1;o>=0;o--)i={node:r[o],next:i}}return Qf(i,n,t)}function Qf(n,e,t){for(let i=n;i;i=i.next){let s=jg(i.node);if(s)return s(sl.create(e,t,i))}return 0}function Hg(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function jg(n){let e=n.type.prop(nl);if(e)return e;let t=n.firstChild,i;if(t&&(i=t.type.prop(z.closedBy))){let s=n.lastChild,r=s&&i.indexOf(s.name)>-1;return o=>Af(o,!0,1,void 0,r&&!Hg(o)?s.from:void 0)}return n.parent==null?Gg:null}function Gg(){return 0}class sl extends Fs{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.context=i}get node(){return this.context.node}static create(e,t,i){return new sl(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(t.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(Zg(i,e))break;t=this.state.doc.lineAt(i.from)}return this.lineIndent(t.from)}continue(){return Qf(this.context.next,this.base,this.pos)}}function Zg(n,e){for(let t=e;t;t=t.parent)if(n==t)return!0;return!1}function Yg(n){let e=n.node,t=e.childAfter(e.from),i=e.lastChild;if(!t)return null;let s=n.options.simulateBreak,r=n.state.doc.lineAt(t.from),o=s==null||s<=r.from?r.to:Math.min(r.to,s);for(let l=t.to;;){let a=e.childAfter(l);if(!a||a==i)return null;if(!a.type.isSkipped){if(a.from>=o)return null;let h=/^ */.exec(r.text.slice(t.to-r.from))[0].length;return{from:t.from,to:t.to+h}}l=a.to}}function gr({closing:n,align:e=!0,units:t=1}){return i=>Af(i,e,t,n)}function Af(n,e,t,i,s){let r=n.textAfter,o=r.match(/^\s*/)[0].length,l=i&&r.slice(o,o+i.length)==i||s==n.pos+o,a=e?Yg(n):null;return a?l?n.column(a.from):n.column(a.to):n.baseIndent+(l?0:n.unit*t)}const Kg=200;function Jg(){return I.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent("input.type")&&!n.isUserEvent("input.complete"))return n;let e=n.startState.languageDataAt("indentOnInput",n.startState.selection.main.head);if(!e.length)return n;let t=n.newDoc,{head:i}=n.newSelection.main,s=t.lineAt(i);if(i>s.from+Kg)return n;let r=t.sliceString(s.from,i);if(!e.some(h=>h.test(r)))return n;let{state:o}=n,l=-1,a=[];for(let{head:h}of o.selection.ranges){let c=o.doc.lineAt(h);if(c.from==l)continue;l=c.from;let f=il(o,c.from);if(f==null)continue;let u=/^\s*/.exec(c.text)[0],d=sn(o,f);u!=d&&a.push({from:c.from,to:c.from+u.length,insert:d})}return a.length?[n,{changes:a,sequential:!0}]:n})}const eO=M.define(),Mf=new z;function tO(n){let e=n.firstChild,t=n.lastChild;return e&&e.tot)continue;if(r&&l.from=e&&h.to>t&&(r=h)}}return r}function nO(n){let e=n.lastChild;return e&&e.to==n.to&&e.type.isError}function ks(n,e,t){for(let i of n.facet(eO)){let s=i(n,e,t);if(s)return s}return iO(n,e,t)}function Rf(n,e){let t=e.mapPos(n.from,1),i=e.mapPos(n.to,-1);return t>=i?void 0:{from:t,to:i}}const Xs=L.define({map:Rf}),gn=L.define({map:Rf});function Df(n){let e=[];for(let{head:t}of n.state.selection.ranges)e.some(i=>i.from<=t&&i.to>=t)||e.push(n.lineBlockAt(t));return e}const Kt=ue.define({create(){return D.none},update(n,e){e.isUserEvent("delete")&&e.changes.iterChangedRanges((t,i)=>n=Xa(n,t,i)),n=n.map(e.changes);for(let t of e.effects)if(t.is(Xs)&&!sO(n,t.value.from,t.value.to)){let{preparePlaceholder:i}=e.state.facet($f),s=i?D.replace({widget:new fO(i(e.state,t.value))}):_a;n=n.update({add:[s.range(t.value.from,t.value.to)]})}else t.is(gn)&&(n=n.update({filter:(i,s)=>t.value.from!=i||t.value.to!=s,filterFrom:t.value.from,filterTo:t.value.to}));return e.selection&&(n=Xa(n,e.selection.main.head)),n},provide:n=>Q.decorations.from(n),toJSON(n,e){let t=[];return n.between(0,e.doc.length,(i,s)=>{t.push(i,s)}),t},fromJSON(n){if(!Array.isArray(n)||n.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let t=0;t{se&&(i=!0)}),i?n.update({filterFrom:e,filterTo:t,filter:(s,r)=>s>=t||r<=e}):n}function ws(n,e,t){var i;let s=null;return(i=n.field(Kt,!1))===null||i===void 0||i.between(e,t,(r,o)=>{(!s||s.from>r)&&(s={from:r,to:o})}),s}function sO(n,e,t){let i=!1;return n.between(e,e,(s,r)=>{s==e&&r==t&&(i=!0)}),i}function Ef(n,e){return n.field(Kt,!1)?e:e.concat(L.appendConfig.of(Bf()))}const rO=n=>{for(let e of Df(n)){let t=ks(n.state,e.from,e.to);if(t)return n.dispatch({effects:Ef(n.state,[Xs.of(t),qf(n,t)])}),!0}return!1},oO=n=>{if(!n.state.field(Kt,!1))return!1;let e=[];for(let t of Df(n)){let i=ws(n.state,t.from,t.to);i&&e.push(gn.of(i),qf(n,i,!1))}return e.length&&n.dispatch({effects:e}),e.length>0};function qf(n,e,t=!0){let i=n.state.doc.lineAt(e.from).number,s=n.state.doc.lineAt(e.to).number;return Q.announce.of(`${n.state.phrase(t?"Folded lines":"Unfolded lines")} ${i} ${n.state.phrase("to")} ${s}.`)}const lO=n=>{let{state:e}=n,t=[];for(let i=0;i{let e=n.state.field(Kt,!1);if(!e||!e.size)return!1;let t=[];return e.between(0,n.state.doc.length,(i,s)=>{t.push(gn.of({from:i,to:s}))}),n.dispatch({effects:t}),!0},hO=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:rO},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:oO},{key:"Ctrl-Alt-[",run:lO},{key:"Ctrl-Alt-]",run:aO}],cO={placeholderDOM:null,preparePlaceholder:null,placeholderText:"…"},$f=M.define({combine(n){return ot(n,cO)}});function Bf(n){return[Kt,pO]}function Lf(n,e){let{state:t}=n,i=t.facet($f),s=o=>{let l=n.lineBlockAt(n.posAtDOM(o.target)),a=ws(n.state,l.from,l.to);a&&n.dispatch({effects:gn.of(a)}),o.preventDefault()};if(i.placeholderDOM)return i.placeholderDOM(n,s,e);let r=document.createElement("span");return r.textContent=i.placeholderText,r.setAttribute("aria-label",t.phrase("folded code")),r.title=t.phrase("unfold"),r.className="cm-foldPlaceholder",r.onclick=s,r}const _a=D.replace({widget:new class extends xt{toDOM(n){return Lf(n,null)}}});class fO extends xt{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return Lf(e,this.value)}}const uO={openText:"⌄",closedText:"›",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1};class Or extends yt{constructor(e,t){super(),this.config=e,this.open=t}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let t=document.createElement("span");return t.textContent=this.open?this.config.openText:this.config.closedText,t.title=e.state.phrase(this.open?"Fold line":"Unfold line"),t}}function dO(n={}){let e={...uO,...n},t=new Or(e,!0),i=new Or(e,!1),s=le.fromClass(class{constructor(o){this.from=o.viewport.from,this.markers=this.buildMarkers(o)}update(o){(o.docChanged||o.viewportChanged||o.startState.facet(Dt)!=o.state.facet(Dt)||o.startState.field(Kt,!1)!=o.state.field(Kt,!1)||fe(o.startState)!=fe(o.state)||e.foldingChanged(o))&&(this.markers=this.buildMarkers(o.view))}buildMarkers(o){let l=new gt;for(let a of o.viewportLineBlocks){let h=ws(o.state,a.from,a.to)?i:ks(o.state,a.from,a.to)?t:null;h&&l.add(a.from,a.from,h)}return l.finish()}}),{domEventHandlers:r}=e;return[s,dg({class:"cm-foldGutter",markers(o){var l;return((l=o.plugin(s))===null||l===void 0?void 0:l.markers)||F.empty},initialSpacer(){return new Or(e,!1)},domEventHandlers:{...r,click:(o,l,a)=>{if(r.click&&r.click(o,l,a))return!0;let h=ws(o.state,l.from,l.to);if(h)return o.dispatch({effects:gn.of(h)}),!0;let c=ks(o.state,l.from,l.to);return c?(o.dispatch({effects:Xs.of(c)}),!0):!1}}}),Bf()]}const pO=Q.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}});class On{constructor(e,t){this.specs=e;let i;function s(l){let a=Ia.newName();return(i||(i=Object.create(null)))["."+a]=l,a}const r=typeof t.all=="string"?t.all:t.all?s(t.all):void 0,o=t.scope;this.scope=o instanceof We?l=>l.prop(Ft)==o.data:o?l=>l==o:void 0,this.style=Tf(e.map(l=>({tag:l.tag,class:l.class||s(Object.assign({},l,{tag:null}))})),{all:r}).style,this.module=i?new Ia(i):null,this.themeType=t.themeType}static define(e,t){return new On(e,t||{})}}const ko=M.define(),Wf=M.define({combine(n){return n.length?[n[0]]:null}});function yr(n){let e=n.facet(ko);return e.length?e:n.facet(Wf)}function zf(n,e){let t=[gO],i;return n instanceof On&&(n.module&&t.push(Q.styleModule.of(n.module)),i=n.themeType),e?.fallback?t.push(Wf.of(n)):i?t.push(ko.computeN([Q.darkTheme],s=>s.facet(Q.darkTheme)==(i=="dark")?[n]:[])):t.push(ko.of(n)),t}class mO{constructor(e){this.markCache=Object.create(null),this.tree=fe(e.state),this.decorations=this.buildDeco(e,yr(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=fe(e.state),i=yr(e.state),s=i!=yr(e.startState),{viewport:r}=e.view,o=e.changes.mapPos(this.decoratedTo,1);t.length=r.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=o):(t!=this.tree||e.viewportChanged||s)&&(this.tree=t,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=r.to)}buildDeco(e,t){if(!t||!this.tree.length)return D.none;let i=new gt;for(let{from:s,to:r}of e.visibleRanges)Lg(this.tree,t,(o,l,a)=>{i.add(o,l,this.markCache[a]||(this.markCache[a]=D.mark({class:a})))},s,r);return i.finish()}}const gO=Et.high(le.fromClass(mO,{decorations:n=>n.decorations})),OO=On.define([{tag:O.meta,color:"#404740"},{tag:O.link,textDecoration:"underline"},{tag:O.heading,textDecoration:"underline",fontWeight:"bold"},{tag:O.emphasis,fontStyle:"italic"},{tag:O.strong,fontWeight:"bold"},{tag:O.strikethrough,textDecoration:"line-through"},{tag:O.keyword,color:"#708"},{tag:[O.atom,O.bool,O.url,O.contentSeparator,O.labelName],color:"#219"},{tag:[O.literal,O.inserted],color:"#164"},{tag:[O.string,O.deleted],color:"#a11"},{tag:[O.regexp,O.escape,O.special(O.string)],color:"#e40"},{tag:O.definition(O.variableName),color:"#00f"},{tag:O.local(O.variableName),color:"#30a"},{tag:[O.typeName,O.namespace],color:"#085"},{tag:O.className,color:"#167"},{tag:[O.special(O.variableName),O.macroName],color:"#256"},{tag:O.definition(O.propertyName),color:"#00c"},{tag:O.comment,color:"#940"},{tag:O.invalid,color:"#f00"}]),yO=Q.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),If=1e4,Vf="()[]{}",Nf=M.define({combine(n){return ot(n,{afterCursor:!0,brackets:Vf,maxScanDistance:If,renderMatch:SO})}}),bO=D.mark({class:"cm-matchingBracket"}),xO=D.mark({class:"cm-nonmatchingBracket"});function SO(n){let e=[],t=n.matched?bO:xO;return e.push(t.range(n.start.from,n.start.to)),n.end&&e.push(t.range(n.end.from,n.end.to)),e}const kO=ue.define({create(){return D.none},update(n,e){if(!e.docChanged&&!e.selection)return n;let t=[],i=e.state.facet(Nf);for(let s of e.state.selection.ranges){if(!s.empty)continue;let r=it(e.state,s.head,-1,i)||s.head>0&&it(e.state,s.head-1,1,i)||i.afterCursor&&(it(e.state,s.head,1,i)||s.headQ.decorations.from(n)}),wO=[kO,yO];function vO(n={}){return[Nf.of(n),wO]}const TO=new z;function wo(n,e,t){let i=n.prop(e<0?z.openedBy:z.closedBy);if(i)return i;if(n.name.length==1){let s=t.indexOf(n.name);if(s>-1&&s%2==(e<0?1:0))return[t[s+e]]}return null}function vo(n){let e=n.type.prop(TO);return e?e(n.node):n}function it(n,e,t,i={}){let s=i.maxScanDistance||If,r=i.brackets||Vf,o=fe(n),l=o.resolveInner(e,t);for(let a=l;a;a=a.parent){let h=wo(a.type,t,r);if(h&&a.from0?e>=c.from&&ec.from&&e<=c.to))return CO(n,e,t,a,c,h,r)}}return PO(n,e,t,o,l.type,s,r)}function CO(n,e,t,i,s,r,o){let l=i.parent,a={from:s.from,to:s.to},h=0,c=l?.cursor();if(c&&(t<0?c.childBefore(i.from):c.childAfter(i.to)))do if(t<0?c.to<=i.from:c.from>=i.to){if(h==0&&r.indexOf(c.type.name)>-1&&c.from0)return null;let h={from:t<0?e-1:e,to:t>0?e+1:e},c=n.doc.iterRange(e,t>0?n.doc.length:0),f=0;for(let u=0;!c.next().done&&u<=r;){let d=c.value;t<0&&(u+=d.length);let p=e+u*t;for(let m=t>0?0:d.length-1,g=t>0?d.length:-1;m!=g;m+=t){let y=o.indexOf(d[m]);if(!(y<0||i.resolveInner(p+m,1).type!=s))if(y%2==0==t>0)f++;else{if(f==1)return{start:h,end:{from:p+m,to:p+m+1},matched:y>>1==a>>1};f--}}t>0&&(u+=d.length)}return c.done?{start:h,matched:!1}:null}function Ua(n,e,t,i=0,s=0){e==null&&(e=n.search(/[^\s\u00a0]/),e==-1&&(e=n.length));let r=s;for(let o=i;o=this.string.length}sol(){return this.pos==0}peek(){return this.string.charAt(this.pos)||void 0}next(){if(this.post}eatSpace(){let e=this.pos;for(;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e}skipToEnd(){this.pos=this.string.length}skipTo(e){let t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0}backUp(e){this.pos-=e}column(){return this.lastColumnPosi?o.toLowerCase():o,r=this.string.substr(this.pos,e.length);return s(r)==s(e)?(t!==!1&&(this.pos+=e.length),!0):null}else{let s=this.string.slice(this.pos).match(e);return s&&s.index>0?null:(s&&t!==!1&&(this.pos+=s[0].length),s)}}current(){return this.string.slice(this.start,this.pos)}}function QO(n){return{name:n.name||"",token:n.token,blankLine:n.blankLine||(()=>{}),startState:n.startState||(()=>!0),copyState:n.copyState||AO,indent:n.indent||(()=>null),languageData:n.languageData||{},tokenTable:n.tokenTable||ol,mergeTokens:n.mergeTokens!==!1}}function AO(n){if(typeof n!="object")return n;let e={};for(let t in n){let i=n[t];e[t]=i instanceof Array?i.slice():i}return e}const Ha=new WeakMap;class vs extends We{constructor(e){let t=Cf(e.languageData),i=QO(e),s,r=new class extends tl{createParse(o,l,a){return new RO(s,o,l,a)}};super(t,r,[],e.name),this.topNode=qO(t,this),s=this,this.streamParser=i,this.stateAfter=new z({perNode:!0}),this.tokenTable=e.tokenTable?new Hf(i.tokenTable):EO}static define(e){return new vs(e)}getIndent(e){let t,{overrideIndentation:i}=e.options;i&&(t=Ha.get(e.state),t!=null&&t1e4)return null;for(;r=i&&t+e.length<=s&&e.prop(n.stateAfter);if(r)return{state:n.streamParser.copyState(r),pos:t+e.length};for(let o=e.children.length-1;o>=0;o--){let l=e.children[o],a=t+e.positions[o],h=l instanceof U&&a=e.length)return e;!s&&t==0&&e.type==n.topNode&&(s=!0);for(let r=e.children.length-1;r>=0;r--){let o=e.positions[r],l=e.children[r],a;if(ot&&rl(n,r.tree,0-r.offset,t,l),h;if(a&&a.pos<=i&&(h=Xf(n,r.tree,t+r.offset,a.pos+r.offset,!1)))return{state:a.state,tree:h}}return{state:n.streamParser.startState(s?Yt(s):4),tree:U.empty}}let RO=class{constructor(e,t,i,s){this.lang=e,this.input=t,this.fragments=i,this.ranges=s,this.stoppedAt=null,this.chunks=[],this.chunkPos=[],this.chunk=[],this.chunkReused=void 0,this.rangeIndex=0,this.to=s[s.length-1].to;let r=xi.get(),o=s[0].from,{state:l,tree:a}=MO(e,i,o,this.to,r?.state);this.state=l,this.parsedPos=this.chunkStart=o+a.length;for(let h=0;hh.from<=r.viewport.from&&h.to>=r.viewport.from)&&(this.state=this.lang.streamParser.startState(Yt(r.state)),r.skipUntilInView(this.parsedPos,r.viewport.from),this.parsedPos=r.viewport.from),this.moveRangeIndex()}advance(){let e=xi.get(),t=this.stoppedAt==null?this.to:Math.min(this.to,this.stoppedAt),i=Math.min(t,this.chunkStart+512);for(e&&(i=Math.min(i,e.viewport.to));this.parsedPos=t?this.finish():e&&this.parsedPos>=e.viewport.to?(e.skipUntilInView(this.parsedPos,t),this.finish()):null}stopAt(e){this.stoppedAt=e}lineAfter(e){let t=this.input.chunk(e);if(this.input.lineChunks)t==` `&&(t="");else{let i=t.indexOf(` -`);i>-1&&(t=t.slice(0,i))}return e+t.length<=this.to?t:t.slice(0,this.to-e)}nextLine(){let e=this.parsedPos,t=this.lineAfter(e),i=e+t.length;for(let s=this.rangeIndex;;){let r=this.ranges[s].to;if(r>=i||(t=t.slice(0,r-(i-t.length)),s++,s==this.ranges.length))break;let o=this.ranges[s].from,l=this.lineAfter(o);t+=l,i=o+l.length}return{line:t,end:i}}skipGapsTo(e,t,i){for(;;){let s=this.ranges[this.rangeIndex].to,r=e+t;if(i>0?s>r:s>=r)break;let o=this.ranges[++this.rangeIndex].from;t+=o-s}return t}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to1){s=this.skipGapsTo(t,s,1),t+=s;let l=this.chunk.length;s=this.skipGapsTo(i,s,-1),i+=s,r+=this.chunk.length-l}let o=this.chunk.length-4;return this.lang.streamParser.mergeTokens&&r==4&&o>=0&&this.chunk[o]==e&&this.chunk[o+2]==t?this.chunk[o+2]=i:this.chunk.push(e,t,i,r),s}parseLine(e){let{line:t,end:i}=this.nextLine(),s=0,{streamParser:r}=this.lang,o=new Ff(t,e?e.state.tabSize:4,e?Yt(e.state):2);if(o.eol())r.blankLine(this.state,o.indentUnit);else for(;!o.eol();){let l=_f(r.token,o,this.state);if(l&&(s=this.emitToken(this.lang.tokenTable.resolve(l),this.parsedPos+o.start,this.parsedPos+o.pos,s)),o.start>1e4)break}this.parsedPos=i,this.moveRangeIndex(),this.parsedPose.start)return s}throw new Error("Stream parser failed to advance stream.")}const ol=Object.create(null),sn=[Te.none],DO=new Vs(sn),ja=[],Ga=Object.create(null),Uf=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])Uf[n]=jf(ol,e);class Hf{constructor(e){this.extra=e,this.table=Object.assign(Object.create(null),Uf)}resolve(e){return e?this.table[e]||(this.table[e]=jf(this.extra,e)):0}}const EO=new Hf(ol);function br(n,e){ja.indexOf(n)>-1||(ja.push(n),console.warn(e))}function jf(n,e){let t=[];for(let l of e.split(" ")){let a=[];for(let h of l.split(".")){let c=n[h]||O[h];c?typeof c=="function"?a.length?a=a.map(c):br(h,`Modifier ${h} used at start of tag`):a.length?br(h,`Tag ${h} used as modifier`):a=Array.isArray(c)?c:[c]:br(h,`Unknown highlighting tag ${h}`)}for(let h of a)t.push(h)}if(!t.length)return 0;let i=e.replace(/ /g,"_"),s=i+" "+t.map(l=>l.id),r=Ga[s];if(r)return r.id;let o=Ga[s]=Te.define({id:sn.length,name:i,props:[wf({[i]:t})]});return sn.push(o),o.id}function qO(n,e){let t=Te.define({id:sn.length,name:"Document",props:[Ft.add(()=>n),nl.add(()=>i=>e.getIndent(i))],top:!0});return sn.push(t),t}Z.RTL,Z.LTR;const $O=n=>{let{state:e}=n,t=e.doc.lineAt(e.selection.main.from),i=al(n.state,t.from);return i.line?BO(n):i.block?WO(n):!1};function ll(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let s=n(e,t);return s?(i(t.update(s)),!0):!1}}const BO=ll(VO,0),LO=ll(Gf,0),WO=ll((n,e)=>Gf(n,e,IO(e)),0);function al(n,e){let t=n.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}const Ei=50;function zO(n,{open:e,close:t},i,s){let r=n.sliceDoc(i-Ei,i),o=n.sliceDoc(s,s+Ei),l=/\s*$/.exec(r)[0].length,a=/^\s*/.exec(o)[0].length,h=r.length-l;if(r.slice(h-e.length,h)==e&&o.slice(a,a+t.length)==t)return{open:{pos:i-l,margin:l&&1},close:{pos:s+a,margin:a&&1}};let c,f;s-i<=2*Ei?c=f=n.sliceDoc(i,s):(c=n.sliceDoc(i,i+Ei),f=n.sliceDoc(s-Ei,s));let u=/^\s*/.exec(c)[0].length,d=/\s*$/.exec(f)[0].length,p=f.length-d-t.length;return c.slice(u,u+e.length)==e&&f.slice(p,p+t.length)==t?{open:{pos:i+u+e.length,margin:/\s/.test(c.charAt(u+e.length))?1:0},close:{pos:s-d-t.length,margin:/\s/.test(f.charAt(p-1))?1:0}}:null}function IO(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),s=t.to<=i.to?i:n.doc.lineAt(t.to);s.from>i.from&&s.from==t.to&&(s=t.to==i.to+1?i:n.doc.lineAt(t.to-1));let r=e.length-1;r>=0&&e[r].to>i.from?e[r].to=s.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:s.to})}return e}function Gf(n,e,t=e.selection.ranges){let i=t.map(r=>al(e,r.from).block);if(!i.every(r=>r))return null;let s=t.map((r,o)=>zO(e,i[o],r.from,r.to));if(n!=2&&!s.every(r=>r))return{changes:e.changes(t.map((r,o)=>s[o]?[]:[{from:r.from,insert:i[o].open+" "},{from:r.to,insert:" "+i[o].close}]))};if(n!=1&&s.some(r=>r)){let r=[];for(let o=0,l;os&&(r==o||o>f.from)){s=f.from;let u=/^\s*/.exec(f.text)[0].length,d=u==f.length,p=f.text.slice(u,u+h.length)==h?u:-1;ur.comment<0&&(!r.empty||r.single))){let r=[];for(let{line:l,token:a,indent:h,empty:c,single:f}of i)(f||!c)&&r.push({from:l.from+h,insert:a+" "});let o=e.changes(r);return{changes:o,selection:e.selection.map(o,1)}}else if(n!=1&&i.some(r=>r.comment>=0)){let r=[];for(let{line:o,comment:l,token:a}of i)if(l>=0){let h=o.from+l,c=h+a.length;o.text[c-o.from]==" "&&c++,r.push({from:h,to:c})}return{changes:r}}return null}const To=bt.define(),NO=bt.define(),FO=M.define(),Zf=M.define({combine(n){return ot(n,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,s)=>e(i,s)||t(i,s)})}}),Yf=ue.define({create(){return nt.empty},update(n,e){let t=e.state.facet(Zf),i=e.annotation(To);if(i){let a=Me.fromTransaction(e,i.selection),h=i.side,c=h==0?n.undone:n.done;return a?c=vs(c,c.length,t.minDepth,a):c=eu(c,e.startState.selection),new nt(h==0?i.rest:c,h==0?c:i.rest)}let s=e.annotation(NO);if((s=="full"||s=="before")&&(n=n.isolate()),e.annotation(oe.addToHistory)===!1)return e.changes.empty?n:n.addMapping(e.changes.desc);let r=Me.fromTransaction(e),o=e.annotation(oe.time),l=e.annotation(oe.userEvent);return r?n=n.addChanges(r,o,l,t,e):e.selection&&(n=n.addSelection(e.startState.selection,o,l,t.newGroupDelay)),(s=="full"||s=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(e=>e.toJSON()),undone:n.undone.map(e=>e.toJSON())}},fromJSON(n){return new nt(n.done.map(Me.fromJSON),n.undone.map(Me.fromJSON))}});function XO(n={}){return[Yf,Zf.of(n),Q.domEventHandlers({beforeinput(e,t){let i=e.inputType=="historyUndo"?Kf:e.inputType=="historyRedo"?Co:null;return i?(e.preventDefault(),i(t)):!1}})]}function _s(n,e){return function({state:t,dispatch:i}){if(!e&&t.readOnly)return!1;let s=t.field(Yf,!1);if(!s)return!1;let r=s.pop(n,t,e);return r?(i(r),!0):!1}}const Kf=_s(0,!1),Co=_s(1,!1),_O=_s(0,!0),UO=_s(1,!0);class Me{constructor(e,t,i,s,r){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=s,this.selectionsAfter=r}setSelAfter(e){return new Me(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(s=>s.toJSON())}}static fromJSON(e){return new Me(e.changes&&ae.fromJSON(e.changes),[],e.mapped&&st.fromJSON(e.mapped),e.startSelection&&b.fromJSON(e.startSelection),e.selectionsAfter.map(b.fromJSON))}static fromTransaction(e,t){let i=ze;for(let s of e.startState.facet(FO)){let r=s(e);r.length&&(i=i.concat(r))}return!i.length&&e.changes.empty?null:new Me(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,ze)}static selection(e){return new Me(void 0,ze,void 0,void 0,e)}}function vs(n,e,t,i){let s=e+1>t+20?e-t-1:0,r=n.slice(s,e);return r.push(i),r}function HO(n,e){let t=[],i=!1;return n.iterChangedRanges((s,r)=>t.push(s,r)),e.iterChangedRanges((s,r,o,l)=>{for(let a=0;a=h&&o<=c&&(i=!0)}}),i}function jO(n,e){return n.ranges.length==e.ranges.length&&n.ranges.filter((t,i)=>t.empty!=e.ranges[i].empty).length===0}function Jf(n,e){return n.length?e.length?n.concat(e):n:e}const ze=[],GO=200;function eu(n,e){if(n.length){let t=n[n.length-1],i=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-GO));return i.length&&i[i.length-1].eq(e)?n:(i.push(e),vs(n,n.length-1,1e9,t.setSelAfter(i)))}else return[Me.selection([e])]}function ZO(n){let e=n[n.length-1],t=n.slice();return t[n.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function xr(n,e){if(!n.length)return n;let t=n.length,i=ze;for(;t;){let s=YO(n[t-1],e,i);if(s.changes&&!s.changes.empty||s.effects.length){let r=n.slice(0,t);return r[t-1]=s,r}else e=s.mapped,t--,i=s.selectionsAfter}return i.length?[Me.selection(i)]:ze}function YO(n,e,t){let i=Jf(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(e)):ze,t);if(!n.changes)return Me.selection(i);let s=n.changes.map(e),r=e.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(r):r;return new Me(s,B.mapEffects(n.effects,e),o,n.startSelection.map(r),i)}const KO=/^(input\.type|delete)($|\.)/;class nt{constructor(e,t,i=0,s=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=s}isolate(){return this.prevTime?new nt(this.done,this.undone):this}addChanges(e,t,i,s,r){let o=this.done,l=o[o.length-1];return l&&l.changes&&!l.changes.empty&&e.changes&&(!i||KO.test(i))&&(!l.selectionsAfter.length&&t-this.prevTime0&&t-this.prevTimet.empty?n.moveByChar(t,e):Us(t,e))}function xe(n){return n.textDirectionAt(n.state.selection.main.head)==Z.LTR}const iu=n=>tu(n,!xe(n)),nu=n=>tu(n,xe(n));function su(n,e){return Ue(n,t=>t.empty?n.moveByGroup(t,e):Us(t,e))}const e0=n=>su(n,!xe(n)),t0=n=>su(n,xe(n));function i0(n,e,t){if(e.type.prop(t))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(e.from,e.to)))||e.firstChild}function Hs(n,e,t){let i=fe(n).resolveInner(e.head),s=t?z.closedBy:z.openedBy;for(let a=e.head;;){let h=t?i.childAfter(a):i.childBefore(a);if(!h)break;i0(n,h,s)?i=h:a=t?h.to:h.from}let r=i.type.prop(s),o,l;return r&&(o=t?it(n,i.from,1):it(n,i.to,-1))&&o.matched?l=t?o.end.to:o.end.from:l=t?i.to:i.from,b.cursor(l,t?-1:1)}const n0=n=>Ue(n,e=>Hs(n.state,e,!xe(n))),s0=n=>Ue(n,e=>Hs(n.state,e,xe(n)));function ru(n,e){return Ue(n,t=>{if(!t.empty)return Us(t,e);let i=n.moveVertically(t,e);return i.head!=t.head?i:n.moveToLineBoundary(t,e)})}const ou=n=>ru(n,!1),lu=n=>ru(n,!0);function au(n){let e=n.scrollDOM.clientHeighto.empty?n.moveVertically(o,e,t.height):Us(o,e));if(s.eq(i.selection))return!1;let r;if(t.selfScroll){let o=n.coordsAtPos(i.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),a=l.top+t.marginTop,h=l.bottom-t.marginBottom;o&&o.top>a&&o.bottomhu(n,!1),Po=n=>hu(n,!0);function qt(n,e,t){let i=n.lineBlockAt(e.head),s=n.moveToLineBoundary(e,t);if(s.head==e.head&&s.head!=(t?i.to:i.from)&&(s=n.moveToLineBoundary(e,t,!1)),!t&&s.head==i.from&&i.length){let r=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;r&&e.head!=i.from+r&&(s=b.cursor(i.from+r))}return s}const r0=n=>Ue(n,e=>qt(n,e,!0)),o0=n=>Ue(n,e=>qt(n,e,!1)),l0=n=>Ue(n,e=>qt(n,e,!xe(n))),a0=n=>Ue(n,e=>qt(n,e,xe(n))),h0=n=>Ue(n,e=>b.cursor(n.lineBlockAt(e.head).from,1)),c0=n=>Ue(n,e=>b.cursor(n.lineBlockAt(e.head).to,-1));function f0(n,e,t){let i=!1,s=Ti(n.selection,r=>{let o=it(n,r.head,-1)||it(n,r.head,1)||r.head>0&&it(n,r.head-1,1)||r.headf0(n,e);function Fe(n,e){let t=Ti(n.state.selection,i=>{let s=e(i);return b.range(i.anchor,s.head,s.goalColumn,s.bidiLevel||void 0)});return t.eq(n.state.selection)?!1:(n.dispatch(lt(n.state,t)),!0)}function cu(n,e){return Fe(n,t=>n.moveByChar(t,e))}const fu=n=>cu(n,!xe(n)),uu=n=>cu(n,xe(n));function du(n,e){return Fe(n,t=>n.moveByGroup(t,e))}const d0=n=>du(n,!xe(n)),p0=n=>du(n,xe(n)),m0=n=>Fe(n,e=>Hs(n.state,e,!xe(n))),g0=n=>Fe(n,e=>Hs(n.state,e,xe(n)));function pu(n,e){return Fe(n,t=>n.moveVertically(t,e))}const mu=n=>pu(n,!1),gu=n=>pu(n,!0);function Ou(n,e){return Fe(n,t=>n.moveVertically(t,e,au(n).height))}const Ya=n=>Ou(n,!1),Ka=n=>Ou(n,!0),O0=n=>Fe(n,e=>qt(n,e,!0)),y0=n=>Fe(n,e=>qt(n,e,!1)),b0=n=>Fe(n,e=>qt(n,e,!xe(n))),x0=n=>Fe(n,e=>qt(n,e,xe(n))),S0=n=>Fe(n,e=>b.cursor(n.lineBlockAt(e.head).from)),k0=n=>Fe(n,e=>b.cursor(n.lineBlockAt(e.head).to)),Ja=({state:n,dispatch:e})=>(e(lt(n,{anchor:0})),!0),eh=({state:n,dispatch:e})=>(e(lt(n,{anchor:n.doc.length})),!0),th=({state:n,dispatch:e})=>(e(lt(n,{anchor:n.selection.main.anchor,head:0})),!0),ih=({state:n,dispatch:e})=>(e(lt(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),w0=({state:n,dispatch:e})=>(e(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),v0=({state:n,dispatch:e})=>{let t=js(n).map(({from:i,to:s})=>b.range(i,Math.min(s+1,n.doc.length)));return e(n.update({selection:b.create(t),userEvent:"select"})),!0},T0=({state:n,dispatch:e})=>{let t=Ti(n.selection,i=>{let s=fe(n),r=s.resolveStack(i.from,1);if(i.empty){let o=s.resolveStack(i.from,-1);o.node.from>=r.node.from&&o.node.to<=r.node.to&&(r=o)}for(let o=r;o;o=o.next){let{node:l}=o;if((l.from=i.to||l.to>i.to&&l.from<=i.from)&&o.next)return b.range(l.to,l.from)}return i});return t.eq(n.selection)?!1:(e(lt(n,t)),!0)},C0=({state:n,dispatch:e})=>{let t=n.selection,i=null;return t.ranges.length>1?i=b.create([t.main]):t.main.empty||(i=b.create([b.cursor(t.main.head)])),i?(e(lt(n,i)),!0):!1};function On(n,e){if(n.state.readOnly)return!1;let t="delete.selection",{state:i}=n,s=i.changeByRange(r=>{let{from:o,to:l}=r;if(o==l){let a=e(r);ao&&(t="delete.forward",a=Nn(n,a,!0)),o=Math.min(o,a),l=Math.max(l,a)}else o=Nn(n,o,!1),l=Nn(n,l,!0);return o==l?{range:r}:{changes:{from:o,to:l},range:b.cursor(o,os(n)))i.between(e,e,(s,r)=>{se&&(e=t?r:s)});return e}const yu=(n,e,t)=>On(n,i=>{let s=i.from,{state:r}=n,o=r.doc.lineAt(s),l,a;if(t&&!e&&s>o.from&&syu(n,!1,!0),bu=n=>yu(n,!0,!1),xu=(n,e)=>On(n,t=>{let i=t.head,{state:s}=n,r=s.doc.lineAt(i),o=s.charCategorizer(i);for(let l=null;;){if(i==(e?r.to:r.from)){i==t.head&&r.number!=(e?s.doc.lines:1)&&(i+=e?1:-1);break}let a=Oe(r.text,i-r.from,e)+r.from,h=r.text.slice(Math.min(i,a)-r.from,Math.max(i,a)-r.from),c=o(h);if(l!=null&&c!=l)break;(h!=" "||i!=t.head)&&(l=c),i=a}return i}),Su=n=>xu(n,!1),P0=n=>xu(n,!0),Q0=n=>On(n,e=>{let t=n.lineBlockAt(e.head).to;return e.headOn(n,e=>{let t=n.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),M0=n=>On(n,e=>{let t=n.moveToLineBoundary(e,!0).head;return e.head{if(n.readOnly)return!1;let t=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:V.of(["",""])},range:b.cursor(i.from)}));return e(n.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},D0=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let s=i.from,r=n.doc.lineAt(s),o=s==r.from?s-1:Oe(r.text,s-r.from,!1)+r.from,l=s==r.to?s+1:Oe(r.text,s-r.from,!0)+r.from;return{changes:{from:o,to:l,insert:n.doc.slice(s,l).append(n.doc.slice(o,s))},range:b.cursor(l)}});return t.changes.empty?!1:(e(n.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function js(n){let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.from),r=n.doc.lineAt(i.to);if(!i.empty&&i.to==r.from&&(r=n.doc.lineAt(i.to-1)),t>=s.number){let o=e[e.length-1];o.to=r.to,o.ranges.push(i)}else e.push({from:s.from,to:r.to,ranges:[i]});t=r.number+1}return e}function ku(n,e,t){if(n.readOnly)return!1;let i=[],s=[];for(let r of js(n)){if(t?r.to==n.doc.length:r.from==0)continue;let o=n.doc.lineAt(t?r.to+1:r.from-1),l=o.length+1;if(t){i.push({from:r.to,to:o.to},{from:r.from,insert:o.text+n.lineBreak});for(let a of r.ranges)s.push(b.range(Math.min(n.doc.length,a.anchor+l),Math.min(n.doc.length,a.head+l)))}else{i.push({from:o.from,to:r.from},{from:r.to,insert:n.lineBreak+o.text});for(let a of r.ranges)s.push(b.range(a.anchor-l,a.head-l))}}return i.length?(e(n.update({changes:i,scrollIntoView:!0,selection:b.create(s,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}const E0=({state:n,dispatch:e})=>ku(n,e,!1),q0=({state:n,dispatch:e})=>ku(n,e,!0);function wu(n,e,t){if(n.readOnly)return!1;let i=[];for(let s of js(n))t?i.push({from:s.from,insert:n.doc.slice(s.from,s.to)+n.lineBreak}):i.push({from:s.to,insert:n.lineBreak+n.doc.slice(s.from,s.to)});return e(n.update({changes:i,scrollIntoView:!0,userEvent:"input.copyline"})),!0}const $0=({state:n,dispatch:e})=>wu(n,e,!1),B0=({state:n,dispatch:e})=>wu(n,e,!0),L0=n=>{if(n.state.readOnly)return!1;let{state:e}=n,t=e.changes(js(e).map(({from:s,to:r})=>(s>0?s--:r{let r;if(n.lineWrapping){let o=n.lineBlockAt(s.head),l=n.coordsAtPos(s.head,s.assoc||1);l&&(r=o.bottom+n.documentTop-l.bottom+n.defaultLineHeight/2)}return n.moveVertically(s,!0,r)}).map(t);return n.dispatch({changes:t,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function W0(n,e){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=fe(n).resolveInner(e),i=t.childBefore(e),s=t.childAfter(e),r;return i&&s&&i.to<=e&&s.from>=e&&(r=i.type.prop(z.closedBy))&&r.indexOf(s.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(s.from).from&&!/\S/.test(n.sliceDoc(i.to,s.from))?{from:i.to,to:s.from}:null}const nh=vu(!1),z0=vu(!0);function vu(n){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange(s=>{let{from:r,to:o}=s,l=e.doc.lineAt(r),a=!n&&r==o&&W0(e,r);n&&(r=o=(o<=l.to?l:e.doc.lineAt(o)).to);let h=new Fs(e,{simulateBreak:r,simulateDoubleBreak:!!a}),c=il(h,r);for(c==null&&(c=vi(/^\s*/.exec(e.doc.lineAt(r).text)[0],e.tabSize));ol.from&&r{let s=[];for(let o=i.from;o<=i.to;){let l=n.doc.lineAt(o);l.number>t&&(i.empty||i.to>l.from)&&(e(l,s,i),t=l.number),o=l.to+1}let r=n.changes(s);return{changes:s,range:b.range(r.mapPos(i.anchor,1),r.mapPos(i.head,1))}})}const I0=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=Object.create(null),i=new Fs(n,{overrideIndentation:r=>{let o=t[r];return o??-1}}),s=hl(n,(r,o,l)=>{let a=il(i,r.from);if(a==null)return;/\S/.test(r.text)||(a=0);let h=/^\s*/.exec(r.text)[0],c=nn(n,a);(h!=c||l.fromn.readOnly?!1:(e(n.update(hl(n,(t,i)=>{i.push({from:t.from,insert:n.facet(Ns)})}),{userEvent:"input.indent"})),!0),N0=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(hl(n,(t,i)=>{let s=/^\s*/.exec(t.text)[0];if(!s)return;let r=vi(s,n.tabSize),o=0,l=nn(n,Math.max(0,r-Yt(n)));for(;o(n.setTabFocusMode(),!0),X0=[{key:"Ctrl-b",run:iu,shift:fu,preventDefault:!0},{key:"Ctrl-f",run:nu,shift:uu},{key:"Ctrl-p",run:ou,shift:mu},{key:"Ctrl-n",run:lu,shift:gu},{key:"Ctrl-a",run:h0,shift:S0},{key:"Ctrl-e",run:c0,shift:k0},{key:"Ctrl-d",run:bu},{key:"Ctrl-h",run:Qo},{key:"Ctrl-k",run:Q0},{key:"Ctrl-Alt-h",run:Su},{key:"Ctrl-o",run:R0},{key:"Ctrl-t",run:D0},{key:"Ctrl-v",run:Po}],_0=[{key:"ArrowLeft",run:iu,shift:fu,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:e0,shift:d0,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:l0,shift:b0,preventDefault:!0},{key:"ArrowRight",run:nu,shift:uu,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:t0,shift:p0,preventDefault:!0},{mac:"Cmd-ArrowRight",run:a0,shift:x0,preventDefault:!0},{key:"ArrowUp",run:ou,shift:mu,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Ja,shift:th},{mac:"Ctrl-ArrowUp",run:Za,shift:Ya},{key:"ArrowDown",run:lu,shift:gu,preventDefault:!0},{mac:"Cmd-ArrowDown",run:eh,shift:ih},{mac:"Ctrl-ArrowDown",run:Po,shift:Ka},{key:"PageUp",run:Za,shift:Ya},{key:"PageDown",run:Po,shift:Ka},{key:"Home",run:o0,shift:y0,preventDefault:!0},{key:"Mod-Home",run:Ja,shift:th},{key:"End",run:r0,shift:O0,preventDefault:!0},{key:"Mod-End",run:eh,shift:ih},{key:"Enter",run:nh,shift:nh},{key:"Mod-a",run:w0},{key:"Backspace",run:Qo,shift:Qo},{key:"Delete",run:bu},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Su},{key:"Mod-Delete",mac:"Alt-Delete",run:P0},{mac:"Mod-Backspace",run:A0},{mac:"Mod-Delete",run:M0}].concat(X0.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),U0=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:n0,shift:m0},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:s0,shift:g0},{key:"Alt-ArrowUp",run:E0},{key:"Shift-Alt-ArrowUp",run:$0},{key:"Alt-ArrowDown",run:q0},{key:"Shift-Alt-ArrowDown",run:B0},{key:"Escape",run:C0},{key:"Mod-Enter",run:z0},{key:"Alt-l",mac:"Ctrl-l",run:v0},{key:"Mod-i",run:T0,preventDefault:!0},{key:"Mod-[",run:N0},{key:"Mod-]",run:V0},{key:"Mod-Alt-\\",run:I0},{key:"Shift-Mod-k",run:L0},{key:"Shift-Mod-\\",run:u0},{key:"Mod-/",run:$O},{key:"Alt-A",run:LO},{key:"Ctrl-m",mac:"Shift-Alt-m",run:F0}].concat(_0);function de(){var n=arguments[0];typeof n=="string"&&(n=document.createElement(n));var e=1,t=arguments[1];if(t&&typeof t=="object"&&t.nodeType==null&&!Array.isArray(t)){for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){var s=t[i];typeof s=="string"?n.setAttribute(i,s):s!=null&&(n[i]=s)}e++}for(;en.normalize("NFKD"):n=>n;class Si{constructor(e,t,i=0,s=e.length,r,o){this.test=o,this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,s),this.bufferStart=i,this.normalize=r?l=>r(sh(l)):sh,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return Ce(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=Bo(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=Ke(e);let s=this.normalize(t);if(s.length)for(let r=0,o=i;;r++){let l=s.charCodeAt(r),a=this.match(l,o,this.bufferPos+this.bufferStart);if(r==s.length-1){if(a)return this.value=a,this;break}o==i&&rthis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let i=this.curLineStart+t.index,s=i+t[0].length;if(this.matchPos=Ts(this.text,s+(i==s?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,match:t},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=i||s.to<=t){let l=new fi(t,e.sliceString(t,i));return Sr.set(e,l),l}if(s.from==t&&s.to==i)return s;let{text:r,from:o}=s;return o>t&&(r=e.sliceString(t,o)+r,o=t),s.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let i=this.flat.from+t.index,s=i+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,match:t},this.matchPos=Ts(this.text,s+(i==s?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=fi.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}}typeof Symbol<"u"&&(Pu.prototype[Symbol.iterator]=Qu.prototype[Symbol.iterator]=function(){return this});function H0(n){try{return new RegExp(n,cl),!0}catch{return!1}}function Ts(n,e){if(e>=n.length)return e;let t=n.lineAt(e),i;for(;e=56320&&i<57344;)e++;return e}function Ao(n){let e=String(n.state.doc.lineAt(n.state.selection.main.head).number),t=de("input",{class:"cm-textfield",name:"line",value:e}),i=de("form",{class:"cm-gotoLine",onkeydown:r=>{r.keyCode==27?(r.preventDefault(),n.dispatch({effects:_i.of(!1)}),n.focus()):r.keyCode==13&&(r.preventDefault(),s())},onsubmit:r=>{r.preventDefault(),s()}},de("label",n.state.phrase("Go to line"),": ",t)," ",de("button",{class:"cm-button",type:"submit"},n.state.phrase("go")),de("button",{name:"close",onclick:()=>{n.dispatch({effects:_i.of(!1)}),n.focus()},"aria-label":n.state.phrase("close"),type:"button"},["×"]));function s(){let r=/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(t.value);if(!r)return;let{state:o}=n,l=o.doc.lineAt(o.selection.main.head),[,a,h,c,f]=r,u=c?+c.slice(1):0,d=h?+h:l.number;if(h&&f){let g=d/100;a&&(g=g*(a=="-"?-1:1)+l.number/o.doc.lines),d=Math.round(o.doc.lines*g)}else h&&a&&(d=d*(a=="-"?-1:1)+l.number);let p=o.doc.line(Math.max(1,Math.min(o.doc.lines,d))),m=b.cursor(p.from+Math.max(0,Math.min(u,p.length)));n.dispatch({effects:[_i.of(!1),Q.scrollIntoView(m.from,{y:"center"})],selection:m}),n.focus()}return{dom:i}}const _i=B.define(),rh=ue.define({create(){return!0},update(n,e){for(let t of e.effects)t.is(_i)&&(n=t.value);return n},provide:n=>en.from(n,e=>e?Ao:null)}),j0=n=>{let e=Ji(n,Ao);if(!e){let t=[_i.of(!0)];n.state.field(rh,!1)==null&&t.push(B.appendConfig.of([rh,G0])),n.dispatch({effects:t}),e=Ji(n,Ao)}return e&&e.dom.querySelector("input").select(),!0},G0=Q.baseTheme({".cm-panel.cm-gotoLine":{padding:"2px 6px 4px",position:"relative","& label":{fontSize:"80%"},"& [name=close]":{position:"absolute",top:"0",bottom:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:"0"}}}),Z0={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},Y0=M.define({combine(n){return ot(n,Z0,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})}});function K0(n){return[ny,iy]}const J0=D.mark({class:"cm-selectionMatch"}),ey=D.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function oh(n,e,t,i){return(t==0||n(e.sliceDoc(t-1,t))!=Y.Word)&&(i==e.doc.length||n(e.sliceDoc(i,i+1))!=Y.Word)}function ty(n,e,t,i){return n(e.sliceDoc(t,t+1))==Y.Word&&n(e.sliceDoc(i-1,i))==Y.Word}const iy=le.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.selectionSet||n.docChanged||n.viewportChanged)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=n.state.facet(Y0),{state:t}=n,i=t.selection;if(i.ranges.length>1)return D.none;let s=i.main,r,o=null;if(s.empty){if(!e.highlightWordAroundCursor)return D.none;let a=t.wordAt(s.head);if(!a)return D.none;o=t.charCategorizer(s.head),r=t.sliceDoc(a.from,a.to)}else{let a=s.to-s.from;if(a200)return D.none;if(e.wholeWords){if(r=t.sliceDoc(s.from,s.to),o=t.charCategorizer(s.head),!(oh(o,t,s.from,s.to)&&ty(o,t,s.from,s.to)))return D.none}else if(r=t.sliceDoc(s.from,s.to),!r)return D.none}let l=[];for(let a of n.visibleRanges){let h=new Si(t.doc,r,a.from,a.to);for(;!h.next().done;){let{from:c,to:f}=h.value;if((!o||oh(o,t,c,f))&&(s.empty&&c<=s.from&&f>=s.to?l.push(ey.range(c,f)):(c>=s.to||f<=s.from)&&l.push(J0.range(c,f)),l.length>e.maxMatches))return D.none}}return D.set(l)}},{decorations:n=>n.decorations}),ny=Q.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),sy=({state:n,dispatch:e})=>{let{selection:t}=n,i=b.create(t.ranges.map(s=>n.wordAt(s.head)||b.cursor(s.head)),t.mainIndex);return i.eq(t)?!1:(e(n.update({selection:i})),!0)};function ry(n,e){let{main:t,ranges:i}=n.selection,s=n.wordAt(t.head),r=s&&s.from==t.from&&s.to==t.to;for(let o=!1,l=new Si(n.doc,e,i[i.length-1].to);;)if(l.next(),l.done){if(o)return null;l=new Si(n.doc,e,0,Math.max(0,i[i.length-1].from-1)),o=!0}else{if(o&&i.some(a=>a.from==l.value.from))continue;if(r){let a=n.wordAt(l.value.from);if(!a||a.from!=l.value.from||a.to!=l.value.to)continue}return l.value}}const oy=({state:n,dispatch:e})=>{let{ranges:t}=n.selection;if(t.some(r=>r.from===r.to))return sy({state:n,dispatch:e});let i=n.sliceDoc(t[0].from,t[0].to);if(n.selection.ranges.some(r=>n.sliceDoc(r.from,r.to)!=i))return!1;let s=ry(n,i);return s?(e(n.update({selection:n.selection.addRange(b.range(s.from,s.to),!1),effects:Q.scrollIntoView(s.to)})),!0):!1},Ci=M.define({combine(n){return ot(n,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new yy(e),scrollToMatch:e=>Q.scrollIntoView(e)})}});class Au{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||H0(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(t,i)=>i=="n"?` -`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord}create(){return this.regexp?new cy(this):new ay(this)}getCursor(e,t=0,i){let s=e.doc?e:I.create({doc:e});return i==null&&(i=s.doc.length),this.regexp?si(this,s,t,i):ni(this,s,t,i)}}class Mu{constructor(e){this.spec=e}}function ni(n,e,t,i){return new Si(e.doc,n.unquoted,t,i,n.caseSensitive?void 0:s=>s.toLowerCase(),n.wholeWord?ly(e.doc,e.charCategorizer(e.selection.main.head)):void 0)}function ly(n,e){return(t,i,s,r)=>((r>t||r+s.length=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=ni(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}function si(n,e,t,i){return new Pu(e.doc,n.search,{ignoreCase:!n.caseSensitive,test:n.wholeWord?hy(e.charCategorizer(e.selection.main.head)):void 0},t,i)}function Cs(n,e){return n.slice(Oe(n,e,!1),e)}function Ps(n,e){return n.slice(e,Oe(n,e))}function hy(n){return(e,t,i)=>!i[0].length||(n(Cs(i.input,i.index))!=Y.Word||n(Ps(i.input,i.index))!=Y.Word)&&(n(Ps(i.input,i.index+i[0].length))!=Y.Word||n(Cs(i.input,i.index+i[0].length))!=Y.Word)}class cy extends Mu{nextMatch(e,t,i){let s=si(this.spec,e,i,e.doc.length).next();return s.done&&(s=si(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let r=Math.max(t,i-s*1e4),o=si(this.spec,e,r,i),l=null;for(;!o.next().done;)l=o.value;if(l&&(r==t||l.from>r+10))return l;if(r==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(t,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let s=i.length;s>0;s--){let r=+i.slice(0,s);if(r>0&&r=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=si(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}const rn=B.define(),fl=B.define(),Qt=ue.define({create(n){return new kr(Mo(n).create(),null)},update(n,e){for(let t of e.effects)t.is(rn)?n=new kr(t.value.create(),n.panel):t.is(fl)&&(n=new kr(n.query,t.value?ul:null));return n},provide:n=>en.from(n,e=>e.panel)});class kr{constructor(e,t){this.query=e,this.panel=t}}const fy=D.mark({class:"cm-searchMatch"}),uy=D.mark({class:"cm-searchMatch cm-searchMatch-selected"}),dy=le.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(Qt))}update(n){let e=n.state.field(Qt);(e!=n.startState.field(Qt)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return D.none;let{view:t}=this,i=new gt;for(let s=0,r=t.visibleRanges,o=r.length;sr[s+1].from-500;)a=r[++s].to;n.highlight(t.state,l,a,(h,c)=>{let f=t.state.selection.ranges.some(u=>u.from==h&&u.to==c);i.add(h,c,f?uy:fy)})}return i.finish()}},{decorations:n=>n.decorations});function yn(n){return e=>{let t=e.state.field(Qt,!1);return t&&t.query.spec.valid?n(e,t):Eu(e)}}const Qs=yn((n,{query:e})=>{let{to:t}=n.state.selection.main,i=e.nextMatch(n.state,t,t);if(!i)return!1;let s=b.single(i.from,i.to),r=n.state.facet(Ci);return n.dispatch({selection:s,effects:[dl(n,i),r.scrollToMatch(s.main,n)],userEvent:"select.search"}),Du(n),!0}),As=yn((n,{query:e})=>{let{state:t}=n,{from:i}=t.selection.main,s=e.prevMatch(t,i,i);if(!s)return!1;let r=b.single(s.from,s.to),o=n.state.facet(Ci);return n.dispatch({selection:r,effects:[dl(n,s),o.scrollToMatch(r.main,n)],userEvent:"select.search"}),Du(n),!0}),py=yn((n,{query:e})=>{let t=e.matchAll(n.state,1e3);return!t||!t.length?!1:(n.dispatch({selection:b.create(t.map(i=>b.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),my=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:s}=t.main,r=[],o=0;for(let l=new Si(n.doc,n.sliceDoc(i,s));!l.next().done;){if(r.length>1e3)return!1;l.value.from==i&&(o=r.length),r.push(b.range(l.value.from,l.value.to))}return e(n.update({selection:b.create(r,o),userEvent:"select.search.matches"})),!0},lh=yn((n,{query:e})=>{let{state:t}=n,{from:i,to:s}=t.selection.main;if(t.readOnly)return!1;let r=e.nextMatch(t,i,i);if(!r)return!1;let o=r,l=[],a,h,c=[];o.from==i&&o.to==s&&(h=t.toText(e.getReplacement(o)),l.push({from:o.from,to:o.to,insert:h}),o=e.nextMatch(t,o.from,o.to),c.push(Q.announce.of(t.phrase("replaced match on line $",t.doc.lineAt(i).number)+".")));let f=n.state.changes(l);return o&&(a=b.single(o.from,o.to).map(f),c.push(dl(n,o)),c.push(t.facet(Ci).scrollToMatch(a.main,n))),n.dispatch({changes:f,selection:a,effects:c,userEvent:"input.replace"}),!0}),gy=yn((n,{query:e})=>{if(n.state.readOnly)return!1;let t=e.matchAll(n.state,1e9).map(s=>{let{from:r,to:o}=s;return{from:r,to:o,insert:e.getReplacement(s)}});if(!t.length)return!1;let i=n.state.phrase("replaced $ matches",t.length)+".";return n.dispatch({changes:t,effects:Q.announce.of(i),userEvent:"input.replace.all"}),!0});function ul(n){return n.state.facet(Ci).createPanel(n)}function Mo(n,e){var t,i,s,r,o;let l=n.selection.main,a=l.empty||l.to>l.from+100?"":n.sliceDoc(l.from,l.to);if(e&&!a)return e;let h=n.facet(Ci);return new Au({search:((t=e?.literal)!==null&&t!==void 0?t:h.literal)?a:a.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:h.caseSensitive,literal:(s=e?.literal)!==null&&s!==void 0?s:h.literal,regexp:(r=e?.regexp)!==null&&r!==void 0?r:h.regexp,wholeWord:(o=e?.wholeWord)!==null&&o!==void 0?o:h.wholeWord})}function Ru(n){let e=Ji(n,ul);return e&&e.dom.querySelector("[main-field]")}function Du(n){let e=Ru(n);e&&e==n.root.activeElement&&e.select()}const Eu=n=>{let e=n.state.field(Qt,!1);if(e&&e.panel){let t=Ru(n);if(t&&t!=n.root.activeElement){let i=Mo(n.state,e.query.spec);i.valid&&n.dispatch({effects:rn.of(i)}),t.focus(),t.select()}}else n.dispatch({effects:[fl.of(!0),e?rn.of(Mo(n.state,e.query.spec)):B.appendConfig.of(xy)]});return!0},qu=n=>{let e=n.state.field(Qt,!1);if(!e||!e.panel)return!1;let t=Ji(n,ul);return t&&t.dom.contains(n.root.activeElement)&&n.focus(),n.dispatch({effects:fl.of(!1)}),!0},Oy=[{key:"Mod-f",run:Eu,scope:"editor search-panel"},{key:"F3",run:Qs,shift:As,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:Qs,shift:As,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:qu,scope:"editor search-panel"},{key:"Mod-Shift-l",run:my},{key:"Mod-Alt-g",run:j0},{key:"Mod-d",run:oy,preventDefault:!0}];class yy{constructor(e){this.view=e;let t=this.query=e.state.field(Qt).query.spec;this.commit=this.commit.bind(this),this.searchField=de("input",{value:t.search,placeholder:De(e,"Find"),"aria-label":De(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=de("input",{value:t.replace,placeholder:De(e,"Replace"),"aria-label":De(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=de("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=de("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=de("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit});function i(s,r,o){return de("button",{class:"cm-button",name:s,onclick:r,type:"button"},o)}this.dom=de("div",{onkeydown:s=>this.keydown(s),class:"cm-search"},[this.searchField,i("next",()=>Qs(e),[De(e,"next")]),i("prev",()=>As(e),[De(e,"previous")]),i("select",()=>py(e),[De(e,"all")]),de("label",null,[this.caseField,De(e,"match case")]),de("label",null,[this.reField,De(e,"regexp")]),de("label",null,[this.wordField,De(e,"by word")]),...e.state.readOnly?[]:[de("br"),this.replaceField,i("replace",()=>lh(e),[De(e,"replace")]),i("replaceAll",()=>gy(e),[De(e,"replace all")])],de("button",{name:"close",onclick:()=>qu(e),"aria-label":De(e,"close"),type:"button"},["×"])])}commit(){let e=new Au({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:rn.of(e)}))}keydown(e){wm(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?As:Qs)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),lh(this.view))}update(e){for(let t of e.transactions)for(let i of t.effects)i.is(rn)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(Ci).top}}function De(n,e){return n.state.phrase(e)}const Fn=30,Xn=/[\s\.,:;?!]/;function dl(n,{from:e,to:t}){let i=n.state.doc.lineAt(e),s=n.state.doc.lineAt(t).to,r=Math.max(i.from,e-Fn),o=Math.min(s,t+Fn),l=n.state.sliceDoc(r,o);if(r!=i.from){for(let a=0;al.length-Fn;a--)if(!Xn.test(l[a-1])&&Xn.test(l[a])){l=l.slice(0,a);break}}return Q.announce.of(`${n.state.phrase("current match")}. ${l} ${n.state.phrase("on line")} ${i.number}.`)}const by=Q.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),xy=[Qt,Et.low(dy),by];class $u{constructor(e,t,i,s){this.state=e,this.pos=t,this.explicit=i,this.view=s,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=fe(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),i=Math.max(t.from,this.pos-250),s=t.text.slice(i-t.from,this.pos-t.from),r=s.search(Lu(e,!1));return r<0?null:{from:i+r,to:this.pos,text:s.slice(r)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,i){e=="abort"&&this.abortListeners&&(this.abortListeners.push(t),i&&i.onDocChange&&(this.abortOnDocChange=!0))}}function ah(n){let e=Object.keys(n).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function Sy(n){let e=Object.create(null),t=Object.create(null);for(let{label:s}of n){e[s[0]]=!0;for(let r=1;rtypeof s=="string"?{label:s}:s),[t,i]=e.every(s=>/^\w+$/.test(s.label))?[/\w*$/,/\w+$/]:Sy(e);return s=>{let r=s.matchBefore(i);return r||s.explicit?{from:r?r.from:s.pos,options:e,validFor:t}:null}}function ky(n,e){return t=>{for(let i=fe(t.state).resolveInner(t.pos,-1);i;i=i.parent){if(n.indexOf(i.name)>-1)return null;if(i.type.isTop)break}return e(t)}}class hh{constructor(e,t,i,s){this.completion=e,this.source=t,this.match=i,this.score=s}}function Ut(n){return n.selection.main.from}function Lu(n,e){var t;let{source:i}=n,s=e&&i[0]!="^",r=i[i.length-1]!="$";return!s&&!r?n:new RegExp(`${s?"^":""}(?:${i})${r?"$":""}`,(t=n.flags)!==null&&t!==void 0?t:n.ignoreCase?"i":"")}const pl=bt.define();function wy(n,e,t,i){let{main:s}=n.selection,r=t-s.from,o=i-s.from;return{...n.changeByRange(l=>{if(l!=s&&t!=i&&n.sliceDoc(l.from+r,l.from+o)!=n.sliceDoc(t,i))return{range:l};let a=n.toText(e);return{changes:{from:l.from+r,to:i==s.from?l.to:l.from+o,insert:a},range:b.cursor(l.from+r+a.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}const ch=new WeakMap;function vy(n){if(!Array.isArray(n))return n;let e=ch.get(n);return e||ch.set(n,e=Bu(n)),e}const Ms=B.define(),on=B.define();class Ty{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&x<=57||x>=97&&x<=122?2:x>=65&&x<=90?1:0:(w=Bo(x))!=w.toLowerCase()?1:w!=w.toUpperCase()?2:0;(!S||T==1&&g||v==0&&T!=0)&&(t[f]==x||i[f]==x&&(u=!0)?o[f++]=S:o.length&&(y=!1)),v=T,S+=Ke(x)}return f==a&&o[0]==0&&y?this.result(-100+(u?-200:0),o,e):d==a&&p==0?this.ret(-200-e.length+(m==e.length?0:-100),[0,m]):l>-1?this.ret(-700-e.length,[l,l+this.pattern.length]):d==a?this.ret(-900-e.length,[p,m]):f==a?this.result(-100+(u?-200:0)+-700+(y?0:-1100),o,e):t.length==2?null:this.result((s[0]?-700:0)+-200+-1100,s,e)}result(e,t,i){let s=[],r=0;for(let o of t){let l=o+(this.astral?Ke(Ce(i,o)):1);r&&s[r-1]==o?s[r-1]=l:(s[r++]=o,s[r++]=l)}return this.ret(e-i.length,s)}}class Cy{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:Py,filterStrict:!1,compareCompletions:(e,t)=>e.label.localeCompare(t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>i=>fh(e(i),t(i)),optionClass:(e,t)=>i=>fh(e(i),t(i)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function fh(n,e){return n?e?n+" "+e:n:e}function Py(n,e,t,i,s,r){let o=n.textDirection==Z.RTL,l=o,a=!1,h="top",c,f,u=e.left-s.left,d=s.right-e.right,p=i.right-i.left,m=i.bottom-i.top;if(l&&u=m||S>e.top?c=t.bottom-e.top:(h="bottom",c=e.bottom-t.top)}let g=(e.bottom-e.top)/r.offsetHeight,y=(e.right-e.left)/r.offsetWidth;return{style:`${h}: ${c/g}px; max-width: ${f/y}px`,class:"cm-completionInfo-"+(a?o?"left-narrow":"right-narrow":l?"left":"right")}}function Qy(n){let e=n.addToOptions.slice();return n.icons&&e.push({render(t){let i=document.createElement("div");return i.classList.add("cm-completionIcon"),t.type&&i.classList.add(...t.type.split(/\s+/g).map(s=>"cm-completionIcon-"+s)),i.setAttribute("aria-hidden","true"),i},position:20}),e.push({render(t,i,s,r){let o=document.createElement("span");o.className="cm-completionLabel";let l=t.displayLabel||t.label,a=0;for(let h=0;ha&&o.appendChild(document.createTextNode(l.slice(a,c)));let u=o.appendChild(document.createElement("span"));u.appendChild(document.createTextNode(l.slice(c,f))),u.className="cm-completionMatchedText",a=f}return at.position-i.position).map(t=>t.render)}function wr(n,e,t){if(n<=t)return{from:0,to:n};if(e<0&&(e=0),e<=n>>1){let s=Math.floor(e/t);return{from:s*t,to:(s+1)*t}}let i=Math.floor((n-e)/t);return{from:n-(i+1)*t,to:n-i*t}}class Ay{constructor(e,t,i){this.view=e,this.stateField=t,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:a=>this.placeInfo(a),key:this},this.space=null,this.currentClass="";let s=e.state.field(t),{options:r,selected:o}=s.open,l=e.state.facet(ce);this.optionContent=Qy(l),this.optionClass=l.optionClass,this.tooltipClass=l.tooltipClass,this.range=wr(r.length,o,l.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",a=>{let{options:h}=e.state.field(t).open;for(let c=a.target,f;c&&c!=this.dom;c=c.parentNode)if(c.nodeName=="LI"&&(f=/-(\d+)$/.exec(c.id))&&+f[1]{let h=e.state.field(this.stateField,!1);h&&h.tooltip&&e.state.facet(ce).closeOnBlur&&a.relatedTarget!=e.contentDOM&&e.dispatch({effects:on.of(null)})}),this.showOptions(r,s.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let i=e.state.field(this.stateField),s=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=s){let{options:r,selected:o,disabled:l}=i.open;(!s.open||s.open.options!=r)&&(this.range=wr(r.length,o,e.state.facet(ce).maxRenderedOptions),this.showOptions(r,i.id)),this.updateSel(),l!=((t=s.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!l)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let i of this.currentClass.split(" "))i&&this.dom.classList.remove(i);for(let i of t.split(" "))i&&this.dom.classList.add(i);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;if((t.selected>-1&&t.selected=this.range.to)&&(this.range=wr(t.options.length,t.selected,this.view.state.facet(ce).maxRenderedOptions),this.showOptions(t.options,e.id)),this.updateSelectedOption(t.selected)){this.destroyInfo();let{completion:i}=t.options[t.selected],{info:s}=i;if(!s)return;let r=typeof s=="string"?document.createTextNode(s):s(i);if(!r)return;"then"in r?r.then(o=>{o&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(o,i)}).catch(o=>Ae(this.view.state,o,"completion info")):this.addInfoPane(r,i)}}addInfoPane(e,t){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:s,destroy:r}=e;i.appendChild(s),this.infoDestroy=r||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let i=this.list.firstChild,s=this.range.from;i;i=i.nextSibling,s++)i.nodeName!="LI"||!i.id?s--:s==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),t=i):i.hasAttribute("aria-selected")&&i.removeAttribute("aria-selected");return t&&Ry(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),s=e.getBoundingClientRect(),r=this.space;if(!r){let o=this.dom.ownerDocument.documentElement;r={left:0,top:0,right:o.clientWidth,bottom:o.clientHeight}}return s.top>Math.min(r.bottom,t.bottom)-10||s.bottom{o.target==s&&o.preventDefault()});let r=null;for(let o=i.from;oi.from||i.from==0))if(r=u,typeof h!="string"&&h.header)s.appendChild(h.header(h));else{let d=s.appendChild(document.createElement("completion-section"));d.textContent=u}}const c=s.appendChild(document.createElement("li"));c.id=t+"-"+o,c.setAttribute("role","option");let f=this.optionClass(l);f&&(c.className=f);for(let u of this.optionContent){let d=u(l,this.view.state,this.view,a);d&&c.appendChild(d)}}return i.from&&s.classList.add("cm-completionListIncompleteTop"),i.tonew Ay(t,n,e)}function Ry(n,e){let t=n.getBoundingClientRect(),i=e.getBoundingClientRect(),s=t.height/n.offsetHeight;i.topt.bottom&&(n.scrollTop+=(i.bottom-t.bottom)/s)}function uh(n){return(n.boost||0)*100+(n.apply?10:0)+(n.info?5:0)+(n.type?1:0)}function Dy(n,e){let t=[],i=null,s=h=>{t.push(h);let{section:c}=h.completion;if(c){i||(i=[]);let f=typeof c=="string"?c:c.name;i.some(u=>u.name==f)||i.push(typeof c=="string"?{name:f}:c)}},r=e.facet(ce);for(let h of n)if(h.hasResult()){let c=h.result.getMatch;if(h.result.filter===!1)for(let f of h.result.options)s(new hh(f,h.source,c?c(f):[],1e9-t.length));else{let f=e.sliceDoc(h.from,h.to),u,d=r.filterStrict?new Cy(f):new Ty(f);for(let p of h.result.options)if(u=d.match(p.label)){let m=p.displayLabel?c?c(p,u.matched):[]:u.matched;s(new hh(p,h.source,m,u.score+(p.boost||0)))}}}if(i){let h=Object.create(null),c=0,f=(u,d)=>{var p,m;return((p=u.rank)!==null&&p!==void 0?p:1e9)-((m=d.rank)!==null&&m!==void 0?m:1e9)||(u.namef.score-c.score||a(c.completion,f.completion))){let c=h.completion;!l||l.label!=c.label||l.detail!=c.detail||l.type!=null&&c.type!=null&&l.type!=c.type||l.apply!=c.apply||l.boost!=c.boost?o.push(h):uh(h.completion)>uh(l)&&(o[o.length-1]=h),l=h.completion}return o}class li{constructor(e,t,i,s,r,o){this.options=e,this.attrs=t,this.tooltip=i,this.timestamp=s,this.selected=r,this.disabled=o}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new li(this.options,dh(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,i,s,r,o){if(s&&!o&&e.some(h=>h.isPending))return s.setDisabled();let l=Dy(e,t);if(!l.length)return s&&e.some(h=>h.isPending)?s.setDisabled():null;let a=t.facet(ce).selectOnOpen?0:-1;if(s&&s.selected!=a&&s.selected!=-1){let h=s.options[s.selected].completion;for(let c=0;cc.hasResult()?Math.min(h,c.from):h,1e8),create:Wy,above:r.aboveCursor},s?s.timestamp:Date.now(),a,!1)}map(e){return new li(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new li(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}}class Rs{constructor(e,t,i){this.active=e,this.id=t,this.open=i}static start(){return new Rs(By,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,i=t.facet(ce),r=(i.override||t.languageDataAt("autocomplete",Ut(t)).map(vy)).map(a=>(this.active.find(c=>c.source==a)||new Ie(a,this.active.some(c=>c.state!=0)?1:0)).update(e,i));r.length==this.active.length&&r.every((a,h)=>a==this.active[h])&&(r=this.active);let o=this.open,l=e.effects.some(a=>a.is(ml));o&&e.docChanged&&(o=o.map(e.changes)),e.selection||r.some(a=>a.hasResult()&&e.changes.touchesRange(a.from,a.to))||!Ey(r,this.active)||l?o=li.build(r,t,this.id,o,i,l):o&&o.disabled&&!r.some(a=>a.isPending)&&(o=null),!o&&r.every(a=>!a.isPending)&&r.some(a=>a.hasResult())&&(r=r.map(a=>a.hasResult()?new Ie(a.source,0):a));for(let a of e.effects)a.is(zu)&&(o=o&&o.setSelected(a.value,this.id));return r==this.active&&o==this.open?this:new Rs(r,this.id,o)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?qy:$y}}function Ey(n,e){if(n==e)return!0;for(let t=0,i=0;;){for(;t-1&&(t["aria-activedescendant"]=n+"-"+e),t}const By=[];function Wu(n,e){if(n.isUserEvent("input.complete")){let i=n.annotation(pl);if(i&&e.activateOnCompletion(i))return 12}let t=n.isUserEvent("input.type");return t&&e.activateOnTyping?5:t?1:n.isUserEvent("delete.backward")?2:n.selection?8:n.docChanged?16:0}class Ie{constructor(e,t,i=!1){this.source=e,this.state=t,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let i=Wu(e,t),s=this;(i&8||i&16&&this.touches(e))&&(s=new Ie(s.source,0)),i&4&&s.state==0&&(s=new Ie(this.source,1)),s=s.updateFor(e,i);for(let r of e.effects)if(r.is(Ms))s=new Ie(s.source,1,r.value);else if(r.is(on))s=new Ie(s.source,0);else if(r.is(ml))for(let o of r.value)o.source==s.source&&(s=o);return s}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(Ut(e.state))}}class ui extends Ie{constructor(e,t,i,s,r,o){super(e,3,t),this.limit=i,this.result=s,this.from=r,this.to=o}hasResult(){return!0}updateFor(e,t){var i;if(!(t&3))return this.map(e.changes);let s=this.result;s.map&&!e.changes.empty&&(s=s.map(s,e.changes));let r=e.changes.mapPos(this.from),o=e.changes.mapPos(this.to,1),l=Ut(e.state);if(l>o||!s||t&2&&(Ut(e.startState)==this.from||lt.map(e))}}),zu=B.define(),Qe=ue.define({create(){return Rs.start()},update(n,e){return n.update(e)},provide:n=>[Yo.from(n,e=>e.tooltip),Q.contentAttributes.from(n,e=>e.attrs)]});function gl(n,e){const t=e.completion.apply||e.completion.label;let i=n.state.field(Qe).active.find(s=>s.source==e.source);return i instanceof ui?(typeof t=="string"?n.dispatch({...wy(n.state,t,i.from,i.to),annotations:pl.of(e.completion)}):t(n,e.completion,i.from,i.to),!0):!1}const Wy=My(Qe,gl);function _n(n,e="option"){return t=>{let i=t.state.field(Qe,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+s*(n?1:-1):n?0:o-1;return l<0?l=e=="page"?0:o-1:l>=o&&(l=e=="page"?o-1:0),t.dispatch({effects:zu.of(l)}),!0}}const zy=n=>{let e=n.state.field(Qe,!1);return n.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampn.state.field(Qe,!1)?(n.dispatch({effects:Ms.of(!0)}),!0):!1,Iy=n=>{let e=n.state.field(Qe,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(n.dispatch({effects:on.of(null)}),!0)};class Vy{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}}const Ny=50,Fy=1e3,Xy=le.fromClass(class{constructor(n){this.view=n,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of n.state.field(Qe).active)e.isPending&&this.startQuery(e)}update(n){let e=n.state.field(Qe),t=n.state.facet(ce);if(!n.selectionSet&&!n.docChanged&&n.startState.field(Qe)==e)return;let i=n.transactions.some(r=>{let o=Wu(r,t);return o&8||(r.selection||r.docChanged)&&!(o&3)});for(let r=0;rNy&&Date.now()-o.time>Fy){for(let l of o.context.abortListeners)try{l()}catch(a){Ae(this.view.state,a)}o.context.abortListeners=null,this.running.splice(r--,1)}else o.updates.push(...n.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),n.transactions.some(r=>r.effects.some(o=>o.is(Ms)))&&(this.pendingStart=!0);let s=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(r=>r.isPending&&!this.running.some(o=>o.active.source==r.source))?setTimeout(()=>this.startUpdate(),s):-1,this.composing!=0)for(let r of n.transactions)r.isUserEvent("input.type")?this.composing=2:this.composing==2&&r.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:n}=this.view,e=n.field(Qe);for(let t of e.active)t.isPending&&!this.running.some(i=>i.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(ce).updateSyncTime))}startQuery(n){let{state:e}=this.view,t=Ut(e),i=new $u(e,t,n.explicit,this.view),s=new Vy(n,i);this.running.push(s),Promise.resolve(n.source(i)).then(r=>{s.context.aborted||(s.done=r||null,this.scheduleAccept())},r=>{this.view.dispatch({effects:on.of(null)}),Ae(this.view.state,r)})}scheduleAccept(){this.running.every(n=>n.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(ce).updateSyncTime))}accept(){var n;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(ce),i=this.view.state.field(Qe);for(let s=0;sl.source==r.active.source);if(o&&o.isPending)if(r.done==null){let l=new Ie(r.active.source,0);for(let a of r.updates)l=l.update(a,t);l.isPending||e.push(l)}else this.startQuery(o)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:ml.of(e)})}},{eventHandlers:{blur(n){let e=this.view.state.field(Qe,!1);if(e&&e.tooltip&&this.view.state.facet(ce).closeOnBlur){let t=e.open&&mf(this.view,e.open.tooltip);(!t||!t.dom.contains(n.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:on.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:Ms.of(!1)}),20),this.composing=0}}}),_y=typeof navigator=="object"&&/Win/.test(navigator.platform),Uy=Et.highest(Q.domEventHandlers({keydown(n,e){let t=e.state.field(Qe,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||n.key.length>1||n.ctrlKey&&!(_y&&n.altKey)||n.metaKey)return!1;let i=t.open.options[t.open.selected],s=t.active.find(o=>o.source==i.source),r=i.completion.commitCharacters||s.result.commitCharacters;return r&&r.indexOf(n.key)>-1&&gl(e,i),!1}})),Iu=Q.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'ƒ'"}},".cm-completionIcon-class":{"&:after":{content:"'○'"}},".cm-completionIcon-interface":{"&:after":{content:"'◌'"}},".cm-completionIcon-variable":{"&:after":{content:"'𝑥'"}},".cm-completionIcon-constant":{"&:after":{content:"'𝐶'"}},".cm-completionIcon-type":{"&:after":{content:"'𝑡'"}},".cm-completionIcon-enum":{"&:after":{content:"'∪'"}},".cm-completionIcon-property":{"&:after":{content:"'□'"}},".cm-completionIcon-keyword":{"&:after":{content:"'🔑︎'"}},".cm-completionIcon-namespace":{"&:after":{content:"'▢'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});class Hy{constructor(e,t,i,s){this.field=e,this.line=t,this.from=i,this.to=s}}class Ol{constructor(e,t,i){this.field=e,this.from=t,this.to=i}map(e){let t=e.mapPos(this.from,-1,ge.TrackDel),i=e.mapPos(this.to,1,ge.TrackDel);return t==null||i==null?null:new Ol(this.field,t,i)}}class yl{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let i=[],s=[t],r=e.doc.lineAt(t),o=/^\s*/.exec(r.text)[0];for(let a of this.lines){if(i.length){let h=o,c=/^\t*/.exec(a)[0].length;for(let f=0;fnew Ol(a.field,s[a.line]+a.from,s[a.line]+a.to));return{text:i,ranges:l}}static parse(e){let t=[],i=[],s=[],r;for(let o of e.split(/\r\n?|\n/)){for(;r=/[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(o);){let l=r[1]?+r[1]:null,a=r[2]||r[3]||"",h=-1,c=a.replace(/\\[{}]/g,f=>f[1]);for(let f=0;f=h&&u.field++}for(let f of s)if(f.line==i.length&&f.from>r.index){let u=r[2]?3+(r[1]||"").length:2;f.from-=u,f.to-=u}s.push(new Hy(h,i.length,r.index,r.index+c.length)),o=o.slice(0,r.index)+a+o.slice(r.index+r[0].length)}o=o.replace(/\\([{}])/g,(l,a,h)=>{for(let c of s)c.line==i.length&&c.from>h&&(c.from--,c.to--);return a}),i.push(o)}return new yl(i,s)}}let jy=D.widget({widget:new class extends xt{toDOM(){let n=document.createElement("span");return n.className="cm-snippetFieldPosition",n}ignoreEvent(){return!1}}}),Gy=D.mark({class:"cm-snippetField"});class Pi{constructor(e,t){this.ranges=e,this.active=t,this.deco=D.set(e.map(i=>(i.from==i.to?jy:Gy).range(i.from,i.to)),!0)}map(e){let t=[];for(let i of this.ranges){let s=i.map(e);if(!s)return null;t.push(s)}return new Pi(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(i=>i.field==this.active&&i.from<=t.from&&i.to>=t.to))}}const bn=B.define({map(n,e){return n&&n.map(e)}}),Zy=B.define(),ln=ue.define({create(){return null},update(n,e){for(let t of e.effects){if(t.is(bn))return t.value;if(t.is(Zy)&&n)return new Pi(n.ranges,t.value)}return n&&e.docChanged&&(n=n.map(e.changes)),n&&e.selection&&!n.selectionInsideField(e.selection)&&(n=null),n},provide:n=>Q.decorations.from(n,e=>e?e.deco:D.none)});function bl(n,e){return b.create(n.filter(t=>t.field==e).map(t=>b.range(t.from,t.to)))}function Yy(n){let e=yl.parse(n);return(t,i,s,r)=>{let{text:o,ranges:l}=e.instantiate(t.state,s),{main:a}=t.state.selection,h={changes:{from:s,to:r==a.from?a.to:r,insert:V.of(o)},scrollIntoView:!0,annotations:i?[pl.of(i),oe.userEvent.of("input.complete")]:void 0};if(l.length&&(h.selection=bl(l,0)),l.some(c=>c.field>0)){let c=new Pi(l,0),f=h.effects=[bn.of(c)];t.state.field(ln,!1)===void 0&&f.push(B.appendConfig.of([ln,i1,n1,Iu]))}t.dispatch(t.state.update(h))}}function Vu(n){return({state:e,dispatch:t})=>{let i=e.field(ln,!1);if(!i||n<0&&i.active==0)return!1;let s=i.active+n,r=n>0&&!i.ranges.some(o=>o.field==s+n);return t(e.update({selection:bl(i.ranges,s),effects:bn.of(r?null:new Pi(i.ranges,s)),scrollIntoView:!0})),!0}}const Ky=({state:n,dispatch:e})=>n.field(ln,!1)?(e(n.update({effects:bn.of(null)})),!0):!1,Jy=Vu(1),e1=Vu(-1),t1=[{key:"Tab",run:Jy,shift:e1},{key:"Escape",run:Ky}],ph=M.define({combine(n){return n.length?n[0]:t1}}),i1=Et.highest(zs.compute([ph],n=>n.facet(ph)));function at(n,e){return{...e,apply:Yy(n)}}const n1=Q.domEventHandlers({mousedown(n,e){let t=e.state.field(ln,!1),i;if(!t||(i=e.posAtCoords({x:n.clientX,y:n.clientY}))==null)return!1;let s=t.ranges.find(r=>r.from<=i&&r.to>=i);return!s||s.field==t.active?!1:(e.dispatch({selection:bl(t.ranges,s.field),effects:bn.of(t.ranges.some(r=>r.field>s.field)?new Pi(t.ranges,s.field):null),scrollIntoView:!0}),!0)}}),an={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Xt=B.define({map(n,e){let t=e.mapPos(n,-1,ge.TrackAfter);return t??void 0}}),xl=new class extends Ht{};xl.startSide=1;xl.endSide=-1;const Nu=ue.define({create(){return F.empty},update(n,e){if(n=n.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);n=n.update({filter:i=>i>=t.from&&i<=t.to})}for(let t of e.effects)t.is(Xt)&&(n=n.update({add:[xl.range(t.value,t.value+1)]}));return n}});function s1(){return[o1,Nu]}const Tr="()[]{}<>«»»«[]{}";function Fu(n){for(let e=0;e{if((r1?n.composing:n.compositionStarted)||n.state.readOnly)return!1;let s=n.state.selection.main;if(i.length>2||i.length==2&&Ke(Ce(i,0))==1||e!=s.from||t!=s.to)return!1;let r=h1(n.state,i);return r?(n.dispatch(r),!0):!1}),l1=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let i=Xu(n,n.selection.main.head).brackets||an.brackets,s=null,r=n.changeByRange(o=>{if(o.empty){let l=c1(n.doc,o.head);for(let a of i)if(a==l&&Gs(n.doc,o.head)==Fu(Ce(a,0)))return{changes:{from:o.head-a.length,to:o.head+a.length},range:b.cursor(o.head-a.length)}}return{range:s=o}});return s||e(n.update(r,{scrollIntoView:!0,userEvent:"delete.backward"})),!s},a1=[{key:"Backspace",run:l1}];function h1(n,e){let t=Xu(n,n.selection.main.head),i=t.brackets||an.brackets;for(let s of i){let r=Fu(Ce(s,0));if(e==s)return r==s?d1(n,s,i.indexOf(s+s+s)>-1,t):f1(n,s,r,t.before||an.before);if(e==r&&_u(n,n.selection.main.from))return u1(n,s,r)}return null}function _u(n,e){let t=!1;return n.field(Nu).between(0,n.doc.length,i=>{i==e&&(t=!0)}),t}function Gs(n,e){let t=n.sliceString(e,e+2);return t.slice(0,Ke(Ce(t,0)))}function c1(n,e){let t=n.sliceString(e-2,e);return Ke(Ce(t,0))==t.length?t:t.slice(1)}function f1(n,e,t,i){let s=null,r=n.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:t,from:o.to}],effects:Xt.of(o.to+e.length),range:b.range(o.anchor+e.length,o.head+e.length)};let l=Gs(n.doc,o.head);return!l||/\s/.test(l)||i.indexOf(l)>-1?{changes:{insert:e+t,from:o.head},effects:Xt.of(o.head+e.length),range:b.cursor(o.head+e.length)}:{range:s=o}});return s?null:n.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function u1(n,e,t){let i=null,s=n.changeByRange(r=>r.empty&&Gs(n.doc,r.head)==t?{changes:{from:r.head,to:r.head+t.length,insert:t},range:b.cursor(r.head+t.length)}:i={range:r});return i?null:n.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function d1(n,e,t,i){let s=i.stringPrefixes||an.stringPrefixes,r=null,o=n.changeByRange(l=>{if(!l.empty)return{changes:[{insert:e,from:l.from},{insert:e,from:l.to}],effects:Xt.of(l.to+e.length),range:b.range(l.anchor+e.length,l.head+e.length)};let a=l.head,h=Gs(n.doc,a),c;if(h==e){if(mh(n,a))return{changes:{insert:e+e,from:a},effects:Xt.of(a+e.length),range:b.cursor(a+e.length)};if(_u(n,a)){let u=t&&n.sliceDoc(a,a+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:a,to:a+u.length,insert:u},range:b.cursor(a+u.length)}}}else{if(t&&n.sliceDoc(a-2*e.length,a)==e+e&&(c=gh(n,a-2*e.length,s))>-1&&mh(n,c))return{changes:{insert:e+e+e+e,from:a},effects:Xt.of(a+e.length),range:b.cursor(a+e.length)};if(n.charCategorizer(a)(h)!=Y.Word&&gh(n,a,s)>-1&&!p1(n,a,e,s))return{changes:{insert:e+e,from:a},effects:Xt.of(a+e.length),range:b.cursor(a+e.length)}}return{range:r=l}});return r?null:n.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function mh(n,e){let t=fe(n).resolveInner(e+1);return t.parent&&t.from==e}function p1(n,e,t,i){let s=fe(n).resolveInner(e,-1),r=i.reduce((o,l)=>Math.max(o,l.length),0);for(let o=0;o<5;o++){let l=n.sliceDoc(s.from,Math.min(s.to,s.from+t.length+r)),a=l.indexOf(t);if(!a||a>-1&&i.indexOf(l.slice(0,a))>-1){let c=s.firstChild;for(;c&&c.from==s.from&&c.to-c.from>t.length+a;){if(n.sliceDoc(c.to-t.length,c.to)==t)return!1;c=c.firstChild}return!0}let h=s.to==e&&s.parent;if(!h)break;s=h}return!1}function gh(n,e,t){let i=n.charCategorizer(e);if(i(n.sliceDoc(e-1,e))!=Y.Word)return e;for(let s of t){let r=e-s.length;if(n.sliceDoc(r,e)==s&&i(n.sliceDoc(r-1,r))!=Y.Word)return r}return-1}function Ro(n={}){return[Uy,Qe,ce.of(n),Xy,m1,Iu]}const Uu=[{key:"Ctrl-Space",run:vr},{mac:"Alt-`",run:vr},{mac:"Alt-i",run:vr},{key:"Escape",run:Iy},{key:"ArrowDown",run:_n(!0)},{key:"ArrowUp",run:_n(!1)},{key:"PageDown",run:_n(!0,"page")},{key:"PageUp",run:_n(!1,"page")},{key:"Enter",run:zy}],m1=Et.highest(zs.computeN([ce],n=>n.facet(ce).defaultKeymap?[Uu]:[]));function et(){var n=arguments[0];typeof n=="string"&&(n=document.createElement(n));var e=1,t=arguments[1];if(t&&typeof t=="object"&&t.nodeType==null&&!Array.isArray(t)){for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){var s=t[i];typeof s=="string"?n.setAttribute(i,s):s!=null&&(n[i]=s)}e++}for(;ec.from-f.from||c.to-f.to),o=new gt,l=[],a=0;for(let c=0;;){let f=c==r.length?null:r[c];if(!f&&!l.length)break;let u,d;for(l.length?(u=a,d=l.reduce((m,g)=>Math.min(m,g.to),f&&f.from>u?f.from:1e8)):(u=f.from,d=f.to,l.push(f),c++);cm.from||m.to==u))l.push(m),c++,d=Math.min(m.to,d);else{d=Math.min(m.from,d);break}}let p=Q1(l);if(l.some(m=>m.from==m.to||m.from==m.to-1&&i.doc.lineAt(m.from).to==m.from))o.add(u,u,D.widget({widget:new v1(p),diagnostics:l.slice()}));else{let m=l.reduce((g,y)=>y.markClass?g+" "+y.markClass:g,"");o.add(u,d,D.mark({class:"cm-lintRange cm-lintRange-"+p+m,diagnostics:l.slice(),inclusiveEnd:l.some(g=>g.to>d)}))}a=d;for(let m=0;m{if(!(e&&o.diagnostics.indexOf(e)<0))if(!i)i=new Oh(s,r,e||o.diagnostics[0]);else{if(o.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new Oh(i.from,r,i.diagnostic)}}),i}function g1(n,e){let t=e.pos,i=e.end||t,s=n.state.facet(hn).hideOn(n,t,i);if(s!=null)return s;let r=n.startState.doc.lineAt(e.pos);return!!(n.effects.some(o=>o.is(ju))||n.changes.touchesRange(r.from,Math.max(r.to,i)))}function O1(n,e){return n.field($e,!1)?e:e.concat(B.appendConfig.of(A1))}const ju=B.define(),Sl=B.define(),Gu=B.define(),$e=ue.define({create(){return new Vt(D.none,null,null)},update(n,e){if(e.docChanged&&n.diagnostics.size){let t=n.diagnostics.map(e.changes),i=null,s=n.panel;if(n.selected){let r=e.changes.mapPos(n.selected.from,1);i=ki(t,n.selected.diagnostic,r)||ki(t,null,r)}!t.size&&s&&e.state.facet(hn).autoPanel&&(s=null),n=new Vt(t,s,i)}for(let t of e.effects)if(t.is(ju)){let i=e.state.facet(hn).autoPanel?t.value.length?cn.open:null:n.panel;n=Vt.init(t.value,i,e.state)}else t.is(Sl)?n=new Vt(n.diagnostics,t.value?cn.open:null,n.selected):t.is(Gu)&&(n=new Vt(n.diagnostics,n.panel,t.value));return n},provide:n=>[en.from(n,e=>e.panel),Q.decorations.from(n,e=>e.diagnostics)]}),y1=D.mark({class:"cm-lintRange cm-lintRange-active"});function b1(n,e,t){let{diagnostics:i}=n.state.field($e),s,r=-1,o=-1;i.between(e-(t<0?1:0),e+(t>0?1:0),(a,h,{spec:c})=>{if(e>=a&&e<=h&&(a==h||(e>a||t>0)&&(eYu(n,t,!1)))}const S1=n=>{let e=n.state.field($e,!1);(!e||!e.panel)&&n.dispatch({effects:O1(n.state,[Sl.of(!0)])});let t=Ji(n,cn.open);return t&&t.dom.querySelector(".cm-panel-lint ul").focus(),!0},yh=n=>{let e=n.state.field($e,!1);return!e||!e.panel?!1:(n.dispatch({effects:Sl.of(!1)}),!0)},k1=n=>{let e=n.state.field($e,!1);if(!e)return!1;let t=n.state.selection.main,i=e.diagnostics.iter(t.to+1);return!i.value&&(i=e.diagnostics.iter(0),!i.value||i.from==t.from&&i.to==t.to)?!1:(n.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0}),!0)},w1=[{key:"Mod-Shift-m",run:S1,preventDefault:!0},{key:"F8",run:k1}],hn=M.define({combine(n){return Object.assign({sources:n.map(e=>e.source).filter(e=>e!=null)},ot(n.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t}))}});function Zu(n){let e=[];if(n)e:for(let{name:t}of n){for(let i=0;ir.toLowerCase()==s.toLowerCase())){e.push(s);continue e}}e.push("")}return e}function Yu(n,e,t){var i;let s=t?Zu(e.actions):[];return et("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},et("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(n):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((r,o)=>{let l=!1,a=u=>{if(u.preventDefault(),l)return;l=!0;let d=ki(n.state.field($e).diagnostics,e);d&&r.apply(n,d.from,d.to)},{name:h}=r,c=s[o]?h.indexOf(s[o]):-1,f=c<0?h:[h.slice(0,c),et("u",h.slice(c,c+1)),h.slice(c+1)];return et("button",{type:"button",class:"cm-diagnosticAction",onclick:a,onmousedown:a,"aria-label":` Action: ${h}${c<0?"":` (access key "${s[o]})"`}.`},f)}),e.source&&et("div",{class:"cm-diagnosticSource"},e.source))}class v1 extends xt{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return et("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}}class bh{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=Yu(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}}class cn{constructor(e){this.view=e,this.items=[];let t=s=>{if(s.keyCode==27)yh(this.view),this.view.focus();else if(s.keyCode==38||s.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(s.keyCode==40||s.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(s.keyCode==36)this.moveSelection(0);else if(s.keyCode==35)this.moveSelection(this.items.length-1);else if(s.keyCode==13)this.view.focus();else if(s.keyCode>=65&&s.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:r}=this.items[this.selectedIndex],o=Zu(r.actions);for(let l=0;l{for(let r=0;ryh(this.view)},"×")),this.update()}get selectedIndex(){let e=this.view.state.field($e).selected;if(!e)return-1;for(let t=0;t{for(let c of h.diagnostics){if(o.has(c))continue;o.add(c);let f=-1,u;for(let d=i;di&&(this.items.splice(i,f-i),s=!0)),t&&u.diagnostic==t.diagnostic?u.dom.hasAttribute("aria-selected")||(u.dom.setAttribute("aria-selected","true"),r=u):u.dom.hasAttribute("aria-selected")&&u.dom.removeAttribute("aria-selected"),i++}});i({sel:r.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:l,panel:a})=>{let h=a.height/this.list.offsetHeight;l.topa.bottom&&(this.list.scrollTop+=(l.bottom-a.bottom)/h)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),s&&this.sync()}sync(){let e=this.list.firstChild;function t(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=this.view.state.field($e),i=ki(t.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:Gu.of(i)})}static open(e){return new cn(e)}}function T1(n,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(n)}')`}function Un(n){return T1(``,'width="6" height="3"')}const C1=Q.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:Un("#d11")},".cm-lintRange-warning":{backgroundImage:Un("orange")},".cm-lintRange-info":{backgroundImage:Un("#999")},".cm-lintRange-hint":{backgroundImage:Un("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}}});function P1(n){return n=="error"?4:n=="warning"?3:n=="info"?2:1}function Q1(n){let e="hint",t=1;for(let i of n){let s=P1(i.severity);s>t&&(t=s,e=i.severity)}return e}const A1=[$e,Q.decorations.compute([$e],n=>{let{selected:e,panel:t}=n.field($e);return!e||!t||e.from==e.to?D.none:D.set([y1.range(e.from,e.to)])}),hg(b1,{hideOn:g1}),C1],xh=[xg(),wg(),Im(),XO(),dO(),Am(),qm(),I.allowMultipleSelections.of(!0),Jg(),zf(OO,{fallback:!0}),vO(),s1(),Ro(),Km(),tg(),Um(),K0(),zs.of([...a1,...U0,...Oy,...JO,...hO,...Uu,...w1])],M1="#e5c07b",Sh="#e06c75",R1="#56b6c2",D1="#ffffff",rs="#abb2bf",Do="#7d8799",E1="#61afef",q1="#98c379",kh="#d19a66",$1="#c678dd",B1="#21252b",wh="#2c313a",vh="#282c34",Cr="#353a42",L1="#3E4451",Th="#528bff",W1=Q.theme({"&":{color:rs,backgroundColor:vh},".cm-content":{caretColor:Th},".cm-cursor, .cm-dropCursor":{borderLeftColor:Th},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:L1},".cm-panels":{backgroundColor:B1,color:rs},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#6699ff0b"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:vh,color:Do,border:"none"},".cm-activeLineGutter":{backgroundColor:wh},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:Cr},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:Cr,borderBottomColor:Cr},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:wh,color:rs}}},{dark:!0}),z1=gn.define([{tag:O.keyword,color:$1},{tag:[O.name,O.deleted,O.character,O.propertyName,O.macroName],color:Sh},{tag:[O.function(O.variableName),O.labelName],color:E1},{tag:[O.color,O.constant(O.name),O.standard(O.name)],color:kh},{tag:[O.definition(O.name),O.separator],color:rs},{tag:[O.typeName,O.className,O.number,O.changed,O.annotation,O.modifier,O.self,O.namespace],color:M1},{tag:[O.operator,O.operatorKeyword,O.url,O.escape,O.regexp,O.link,O.special(O.string)],color:R1},{tag:[O.meta,O.comment],color:Do},{tag:O.strong,fontWeight:"bold"},{tag:O.emphasis,fontStyle:"italic"},{tag:O.strikethrough,textDecoration:"line-through"},{tag:O.link,color:Do,textDecoration:"underline"},{tag:O.heading,fontWeight:"bold",color:Sh},{tag:[O.atom,O.bool,O.special(O.variableName)],color:kh},{tag:[O.processingInstruction,O.string,O.inserted],color:q1},{tag:O.invalid,color:D1}]),I1=[W1,zf(z1)];var Ch={};class Ds{constructor(e,t,i,s,r,o,l,a,h,c=0,f){this.p=e,this.stack=t,this.state=i,this.reducePos=s,this.pos=r,this.score=o,this.buffer=l,this.bufferBase=a,this.curContext=h,this.lookAhead=c,this.parent=f}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,i=0){let s=e.parser.context;return new Ds(e,[],t,i,i,0,[],0,s?new Ph(s,s.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let i=e>>19,s=e&65535,{parser:r}=this.p,o=this.reducePos=2e3&&!(!((t=this.p.parser.nodeSet.types[s])===null||t===void 0)&&t.isAnonymous)&&(h==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=c):this.p.lastBigReductionSizea;)this.stack.pop();this.reduceContext(s,h)}storeNode(e,t,i,s=4,r=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&o.buffer[l-4]==0&&o.buffer[l-1]>-1){if(t==i)return;if(o.buffer[l-2]>=t){o.buffer[l-2]=i;return}}}if(!r||this.pos==i)this.buffer.push(e,t,i,s);else{let o=this.buffer.length;if(o>0&&this.buffer[o-4]!=0){let l=!1;for(let a=o;a>0&&this.buffer[a-2]>i;a-=4)if(this.buffer[a-1]>=0){l=!0;break}if(l)for(;o>0&&this.buffer[o-2]>i;)this.buffer[o]=this.buffer[o-4],this.buffer[o+1]=this.buffer[o-3],this.buffer[o+2]=this.buffer[o-2],this.buffer[o+3]=this.buffer[o-1],o-=4,s>4&&(s-=4)}this.buffer[o]=e,this.buffer[o+1]=t,this.buffer[o+2]=i,this.buffer[o+3]=s}}shift(e,t,i,s){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let r=e,{parser:o}=this.p;(s>this.pos||t<=o.maxNode)&&(this.pos=s,o.stateFlag(r,1)||(this.reducePos=s)),this.pushState(r,i),this.shiftContext(t,i),t<=o.maxNode&&this.buffer.push(t,i,s,4)}else this.pos=s,this.shiftContext(t,i),t<=this.p.parser.maxNode&&this.buffer.push(t,i,s,4)}apply(e,t,i,s){e&65536?this.reduce(e):this.shift(e,t,i,s)}useNode(e,t){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let s=this.pos;this.reducePos=this.pos=s+e.length,this.pushState(t,s),this.buffer.push(i,s,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(;t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let i=e.buffer.slice(t),s=e.bufferBase+t;for(;e&&s==e.bufferBase;)e=e.parent;return new Ds(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,s,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,i?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new V1(this);;){let i=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(i==0)return!1;if((i&65536)==0)return!0;t.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let s=[];for(let r=0,o;ra&1&&l==o)||s.push(t[r],o)}t=s}let i=[];for(let s=0;s>19,s=t&65535,r=this.stack.length-i*3;if(r<0||e.getGoto(this.stack[r],s,!1)<0){let o=this.findForcedReduction();if(o==null)return!1;t=o}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],i=(s,r)=>{if(!t.includes(s))return t.push(s),e.allActions(s,o=>{if(!(o&393216))if(o&65536){let l=(o>>19)-r;if(l>1){let a=o&65535,h=this.stack.length-l*3;if(h>=0&&e.getGoto(this.stack[h],a,!1)>=0)return l<<19|65536|a}}else{let l=i(o,r+1);if(l!=null)return l}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;tthis.lookAhead&&(this.emitLookAhead(),this.lookAhead=e)}close(){this.curContext&&this.curContext.tracker.strict&&this.emitContext(),this.lookAhead>0&&this.emitLookAhead()}}class Ph{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}}class V1{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let s=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=s}}class Es{constructor(e,t,i){this.stack=e,this.pos=t,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new Es(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new Es(this.stack,this.pos,this.index)}}function Hn(n,e=Uint16Array){if(typeof n!="string")return n;let t=null;for(let i=0,s=0;i=92&&o--,o>=34&&o--;let a=o-32;if(a>=46&&(a-=46,l=!0),r+=a,l)break;r*=46}t?t[s++]=r:t=new e(r)}return t}class os{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}}const Qh=new os;class N1{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=Qh,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let i=this.range,s=this.rangeIndex,r=this.pos+e;for(;ri.to:r>=i.to;){if(s==this.ranges.length-1)return null;let o=this.ranges[++s];r+=o.from-i.to,i=o}return r}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,i,s;if(t>=0&&t=this.chunk2Pos&&il.to&&(this.chunk2=this.chunk2.slice(0,l.to-i)),s=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),s}acceptToken(e,t=0){let i=t?this.resolveOffset(t,-1):this.pos;if(i==null||i=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=Qh,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let i="";for(let s of this.ranges){if(s.from>=t)break;s.to>e&&(i+=this.input.read(Math.max(s.from,e),Math.min(s.to,t)))}return i}}class di{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:i}=t.p;F1(this.data,e,t,this.id,i.data,i.tokenPrecTable)}}di.prototype.contextual=di.prototype.fallback=di.prototype.extend=!1;di.prototype.fallback=di.prototype.extend=!1;class Zs{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}}function F1(n,e,t,i,s,r){let o=0,l=1<0){let p=n[d];if(a.allows(p)&&(e.token.value==-1||e.token.value==p||X1(p,e.token.value,s,r))){e.acceptToken(p);break}}let c=e.next,f=0,u=n[o+2];if(e.next<0&&u>f&&n[h+u*3-3]==65535){o=n[h+u*3-1];continue e}for(;f>1,p=h+d+(d<<1),m=n[p],g=n[p+1]||65536;if(c=g)f=d+1;else{o=n[p+2],e.advance();continue e}}break}}function Ah(n,e,t){for(let i=e,s;(s=n[i])!=65535;i++)if(s==t)return i-e;return-1}function X1(n,e,t,i){let s=Ah(t,i,e);return s<0||Ah(t,i,n)e)&&!i.type.isError)return t<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(n.length,Math.max(i.from+1,e+25));if(t<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return t<0?0:n.length}}class _1{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?Mh(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?Mh(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=o,null;if(r instanceof U){if(o==e){if(o=Math.max(this.safeFrom,e)&&(this.trees.push(r),this.start.push(o),this.index.push(0))}else this.index[t]++,this.nextStart=o+r.length}}}class U1{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new os)}getActions(e){let t=0,i=null,{parser:s}=e.p,{tokenizers:r}=s,o=s.stateSlot(e.state,3),l=e.curContext?e.curContext.hash:0,a=0;for(let h=0;hf.end+25&&(a=Math.max(f.lookAhead,a)),f.value!=0)){let u=t;if(f.extended>-1&&(t=this.addActions(e,f.extended,f.end,t)),t=this.addActions(e,f.value,f.end,t),!c.extend&&(i=f,t>u))break}}for(;this.actions.length>t;)this.actions.pop();return a&&e.setLookAhead(a),!i&&e.pos==this.stream.end&&(i=new os,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,t=this.addActions(e,i.value,i.end,t)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new os,{pos:i,p:s}=e;return t.start=i,t.end=Math.min(i+1,s.stream.end),t.value=i==s.stream.end?s.parser.eofTerm:0,t}updateCachedToken(e,t,i){let s=this.stream.clipPos(i.pos);if(t.token(this.stream.reset(s,e),i),e.value>-1){let{parser:r}=i.p;for(let o=0;o=0&&i.p.parser.dialect.allows(l>>1)){(l&1)==0?e.value=l>>1:e.extended=l>>1;break}}}else e.value=0,e.end=this.stream.clipPos(s+1)}putAction(e,t,i,s){for(let r=0;re.bufferLength*4?new _1(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,i=this.stacks=[],s,r;if(this.bigReductionCount>300&&e.length==1){let[o]=e;for(;o.forceReduce()&&o.stack.length&&o.stack[o.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let o=0;ot)i.push(l);else{if(this.advanceStack(l,i,e))continue;{s||(s=[],r=[]),s.push(l);let a=this.tokens.getMainToken(l);r.push(a.value,a.end)}}break}}if(!i.length){let o=s&&Z1(s);if(o)return Ee&&console.log("Finish with "+this.stackID(o)),this.stackToTree(o);if(this.parser.strict)throw Ee&&s&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&s){let o=this.stoppedAt!=null&&s[0].pos>this.stoppedAt?s[0]:this.runRecovery(s,r,i);if(o)return Ee&&console.log("Force-finish "+this.stackID(o)),this.stackToTree(o.forceAll())}if(this.recovering){let o=this.recovering==1?1:this.recovering*3;if(i.length>o)for(i.sort((l,a)=>a.score-l.score);i.length>o;)i.pop();i.some(l=>l.reducePos>t)&&this.recovering--}else if(i.length>1){e:for(let o=0;o500&&h.buffer.length>500)if((l.score-h.score||l.buffer.length-h.buffer.length)>0)i.splice(a--,1);else{i.splice(o--,1);continue e}}}i.length>12&&i.splice(12,i.length-12)}this.minStackPos=i[0].pos;for(let o=1;o ":"";if(this.stoppedAt!=null&&s>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let h=e.curContext&&e.curContext.tracker.strict,c=h?e.curContext.hash:0;for(let f=this.fragments.nodeAt(s);f;){let u=this.parser.nodeSet.types[f.type.id]==f.type?r.getGoto(e.state,f.type.id):-1;if(u>-1&&f.length&&(!h||(f.prop(z.contextHash)||0)==c))return e.useNode(f,u),Ee&&console.log(o+this.stackID(e)+` (via reuse of ${r.getName(f.type.id)})`),!0;if(!(f instanceof U)||f.children.length==0||f.positions[0]>0)break;let d=f.children[0];if(d instanceof U&&f.positions[0]==0)f=d;else break}}let l=r.stateSlot(e.state,4);if(l>0)return e.reduce(l),Ee&&console.log(o+this.stackID(e)+` (via always-reduce ${r.getName(l&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let a=this.tokens.getActions(e);for(let h=0;hs?t.push(p):i.push(p)}return!1}advanceFully(e,t){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return Rh(e,t),!0}}runRecovery(e,t,i){let s=null,r=!1;for(let o=0;o ":"";if(l.deadEnd&&(r||(r=!0,l.restart(),Ee&&console.log(c+this.stackID(l)+" (restarted)"),this.advanceFully(l,i))))continue;let f=l.split(),u=c;for(let d=0;f.forceReduce()&&d<10&&(Ee&&console.log(u+this.stackID(f)+" (via force-reduce)"),!this.advanceFully(f,i));d++)Ee&&(u=this.stackID(f)+" -> ");for(let d of l.recoverByInsert(a))Ee&&console.log(c+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,i);this.stream.end>l.pos?(h==l.pos&&(h++,a=0),l.recoverByDelete(a,h),Ee&&console.log(c+this.stackID(l)+` (via recover-delete ${this.parser.getName(a)})`),Rh(l,i)):(!s||s.scoren;class G1{constructor(e){this.start=e.start,this.shift=e.shift||Qr,this.reduce=e.reduce||Qr,this.reuse=e.reuse||Qr,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}}class qs extends tl{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(" ");this.minRepeatTerm=t.length;for(let l=0;le.topRules[l][1]),s=[];for(let l=0;l=0)r(c,a,l[h++]);else{let f=l[h+-c];for(let u=-c;u>0;u--)r(l[h++],a,f);h++}}}this.nodeSet=new Vs(t.map((l,a)=>Te.define({name:a>=this.minRepeatTerm?void 0:l,id:a,props:s[a],top:i.indexOf(a)>-1,error:a==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(a)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=bf;let o=Hn(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let l=0;ltypeof l=="number"?new di(o,l):l),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,i){let s=new H1(this,e,t,i);for(let r of this.wrappers)s=r(s,e,t,i);return s}getGoto(e,t,i=!1){let s=this.goto;if(t>=s[0])return-1;for(let r=s[t+1];;){let o=s[r++],l=o&1,a=s[r++];if(l&&i)return a;for(let h=r+(o>>1);r0}validAction(e,t){return!!this.allActions(e,i=>i==t?!0:null)}allActions(e,t){let i=this.stateSlot(e,4),s=i?t(i):void 0;for(let r=this.stateSlot(e,1);s==null;r+=3){if(this.data[r]==65535)if(this.data[r+1]==1)r=dt(this.data,r+2);else break;s=t(dt(this.data,r+1))}return s}nextStates(e){let t=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=dt(this.data,i+2);else break;if((this.data[i+2]&1)==0){let s=this.data[i+1];t.some((r,o)=>o&1&&r==s)||t.push(this.data[i],s)}}return t}configure(e){let t=Object.assign(Object.create(qs.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=i}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(i=>{let s=e.tokenizers.find(r=>r.from==i);return s?s.to:i})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((i,s)=>{let r=e.specializers.find(l=>l.from==i.external);if(!r)return i;let o=Object.assign(Object.assign({},i),{external:r.to});return t.specializers[s]=Dh(o),o})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),i=t.map(()=>!1);if(e)for(let r of e.split(" ")){let o=t.indexOf(r);o>=0&&(i[o]=!0)}let s=null;for(let r=0;ri)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.scoren.external(t,i)<<1|e}return n.get}const Y1=1,Ku=194,Ju=195,K1=196,Eh=197,J1=198,eb=199,tb=200,ib=2,ed=3,qh=201,nb=24,sb=25,rb=49,ob=50,lb=55,ab=56,hb=57,cb=59,fb=60,ub=61,db=62,pb=63,mb=65,gb=238,Ob=71,yb=241,bb=242,xb=243,Sb=244,kb=245,wb=246,vb=247,Tb=248,td=72,Cb=249,Pb=250,Qb=251,Ab=252,Mb=253,Rb=254,Db=255,Eb=256,qb=73,$b=77,Bb=263,Lb=112,Wb=130,zb=151,Ib=152,Vb=155,Jt=10,fn=13,kl=32,Ys=9,wl=35,Nb=40,Fb=46,Eo=123,$h=125,id=39,nd=34,Bh=92,Xb=111,_b=120,Ub=78,Hb=117,jb=85,Gb=new Set([sb,rb,ob,Bb,mb,Wb,ab,hb,gb,db,pb,td,qb,$b,fb,ub,zb,Ib,Vb,Lb]);function Ar(n){return n==Jt||n==fn}function Mr(n){return n>=48&&n<=57||n>=65&&n<=70||n>=97&&n<=102}const Zb=new Zs((n,e)=>{let t;if(n.next<0)n.acceptToken(eb);else if(e.context.flags&ls)Ar(n.next)&&n.acceptToken(J1,1);else if(((t=n.peek(-1))<0||Ar(t))&&e.canShift(Eh)){let i=0;for(;n.next==kl||n.next==Ys;)n.advance(),i++;(n.next==Jt||n.next==fn||n.next==wl)&&n.acceptToken(Eh,-i)}else Ar(n.next)&&n.acceptToken(K1,1)},{contextual:!0}),Yb=new Zs((n,e)=>{let t=e.context;if(t.flags)return;let i=n.peek(-1);if(i==Jt||i==fn){let s=0,r=0;for(;;){if(n.next==kl)s++;else if(n.next==Ys)s+=8-s%8;else break;n.advance(),r++}s!=t.indent&&n.next!=Jt&&n.next!=fn&&n.next!=wl&&(s[n,e|sd])),ex=new G1({start:Kb,reduce(n,e,t,i){return n.flags&ls&&Gb.has(e)||(e==Ob||e==td)&&n.flags&sd?n.parent:n},shift(n,e,t,i){return e==Ku?new as(n,Jb(i.read(i.pos,t.pos)),0):e==Ju?n.parent:e==nb||e==lb||e==cb||e==ed?new as(n,0,ls):Lh.has(e)?new as(n,0,Lh.get(e)|n.flags&ls):n},hash(n){return n.hash}}),tx=new Zs(n=>{for(let e=0;e<5;e++){if(n.next!="print".charCodeAt(e))return;n.advance()}if(!/\w/.test(String.fromCharCode(n.next)))for(let e=0;;e++){let t=n.peek(e);if(!(t==kl||t==Ys)){t!=Nb&&t!=Fb&&t!=Jt&&t!=fn&&t!=wl&&n.acceptToken(Y1);return}}}),ix=new Zs((n,e)=>{let{flags:t}=e.context,i=t&ht?nd:id,s=(t&ct)>0,r=!(t&ft),o=(t&ut)>0,l=n.pos;for(;!(n.next<0);)if(o&&n.next==Eo)if(n.peek(1)==Eo)n.advance(2);else{if(n.pos==l){n.acceptToken(ed,1);return}break}else if(r&&n.next==Bh){if(n.pos==l){n.advance();let a=n.next;a>=0&&(n.advance(),nx(n,a)),n.acceptToken(ib);return}break}else if(n.next==Bh&&!r&&n.peek(1)>-1)n.advance(2);else if(n.next==i&&(!s||n.peek(1)==i&&n.peek(2)==i)){if(n.pos==l){n.acceptToken(qh,s?3:1);return}break}else if(n.next==Jt){if(s)n.advance();else if(n.pos==l){n.acceptToken(qh);return}break}else n.advance();n.pos>l&&n.acceptToken(tb)});function nx(n,e){if(e==Xb)for(let t=0;t<2&&n.next>=48&&n.next<=55;t++)n.advance();else if(e==_b)for(let t=0;t<2&&Mr(n.next);t++)n.advance();else if(e==Hb)for(let t=0;t<4&&Mr(n.next);t++)n.advance();else if(e==jb)for(let t=0;t<8&&Mr(n.next);t++)n.advance();else if(e==Ub&&n.next==Eo){for(n.advance();n.next>=0&&n.next!=$h&&n.next!=id&&n.next!=nd&&n.next!=Jt;)n.advance();n.next==$h&&n.advance()}}const sx=wf({'async "*" "**" FormatConversion FormatSpec':O.modifier,"for while if elif else try except finally return raise break continue with pass assert await yield match case":O.controlKeyword,"in not and or is del":O.operatorKeyword,"from def class global nonlocal lambda":O.definitionKeyword,import:O.moduleKeyword,"with as print":O.keyword,Boolean:O.bool,None:O.null,VariableName:O.variableName,"CallExpression/VariableName":O.function(O.variableName),"FunctionDefinition/VariableName":O.function(O.definition(O.variableName)),"ClassDefinition/VariableName":O.definition(O.className),PropertyName:O.propertyName,"CallExpression/MemberExpression/PropertyName":O.function(O.propertyName),Comment:O.lineComment,Number:O.number,String:O.string,FormatString:O.special(O.string),Escape:O.escape,UpdateOp:O.updateOperator,"ArithOp!":O.arithmeticOperator,BitOp:O.bitwiseOperator,CompareOp:O.compareOperator,AssignOp:O.definitionOperator,Ellipsis:O.punctuation,At:O.meta,"( )":O.paren,"[ ]":O.squareBracket,"{ }":O.brace,".":O.derefOperator,", ;":O.separator}),rx={__proto__:null,await:44,or:54,and:56,in:60,not:62,is:64,if:70,else:72,lambda:76,yield:94,from:96,async:102,for:104,None:162,True:164,False:164,del:178,pass:182,break:186,continue:190,return:194,raise:202,import:206,as:208,global:212,nonlocal:214,assert:218,type:223,elif:236,while:240,try:246,except:248,finally:250,with:254,def:258,class:268,match:279,case:285},ox=qs.deserialize({version:14,states:"##jO`QeOOP$}OSOOO&WQtO'#HUOOQS'#Co'#CoOOQS'#Cp'#CpO'vQdO'#CnO*UQtO'#HTOOQS'#HU'#HUOOQS'#DU'#DUOOQS'#HT'#HTO*rQdO'#D_O+VQdO'#DfO+gQdO'#DjO+zOWO'#DuO,VOWO'#DvO.[QtO'#GuOOQS'#Gu'#GuO'vQdO'#GtO0ZQtO'#GtOOQS'#Eb'#EbO0rQdO'#EcOOQS'#Gs'#GsO0|QdO'#GrOOQV'#Gr'#GrO1XQdO'#FYOOQS'#G^'#G^O1^QdO'#FXOOQV'#IS'#ISOOQV'#Gq'#GqOOQV'#Fq'#FqQ`QeOOO'vQdO'#CqO1lQdO'#C}O1sQdO'#DRO2RQdO'#HYO2cQtO'#EVO'vQdO'#EWOOQS'#EY'#EYOOQS'#E['#E[OOQS'#E^'#E^O2wQdO'#E`O3_QdO'#EdO3rQdO'#EfO3zQtO'#EfO1XQdO'#EiO0rQdO'#ElO1XQdO'#EnO0rQdO'#EtO0rQdO'#EwO4VQdO'#EyO4^QdO'#FOO4iQdO'#EzO0rQdO'#FOO1XQdO'#FQO1XQdO'#FVO4nQdO'#F[P4uOdO'#GpPOOO)CBd)CBdOOQS'#Ce'#CeOOQS'#Cf'#CfOOQS'#Cg'#CgOOQS'#Ch'#ChOOQS'#Ci'#CiOOQS'#Cj'#CjOOQS'#Cl'#ClO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO5TQdO'#DoOOQS,5:Y,5:YO5hQdO'#HdOOQS,5:],5:]O5uQ!fO,5:]O5zQtO,59YO1lQdO,59bO1lQdO,59bO1lQdO,59bO8jQdO,59bO8oQdO,59bO8vQdO,59jO8}QdO'#HTO:TQdO'#HSOOQS'#HS'#HSOOQS'#D['#D[O:lQdO,59aO'vQdO,59aO:zQdO,59aOOQS,59y,59yO;PQdO,5:RO'vQdO,5:ROOQS,5:Q,5:QO;_QdO,5:QO;dQdO,5:XO'vQdO,5:XO'vQdO,5:VOOQS,5:U,5:UO;uQdO,5:UO;zQdO,5:WOOOW'#Fy'#FyOOOOQS'#Ds'#DsOOQS1G/w1G/wOOQS1G.|1G.|O!/[QtO1G.|O!/cQtO1G.|O1lQdO1G.|O!0OQdO1G/UOOQS'#DZ'#DZO0rQdO,59tOOQS1G.{1G.{O!0VQdO1G/eO!0gQdO1G/eO!0oQdO1G/fO'vQdO'#H[O!0tQdO'#H[O!0yQtO1G.{O!1ZQdO,59iO!2aQdO,5=zO!2qQdO,5=zO!2yQdO1G/mO!3OQtO1G/mOOQS1G/l1G/lO!3`QdO,5=uO!4VQdO,5=uO0rQdO1G/qO!4tQdO1G/sO!4yQtO1G/sO!5ZQtO1G/qOOQS1G/p1G/pOOQS1G/r1G/rOOOW-E9w-E9wOOQS1G/{1G/{O!5kQdO'#HxO0rQdO'#HxO!5|QdO,5>cOOOW-E9x-E9xOOQS1G/|1G/|OOQS-E9{-E9{O!6[Q#xO1G2zO!6{QtO1G2zO'vQdO,5kOOQS1G1`1G1`O!8RQdO1G1`OOQS'#DV'#DVO0rQdO,5=qOOQS,5=q,5=qO!8WQdO'#FrO!8cQdO,59oO!8kQdO1G/XO!8uQtO,5=uOOQS1G3`1G3`OOQS,5:m,5:mO!9fQdO'#GtOOQS,5jO!;ZQdO,5>jO1XQdO,5>jO!;lQdO,5>iOOQS-E:R-E:RO!;qQdO1G0lO!;|QdO1G0lO!lO!lO!hO!=VQdO,5>hO!=hQdO'#EpO0rQdO1G0tO!=sQdO1G0tO!=xQgO1G0zO!AvQgO1G0}O!EqQdO,5>oO!E{QdO,5>oO!FTQtO,5>oO0rQdO1G1PO!F_QdO1G1PO4iQdO1G1UO!!vQdO1G1WOOQV,5;a,5;aO!FdQfO,5;aO!FiQgO1G1QO!JjQdO'#GZO4iQdO1G1QO4iQdO1G1QO!JzQdO,5>pO!KXQdO,5>pO1XQdO,5>pOOQV1G1U1G1UO!KaQdO'#FSO!KrQ!fO1G1WO!KzQdO1G1WOOQV1G1]1G1]O4iQdO1G1]O!LPQdO1G1]O!LXQdO'#F^OOQV1G1b1G1bO!#ZQtO1G1bPOOO1G2v1G2vP!L^OSO1G2vOOQS,5=},5=}OOQS'#Dp'#DpO0rQdO,5=}O!LfQdO,5=|O!LyQdO,5=|OOQS1G/u1G/uO!MRQdO,5>PO!McQdO,5>PO!MkQdO,5>PO!NOQdO,5>PO!N`QdO,5>POOQS1G3j1G3jOOQS7+$h7+$hO!8kQdO7+$pO#!RQdO1G.|O#!YQdO1G.|OOQS1G/`1G/`OOQS,5<`,5<`O'vQdO,5<`OOQS7+%P7+%PO#!aQdO7+%POOQS-E9r-E9rOOQS7+%Q7+%QO#!qQdO,5=vO'vQdO,5=vOOQS7+$g7+$gO#!vQdO7+%PO##OQdO7+%QO##TQdO1G3fOOQS7+%X7+%XO##eQdO1G3fO##mQdO7+%XOOQS,5<_,5<_O'vQdO,5<_O##rQdO1G3aOOQS-E9q-E9qO#$iQdO7+%]OOQS7+%_7+%_O#$wQdO1G3aO#%fQdO7+%_O#%kQdO1G3gO#%{QdO1G3gO#&TQdO7+%]O#&YQdO,5>dO#&sQdO,5>dO#&sQdO,5>dOOQS'#Dx'#DxO#'UO&jO'#DzO#'aO`O'#HyOOOW1G3}1G3}O#'fQdO1G3}O#'nQdO1G3}O#'yQ#xO7+(fO#(jQtO1G2UP#)TQdO'#GOOOQS,5nQdO,5sQdO1G4OOOQS-E9y-E9yO#?^QdO1G4OO<[QdO'#H{OOOO'#D{'#D{OOOO'#F|'#F|O#?oO&jO,5:fOOOW,5>e,5>eOOOW7+)i7+)iO#?zQdO7+)iO#@SQdO1G2zO#@mQdO1G2zP'vQdO'#FuO0rQdO<mO#BQQdO,5>mOOQS1G0v1G0vOOQS<rO#KgQdO,5>rO#KrQdO,5>rO#K}QdO,5>qO#L`QdO,5>qOOQS1G1Y1G1YOOQS,5;p,5;pOOQV<VAN>VO$ oQdO<cAN>cO0rQdO1G1|O$!PQtO1G1|P$!ZQdO'#FvOOQS1G2R1G2RP$!hQdO'#F{O$!uQdO7+)jO$#`QdO,5>gOOOO-E9z-E9zOOOW<tO$4{QdO,5>tO1XQdO,5vO$)nQdO,5>vOOQS1G1p1G1pOOQS,5<[,5<[OOQU7+'P7+'PO$+zQdO1G/iO$)nQdO,5wO$8zQdO,5>wOOQS1G1s1G1sOOQS7+'S7+'SP$)nQdO'#GdO$9SQdO1G4bO$9^QdO1G4bO$9fQdO1G4bOOQS7+%T7+%TO$9tQdO1G1tO$:SQtO'#FaO$:ZQdO,5<}OOQS,5<},5<}O$:iQdO1G4cOOQS-E:a-E:aO$)nQdO,5<|O$:pQdO,5<|O$:uQdO7+)|OOQS-E:`-E:`O$;PQdO7+)|O$)nQdO,5S~O%cOS%^OSSOS%]PQ~OPdOVaOfoOhYOopOs!POvqO!PrO!Q{O!T!SO!U!RO!XZO!][O!h`O!r`O!s`O!t`O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#l!QO#o!TO#s!UO#u!VO#z!WO#}hO$P!XO%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~O%]!YO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%j![O%k!]O%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aO~Ok%xXl%xXm%xXn%xXo%xXp%xXs%xXz%xX{%xX!x%xX#g%xX%[%xX%_%xX%z%xXg%xX!T%xX!U%xX%{%xX!W%xX![%xX!Q%xX#[%xXt%xX!m%xX~P%SOfoOhYO!XZO!][O!h`O!r`O!s`O!t`O%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~Oz%wX{%wX#g%wX%[%wX%_%wX%z%wX~Ok!pOl!qOm!oOn!oOo!rOp!sOs!tO!x%wX~P)pOV!zOg!|Oo0cOv0qO!PrO~P'vOV#OOo0cOv0qO!W#PO~P'vOV#SOa#TOo0cOv0qO![#UO~P'vOQ#XO%`#XO%a#ZO~OQ#^OR#[O%`#^O%a#`O~OV%iX_%iXa%iXh%iXk%iXl%iXm%iXn%iXo%iXp%iXs%iXz%iX!X%iX!f%iX%j%iX%k%iX%l%iX%m%iX%n%iX%o%iX%p%iX%q%iX%r%iX%s%iXg%iX!T%iX!U%iX~O&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O{%iX!x%iX#g%iX%[%iX%_%iX%z%iX%{%iX!W%iX![%iX!Q%iX#[%iXt%iX!m%iX~P,eOz#dO{%hX!x%hX#g%hX%[%hX%_%hX%z%hX~Oo0cOv0qO~P'vO#g#gO%[#iO%_#iO~O%uWO~O!T#nO#u!VO#z!WO#}hO~OopO~P'vOV#sOa#tO%uWO{wP~OV#xOo0cOv0qO!Q#yO~P'vO{#{O!x$QO%z#|O#g!yX%[!yX%_!yX~OV#xOo0cOv0qO#g#SX%[#SX%_#SX~P'vOo0cOv0qO#g#WX%[#WX%_#WX~P'vOh$WO%uWO~O!f$YO!r$YO%uWO~OV$eO~P'vO!U$gO#s$hO#u$iO~O{$jO~OV$qO~P'vOS$sO%[$rO%_$rO%c$tO~OV$}Oa$}Og%POo0cOv0qO~P'vOo0cOv0qO{%SO~P'vO&Y%UO~Oa!bOh!iO!X!kO!f!mOVba_bakbalbambanbaobapbasbazba{ba!xba#gba%[ba%_ba%jba%kba%lba%mba%nba%oba%pba%qba%rba%sba%zbagba!Tba!Uba%{ba!Wba![ba!Qba#[batba!mba~On%ZO~Oo%ZO~P'vOo0cO~P'vOk0eOl0fOm0dOn0dOo0mOp0nOs0rOg%wX!T%wX!U%wX%{%wX!W%wX![%wX!Q%wX#[%wX!m%wX~P)pO%{%]Og%vXz%vX!T%vX!U%vX!W%vX{%vX~Og%_Oz%`O!T%dO!U%cO~Og%_O~Oz%gO!T%dO!U%cO!W&SX~O!W%kO~Oz%lO{%nO!T%dO!U%cO![%}X~O![%rO~O![%sO~OQ#XO%`#XO%a%uO~OV%wOo0cOv0qO!PrO~P'vOQ#^OR#[O%`#^O%a%zO~OV!qa_!qaa!qah!qak!qal!qam!qan!qao!qap!qas!qaz!qa{!qa!X!qa!f!qa!x!qa#g!qa%[!qa%_!qa%j!qa%k!qa%l!qa%m!qa%n!qa%o!qa%p!qa%q!qa%r!qa%s!qa%z!qag!qa!T!qa!U!qa%{!qa!W!qa![!qa!Q!qa#[!qat!qa!m!qa~P#yOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P%SOV&OOopOvqO{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P'vOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#g$zX%[$zX%_$zX~P'vO#g#gO%[&TO%_&TO~O!f&UOh&sX%[&sXz&sX#[&sX#g&sX%_&sX#Z&sXg&sX~Oh!iO%[&WO~Okealeameaneaoeapeaseazea{ea!xea#gea%[ea%_ea%zeagea!Tea!Uea%{ea!Wea![ea!Qea#[eatea!mea~P%SOsqazqa{qa#gqa%[qa%_qa%zqa~Ok!pOl!qOm!oOn!oOo!rOp!sO!xqa~PEcO%z&YOz%yX{%yX~O%uWOz%yX{%yX~Oz&]O{wX~O{&_O~Oz%lO#g%}X%[%}X%_%}Xg%}X{%}X![%}X!m%}X%z%}X~OV0lOo0cOv0qO!PrO~P'vO%z#|O#gUa%[Ua%_Ua~Oz&hO#g&PX%[&PX%_&PXn&PX~P%SOz&kO!Q&jO#g#Wa%[#Wa%_#Wa~Oz&lO#[&nO#g&rX%[&rX%_&rXg&rX~O!f$YO!r$YO#Z&qO%uWO~O#Z&qO~Oz&sO#g&tX%[&tX%_&tX~Oz&uO#g&pX%[&pX%_&pX{&pX~O!X&wO%z&xO~Oz&|On&wX~P%SOn'PO~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO%['UO~P'vOt'YO#p'WO#q'XOP#naV#naf#nah#nao#nas#nav#na!P#na!Q#na!T#na!U#na!X#na!]#na!h#na!r#na!s#na!t#na!{#na!}#na#P#na#R#na#T#na#X#na#Z#na#^#na#_#na#a#na#c#na#l#na#o#na#s#na#u#na#z#na#}#na$P#na%X#na%o#na%p#na%t#na%u#na&Z#na&[#na&]#na&^#na&_#na&`#na&a#na&b#na&c#na&d#na&e#na&f#na&g#na&h#na&i#na&j#na%Z#na%_#na~Oz'ZO#[']O{&xX~Oh'_O!X&wO~Oh!iO{$jO!X&wO~O{'eO~P%SO%['hO%_'hO~OS'iO%['hO%_'hO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%k!]O~P!#uO%kWi~P!#uOV!aO_!aOa!bOh!iO!X!kO!f!mO%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%m!_O%n!_O~P!&pO%mWi%nWi~P!&pOa!bOh!iO!X!kO!f!mOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%mWi%nWi%oWi%pWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~OV!aO_!aO%q!aO%r!aO%s!aO~P!)nOVWi_Wi%qWi%rWi%sWi~P!)nO!T%dO!U%cOg&VXz&VX~O%z'kO%{'kO~P,eOz'mOg&UX~Og'oO~Oz'pO{'rO!W&XX~Oo0cOv0qOz'pO{'sO!W&XX~P'vO!W'uO~Om!oOn!oOo!rOp!sOkjisjizji{ji!xji#gji%[ji%_ji%zji~Ol!qO~P!.aOlji~P!.aOk0eOl0fOm0dOn0dOo0mOp0nO~Ot'wO~P!/jOV'|Og'}Oo0cOv0qO~P'vOg'}Oz(OO~Og(QO~O!U(SO~Og(TOz(OO!T%dO!U%cO~P%SOk0eOl0fOm0dOn0dOo0mOp0nOgqa!Tqa!Uqa%{qa!Wqa![qa!Qqa#[qatqa!mqa~PEcOV'|Oo0cOv0qO!W&Sa~P'vOz(WO!W&Sa~O!W(XO~Oz(WO!T%dO!U%cO!W&Sa~P%SOV(]Oo0cOv0qO![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~P'vOz(^O![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~O![(aO~Oz(^O!T%dO!U%cO![%}a~P%SOz(dO!T%dO!U%cO![&Ta~P%SOz(gO{&lX![&lX!m&lX%z&lX~O{(kO![(mO!m(nO%z(jO~OV&OOopOvqO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~P'vOz(pO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~O!f&UOh&sa%[&saz&sa#[&sa#g&sa%_&sa#Z&sag&sa~O%[(uO~OV#sOa#tO%uWO~Oz&]O{wa~OopOvqO~P'vOz(^O#g%}a%[%}a%_%}ag%}a{%}a![%}a!m%}a%z%}a~P%SOz(zO#g%hX%[%hX%_%hX%z%hX~O%z#|O#gUi%[Ui%_Ui~O#g&Pa%[&Pa%_&Pan&Pa~P'vOz(}O#g&Pa%[&Pa%_&Pan&Pa~O%uWO#g&ra%[&ra%_&rag&ra~Oz)SO#g&ra%[&ra%_&rag&ra~Og)VO~OV)WOh$WO%uWO~O#Z)XO~O%uWO#g&ta%[&ta%_&ta~Oz)ZO#g&ta%[&ta%_&ta~Oo0cOv0qO#g&pa%[&pa%_&pa{&pa~P'vOz)^O#g&pa%[&pa%_&pa{&pa~OV)`Oa)`O%uWO~O%z)eO~Ot)hO#j)gOP#hiV#hif#hih#hio#his#hiv#hi!P#hi!Q#hi!T#hi!U#hi!X#hi!]#hi!h#hi!r#hi!s#hi!t#hi!{#hi!}#hi#P#hi#R#hi#T#hi#X#hi#Z#hi#^#hi#_#hi#a#hi#c#hi#l#hi#o#hi#s#hi#u#hi#z#hi#}#hi$P#hi%X#hi%o#hi%p#hi%t#hi%u#hi&Z#hi&[#hi&]#hi&^#hi&_#hi&`#hi&a#hi&b#hi&c#hi&d#hi&e#hi&f#hi&g#hi&h#hi&i#hi&j#hi%Z#hi%_#hi~Ot)iOP#kiV#kif#kih#kio#kis#kiv#ki!P#ki!Q#ki!T#ki!U#ki!X#ki!]#ki!h#ki!r#ki!s#ki!t#ki!{#ki!}#ki#P#ki#R#ki#T#ki#X#ki#Z#ki#^#ki#_#ki#a#ki#c#ki#l#ki#o#ki#s#ki#u#ki#z#ki#}#ki$P#ki%X#ki%o#ki%p#ki%t#ki%u#ki&Z#ki&[#ki&]#ki&^#ki&_#ki&`#ki&a#ki&b#ki&c#ki&d#ki&e#ki&f#ki&g#ki&h#ki&i#ki&j#ki%Z#ki%_#ki~OV)kOn&wa~P'vOz)lOn&wa~Oz)lOn&wa~P%SOn)pO~O%Y)tO~Ot)wO#p'WO#q)vOP#niV#nif#nih#nio#nis#niv#ni!P#ni!Q#ni!T#ni!U#ni!X#ni!]#ni!h#ni!r#ni!s#ni!t#ni!{#ni!}#ni#P#ni#R#ni#T#ni#X#ni#Z#ni#^#ni#_#ni#a#ni#c#ni#l#ni#o#ni#s#ni#u#ni#z#ni#}#ni$P#ni%X#ni%o#ni%p#ni%t#ni%u#ni&Z#ni&[#ni&]#ni&^#ni&_#ni&`#ni&a#ni&b#ni&c#ni&d#ni&e#ni&f#ni&g#ni&h#ni&i#ni&j#ni%Z#ni%_#ni~OV)zOo0cOv0qO{$jO~P'vOo0cOv0qO{&xa~P'vOz*OO{&xa~OV*SOa*TOg*WO%q*UO%uWO~O{$jO&{*YO~Oh'_O~Oh!iO{$jO~O%[*_O~O%[*aO%_*aO~OV$}Oa$}Oo0cOv0qOg&Ua~P'vOz*dOg&Ua~Oo0cOv0qO{*gO!W&Xa~P'vOz*hO!W&Xa~Oo0cOv0qOz*hO{*kO!W&Xa~P'vOo0cOv0qOz*hO!W&Xa~P'vOz*hO{*kO!W&Xa~Om0dOn0dOo0mOp0nOgjikjisjizji!Tji!Uji%{ji!Wji{ji![ji#gji%[ji%_ji!Qji#[jitji!mji%zji~Ol0fO~P!NkOlji~P!NkOV'|Og*pOo0cOv0qO~P'vOn*rO~Og*pOz*tO~Og*uO~OV'|Oo0cOv0qO!W&Si~P'vOz*vO!W&Si~O!W*wO~OV(]Oo0cOv0qO![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~P'vOz*zO!T%dO!U%cO![&Ti~Oz*}O![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~O![+OO~Oa+QOo0cOv0qO![&Ti~P'vOz*zO![&Ti~O![+SO~OV+UOo0cOv0qO{&la![&la!m&la%z&la~P'vOz+VO{&la![&la!m&la%z&la~O!]+YO&n+[O![!nX~O![+^O~O{(kO![+_O~O{(kO![+_O!m+`O~OV&OOopOvqO{%hq!x%hq#g%hq%[%hq%_%hq%z%hq~P'vOz$ri{$ri!x$ri#g$ri%[$ri%_$ri%z$ri~P%SOV&OOopOvqO~P'vOV&OOo0cOv0qO#g%ha%[%ha%_%ha%z%ha~P'vOz+aO#g%ha%[%ha%_%ha%z%ha~Oz$ia#g$ia%[$ia%_$ian$ia~P%SO#g&Pi%[&Pi%_&Pin&Pi~P'vOz+dO#g#Wq%[#Wq%_#Wq~O#[+eOz$va#g$va%[$va%_$vag$va~O%uWO#g&ri%[&ri%_&rig&ri~Oz+gO#g&ri%[&ri%_&rig&ri~OV+iOh$WO%uWO~O%uWO#g&ti%[&ti%_&ti~Oo0cOv0qO#g&pi%[&pi%_&pi{&pi~P'vO{#{Oz#eX!W#eX~Oz+mO!W&uX~O!W+oO~Ot+rO#j)gOP#hqV#hqf#hqh#hqo#hqs#hqv#hq!P#hq!Q#hq!T#hq!U#hq!X#hq!]#hq!h#hq!r#hq!s#hq!t#hq!{#hq!}#hq#P#hq#R#hq#T#hq#X#hq#Z#hq#^#hq#_#hq#a#hq#c#hq#l#hq#o#hq#s#hq#u#hq#z#hq#}#hq$P#hq%X#hq%o#hq%p#hq%t#hq%u#hq&Z#hq&[#hq&]#hq&^#hq&_#hq&`#hq&a#hq&b#hq&c#hq&d#hq&e#hq&f#hq&g#hq&h#hq&i#hq&j#hq%Z#hq%_#hq~On$|az$|a~P%SOV)kOn&wi~P'vOz+yOn&wi~Oz,TO{$jO#[,TO~O#q,VOP#nqV#nqf#nqh#nqo#nqs#nqv#nq!P#nq!Q#nq!T#nq!U#nq!X#nq!]#nq!h#nq!r#nq!s#nq!t#nq!{#nq!}#nq#P#nq#R#nq#T#nq#X#nq#Z#nq#^#nq#_#nq#a#nq#c#nq#l#nq#o#nq#s#nq#u#nq#z#nq#}#nq$P#nq%X#nq%o#nq%p#nq%t#nq%u#nq&Z#nq&[#nq&]#nq&^#nq&_#nq&`#nq&a#nq&b#nq&c#nq&d#nq&e#nq&f#nq&g#nq&h#nq&i#nq&j#nq%Z#nq%_#nq~O#[,WOz%Oa{%Oa~Oo0cOv0qO{&xi~P'vOz,YO{&xi~O{#{O%z,[Og&zXz&zX~O%uWOg&zXz&zX~Oz,`Og&yX~Og,bO~O%Y,eO~O!T%dO!U%cOg&Viz&Vi~OV$}Oa$}Oo0cOv0qOg&Ui~P'vO{,hOz$la!W$la~Oo0cOv0qO{,iOz$la!W$la~P'vOo0cOv0qO{*gO!W&Xi~P'vOz,lO!W&Xi~Oo0cOv0qOz,lO!W&Xi~P'vOz,lO{,oO!W&Xi~Og$hiz$hi!W$hi~P%SOV'|Oo0cOv0qO~P'vOn,qO~OV'|Og,rOo0cOv0qO~P'vOV'|Oo0cOv0qO!W&Sq~P'vOz$gi![$gi#g$gi%[$gi%_$gig$gi{$gi!m$gi%z$gi~P%SOV(]Oo0cOv0qO~P'vOa+QOo0cOv0qO![&Tq~P'vOz,sO![&Tq~O![,tO~OV(]Oo0cOv0qO![%}q#g%}q%[%}q%_%}qg%}q{%}q!m%}q%z%}q~P'vO{,uO~OV+UOo0cOv0qO{&li![&li!m&li%z&li~P'vOz,zO{&li![&li!m&li%z&li~O!]+YO&n+[O![!na~O{(kO![,}O~OV&OOo0cOv0qO#g%hi%[%hi%_%hi%z%hi~P'vOz-OO#g%hi%[%hi%_%hi%z%hi~O%uWO#g&rq%[&rq%_&rqg&rq~Oz-RO#g&rq%[&rq%_&rqg&rq~OV)`Oa)`O%uWO!W&ua~Oz-TO!W&ua~On$|iz$|i~P%SOV)kO~P'vOV)kOn&wq~P'vOt-XOP#myV#myf#myh#myo#mys#myv#my!P#my!Q#my!T#my!U#my!X#my!]#my!h#my!r#my!s#my!t#my!{#my!}#my#P#my#R#my#T#my#X#my#Z#my#^#my#_#my#a#my#c#my#l#my#o#my#s#my#u#my#z#my#}#my$P#my%X#my%o#my%p#my%t#my%u#my&Z#my&[#my&]#my&^#my&_#my&`#my&a#my&b#my&c#my&d#my&e#my&f#my&g#my&h#my&i#my&j#my%Z#my%_#my~O%Z-]O%_-]O~P`O#q-^OP#nyV#nyf#nyh#nyo#nys#nyv#ny!P#ny!Q#ny!T#ny!U#ny!X#ny!]#ny!h#ny!r#ny!s#ny!t#ny!{#ny!}#ny#P#ny#R#ny#T#ny#X#ny#Z#ny#^#ny#_#ny#a#ny#c#ny#l#ny#o#ny#s#ny#u#ny#z#ny#}#ny$P#ny%X#ny%o#ny%p#ny%t#ny%u#ny&Z#ny&[#ny&]#ny&^#ny&_#ny&`#ny&a#ny&b#ny&c#ny&d#ny&e#ny&f#ny&g#ny&h#ny&i#ny&j#ny%Z#ny%_#ny~Oz-aO{$jO#[-aO~Oo0cOv0qO{&xq~P'vOz-dO{&xq~O%z,[Og&zaz&za~O{#{Og&zaz&za~OV*SOa*TO%q*UO%uWOg&ya~Oz-hOg&ya~O$S-lO~OV$}Oa$}Oo0cOv0qO~P'vOo0cOv0qO{-mOz$li!W$li~P'vOo0cOv0qOz$li!W$li~P'vO{-mOz$li!W$li~Oo0cOv0qO{*gO~P'vOo0cOv0qO{*gO!W&Xq~P'vOz-pO!W&Xq~Oo0cOv0qOz-pO!W&Xq~P'vOs-sO!T%dO!U%cOg&Oq!W&Oq![&Oqz&Oq~P!/jOa+QOo0cOv0qO![&Ty~P'vOz$ji![$ji~P%SOa+QOo0cOv0qO~P'vOV+UOo0cOv0qO~P'vOV+UOo0cOv0qO{&lq![&lq!m&lq%z&lq~P'vO{(kO![-xO!m-yO%z-wO~OV&OOo0cOv0qO#g%hq%[%hq%_%hq%z%hq~P'vO%uWO#g&ry%[&ry%_&ryg&ry~OV)`Oa)`O%uWO!W&ui~Ot-}OP#m!RV#m!Rf#m!Rh#m!Ro#m!Rs#m!Rv#m!R!P#m!R!Q#m!R!T#m!R!U#m!R!X#m!R!]#m!R!h#m!R!r#m!R!s#m!R!t#m!R!{#m!R!}#m!R#P#m!R#R#m!R#T#m!R#X#m!R#Z#m!R#^#m!R#_#m!R#a#m!R#c#m!R#l#m!R#o#m!R#s#m!R#u#m!R#z#m!R#}#m!R$P#m!R%X#m!R%o#m!R%p#m!R%t#m!R%u#m!R&Z#m!R&[#m!R&]#m!R&^#m!R&_#m!R&`#m!R&a#m!R&b#m!R&c#m!R&d#m!R&e#m!R&f#m!R&g#m!R&h#m!R&i#m!R&j#m!R%Z#m!R%_#m!R~Oo0cOv0qO{&xy~P'vOV*SOa*TO%q*UO%uWOg&yi~O$S-lO%Z.VO%_.VO~OV.aOh._O!X.^O!].`O!h.YO!s.[O!t.[O%p.XO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O~Oo0cOv0qOz$lq!W$lq~P'vO{.fOz$lq!W$lq~Oo0cOv0qO{*gO!W&Xy~P'vOz.gO!W&Xy~Oo0cOv.kO~P'vOs-sO!T%dO!U%cOg&Oy!W&Oy![&Oyz&Oy~P!/jO{(kO![.nO~O{(kO![.nO!m.oO~OV*SOa*TO%q*UO%uWO~Oh.tO!f.rOz$TX#[$TX%j$TXg$TX~Os$TX{$TX!W$TX![$TX~P$-bO%o.vO%p.vOs$UXz$UX{$UX#[$UX%j$UX!W$UXg$UX![$UX~O!h.xO~Oz.|O#[/OO%j.yOs&|X{&|X!W&|Xg&|X~Oa/RO~P$)zOh.tOs&}Xz&}X{&}X#[&}X%j&}X!W&}Xg&}X![&}X~Os/VO{$jO~Oo0cOv0qOz$ly!W$ly~P'vOo0cOv0qO{*gO!W&X!R~P'vOz/ZO!W&X!R~Og&RXs&RX!T&RX!U&RX!W&RX![&RXz&RX~P!/jOs-sO!T%dO!U%cOg&Qa!W&Qa![&Qaz&Qa~O{(kO![/^O~O!f.rOh$[as$[az$[a{$[a#[$[a%j$[a!W$[ag$[a![$[a~O!h/eO~O%o.vO%p.vOs$Uaz$Ua{$Ua#[$Ua%j$Ua!W$Uag$Ua![$Ua~O%j.yOs$Yaz$Ya{$Ya#[$Ya!W$Yag$Ya![$Ya~Os&|a{&|a!W&|ag&|a~P$)nOz/jOs&|a{&|a!W&|ag&|a~O!W/mO~Og/mO~O{/oO~O![/pO~Oo0cOv0qO{*gO!W&X!Z~P'vO{/sO~O%z/tO~P$-bOz/uO#[/OO%j.yOg'PX~Oz/uOg'PX~Og/wO~O!h/xO~O#[/OOs%Saz%Sa{%Sa%j%Sa!W%Sag%Sa![%Sa~O#[/OO%j.yOs%Waz%Wa{%Wa!W%Wag%Wa~Os&|i{&|i!W&|ig&|i~P$)nOz/zO#[/OO%j.yO!['Oa~Og'Pa~P$)nOz0SOg'Pa~Oa0UO!['Oi~P$)zOz0WO!['Oi~Oz0WO#[/OO%j.yO!['Oi~O#[/OO%j.yOg$biz$bi~O%z0ZO~P$-bO#[/OO%j.yOg%Vaz%Va~Og'Pi~P$)nO{0^O~Oa0UO!['Oq~P$)zOz0`O!['Oq~O#[/OO%j.yOz%Ui![%Ui~Oa0UO~P$)zOa0UO!['Oy~P$)zO#[/OO%j.yOg$ciz$ci~O#[/OO%j.yOz%Uq![%Uq~Oz+aO#g%ha%[%ha%_%ha%z%ha~P%SOV&OOo0cOv0qO~P'vOn0hO~Oo0hO~P'vO{0iO~Ot0jO~P!/jO&]&Z&j&h&i&g&f&d&e&c&b&`&a&_&^&[%u~",goto:"!=j'QPPPPPP'RP'Z*s+[+t,_,y-fP.SP'Z.r.r'ZPPP'Z2[PPPPPP2[5PPP5PP7b7k=sPP=v>h>kPP'Z'ZPP>zPP'Z'ZPP'Z'Z'Z'Z'Z?O?w'ZP?zP@QDXGuGyPG|HWH['ZPPPH_Hk'RP'R'RP'RP'RP'RP'RP'R'R'RP'RPP'RPP'RP'RPHqH}IVPI^IdPI^PI^I^PPPI^PKrPK{LVL]KrPI^LfPI^PLmLsPLwM]MzNeLwLwNkNxLwLwLwLw! ^! d! g! l! o! y!!P!!]!!o!!u!#P!#V!#s!#y!$P!$Z!$a!$g!$y!%T!%Z!%a!%k!%q!%w!%}!&T!&Z!&e!&k!&u!&{!'U!'[!'k!'s!'}!(UPPPPPPPPPPP!([!(_!(e!(n!(x!)TPPPPPPPPPPPP!-u!/Z!3^!6oPP!6w!7W!7a!8Y!8P!8c!8i!8l!8o!8r!8z!9jPPPPPPPPPPPPPPPPP!9m!9q!9wP!:]!:a!:m!:v!;S!;j!;m!;p!;v!;|!_![!]Do!]!^Es!^!_FZ!_!`Gk!`!aHX!a!b%T!b!cIf!c!dJU!d!eK^!e!hJU!h!i!#f!i!tJU!t!u!,|!u!wJU!w!x!.t!x!}JU!}#O!0S#O#P&o#P#Q!0j#Q#R!1Q#R#SJU#S#T%T#T#UJU#U#VK^#V#YJU#Y#Z!#f#Z#fJU#f#g!,|#g#iJU#i#j!.t#j#oJU#o#p!1n#p#q!1s#q#r!2a#r#s!2f#s$g%T$g;'SJU;'S;=`KW<%lOJU`%YT&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T`%lP;=`<%l%To%v]&n`%c_OX%TXY%oY[%T[]%o]p%Tpq%oq#O%T#O#P&o#P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To&tX&n`OY%TYZ%oZ]%T]^%o^#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc'f[&n`O!_%T!_!`([!`#T%T#T#U(r#U#f%T#f#g(r#g#h(r#h#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(cTmR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(yT!mR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk)aV&n`&[ZOr%Trs)vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk){V&n`Or%Trs*bs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk*iT&n`&^ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To+PZS_&n`OY*xYZ%TZ]*x]^%T^#o*x#o#p+r#p#q*x#q#r+r#r;'S*x;'S;=`,^<%lO*x_+wTS_OY+rZ]+r^;'S+r;'S;=`,W<%lO+r_,ZP;=`<%l+ro,aP;=`<%l*xj,kV%rQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-XT!xY&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-oV%lQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.]V&n`&ZZOw%Twx.rx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.wV&n`Ow%Twx/^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/eT&n`&]ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/{ThZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc0cTgR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk0yXVZ&n`Oz%Tz{1f{!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk1mVaR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk2ZV%oZ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc2wTzR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To3_W%pZ&n`O!_%T!_!`-Q!`!a3w!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Td4OT&{S&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk4fX!fQ&n`O!O%T!O!P5R!P!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5WV&n`O!O%T!O!P5m!P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5tT!rZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti6[a!hX&n`O!Q%T!Q![6T![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S6T#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti7fZ&n`O{%T{|8X|}%T}!O8X!O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8^V&n`O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8z]!hX&n`O!Q%T!Q![8s![!l%T!l!m9s!m#R%T#R#S8s#S#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti9zT!hX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk:bX%qR&n`O!P%T!P!Q:}!Q!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj;UV%sQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti;ro!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!d%T!d!e?q!e!g%T!g!h7a!h!l%T!l!m9s!m!q%T!q!rA]!r!z%T!z!{Bq!{#R%T#R#S>_#S#U%T#U#V?q#V#X%T#X#Y7a#Y#^%T#^#_9s#_#c%T#c#dA]#d#l%T#l#mBq#m#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti=xV&n`O!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti>fc!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S>_#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti?vY&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti@mY!hX&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiAbX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBUX!hX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBv]&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiCv]!hX&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToDvV{_&n`O!_%T!_!`E]!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TcEdT%{R&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkEzT#gZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkFbXmR&n`O!^%T!^!_F}!_!`([!`!a([!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjGUV%mQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkGrV%zZ&n`O!_%T!_!`([!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkH`WmR&n`O!_%T!_!`([!`!aHx!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjIPV%nQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkIoV_Q#}P&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToJ_]&n`&YS%uZO!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoKZP;=`<%lJUoKge&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!tJU!t!uLx!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#gLx#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoMRa&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUkN_V&n`&`ZOr%TrsNts#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkNyV&n`Or%Trs! `s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! gT&n`&bZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! }V&n`&_ZOw%Twx!!dx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!!iV&n`Ow%Twx!#Ox#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!#VT&n`&aZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!#oe&n`&YS%uZOr%Trs!%Qsw%Twx!&px!Q%T!Q![JU![!c%T!c!tJU!t!u!(`!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#g!(`#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!%XV&n`&dZOr%Trs!%ns#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!%sV&n`Or%Trs!&Ys#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&aT&n`&fZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&wV&n`&cZOw%Twx!'^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!'cV&n`Ow%Twx!'xx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!(PT&n`&eZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!(ia&n`&YS%uZOr%Trs!)nsw%Twx!+^x!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!)uV&n`&hZOr%Trs!*[s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*aV&n`Or%Trs!*vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*}T&n`&jZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!+eV&n`&gZOw%Twx!+zx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,PV&n`Ow%Twx!,fx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,mT&n`&iZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!-Vi&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!dJU!d!eLx!e!hJU!h!i!(`!i!}JU!}#R%T#R#SJU#S#T%T#T#UJU#U#VLx#V#YJU#Y#Z!(`#Z#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUo!.}a&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!0ZT!XZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc!0qT!WR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj!1XV%kQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!1sO!]~k!1zV%jR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!2fO![~i!2mT%tX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T",tokenizers:[tx,Yb,Zb,ix,0,1,2,3,4],topRules:{Script:[0,5]},specialized:[{term:221,get:n=>rx[n]||-1}],tokenPrec:7668}),Wh=new Mg,rd=new Set(["Script","Body","FunctionDefinition","ClassDefinition","LambdaExpression","ForStatement","MatchClause"]);function jn(n){return(e,t,i)=>{if(i)return!1;let s=e.node.getChild("VariableName");return s&&t(s,n),!0}}const lx={FunctionDefinition:jn("function"),ClassDefinition:jn("class"),ForStatement(n,e,t){if(t){for(let i=n.node.firstChild;i;i=i.nextSibling)if(i.name=="VariableName")e(i,"variable");else if(i.name=="in")break}},ImportStatement(n,e){var t,i;let{node:s}=n,r=((t=s.firstChild)===null||t===void 0?void 0:t.name)=="from";for(let o=s.getChild("import");o;o=o.nextSibling)o.name=="VariableName"&&((i=o.nextSibling)===null||i===void 0?void 0:i.name)!="as"&&e(o,r?"variable":"namespace")},AssignStatement(n,e){for(let t=n.node.firstChild;t;t=t.nextSibling)if(t.name=="VariableName")e(t,"variable");else if(t.name==":"||t.name=="AssignOp")break},ParamList(n,e){for(let t=null,i=n.node.firstChild;i;i=i.nextSibling)i.name=="VariableName"&&(!t||!/\*|AssignOp/.test(t.name))&&e(i,"variable"),t=i},CapturePattern:jn("variable"),AsPattern:jn("variable"),__proto__:null};function od(n,e){let t=Wh.get(e);if(t)return t;let i=[],s=!0;function r(o,l){let a=n.sliceString(o.from,o.to);i.push({label:a,type:l})}return e.cursor(he.IncludeAnonymous).iterate(o=>{if(o.name){let l=lx[o.name];if(l&&l(o,r,s)||!s&&rd.has(o.name))return!1;s=!1}else if(o.to-o.from>8192){for(let l of od(n,o.node))i.push(l);return!1}}),Wh.set(e,i),i}const zh=/^[\w\xa1-\uffff][\w\d\xa1-\uffff]*$/,ld=["String","FormatString","Comment","PropertyName"];function ax(n){let e=fe(n.state).resolveInner(n.pos,-1);if(ld.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&zh.test(n.state.sliceDoc(e.from,e.to));if(!t&&!n.explicit)return null;let i=[];for(let s=e;s;s=s.parent)rd.has(s.name)&&(i=i.concat(od(n.state.doc,s)));return{options:i,from:t?e.from:n.pos,validFor:zh}}const hx=["__annotations__","__builtins__","__debug__","__doc__","__import__","__name__","__loader__","__package__","__spec__","False","None","True"].map(n=>({label:n,type:"constant"})).concat(["ArithmeticError","AssertionError","AttributeError","BaseException","BlockingIOError","BrokenPipeError","BufferError","BytesWarning","ChildProcessError","ConnectionAbortedError","ConnectionError","ConnectionRefusedError","ConnectionResetError","DeprecationWarning","EOFError","Ellipsis","EncodingWarning","EnvironmentError","Exception","FileExistsError","FileNotFoundError","FloatingPointError","FutureWarning","GeneratorExit","IOError","ImportError","ImportWarning","IndentationError","IndexError","InterruptedError","IsADirectoryError","KeyError","KeyboardInterrupt","LookupError","MemoryError","ModuleNotFoundError","NameError","NotADirectoryError","NotImplemented","NotImplementedError","OSError","OverflowError","PendingDeprecationWarning","PermissionError","ProcessLookupError","RecursionError","ReferenceError","ResourceWarning","RuntimeError","RuntimeWarning","StopAsyncIteration","StopIteration","SyntaxError","SyntaxWarning","SystemError","SystemExit","TabError","TimeoutError","TypeError","UnboundLocalError","UnicodeDecodeError","UnicodeEncodeError","UnicodeError","UnicodeTranslateError","UnicodeWarning","UserWarning","ValueError","Warning","ZeroDivisionError"].map(n=>({label:n,type:"type"}))).concat(["bool","bytearray","bytes","classmethod","complex","float","frozenset","int","list","map","memoryview","object","range","set","staticmethod","str","super","tuple","type"].map(n=>({label:n,type:"class"}))).concat(["abs","aiter","all","anext","any","ascii","bin","breakpoint","callable","chr","compile","delattr","dict","dir","divmod","enumerate","eval","exec","exit","filter","format","getattr","globals","hasattr","hash","help","hex","id","input","isinstance","issubclass","iter","len","license","locals","max","min","next","oct","open","ord","pow","print","property","quit","repr","reversed","round","setattr","slice","sorted","sum","vars","zip"].map(n=>({label:n,type:"function"}))),cx=[at("def ${name}(${params}):\n ${}",{label:"def",detail:"function",type:"keyword"}),at("for ${name} in ${collection}:\n ${}",{label:"for",detail:"loop",type:"keyword"}),at("while ${}:\n ${}",{label:"while",detail:"loop",type:"keyword"}),at("try:\n ${}\nexcept ${error}:\n ${}",{label:"try",detail:"/ except block",type:"keyword"}),at(`if \${}: +`);i>-1&&(t=t.slice(0,i))}return e+t.length<=this.to?t:t.slice(0,this.to-e)}nextLine(){let e=this.parsedPos,t=this.lineAfter(e),i=e+t.length;for(let s=this.rangeIndex;;){let r=this.ranges[s].to;if(r>=i||(t=t.slice(0,r-(i-t.length)),s++,s==this.ranges.length))break;let o=this.ranges[s].from,l=this.lineAfter(o);t+=l,i=o+l.length}return{line:t,end:i}}skipGapsTo(e,t,i){for(;;){let s=this.ranges[this.rangeIndex].to,r=e+t;if(i>0?s>r:s>=r)break;let o=this.ranges[++this.rangeIndex].from;t+=o-s}return t}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to1){s=this.skipGapsTo(t,s,1),t+=s;let l=this.chunk.length;s=this.skipGapsTo(i,s,-1),i+=s,r+=this.chunk.length-l}let o=this.chunk.length-4;return this.lang.streamParser.mergeTokens&&r==4&&o>=0&&this.chunk[o]==e&&this.chunk[o+2]==t?this.chunk[o+2]=i:this.chunk.push(e,t,i,r),s}parseLine(e){let{line:t,end:i}=this.nextLine(),s=0,{streamParser:r}=this.lang,o=new Ff(t,e?e.state.tabSize:4,e?Yt(e.state):2);if(o.eol())r.blankLine(this.state,o.indentUnit);else for(;!o.eol();){let l=_f(r.token,o,this.state);if(l&&(s=this.emitToken(this.lang.tokenTable.resolve(l),this.parsedPos+o.start,this.parsedPos+o.pos,s)),o.start>1e4)break}this.parsedPos=i,this.moveRangeIndex(),this.parsedPose.start)return s}throw new Error("Stream parser failed to advance stream.")}const ol=Object.create(null),rn=[Te.none],DO=new Vs(rn),ja=[],Ga=Object.create(null),Uf=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])Uf[n]=jf(ol,e);class Hf{constructor(e){this.extra=e,this.table=Object.assign(Object.create(null),Uf)}resolve(e){return e?this.table[e]||(this.table[e]=jf(this.extra,e)):0}}const EO=new Hf(ol);function br(n,e){ja.indexOf(n)>-1||(ja.push(n),console.warn(e))}function jf(n,e){let t=[];for(let l of e.split(" ")){let a=[];for(let h of l.split(".")){let c=n[h]||O[h];c?typeof c=="function"?a.length?a=a.map(c):br(h,`Modifier ${h} used at start of tag`):a.length?br(h,`Tag ${h} used as modifier`):a=Array.isArray(c)?c:[c]:br(h,`Unknown highlighting tag ${h}`)}for(let h of a)t.push(h)}if(!t.length)return 0;let i=e.replace(/ /g,"_"),s=i+" "+t.map(l=>l.id),r=Ga[s];if(r)return r.id;let o=Ga[s]=Te.define({id:rn.length,name:i,props:[wf({[i]:t})]});return rn.push(o),o.id}function qO(n,e){let t=Te.define({id:rn.length,name:"Document",props:[Ft.add(()=>n),nl.add(()=>i=>e.getIndent(i))],top:!0});return rn.push(t),t}Z.RTL,Z.LTR;const $O=n=>{let{state:e}=n,t=e.doc.lineAt(e.selection.main.from),i=al(n.state,t.from);return i.line?BO(n):i.block?WO(n):!1};function ll(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let s=n(e,t);return s?(i(t.update(s)),!0):!1}}const BO=ll(VO,0),LO=ll(Gf,0),WO=ll((n,e)=>Gf(n,e,IO(e)),0);function al(n,e){let t=n.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}const qi=50;function zO(n,{open:e,close:t},i,s){let r=n.sliceDoc(i-qi,i),o=n.sliceDoc(s,s+qi),l=/\s*$/.exec(r)[0].length,a=/^\s*/.exec(o)[0].length,h=r.length-l;if(r.slice(h-e.length,h)==e&&o.slice(a,a+t.length)==t)return{open:{pos:i-l,margin:l&&1},close:{pos:s+a,margin:a&&1}};let c,f;s-i<=2*qi?c=f=n.sliceDoc(i,s):(c=n.sliceDoc(i,i+qi),f=n.sliceDoc(s-qi,s));let u=/^\s*/.exec(c)[0].length,d=/\s*$/.exec(f)[0].length,p=f.length-d-t.length;return c.slice(u,u+e.length)==e&&f.slice(p,p+t.length)==t?{open:{pos:i+u+e.length,margin:/\s/.test(c.charAt(u+e.length))?1:0},close:{pos:s-d-t.length,margin:/\s/.test(f.charAt(p-1))?1:0}}:null}function IO(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),s=t.to<=i.to?i:n.doc.lineAt(t.to);s.from>i.from&&s.from==t.to&&(s=t.to==i.to+1?i:n.doc.lineAt(t.to-1));let r=e.length-1;r>=0&&e[r].to>i.from?e[r].to=s.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:s.to})}return e}function Gf(n,e,t=e.selection.ranges){let i=t.map(r=>al(e,r.from).block);if(!i.every(r=>r))return null;let s=t.map((r,o)=>zO(e,i[o],r.from,r.to));if(n!=2&&!s.every(r=>r))return{changes:e.changes(t.map((r,o)=>s[o]?[]:[{from:r.from,insert:i[o].open+" "},{from:r.to,insert:" "+i[o].close}]))};if(n!=1&&s.some(r=>r)){let r=[];for(let o=0,l;os&&(r==o||o>f.from)){s=f.from;let u=/^\s*/.exec(f.text)[0].length,d=u==f.length,p=f.text.slice(u,u+h.length)==h?u:-1;ur.comment<0&&(!r.empty||r.single))){let r=[];for(let{line:l,token:a,indent:h,empty:c,single:f}of i)(f||!c)&&r.push({from:l.from+h,insert:a+" "});let o=e.changes(r);return{changes:o,selection:e.selection.map(o,1)}}else if(n!=1&&i.some(r=>r.comment>=0)){let r=[];for(let{line:o,comment:l,token:a}of i)if(l>=0){let h=o.from+l,c=h+a.length;o.text[c-o.from]==" "&&c++,r.push({from:h,to:c})}return{changes:r}}return null}const To=bt.define(),NO=bt.define(),FO=M.define(),Zf=M.define({combine(n){return ot(n,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,s)=>e(i,s)||t(i,s)})}}),Yf=ue.define({create(){return nt.empty},update(n,e){let t=e.state.facet(Zf),i=e.annotation(To);if(i){let a=Me.fromTransaction(e,i.selection),h=i.side,c=h==0?n.undone:n.done;return a?c=Ts(c,c.length,t.minDepth,a):c=eu(c,e.startState.selection),new nt(h==0?i.rest:c,h==0?c:i.rest)}let s=e.annotation(NO);if((s=="full"||s=="before")&&(n=n.isolate()),e.annotation(oe.addToHistory)===!1)return e.changes.empty?n:n.addMapping(e.changes.desc);let r=Me.fromTransaction(e),o=e.annotation(oe.time),l=e.annotation(oe.userEvent);return r?n=n.addChanges(r,o,l,t,e):e.selection&&(n=n.addSelection(e.startState.selection,o,l,t.newGroupDelay)),(s=="full"||s=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(e=>e.toJSON()),undone:n.undone.map(e=>e.toJSON())}},fromJSON(n){return new nt(n.done.map(Me.fromJSON),n.undone.map(Me.fromJSON))}});function XO(n={}){return[Yf,Zf.of(n),Q.domEventHandlers({beforeinput(e,t){let i=e.inputType=="historyUndo"?Kf:e.inputType=="historyRedo"?Co:null;return i?(e.preventDefault(),i(t)):!1}})]}function _s(n,e){return function({state:t,dispatch:i}){if(!e&&t.readOnly)return!1;let s=t.field(Yf,!1);if(!s)return!1;let r=s.pop(n,t,e);return r?(i(r),!0):!1}}const Kf=_s(0,!1),Co=_s(1,!1),_O=_s(0,!0),UO=_s(1,!0);class Me{constructor(e,t,i,s,r){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=s,this.selectionsAfter=r}setSelAfter(e){return new Me(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(s=>s.toJSON())}}static fromJSON(e){return new Me(e.changes&&ae.fromJSON(e.changes),[],e.mapped&&st.fromJSON(e.mapped),e.startSelection&&b.fromJSON(e.startSelection),e.selectionsAfter.map(b.fromJSON))}static fromTransaction(e,t){let i=ze;for(let s of e.startState.facet(FO)){let r=s(e);r.length&&(i=i.concat(r))}return!i.length&&e.changes.empty?null:new Me(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,ze)}static selection(e){return new Me(void 0,ze,void 0,void 0,e)}}function Ts(n,e,t,i){let s=e+1>t+20?e-t-1:0,r=n.slice(s,e);return r.push(i),r}function HO(n,e){let t=[],i=!1;return n.iterChangedRanges((s,r)=>t.push(s,r)),e.iterChangedRanges((s,r,o,l)=>{for(let a=0;a=h&&o<=c&&(i=!0)}}),i}function jO(n,e){return n.ranges.length==e.ranges.length&&n.ranges.filter((t,i)=>t.empty!=e.ranges[i].empty).length===0}function Jf(n,e){return n.length?e.length?n.concat(e):n:e}const ze=[],GO=200;function eu(n,e){if(n.length){let t=n[n.length-1],i=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-GO));return i.length&&i[i.length-1].eq(e)?n:(i.push(e),Ts(n,n.length-1,1e9,t.setSelAfter(i)))}else return[Me.selection([e])]}function ZO(n){let e=n[n.length-1],t=n.slice();return t[n.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function xr(n,e){if(!n.length)return n;let t=n.length,i=ze;for(;t;){let s=YO(n[t-1],e,i);if(s.changes&&!s.changes.empty||s.effects.length){let r=n.slice(0,t);return r[t-1]=s,r}else e=s.mapped,t--,i=s.selectionsAfter}return i.length?[Me.selection(i)]:ze}function YO(n,e,t){let i=Jf(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(e)):ze,t);if(!n.changes)return Me.selection(i);let s=n.changes.map(e),r=e.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(r):r;return new Me(s,L.mapEffects(n.effects,e),o,n.startSelection.map(r),i)}const KO=/^(input\.type|delete)($|\.)/;class nt{constructor(e,t,i=0,s=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=s}isolate(){return this.prevTime?new nt(this.done,this.undone):this}addChanges(e,t,i,s,r){let o=this.done,l=o[o.length-1];return l&&l.changes&&!l.changes.empty&&e.changes&&(!i||KO.test(i))&&(!l.selectionsAfter.length&&t-this.prevTime0&&t-this.prevTimet.empty?n.moveByChar(t,e):Us(t,e))}function xe(n){return n.textDirectionAt(n.state.selection.main.head)==Z.LTR}const iu=n=>tu(n,!xe(n)),nu=n=>tu(n,xe(n));function su(n,e){return Ue(n,t=>t.empty?n.moveByGroup(t,e):Us(t,e))}const e0=n=>su(n,!xe(n)),t0=n=>su(n,xe(n));function i0(n,e,t){if(e.type.prop(t))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(e.from,e.to)))||e.firstChild}function Hs(n,e,t){let i=fe(n).resolveInner(e.head),s=t?z.closedBy:z.openedBy;for(let a=e.head;;){let h=t?i.childAfter(a):i.childBefore(a);if(!h)break;i0(n,h,s)?i=h:a=t?h.to:h.from}let r=i.type.prop(s),o,l;return r&&(o=t?it(n,i.from,1):it(n,i.to,-1))&&o.matched?l=t?o.end.to:o.end.from:l=t?i.to:i.from,b.cursor(l,t?-1:1)}const n0=n=>Ue(n,e=>Hs(n.state,e,!xe(n))),s0=n=>Ue(n,e=>Hs(n.state,e,xe(n)));function ru(n,e){return Ue(n,t=>{if(!t.empty)return Us(t,e);let i=n.moveVertically(t,e);return i.head!=t.head?i:n.moveToLineBoundary(t,e)})}const ou=n=>ru(n,!1),lu=n=>ru(n,!0);function au(n){let e=n.scrollDOM.clientHeighto.empty?n.moveVertically(o,e,t.height):Us(o,e));if(s.eq(i.selection))return!1;let r;if(t.selfScroll){let o=n.coordsAtPos(i.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),a=l.top+t.marginTop,h=l.bottom-t.marginBottom;o&&o.top>a&&o.bottomhu(n,!1),Po=n=>hu(n,!0);function qt(n,e,t){let i=n.lineBlockAt(e.head),s=n.moveToLineBoundary(e,t);if(s.head==e.head&&s.head!=(t?i.to:i.from)&&(s=n.moveToLineBoundary(e,t,!1)),!t&&s.head==i.from&&i.length){let r=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;r&&e.head!=i.from+r&&(s=b.cursor(i.from+r))}return s}const r0=n=>Ue(n,e=>qt(n,e,!0)),o0=n=>Ue(n,e=>qt(n,e,!1)),l0=n=>Ue(n,e=>qt(n,e,!xe(n))),a0=n=>Ue(n,e=>qt(n,e,xe(n))),h0=n=>Ue(n,e=>b.cursor(n.lineBlockAt(e.head).from,1)),c0=n=>Ue(n,e=>b.cursor(n.lineBlockAt(e.head).to,-1));function f0(n,e,t){let i=!1,s=Ci(n.selection,r=>{let o=it(n,r.head,-1)||it(n,r.head,1)||r.head>0&&it(n,r.head-1,1)||r.headf0(n,e);function Fe(n,e){let t=Ci(n.state.selection,i=>{let s=e(i);return b.range(i.anchor,s.head,s.goalColumn,s.bidiLevel||void 0)});return t.eq(n.state.selection)?!1:(n.dispatch(lt(n.state,t)),!0)}function cu(n,e){return Fe(n,t=>n.moveByChar(t,e))}const fu=n=>cu(n,!xe(n)),uu=n=>cu(n,xe(n));function du(n,e){return Fe(n,t=>n.moveByGroup(t,e))}const d0=n=>du(n,!xe(n)),p0=n=>du(n,xe(n)),m0=n=>Fe(n,e=>Hs(n.state,e,!xe(n))),g0=n=>Fe(n,e=>Hs(n.state,e,xe(n)));function pu(n,e){return Fe(n,t=>n.moveVertically(t,e))}const mu=n=>pu(n,!1),gu=n=>pu(n,!0);function Ou(n,e){return Fe(n,t=>n.moveVertically(t,e,au(n).height))}const Ya=n=>Ou(n,!1),Ka=n=>Ou(n,!0),O0=n=>Fe(n,e=>qt(n,e,!0)),y0=n=>Fe(n,e=>qt(n,e,!1)),b0=n=>Fe(n,e=>qt(n,e,!xe(n))),x0=n=>Fe(n,e=>qt(n,e,xe(n))),S0=n=>Fe(n,e=>b.cursor(n.lineBlockAt(e.head).from)),k0=n=>Fe(n,e=>b.cursor(n.lineBlockAt(e.head).to)),Ja=({state:n,dispatch:e})=>(e(lt(n,{anchor:0})),!0),eh=({state:n,dispatch:e})=>(e(lt(n,{anchor:n.doc.length})),!0),th=({state:n,dispatch:e})=>(e(lt(n,{anchor:n.selection.main.anchor,head:0})),!0),ih=({state:n,dispatch:e})=>(e(lt(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),w0=({state:n,dispatch:e})=>(e(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),v0=({state:n,dispatch:e})=>{let t=js(n).map(({from:i,to:s})=>b.range(i,Math.min(s+1,n.doc.length)));return e(n.update({selection:b.create(t),userEvent:"select"})),!0},T0=({state:n,dispatch:e})=>{let t=Ci(n.selection,i=>{let s=fe(n),r=s.resolveStack(i.from,1);if(i.empty){let o=s.resolveStack(i.from,-1);o.node.from>=r.node.from&&o.node.to<=r.node.to&&(r=o)}for(let o=r;o;o=o.next){let{node:l}=o;if((l.from=i.to||l.to>i.to&&l.from<=i.from)&&o.next)return b.range(l.to,l.from)}return i});return t.eq(n.selection)?!1:(e(lt(n,t)),!0)},C0=({state:n,dispatch:e})=>{let t=n.selection,i=null;return t.ranges.length>1?i=b.create([t.main]):t.main.empty||(i=b.create([b.cursor(t.main.head)])),i?(e(lt(n,i)),!0):!1};function yn(n,e){if(n.state.readOnly)return!1;let t="delete.selection",{state:i}=n,s=i.changeByRange(r=>{let{from:o,to:l}=r;if(o==l){let a=e(r);ao&&(t="delete.forward",a=Fn(n,a,!0)),o=Math.min(o,a),l=Math.max(l,a)}else o=Fn(n,o,!1),l=Fn(n,l,!0);return o==l?{range:r}:{changes:{from:o,to:l},range:b.cursor(o,os(n)))i.between(e,e,(s,r)=>{se&&(e=t?r:s)});return e}const yu=(n,e,t)=>yn(n,i=>{let s=i.from,{state:r}=n,o=r.doc.lineAt(s),l,a;if(t&&!e&&s>o.from&&syu(n,!1,!0),bu=n=>yu(n,!0,!1),xu=(n,e)=>yn(n,t=>{let i=t.head,{state:s}=n,r=s.doc.lineAt(i),o=s.charCategorizer(i);for(let l=null;;){if(i==(e?r.to:r.from)){i==t.head&&r.number!=(e?s.doc.lines:1)&&(i+=e?1:-1);break}let a=Oe(r.text,i-r.from,e)+r.from,h=r.text.slice(Math.min(i,a)-r.from,Math.max(i,a)-r.from),c=o(h);if(l!=null&&c!=l)break;(h!=" "||i!=t.head)&&(l=c),i=a}return i}),Su=n=>xu(n,!1),P0=n=>xu(n,!0),Q0=n=>yn(n,e=>{let t=n.lineBlockAt(e.head).to;return e.headyn(n,e=>{let t=n.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),M0=n=>yn(n,e=>{let t=n.moveToLineBoundary(e,!0).head;return e.head{if(n.readOnly)return!1;let t=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:V.of(["",""])},range:b.cursor(i.from)}));return e(n.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},D0=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let s=i.from,r=n.doc.lineAt(s),o=s==r.from?s-1:Oe(r.text,s-r.from,!1)+r.from,l=s==r.to?s+1:Oe(r.text,s-r.from,!0)+r.from;return{changes:{from:o,to:l,insert:n.doc.slice(s,l).append(n.doc.slice(o,s))},range:b.cursor(l)}});return t.changes.empty?!1:(e(n.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function js(n){let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.from),r=n.doc.lineAt(i.to);if(!i.empty&&i.to==r.from&&(r=n.doc.lineAt(i.to-1)),t>=s.number){let o=e[e.length-1];o.to=r.to,o.ranges.push(i)}else e.push({from:s.from,to:r.to,ranges:[i]});t=r.number+1}return e}function ku(n,e,t){if(n.readOnly)return!1;let i=[],s=[];for(let r of js(n)){if(t?r.to==n.doc.length:r.from==0)continue;let o=n.doc.lineAt(t?r.to+1:r.from-1),l=o.length+1;if(t){i.push({from:r.to,to:o.to},{from:r.from,insert:o.text+n.lineBreak});for(let a of r.ranges)s.push(b.range(Math.min(n.doc.length,a.anchor+l),Math.min(n.doc.length,a.head+l)))}else{i.push({from:o.from,to:r.from},{from:r.to,insert:n.lineBreak+o.text});for(let a of r.ranges)s.push(b.range(a.anchor-l,a.head-l))}}return i.length?(e(n.update({changes:i,scrollIntoView:!0,selection:b.create(s,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}const E0=({state:n,dispatch:e})=>ku(n,e,!1),q0=({state:n,dispatch:e})=>ku(n,e,!0);function wu(n,e,t){if(n.readOnly)return!1;let i=[];for(let s of js(n))t?i.push({from:s.from,insert:n.doc.slice(s.from,s.to)+n.lineBreak}):i.push({from:s.to,insert:n.lineBreak+n.doc.slice(s.from,s.to)});return e(n.update({changes:i,scrollIntoView:!0,userEvent:"input.copyline"})),!0}const $0=({state:n,dispatch:e})=>wu(n,e,!1),B0=({state:n,dispatch:e})=>wu(n,e,!0),L0=n=>{if(n.state.readOnly)return!1;let{state:e}=n,t=e.changes(js(e).map(({from:s,to:r})=>(s>0?s--:r{let r;if(n.lineWrapping){let o=n.lineBlockAt(s.head),l=n.coordsAtPos(s.head,s.assoc||1);l&&(r=o.bottom+n.documentTop-l.bottom+n.defaultLineHeight/2)}return n.moveVertically(s,!0,r)}).map(t);return n.dispatch({changes:t,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function W0(n,e){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=fe(n).resolveInner(e),i=t.childBefore(e),s=t.childAfter(e),r;return i&&s&&i.to<=e&&s.from>=e&&(r=i.type.prop(z.closedBy))&&r.indexOf(s.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(s.from).from&&!/\S/.test(n.sliceDoc(i.to,s.from))?{from:i.to,to:s.from}:null}const nh=vu(!1),z0=vu(!0);function vu(n){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange(s=>{let{from:r,to:o}=s,l=e.doc.lineAt(r),a=!n&&r==o&&W0(e,r);n&&(r=o=(o<=l.to?l:e.doc.lineAt(o)).to);let h=new Fs(e,{simulateBreak:r,simulateDoubleBreak:!!a}),c=il(h,r);for(c==null&&(c=Ti(/^\s*/.exec(e.doc.lineAt(r).text)[0],e.tabSize));ol.from&&r{let s=[];for(let o=i.from;o<=i.to;){let l=n.doc.lineAt(o);l.number>t&&(i.empty||i.to>l.from)&&(e(l,s,i),t=l.number),o=l.to+1}let r=n.changes(s);return{changes:s,range:b.range(r.mapPos(i.anchor,1),r.mapPos(i.head,1))}})}const I0=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=Object.create(null),i=new Fs(n,{overrideIndentation:r=>{let o=t[r];return o??-1}}),s=hl(n,(r,o,l)=>{let a=il(i,r.from);if(a==null)return;/\S/.test(r.text)||(a=0);let h=/^\s*/.exec(r.text)[0],c=sn(n,a);(h!=c||l.fromn.readOnly?!1:(e(n.update(hl(n,(t,i)=>{i.push({from:t.from,insert:n.facet(Ns)})}),{userEvent:"input.indent"})),!0),N0=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(hl(n,(t,i)=>{let s=/^\s*/.exec(t.text)[0];if(!s)return;let r=Ti(s,n.tabSize),o=0,l=sn(n,Math.max(0,r-Yt(n)));for(;o(n.setTabFocusMode(),!0),X0=[{key:"Ctrl-b",run:iu,shift:fu,preventDefault:!0},{key:"Ctrl-f",run:nu,shift:uu},{key:"Ctrl-p",run:ou,shift:mu},{key:"Ctrl-n",run:lu,shift:gu},{key:"Ctrl-a",run:h0,shift:S0},{key:"Ctrl-e",run:c0,shift:k0},{key:"Ctrl-d",run:bu},{key:"Ctrl-h",run:Qo},{key:"Ctrl-k",run:Q0},{key:"Ctrl-Alt-h",run:Su},{key:"Ctrl-o",run:R0},{key:"Ctrl-t",run:D0},{key:"Ctrl-v",run:Po}],_0=[{key:"ArrowLeft",run:iu,shift:fu,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:e0,shift:d0,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:l0,shift:b0,preventDefault:!0},{key:"ArrowRight",run:nu,shift:uu,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:t0,shift:p0,preventDefault:!0},{mac:"Cmd-ArrowRight",run:a0,shift:x0,preventDefault:!0},{key:"ArrowUp",run:ou,shift:mu,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Ja,shift:th},{mac:"Ctrl-ArrowUp",run:Za,shift:Ya},{key:"ArrowDown",run:lu,shift:gu,preventDefault:!0},{mac:"Cmd-ArrowDown",run:eh,shift:ih},{mac:"Ctrl-ArrowDown",run:Po,shift:Ka},{key:"PageUp",run:Za,shift:Ya},{key:"PageDown",run:Po,shift:Ka},{key:"Home",run:o0,shift:y0,preventDefault:!0},{key:"Mod-Home",run:Ja,shift:th},{key:"End",run:r0,shift:O0,preventDefault:!0},{key:"Mod-End",run:eh,shift:ih},{key:"Enter",run:nh,shift:nh},{key:"Mod-a",run:w0},{key:"Backspace",run:Qo,shift:Qo},{key:"Delete",run:bu},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Su},{key:"Mod-Delete",mac:"Alt-Delete",run:P0},{mac:"Mod-Backspace",run:A0},{mac:"Mod-Delete",run:M0}].concat(X0.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),U0=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:n0,shift:m0},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:s0,shift:g0},{key:"Alt-ArrowUp",run:E0},{key:"Shift-Alt-ArrowUp",run:$0},{key:"Alt-ArrowDown",run:q0},{key:"Shift-Alt-ArrowDown",run:B0},{key:"Escape",run:C0},{key:"Mod-Enter",run:z0},{key:"Alt-l",mac:"Ctrl-l",run:v0},{key:"Mod-i",run:T0,preventDefault:!0},{key:"Mod-[",run:N0},{key:"Mod-]",run:V0},{key:"Mod-Alt-\\",run:I0},{key:"Shift-Mod-k",run:L0},{key:"Shift-Mod-\\",run:u0},{key:"Mod-/",run:$O},{key:"Alt-A",run:LO},{key:"Ctrl-m",mac:"Shift-Alt-m",run:F0}].concat(_0);function de(){var n=arguments[0];typeof n=="string"&&(n=document.createElement(n));var e=1,t=arguments[1];if(t&&typeof t=="object"&&t.nodeType==null&&!Array.isArray(t)){for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){var s=t[i];typeof s=="string"?n.setAttribute(i,s):s!=null&&(n[i]=s)}e++}for(;en.normalize("NFKD"):n=>n;class ki{constructor(e,t,i=0,s=e.length,r,o){this.test=o,this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,s),this.bufferStart=i,this.normalize=r?l=>r(sh(l)):sh,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return Ce(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=Bo(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=Ke(e);let s=this.normalize(t);if(s.length)for(let r=0,o=i;;r++){let l=s.charCodeAt(r),a=this.match(l,o,this.bufferPos+this.bufferStart);if(r==s.length-1){if(a)return this.value=a,this;break}o==i&&rthis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let i=this.curLineStart+t.index,s=i+t[0].length;if(this.matchPos=Cs(this.text,s+(i==s?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,match:t},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=i||s.to<=t){let l=new fi(t,e.sliceString(t,i));return Sr.set(e,l),l}if(s.from==t&&s.to==i)return s;let{text:r,from:o}=s;return o>t&&(r=e.sliceString(t,o)+r,o=t),s.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let i=this.flat.from+t.index,s=i+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,match:t},this.matchPos=Cs(this.text,s+(i==s?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=fi.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}}typeof Symbol<"u"&&(Pu.prototype[Symbol.iterator]=Qu.prototype[Symbol.iterator]=function(){return this});function H0(n){try{return new RegExp(n,cl),!0}catch{return!1}}function Cs(n,e){if(e>=n.length)return e;let t=n.lineAt(e),i;for(;e=56320&&i<57344;)e++;return e}function Ao(n){let e=String(n.state.doc.lineAt(n.state.selection.main.head).number),t=de("input",{class:"cm-textfield",name:"line",value:e}),i=de("form",{class:"cm-gotoLine",onkeydown:r=>{r.keyCode==27?(r.preventDefault(),n.dispatch({effects:Ui.of(!1)}),n.focus()):r.keyCode==13&&(r.preventDefault(),s())},onsubmit:r=>{r.preventDefault(),s()}},de("label",n.state.phrase("Go to line"),": ",t)," ",de("button",{class:"cm-button",type:"submit"},n.state.phrase("go")),de("button",{name:"close",onclick:()=>{n.dispatch({effects:Ui.of(!1)}),n.focus()},"aria-label":n.state.phrase("close"),type:"button"},["×"]));function s(){let r=/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(t.value);if(!r)return;let{state:o}=n,l=o.doc.lineAt(o.selection.main.head),[,a,h,c,f]=r,u=c?+c.slice(1):0,d=h?+h:l.number;if(h&&f){let g=d/100;a&&(g=g*(a=="-"?-1:1)+l.number/o.doc.lines),d=Math.round(o.doc.lines*g)}else h&&a&&(d=d*(a=="-"?-1:1)+l.number);let p=o.doc.line(Math.max(1,Math.min(o.doc.lines,d))),m=b.cursor(p.from+Math.max(0,Math.min(u,p.length)));n.dispatch({effects:[Ui.of(!1),Q.scrollIntoView(m.from,{y:"center"})],selection:m}),n.focus()}return{dom:i}}const Ui=L.define(),rh=ue.define({create(){return!0},update(n,e){for(let t of e.effects)t.is(Ui)&&(n=t.value);return n},provide:n=>tn.from(n,e=>e?Ao:null)}),j0=n=>{let e=en(n,Ao);if(!e){let t=[Ui.of(!0)];n.state.field(rh,!1)==null&&t.push(L.appendConfig.of([rh,G0])),n.dispatch({effects:t}),e=en(n,Ao)}return e&&e.dom.querySelector("input").select(),!0},G0=Q.baseTheme({".cm-panel.cm-gotoLine":{padding:"2px 6px 4px",position:"relative","& label":{fontSize:"80%"},"& [name=close]":{position:"absolute",top:"0",bottom:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:"0"}}}),Z0={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},Y0=M.define({combine(n){return ot(n,Z0,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})}});function K0(n){return[ny,iy]}const J0=D.mark({class:"cm-selectionMatch"}),ey=D.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function oh(n,e,t,i){return(t==0||n(e.sliceDoc(t-1,t))!=Y.Word)&&(i==e.doc.length||n(e.sliceDoc(i,i+1))!=Y.Word)}function ty(n,e,t,i){return n(e.sliceDoc(t,t+1))==Y.Word&&n(e.sliceDoc(i-1,i))==Y.Word}const iy=le.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.selectionSet||n.docChanged||n.viewportChanged)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=n.state.facet(Y0),{state:t}=n,i=t.selection;if(i.ranges.length>1)return D.none;let s=i.main,r,o=null;if(s.empty){if(!e.highlightWordAroundCursor)return D.none;let a=t.wordAt(s.head);if(!a)return D.none;o=t.charCategorizer(s.head),r=t.sliceDoc(a.from,a.to)}else{let a=s.to-s.from;if(a200)return D.none;if(e.wholeWords){if(r=t.sliceDoc(s.from,s.to),o=t.charCategorizer(s.head),!(oh(o,t,s.from,s.to)&&ty(o,t,s.from,s.to)))return D.none}else if(r=t.sliceDoc(s.from,s.to),!r)return D.none}let l=[];for(let a of n.visibleRanges){let h=new ki(t.doc,r,a.from,a.to);for(;!h.next().done;){let{from:c,to:f}=h.value;if((!o||oh(o,t,c,f))&&(s.empty&&c<=s.from&&f>=s.to?l.push(ey.range(c,f)):(c>=s.to||f<=s.from)&&l.push(J0.range(c,f)),l.length>e.maxMatches))return D.none}}return D.set(l)}},{decorations:n=>n.decorations}),ny=Q.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),sy=({state:n,dispatch:e})=>{let{selection:t}=n,i=b.create(t.ranges.map(s=>n.wordAt(s.head)||b.cursor(s.head)),t.mainIndex);return i.eq(t)?!1:(e(n.update({selection:i})),!0)};function ry(n,e){let{main:t,ranges:i}=n.selection,s=n.wordAt(t.head),r=s&&s.from==t.from&&s.to==t.to;for(let o=!1,l=new ki(n.doc,e,i[i.length-1].to);;)if(l.next(),l.done){if(o)return null;l=new ki(n.doc,e,0,Math.max(0,i[i.length-1].from-1)),o=!0}else{if(o&&i.some(a=>a.from==l.value.from))continue;if(r){let a=n.wordAt(l.value.from);if(!a||a.from!=l.value.from||a.to!=l.value.to)continue}return l.value}}const oy=({state:n,dispatch:e})=>{let{ranges:t}=n.selection;if(t.some(r=>r.from===r.to))return sy({state:n,dispatch:e});let i=n.sliceDoc(t[0].from,t[0].to);if(n.selection.ranges.some(r=>n.sliceDoc(r.from,r.to)!=i))return!1;let s=ry(n,i);return s?(e(n.update({selection:n.selection.addRange(b.range(s.from,s.to),!1),effects:Q.scrollIntoView(s.to)})),!0):!1},Pi=M.define({combine(n){return ot(n,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new yy(e),scrollToMatch:e=>Q.scrollIntoView(e)})}});class Au{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||H0(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(t,i)=>i=="n"?` +`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord}create(){return this.regexp?new cy(this):new ay(this)}getCursor(e,t=0,i){let s=e.doc?e:I.create({doc:e});return i==null&&(i=s.doc.length),this.regexp?si(this,s,t,i):ni(this,s,t,i)}}class Mu{constructor(e){this.spec=e}}function ni(n,e,t,i){return new ki(e.doc,n.unquoted,t,i,n.caseSensitive?void 0:s=>s.toLowerCase(),n.wholeWord?ly(e.doc,e.charCategorizer(e.selection.main.head)):void 0)}function ly(n,e){return(t,i,s,r)=>((r>t||r+s.length=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=ni(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}function si(n,e,t,i){return new Pu(e.doc,n.search,{ignoreCase:!n.caseSensitive,test:n.wholeWord?hy(e.charCategorizer(e.selection.main.head)):void 0},t,i)}function Ps(n,e){return n.slice(Oe(n,e,!1),e)}function Qs(n,e){return n.slice(e,Oe(n,e))}function hy(n){return(e,t,i)=>!i[0].length||(n(Ps(i.input,i.index))!=Y.Word||n(Qs(i.input,i.index))!=Y.Word)&&(n(Qs(i.input,i.index+i[0].length))!=Y.Word||n(Ps(i.input,i.index+i[0].length))!=Y.Word)}class cy extends Mu{nextMatch(e,t,i){let s=si(this.spec,e,i,e.doc.length).next();return s.done&&(s=si(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let r=Math.max(t,i-s*1e4),o=si(this.spec,e,r,i),l=null;for(;!o.next().done;)l=o.value;if(l&&(r==t||l.from>r+10))return l;if(r==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(t,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let s=i.length;s>0;s--){let r=+i.slice(0,s);if(r>0&&r=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=si(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}const on=L.define(),fl=L.define(),Qt=ue.define({create(n){return new kr(Mo(n).create(),null)},update(n,e){for(let t of e.effects)t.is(on)?n=new kr(t.value.create(),n.panel):t.is(fl)&&(n=new kr(n.query,t.value?ul:null));return n},provide:n=>tn.from(n,e=>e.panel)});class kr{constructor(e,t){this.query=e,this.panel=t}}const fy=D.mark({class:"cm-searchMatch"}),uy=D.mark({class:"cm-searchMatch cm-searchMatch-selected"}),dy=le.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(Qt))}update(n){let e=n.state.field(Qt);(e!=n.startState.field(Qt)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return D.none;let{view:t}=this,i=new gt;for(let s=0,r=t.visibleRanges,o=r.length;sr[s+1].from-500;)a=r[++s].to;n.highlight(t.state,l,a,(h,c)=>{let f=t.state.selection.ranges.some(u=>u.from==h&&u.to==c);i.add(h,c,f?uy:fy)})}return i.finish()}},{decorations:n=>n.decorations});function bn(n){return e=>{let t=e.state.field(Qt,!1);return t&&t.query.spec.valid?n(e,t):Eu(e)}}const As=bn((n,{query:e})=>{let{to:t}=n.state.selection.main,i=e.nextMatch(n.state,t,t);if(!i)return!1;let s=b.single(i.from,i.to),r=n.state.facet(Pi);return n.dispatch({selection:s,effects:[dl(n,i),r.scrollToMatch(s.main,n)],userEvent:"select.search"}),Du(n),!0}),Ms=bn((n,{query:e})=>{let{state:t}=n,{from:i}=t.selection.main,s=e.prevMatch(t,i,i);if(!s)return!1;let r=b.single(s.from,s.to),o=n.state.facet(Pi);return n.dispatch({selection:r,effects:[dl(n,s),o.scrollToMatch(r.main,n)],userEvent:"select.search"}),Du(n),!0}),py=bn((n,{query:e})=>{let t=e.matchAll(n.state,1e3);return!t||!t.length?!1:(n.dispatch({selection:b.create(t.map(i=>b.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),my=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:s}=t.main,r=[],o=0;for(let l=new ki(n.doc,n.sliceDoc(i,s));!l.next().done;){if(r.length>1e3)return!1;l.value.from==i&&(o=r.length),r.push(b.range(l.value.from,l.value.to))}return e(n.update({selection:b.create(r,o),userEvent:"select.search.matches"})),!0},lh=bn((n,{query:e})=>{let{state:t}=n,{from:i,to:s}=t.selection.main;if(t.readOnly)return!1;let r=e.nextMatch(t,i,i);if(!r)return!1;let o=r,l=[],a,h,c=[];o.from==i&&o.to==s&&(h=t.toText(e.getReplacement(o)),l.push({from:o.from,to:o.to,insert:h}),o=e.nextMatch(t,o.from,o.to),c.push(Q.announce.of(t.phrase("replaced match on line $",t.doc.lineAt(i).number)+".")));let f=n.state.changes(l);return o&&(a=b.single(o.from,o.to).map(f),c.push(dl(n,o)),c.push(t.facet(Pi).scrollToMatch(a.main,n))),n.dispatch({changes:f,selection:a,effects:c,userEvent:"input.replace"}),!0}),gy=bn((n,{query:e})=>{if(n.state.readOnly)return!1;let t=e.matchAll(n.state,1e9).map(s=>{let{from:r,to:o}=s;return{from:r,to:o,insert:e.getReplacement(s)}});if(!t.length)return!1;let i=n.state.phrase("replaced $ matches",t.length)+".";return n.dispatch({changes:t,effects:Q.announce.of(i),userEvent:"input.replace.all"}),!0});function ul(n){return n.state.facet(Pi).createPanel(n)}function Mo(n,e){var t,i,s,r,o;let l=n.selection.main,a=l.empty||l.to>l.from+100?"":n.sliceDoc(l.from,l.to);if(e&&!a)return e;let h=n.facet(Pi);return new Au({search:((t=e?.literal)!==null&&t!==void 0?t:h.literal)?a:a.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:h.caseSensitive,literal:(s=e?.literal)!==null&&s!==void 0?s:h.literal,regexp:(r=e?.regexp)!==null&&r!==void 0?r:h.regexp,wholeWord:(o=e?.wholeWord)!==null&&o!==void 0?o:h.wholeWord})}function Ru(n){let e=en(n,ul);return e&&e.dom.querySelector("[main-field]")}function Du(n){let e=Ru(n);e&&e==n.root.activeElement&&e.select()}const Eu=n=>{let e=n.state.field(Qt,!1);if(e&&e.panel){let t=Ru(n);if(t&&t!=n.root.activeElement){let i=Mo(n.state,e.query.spec);i.valid&&n.dispatch({effects:on.of(i)}),t.focus(),t.select()}}else n.dispatch({effects:[fl.of(!0),e?on.of(Mo(n.state,e.query.spec)):L.appendConfig.of(xy)]});return!0},qu=n=>{let e=n.state.field(Qt,!1);if(!e||!e.panel)return!1;let t=en(n,ul);return t&&t.dom.contains(n.root.activeElement)&&n.focus(),n.dispatch({effects:fl.of(!1)}),!0},Oy=[{key:"Mod-f",run:Eu,scope:"editor search-panel"},{key:"F3",run:As,shift:Ms,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:As,shift:Ms,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:qu,scope:"editor search-panel"},{key:"Mod-Shift-l",run:my},{key:"Mod-Alt-g",run:j0},{key:"Mod-d",run:oy,preventDefault:!0}];class yy{constructor(e){this.view=e;let t=this.query=e.state.field(Qt).query.spec;this.commit=this.commit.bind(this),this.searchField=de("input",{value:t.search,placeholder:De(e,"Find"),"aria-label":De(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=de("input",{value:t.replace,placeholder:De(e,"Replace"),"aria-label":De(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=de("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=de("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=de("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit});function i(s,r,o){return de("button",{class:"cm-button",name:s,onclick:r,type:"button"},o)}this.dom=de("div",{onkeydown:s=>this.keydown(s),class:"cm-search"},[this.searchField,i("next",()=>As(e),[De(e,"next")]),i("prev",()=>Ms(e),[De(e,"previous")]),i("select",()=>py(e),[De(e,"all")]),de("label",null,[this.caseField,De(e,"match case")]),de("label",null,[this.reField,De(e,"regexp")]),de("label",null,[this.wordField,De(e,"by word")]),...e.state.readOnly?[]:[de("br"),this.replaceField,i("replace",()=>lh(e),[De(e,"replace")]),i("replaceAll",()=>gy(e),[De(e,"replace all")])],de("button",{name:"close",onclick:()=>qu(e),"aria-label":De(e,"close"),type:"button"},["×"])])}commit(){let e=new Au({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:on.of(e)}))}keydown(e){wm(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?Ms:As)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),lh(this.view))}update(e){for(let t of e.transactions)for(let i of t.effects)i.is(on)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(Pi).top}}function De(n,e){return n.state.phrase(e)}const Xn=30,_n=/[\s\.,:;?!]/;function dl(n,{from:e,to:t}){let i=n.state.doc.lineAt(e),s=n.state.doc.lineAt(t).to,r=Math.max(i.from,e-Xn),o=Math.min(s,t+Xn),l=n.state.sliceDoc(r,o);if(r!=i.from){for(let a=0;al.length-Xn;a--)if(!_n.test(l[a-1])&&_n.test(l[a])){l=l.slice(0,a);break}}return Q.announce.of(`${n.state.phrase("current match")}. ${l} ${n.state.phrase("on line")} ${i.number}.`)}const by=Q.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),xy=[Qt,Et.low(dy),by];class $u{constructor(e,t,i,s){this.state=e,this.pos=t,this.explicit=i,this.view=s,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=fe(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),i=Math.max(t.from,this.pos-250),s=t.text.slice(i-t.from,this.pos-t.from),r=s.search(Lu(e,!1));return r<0?null:{from:i+r,to:this.pos,text:s.slice(r)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,i){e=="abort"&&this.abortListeners&&(this.abortListeners.push(t),i&&i.onDocChange&&(this.abortOnDocChange=!0))}}function ah(n){let e=Object.keys(n).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function Sy(n){let e=Object.create(null),t=Object.create(null);for(let{label:s}of n){e[s[0]]=!0;for(let r=1;rtypeof s=="string"?{label:s}:s),[t,i]=e.every(s=>/^\w+$/.test(s.label))?[/\w*$/,/\w+$/]:Sy(e);return s=>{let r=s.matchBefore(i);return r||s.explicit?{from:r?r.from:s.pos,options:e,validFor:t}:null}}function ky(n,e){return t=>{for(let i=fe(t.state).resolveInner(t.pos,-1);i;i=i.parent){if(n.indexOf(i.name)>-1)return null;if(i.type.isTop)break}return e(t)}}class hh{constructor(e,t,i,s){this.completion=e,this.source=t,this.match=i,this.score=s}}function Ut(n){return n.selection.main.from}function Lu(n,e){var t;let{source:i}=n,s=e&&i[0]!="^",r=i[i.length-1]!="$";return!s&&!r?n:new RegExp(`${s?"^":""}(?:${i})${r?"$":""}`,(t=n.flags)!==null&&t!==void 0?t:n.ignoreCase?"i":"")}const pl=bt.define();function wy(n,e,t,i){let{main:s}=n.selection,r=t-s.from,o=i-s.from;return{...n.changeByRange(l=>{if(l!=s&&t!=i&&n.sliceDoc(l.from+r,l.from+o)!=n.sliceDoc(t,i))return{range:l};let a=n.toText(e);return{changes:{from:l.from+r,to:i==s.from?l.to:l.from+o,insert:a},range:b.cursor(l.from+r+a.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}const ch=new WeakMap;function vy(n){if(!Array.isArray(n))return n;let e=ch.get(n);return e||ch.set(n,e=Bu(n)),e}const Rs=L.define(),ln=L.define();class Ty{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&x<=57||x>=97&&x<=122?2:x>=65&&x<=90?1:0:(w=Bo(x))!=w.toLowerCase()?1:w!=w.toUpperCase()?2:0;(!S||T==1&&g||v==0&&T!=0)&&(t[f]==x||i[f]==x&&(u=!0)?o[f++]=S:o.length&&(y=!1)),v=T,S+=Ke(x)}return f==a&&o[0]==0&&y?this.result(-100+(u?-200:0),o,e):d==a&&p==0?this.ret(-200-e.length+(m==e.length?0:-100),[0,m]):l>-1?this.ret(-700-e.length,[l,l+this.pattern.length]):d==a?this.ret(-900-e.length,[p,m]):f==a?this.result(-100+(u?-200:0)+-700+(y?0:-1100),o,e):t.length==2?null:this.result((s[0]?-700:0)+-200+-1100,s,e)}result(e,t,i){let s=[],r=0;for(let o of t){let l=o+(this.astral?Ke(Ce(i,o)):1);r&&s[r-1]==o?s[r-1]=l:(s[r++]=o,s[r++]=l)}return this.ret(e-i.length,s)}}class Cy{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:Py,filterStrict:!1,compareCompletions:(e,t)=>e.label.localeCompare(t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>i=>fh(e(i),t(i)),optionClass:(e,t)=>i=>fh(e(i),t(i)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function fh(n,e){return n?e?n+" "+e:n:e}function Py(n,e,t,i,s,r){let o=n.textDirection==Z.RTL,l=o,a=!1,h="top",c,f,u=e.left-s.left,d=s.right-e.right,p=i.right-i.left,m=i.bottom-i.top;if(l&&u=m||S>e.top?c=t.bottom-e.top:(h="bottom",c=e.bottom-t.top)}let g=(e.bottom-e.top)/r.offsetHeight,y=(e.right-e.left)/r.offsetWidth;return{style:`${h}: ${c/g}px; max-width: ${f/y}px`,class:"cm-completionInfo-"+(a?o?"left-narrow":"right-narrow":l?"left":"right")}}function Qy(n){let e=n.addToOptions.slice();return n.icons&&e.push({render(t){let i=document.createElement("div");return i.classList.add("cm-completionIcon"),t.type&&i.classList.add(...t.type.split(/\s+/g).map(s=>"cm-completionIcon-"+s)),i.setAttribute("aria-hidden","true"),i},position:20}),e.push({render(t,i,s,r){let o=document.createElement("span");o.className="cm-completionLabel";let l=t.displayLabel||t.label,a=0;for(let h=0;ha&&o.appendChild(document.createTextNode(l.slice(a,c)));let u=o.appendChild(document.createElement("span"));u.appendChild(document.createTextNode(l.slice(c,f))),u.className="cm-completionMatchedText",a=f}return at.position-i.position).map(t=>t.render)}function wr(n,e,t){if(n<=t)return{from:0,to:n};if(e<0&&(e=0),e<=n>>1){let s=Math.floor(e/t);return{from:s*t,to:(s+1)*t}}let i=Math.floor((n-e)/t);return{from:n-(i+1)*t,to:n-i*t}}class Ay{constructor(e,t,i){this.view=e,this.stateField=t,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:a=>this.placeInfo(a),key:this},this.space=null,this.currentClass="";let s=e.state.field(t),{options:r,selected:o}=s.open,l=e.state.facet(ce);this.optionContent=Qy(l),this.optionClass=l.optionClass,this.tooltipClass=l.tooltipClass,this.range=wr(r.length,o,l.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",a=>{let{options:h}=e.state.field(t).open;for(let c=a.target,f;c&&c!=this.dom;c=c.parentNode)if(c.nodeName=="LI"&&(f=/-(\d+)$/.exec(c.id))&&+f[1]{let h=e.state.field(this.stateField,!1);h&&h.tooltip&&e.state.facet(ce).closeOnBlur&&a.relatedTarget!=e.contentDOM&&e.dispatch({effects:ln.of(null)})}),this.showOptions(r,s.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let i=e.state.field(this.stateField),s=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=s){let{options:r,selected:o,disabled:l}=i.open;(!s.open||s.open.options!=r)&&(this.range=wr(r.length,o,e.state.facet(ce).maxRenderedOptions),this.showOptions(r,i.id)),this.updateSel(),l!=((t=s.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!l)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let i of this.currentClass.split(" "))i&&this.dom.classList.remove(i);for(let i of t.split(" "))i&&this.dom.classList.add(i);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;if((t.selected>-1&&t.selected=this.range.to)&&(this.range=wr(t.options.length,t.selected,this.view.state.facet(ce).maxRenderedOptions),this.showOptions(t.options,e.id)),this.updateSelectedOption(t.selected)){this.destroyInfo();let{completion:i}=t.options[t.selected],{info:s}=i;if(!s)return;let r=typeof s=="string"?document.createTextNode(s):s(i);if(!r)return;"then"in r?r.then(o=>{o&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(o,i)}).catch(o=>Ae(this.view.state,o,"completion info")):this.addInfoPane(r,i)}}addInfoPane(e,t){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:s,destroy:r}=e;i.appendChild(s),this.infoDestroy=r||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let i=this.list.firstChild,s=this.range.from;i;i=i.nextSibling,s++)i.nodeName!="LI"||!i.id?s--:s==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),t=i):i.hasAttribute("aria-selected")&&i.removeAttribute("aria-selected");return t&&Ry(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),s=e.getBoundingClientRect(),r=this.space;if(!r){let o=this.dom.ownerDocument.documentElement;r={left:0,top:0,right:o.clientWidth,bottom:o.clientHeight}}return s.top>Math.min(r.bottom,t.bottom)-10||s.bottom{o.target==s&&o.preventDefault()});let r=null;for(let o=i.from;oi.from||i.from==0))if(r=u,typeof h!="string"&&h.header)s.appendChild(h.header(h));else{let d=s.appendChild(document.createElement("completion-section"));d.textContent=u}}const c=s.appendChild(document.createElement("li"));c.id=t+"-"+o,c.setAttribute("role","option");let f=this.optionClass(l);f&&(c.className=f);for(let u of this.optionContent){let d=u(l,this.view.state,this.view,a);d&&c.appendChild(d)}}return i.from&&s.classList.add("cm-completionListIncompleteTop"),i.tonew Ay(t,n,e)}function Ry(n,e){let t=n.getBoundingClientRect(),i=e.getBoundingClientRect(),s=t.height/n.offsetHeight;i.topt.bottom&&(n.scrollTop+=(i.bottom-t.bottom)/s)}function uh(n){return(n.boost||0)*100+(n.apply?10:0)+(n.info?5:0)+(n.type?1:0)}function Dy(n,e){let t=[],i=null,s=h=>{t.push(h);let{section:c}=h.completion;if(c){i||(i=[]);let f=typeof c=="string"?c:c.name;i.some(u=>u.name==f)||i.push(typeof c=="string"?{name:f}:c)}},r=e.facet(ce);for(let h of n)if(h.hasResult()){let c=h.result.getMatch;if(h.result.filter===!1)for(let f of h.result.options)s(new hh(f,h.source,c?c(f):[],1e9-t.length));else{let f=e.sliceDoc(h.from,h.to),u,d=r.filterStrict?new Cy(f):new Ty(f);for(let p of h.result.options)if(u=d.match(p.label)){let m=p.displayLabel?c?c(p,u.matched):[]:u.matched;s(new hh(p,h.source,m,u.score+(p.boost||0)))}}}if(i){let h=Object.create(null),c=0,f=(u,d)=>{var p,m;return((p=u.rank)!==null&&p!==void 0?p:1e9)-((m=d.rank)!==null&&m!==void 0?m:1e9)||(u.namef.score-c.score||a(c.completion,f.completion))){let c=h.completion;!l||l.label!=c.label||l.detail!=c.detail||l.type!=null&&c.type!=null&&l.type!=c.type||l.apply!=c.apply||l.boost!=c.boost?o.push(h):uh(h.completion)>uh(l)&&(o[o.length-1]=h),l=h.completion}return o}class li{constructor(e,t,i,s,r,o){this.options=e,this.attrs=t,this.tooltip=i,this.timestamp=s,this.selected=r,this.disabled=o}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new li(this.options,dh(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,i,s,r,o){if(s&&!o&&e.some(h=>h.isPending))return s.setDisabled();let l=Dy(e,t);if(!l.length)return s&&e.some(h=>h.isPending)?s.setDisabled():null;let a=t.facet(ce).selectOnOpen?0:-1;if(s&&s.selected!=a&&s.selected!=-1){let h=s.options[s.selected].completion;for(let c=0;cc.hasResult()?Math.min(h,c.from):h,1e8),create:Wy,above:r.aboveCursor},s?s.timestamp:Date.now(),a,!1)}map(e){return new li(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new li(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}}class Ds{constructor(e,t,i){this.active=e,this.id=t,this.open=i}static start(){return new Ds(By,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,i=t.facet(ce),r=(i.override||t.languageDataAt("autocomplete",Ut(t)).map(vy)).map(a=>(this.active.find(c=>c.source==a)||new Ie(a,this.active.some(c=>c.state!=0)?1:0)).update(e,i));r.length==this.active.length&&r.every((a,h)=>a==this.active[h])&&(r=this.active);let o=this.open,l=e.effects.some(a=>a.is(ml));o&&e.docChanged&&(o=o.map(e.changes)),e.selection||r.some(a=>a.hasResult()&&e.changes.touchesRange(a.from,a.to))||!Ey(r,this.active)||l?o=li.build(r,t,this.id,o,i,l):o&&o.disabled&&!r.some(a=>a.isPending)&&(o=null),!o&&r.every(a=>!a.isPending)&&r.some(a=>a.hasResult())&&(r=r.map(a=>a.hasResult()?new Ie(a.source,0):a));for(let a of e.effects)a.is(zu)&&(o=o&&o.setSelected(a.value,this.id));return r==this.active&&o==this.open?this:new Ds(r,this.id,o)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?qy:$y}}function Ey(n,e){if(n==e)return!0;for(let t=0,i=0;;){for(;t-1&&(t["aria-activedescendant"]=n+"-"+e),t}const By=[];function Wu(n,e){if(n.isUserEvent("input.complete")){let i=n.annotation(pl);if(i&&e.activateOnCompletion(i))return 12}let t=n.isUserEvent("input.type");return t&&e.activateOnTyping?5:t?1:n.isUserEvent("delete.backward")?2:n.selection?8:n.docChanged?16:0}class Ie{constructor(e,t,i=!1){this.source=e,this.state=t,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let i=Wu(e,t),s=this;(i&8||i&16&&this.touches(e))&&(s=new Ie(s.source,0)),i&4&&s.state==0&&(s=new Ie(this.source,1)),s=s.updateFor(e,i);for(let r of e.effects)if(r.is(Rs))s=new Ie(s.source,1,r.value);else if(r.is(ln))s=new Ie(s.source,0);else if(r.is(ml))for(let o of r.value)o.source==s.source&&(s=o);return s}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(Ut(e.state))}}class ui extends Ie{constructor(e,t,i,s,r,o){super(e,3,t),this.limit=i,this.result=s,this.from=r,this.to=o}hasResult(){return!0}updateFor(e,t){var i;if(!(t&3))return this.map(e.changes);let s=this.result;s.map&&!e.changes.empty&&(s=s.map(s,e.changes));let r=e.changes.mapPos(this.from),o=e.changes.mapPos(this.to,1),l=Ut(e.state);if(l>o||!s||t&2&&(Ut(e.startState)==this.from||lt.map(e))}}),zu=L.define(),Qe=ue.define({create(){return Ds.start()},update(n,e){return n.update(e)},provide:n=>[Yo.from(n,e=>e.tooltip),Q.contentAttributes.from(n,e=>e.attrs)]});function gl(n,e){const t=e.completion.apply||e.completion.label;let i=n.state.field(Qe).active.find(s=>s.source==e.source);return i instanceof ui?(typeof t=="string"?n.dispatch({...wy(n.state,t,i.from,i.to),annotations:pl.of(e.completion)}):t(n,e.completion,i.from,i.to),!0):!1}const Wy=My(Qe,gl);function Un(n,e="option"){return t=>{let i=t.state.field(Qe,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+s*(n?1:-1):n?0:o-1;return l<0?l=e=="page"?0:o-1:l>=o&&(l=e=="page"?o-1:0),t.dispatch({effects:zu.of(l)}),!0}}const zy=n=>{let e=n.state.field(Qe,!1);return n.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampn.state.field(Qe,!1)?(n.dispatch({effects:Rs.of(!0)}),!0):!1,Iy=n=>{let e=n.state.field(Qe,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(n.dispatch({effects:ln.of(null)}),!0)};class Vy{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}}const Ny=50,Fy=1e3,Xy=le.fromClass(class{constructor(n){this.view=n,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of n.state.field(Qe).active)e.isPending&&this.startQuery(e)}update(n){let e=n.state.field(Qe),t=n.state.facet(ce);if(!n.selectionSet&&!n.docChanged&&n.startState.field(Qe)==e)return;let i=n.transactions.some(r=>{let o=Wu(r,t);return o&8||(r.selection||r.docChanged)&&!(o&3)});for(let r=0;rNy&&Date.now()-o.time>Fy){for(let l of o.context.abortListeners)try{l()}catch(a){Ae(this.view.state,a)}o.context.abortListeners=null,this.running.splice(r--,1)}else o.updates.push(...n.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),n.transactions.some(r=>r.effects.some(o=>o.is(Rs)))&&(this.pendingStart=!0);let s=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(r=>r.isPending&&!this.running.some(o=>o.active.source==r.source))?setTimeout(()=>this.startUpdate(),s):-1,this.composing!=0)for(let r of n.transactions)r.isUserEvent("input.type")?this.composing=2:this.composing==2&&r.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:n}=this.view,e=n.field(Qe);for(let t of e.active)t.isPending&&!this.running.some(i=>i.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(ce).updateSyncTime))}startQuery(n){let{state:e}=this.view,t=Ut(e),i=new $u(e,t,n.explicit,this.view),s=new Vy(n,i);this.running.push(s),Promise.resolve(n.source(i)).then(r=>{s.context.aborted||(s.done=r||null,this.scheduleAccept())},r=>{this.view.dispatch({effects:ln.of(null)}),Ae(this.view.state,r)})}scheduleAccept(){this.running.every(n=>n.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(ce).updateSyncTime))}accept(){var n;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(ce),i=this.view.state.field(Qe);for(let s=0;sl.source==r.active.source);if(o&&o.isPending)if(r.done==null){let l=new Ie(r.active.source,0);for(let a of r.updates)l=l.update(a,t);l.isPending||e.push(l)}else this.startQuery(o)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:ml.of(e)})}},{eventHandlers:{blur(n){let e=this.view.state.field(Qe,!1);if(e&&e.tooltip&&this.view.state.facet(ce).closeOnBlur){let t=e.open&&mf(this.view,e.open.tooltip);(!t||!t.dom.contains(n.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:ln.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:Rs.of(!1)}),20),this.composing=0}}}),_y=typeof navigator=="object"&&/Win/.test(navigator.platform),Uy=Et.highest(Q.domEventHandlers({keydown(n,e){let t=e.state.field(Qe,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||n.key.length>1||n.ctrlKey&&!(_y&&n.altKey)||n.metaKey)return!1;let i=t.open.options[t.open.selected],s=t.active.find(o=>o.source==i.source),r=i.completion.commitCharacters||s.result.commitCharacters;return r&&r.indexOf(n.key)>-1&&gl(e,i),!1}})),Iu=Q.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'ƒ'"}},".cm-completionIcon-class":{"&:after":{content:"'○'"}},".cm-completionIcon-interface":{"&:after":{content:"'◌'"}},".cm-completionIcon-variable":{"&:after":{content:"'𝑥'"}},".cm-completionIcon-constant":{"&:after":{content:"'𝐶'"}},".cm-completionIcon-type":{"&:after":{content:"'𝑡'"}},".cm-completionIcon-enum":{"&:after":{content:"'∪'"}},".cm-completionIcon-property":{"&:after":{content:"'□'"}},".cm-completionIcon-keyword":{"&:after":{content:"'🔑︎'"}},".cm-completionIcon-namespace":{"&:after":{content:"'▢'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});class Hy{constructor(e,t,i,s){this.field=e,this.line=t,this.from=i,this.to=s}}class Ol{constructor(e,t,i){this.field=e,this.from=t,this.to=i}map(e){let t=e.mapPos(this.from,-1,ge.TrackDel),i=e.mapPos(this.to,1,ge.TrackDel);return t==null||i==null?null:new Ol(this.field,t,i)}}class yl{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let i=[],s=[t],r=e.doc.lineAt(t),o=/^\s*/.exec(r.text)[0];for(let a of this.lines){if(i.length){let h=o,c=/^\t*/.exec(a)[0].length;for(let f=0;fnew Ol(a.field,s[a.line]+a.from,s[a.line]+a.to));return{text:i,ranges:l}}static parse(e){let t=[],i=[],s=[],r;for(let o of e.split(/\r\n?|\n/)){for(;r=/[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(o);){let l=r[1]?+r[1]:null,a=r[2]||r[3]||"",h=-1,c=a.replace(/\\[{}]/g,f=>f[1]);for(let f=0;f=h&&u.field++}for(let f of s)if(f.line==i.length&&f.from>r.index){let u=r[2]?3+(r[1]||"").length:2;f.from-=u,f.to-=u}s.push(new Hy(h,i.length,r.index,r.index+c.length)),o=o.slice(0,r.index)+a+o.slice(r.index+r[0].length)}o=o.replace(/\\([{}])/g,(l,a,h)=>{for(let c of s)c.line==i.length&&c.from>h&&(c.from--,c.to--);return a}),i.push(o)}return new yl(i,s)}}let jy=D.widget({widget:new class extends xt{toDOM(){let n=document.createElement("span");return n.className="cm-snippetFieldPosition",n}ignoreEvent(){return!1}}}),Gy=D.mark({class:"cm-snippetField"});class Qi{constructor(e,t){this.ranges=e,this.active=t,this.deco=D.set(e.map(i=>(i.from==i.to?jy:Gy).range(i.from,i.to)),!0)}map(e){let t=[];for(let i of this.ranges){let s=i.map(e);if(!s)return null;t.push(s)}return new Qi(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(i=>i.field==this.active&&i.from<=t.from&&i.to>=t.to))}}const xn=L.define({map(n,e){return n&&n.map(e)}}),Zy=L.define(),an=ue.define({create(){return null},update(n,e){for(let t of e.effects){if(t.is(xn))return t.value;if(t.is(Zy)&&n)return new Qi(n.ranges,t.value)}return n&&e.docChanged&&(n=n.map(e.changes)),n&&e.selection&&!n.selectionInsideField(e.selection)&&(n=null),n},provide:n=>Q.decorations.from(n,e=>e?e.deco:D.none)});function bl(n,e){return b.create(n.filter(t=>t.field==e).map(t=>b.range(t.from,t.to)))}function Yy(n){let e=yl.parse(n);return(t,i,s,r)=>{let{text:o,ranges:l}=e.instantiate(t.state,s),{main:a}=t.state.selection,h={changes:{from:s,to:r==a.from?a.to:r,insert:V.of(o)},scrollIntoView:!0,annotations:i?[pl.of(i),oe.userEvent.of("input.complete")]:void 0};if(l.length&&(h.selection=bl(l,0)),l.some(c=>c.field>0)){let c=new Qi(l,0),f=h.effects=[xn.of(c)];t.state.field(an,!1)===void 0&&f.push(L.appendConfig.of([an,i1,n1,Iu]))}t.dispatch(t.state.update(h))}}function Vu(n){return({state:e,dispatch:t})=>{let i=e.field(an,!1);if(!i||n<0&&i.active==0)return!1;let s=i.active+n,r=n>0&&!i.ranges.some(o=>o.field==s+n);return t(e.update({selection:bl(i.ranges,s),effects:xn.of(r?null:new Qi(i.ranges,s)),scrollIntoView:!0})),!0}}const Ky=({state:n,dispatch:e})=>n.field(an,!1)?(e(n.update({effects:xn.of(null)})),!0):!1,Jy=Vu(1),e1=Vu(-1),t1=[{key:"Tab",run:Jy,shift:e1},{key:"Escape",run:Ky}],ph=M.define({combine(n){return n.length?n[0]:t1}}),i1=Et.highest(bi.compute([ph],n=>n.facet(ph)));function at(n,e){return{...e,apply:Yy(n)}}const n1=Q.domEventHandlers({mousedown(n,e){let t=e.state.field(an,!1),i;if(!t||(i=e.posAtCoords({x:n.clientX,y:n.clientY}))==null)return!1;let s=t.ranges.find(r=>r.from<=i&&r.to>=i);return!s||s.field==t.active?!1:(e.dispatch({selection:bl(t.ranges,s.field),effects:xn.of(t.ranges.some(r=>r.field>s.field)?new Qi(t.ranges,s.field):null),scrollIntoView:!0}),!0)}}),hn={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Xt=L.define({map(n,e){let t=e.mapPos(n,-1,ge.TrackAfter);return t??void 0}}),xl=new class extends Ht{};xl.startSide=1;xl.endSide=-1;const Nu=ue.define({create(){return F.empty},update(n,e){if(n=n.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);n=n.update({filter:i=>i>=t.from&&i<=t.to})}for(let t of e.effects)t.is(Xt)&&(n=n.update({add:[xl.range(t.value,t.value+1)]}));return n}});function s1(){return[o1,Nu]}const Tr="()[]{}<>«»»«[]{}";function Fu(n){for(let e=0;e{if((r1?n.composing:n.compositionStarted)||n.state.readOnly)return!1;let s=n.state.selection.main;if(i.length>2||i.length==2&&Ke(Ce(i,0))==1||e!=s.from||t!=s.to)return!1;let r=h1(n.state,i);return r?(n.dispatch(r),!0):!1}),l1=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let i=Xu(n,n.selection.main.head).brackets||hn.brackets,s=null,r=n.changeByRange(o=>{if(o.empty){let l=c1(n.doc,o.head);for(let a of i)if(a==l&&Gs(n.doc,o.head)==Fu(Ce(a,0)))return{changes:{from:o.head-a.length,to:o.head+a.length},range:b.cursor(o.head-a.length)}}return{range:s=o}});return s||e(n.update(r,{scrollIntoView:!0,userEvent:"delete.backward"})),!s},a1=[{key:"Backspace",run:l1}];function h1(n,e){let t=Xu(n,n.selection.main.head),i=t.brackets||hn.brackets;for(let s of i){let r=Fu(Ce(s,0));if(e==s)return r==s?d1(n,s,i.indexOf(s+s+s)>-1,t):f1(n,s,r,t.before||hn.before);if(e==r&&_u(n,n.selection.main.from))return u1(n,s,r)}return null}function _u(n,e){let t=!1;return n.field(Nu).between(0,n.doc.length,i=>{i==e&&(t=!0)}),t}function Gs(n,e){let t=n.sliceString(e,e+2);return t.slice(0,Ke(Ce(t,0)))}function c1(n,e){let t=n.sliceString(e-2,e);return Ke(Ce(t,0))==t.length?t:t.slice(1)}function f1(n,e,t,i){let s=null,r=n.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:t,from:o.to}],effects:Xt.of(o.to+e.length),range:b.range(o.anchor+e.length,o.head+e.length)};let l=Gs(n.doc,o.head);return!l||/\s/.test(l)||i.indexOf(l)>-1?{changes:{insert:e+t,from:o.head},effects:Xt.of(o.head+e.length),range:b.cursor(o.head+e.length)}:{range:s=o}});return s?null:n.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function u1(n,e,t){let i=null,s=n.changeByRange(r=>r.empty&&Gs(n.doc,r.head)==t?{changes:{from:r.head,to:r.head+t.length,insert:t},range:b.cursor(r.head+t.length)}:i={range:r});return i?null:n.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function d1(n,e,t,i){let s=i.stringPrefixes||hn.stringPrefixes,r=null,o=n.changeByRange(l=>{if(!l.empty)return{changes:[{insert:e,from:l.from},{insert:e,from:l.to}],effects:Xt.of(l.to+e.length),range:b.range(l.anchor+e.length,l.head+e.length)};let a=l.head,h=Gs(n.doc,a),c;if(h==e){if(mh(n,a))return{changes:{insert:e+e,from:a},effects:Xt.of(a+e.length),range:b.cursor(a+e.length)};if(_u(n,a)){let u=t&&n.sliceDoc(a,a+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:a,to:a+u.length,insert:u},range:b.cursor(a+u.length)}}}else{if(t&&n.sliceDoc(a-2*e.length,a)==e+e&&(c=gh(n,a-2*e.length,s))>-1&&mh(n,c))return{changes:{insert:e+e+e+e,from:a},effects:Xt.of(a+e.length),range:b.cursor(a+e.length)};if(n.charCategorizer(a)(h)!=Y.Word&&gh(n,a,s)>-1&&!p1(n,a,e,s))return{changes:{insert:e+e,from:a},effects:Xt.of(a+e.length),range:b.cursor(a+e.length)}}return{range:r=l}});return r?null:n.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function mh(n,e){let t=fe(n).resolveInner(e+1);return t.parent&&t.from==e}function p1(n,e,t,i){let s=fe(n).resolveInner(e,-1),r=i.reduce((o,l)=>Math.max(o,l.length),0);for(let o=0;o<5;o++){let l=n.sliceDoc(s.from,Math.min(s.to,s.from+t.length+r)),a=l.indexOf(t);if(!a||a>-1&&i.indexOf(l.slice(0,a))>-1){let c=s.firstChild;for(;c&&c.from==s.from&&c.to-c.from>t.length+a;){if(n.sliceDoc(c.to-t.length,c.to)==t)return!1;c=c.firstChild}return!0}let h=s.to==e&&s.parent;if(!h)break;s=h}return!1}function gh(n,e,t){let i=n.charCategorizer(e);if(i(n.sliceDoc(e-1,e))!=Y.Word)return e;for(let s of t){let r=e-s.length;if(n.sliceDoc(r,e)==s&&i(n.sliceDoc(r-1,r))!=Y.Word)return r}return-1}function Ro(n={}){return[Uy,Qe,ce.of(n),Xy,m1,Iu]}const Uu=[{key:"Ctrl-Space",run:vr},{mac:"Alt-`",run:vr},{mac:"Alt-i",run:vr},{key:"Escape",run:Iy},{key:"ArrowDown",run:Un(!0)},{key:"ArrowUp",run:Un(!1)},{key:"PageDown",run:Un(!0,"page")},{key:"PageUp",run:Un(!1,"page")},{key:"Enter",run:zy}],m1=Et.highest(bi.computeN([ce],n=>n.facet(ce).defaultKeymap?[Uu]:[]));function et(){var n=arguments[0];typeof n=="string"&&(n=document.createElement(n));var e=1,t=arguments[1];if(t&&typeof t=="object"&&t.nodeType==null&&!Array.isArray(t)){for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){var s=t[i];typeof s=="string"?n.setAttribute(i,s):s!=null&&(n[i]=s)}e++}for(;ec.from-f.from||c.to-f.to),o=new gt,l=[],a=0;for(let c=0;;){let f=c==r.length?null:r[c];if(!f&&!l.length)break;let u,d;for(l.length?(u=a,d=l.reduce((m,g)=>Math.min(m,g.to),f&&f.from>u?f.from:1e8)):(u=f.from,d=f.to,l.push(f),c++);cm.from||m.to==u))l.push(m),c++,d=Math.min(m.to,d);else{d=Math.min(m.from,d);break}}let p=Q1(l);if(l.some(m=>m.from==m.to||m.from==m.to-1&&i.doc.lineAt(m.from).to==m.from))o.add(u,u,D.widget({widget:new v1(p),diagnostics:l.slice()}));else{let m=l.reduce((g,y)=>y.markClass?g+" "+y.markClass:g,"");o.add(u,d,D.mark({class:"cm-lintRange cm-lintRange-"+p+m,diagnostics:l.slice(),inclusiveEnd:l.some(g=>g.to>d)}))}a=d;for(let m=0;m{if(!(e&&o.diagnostics.indexOf(e)<0))if(!i)i=new Oh(s,r,e||o.diagnostics[0]);else{if(o.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new Oh(i.from,r,i.diagnostic)}}),i}function g1(n,e){let t=e.pos,i=e.end||t,s=n.state.facet(cn).hideOn(n,t,i);if(s!=null)return s;let r=n.startState.doc.lineAt(e.pos);return!!(n.effects.some(o=>o.is(ju))||n.changes.touchesRange(r.from,Math.max(r.to,i)))}function O1(n,e){return n.field($e,!1)?e:e.concat(L.appendConfig.of(A1))}const ju=L.define(),Sl=L.define(),Gu=L.define(),$e=ue.define({create(){return new Vt(D.none,null,null)},update(n,e){if(e.docChanged&&n.diagnostics.size){let t=n.diagnostics.map(e.changes),i=null,s=n.panel;if(n.selected){let r=e.changes.mapPos(n.selected.from,1);i=wi(t,n.selected.diagnostic,r)||wi(t,null,r)}!t.size&&s&&e.state.facet(cn).autoPanel&&(s=null),n=new Vt(t,s,i)}for(let t of e.effects)if(t.is(ju)){let i=e.state.facet(cn).autoPanel?t.value.length?fn.open:null:n.panel;n=Vt.init(t.value,i,e.state)}else t.is(Sl)?n=new Vt(n.diagnostics,t.value?fn.open:null,n.selected):t.is(Gu)&&(n=new Vt(n.diagnostics,n.panel,t.value));return n},provide:n=>[tn.from(n,e=>e.panel),Q.decorations.from(n,e=>e.diagnostics)]}),y1=D.mark({class:"cm-lintRange cm-lintRange-active"});function b1(n,e,t){let{diagnostics:i}=n.state.field($e),s,r=-1,o=-1;i.between(e-(t<0?1:0),e+(t>0?1:0),(a,h,{spec:c})=>{if(e>=a&&e<=h&&(a==h||(e>a||t>0)&&(eYu(n,t,!1)))}const S1=n=>{let e=n.state.field($e,!1);(!e||!e.panel)&&n.dispatch({effects:O1(n.state,[Sl.of(!0)])});let t=en(n,fn.open);return t&&t.dom.querySelector(".cm-panel-lint ul").focus(),!0},yh=n=>{let e=n.state.field($e,!1);return!e||!e.panel?!1:(n.dispatch({effects:Sl.of(!1)}),!0)},k1=n=>{let e=n.state.field($e,!1);if(!e)return!1;let t=n.state.selection.main,i=e.diagnostics.iter(t.to+1);return!i.value&&(i=e.diagnostics.iter(0),!i.value||i.from==t.from&&i.to==t.to)?!1:(n.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0}),!0)},w1=[{key:"Mod-Shift-m",run:S1,preventDefault:!0},{key:"F8",run:k1}],cn=M.define({combine(n){return Object.assign({sources:n.map(e=>e.source).filter(e=>e!=null)},ot(n.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t}))}});function Zu(n){let e=[];if(n)e:for(let{name:t}of n){for(let i=0;ir.toLowerCase()==s.toLowerCase())){e.push(s);continue e}}e.push("")}return e}function Yu(n,e,t){var i;let s=t?Zu(e.actions):[];return et("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},et("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(n):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((r,o)=>{let l=!1,a=u=>{if(u.preventDefault(),l)return;l=!0;let d=wi(n.state.field($e).diagnostics,e);d&&r.apply(n,d.from,d.to)},{name:h}=r,c=s[o]?h.indexOf(s[o]):-1,f=c<0?h:[h.slice(0,c),et("u",h.slice(c,c+1)),h.slice(c+1)];return et("button",{type:"button",class:"cm-diagnosticAction",onclick:a,onmousedown:a,"aria-label":` Action: ${h}${c<0?"":` (access key "${s[o]})"`}.`},f)}),e.source&&et("div",{class:"cm-diagnosticSource"},e.source))}class v1 extends xt{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return et("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}}class bh{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=Yu(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}}class fn{constructor(e){this.view=e,this.items=[];let t=s=>{if(s.keyCode==27)yh(this.view),this.view.focus();else if(s.keyCode==38||s.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(s.keyCode==40||s.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(s.keyCode==36)this.moveSelection(0);else if(s.keyCode==35)this.moveSelection(this.items.length-1);else if(s.keyCode==13)this.view.focus();else if(s.keyCode>=65&&s.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:r}=this.items[this.selectedIndex],o=Zu(r.actions);for(let l=0;l{for(let r=0;ryh(this.view)},"×")),this.update()}get selectedIndex(){let e=this.view.state.field($e).selected;if(!e)return-1;for(let t=0;t{for(let c of h.diagnostics){if(o.has(c))continue;o.add(c);let f=-1,u;for(let d=i;di&&(this.items.splice(i,f-i),s=!0)),t&&u.diagnostic==t.diagnostic?u.dom.hasAttribute("aria-selected")||(u.dom.setAttribute("aria-selected","true"),r=u):u.dom.hasAttribute("aria-selected")&&u.dom.removeAttribute("aria-selected"),i++}});i({sel:r.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:l,panel:a})=>{let h=a.height/this.list.offsetHeight;l.topa.bottom&&(this.list.scrollTop+=(l.bottom-a.bottom)/h)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),s&&this.sync()}sync(){let e=this.list.firstChild;function t(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=this.view.state.field($e),i=wi(t.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:Gu.of(i)})}static open(e){return new fn(e)}}function T1(n,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(n)}')`}function Hn(n){return T1(``,'width="6" height="3"')}const C1=Q.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:Hn("#d11")},".cm-lintRange-warning":{backgroundImage:Hn("orange")},".cm-lintRange-info":{backgroundImage:Hn("#999")},".cm-lintRange-hint":{backgroundImage:Hn("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}}});function P1(n){return n=="error"?4:n=="warning"?3:n=="info"?2:1}function Q1(n){let e="hint",t=1;for(let i of n){let s=P1(i.severity);s>t&&(t=s,e=i.severity)}return e}const A1=[$e,Q.decorations.compute([$e],n=>{let{selected:e,panel:t}=n.field($e);return!e||!t||e.from==e.to?D.none:D.set([y1.range(e.from,e.to)])}),hg(b1,{hideOn:g1}),C1],xh=[xg(),wg(),Im(),XO(),dO(),Am(),qm(),I.allowMultipleSelections.of(!0),Jg(),zf(OO,{fallback:!0}),vO(),s1(),Ro(),Km(),tg(),Um(),K0(),bi.of([...a1,...U0,...Oy,...JO,...hO,...Uu,...w1])],M1="#e5c07b",Sh="#e06c75",R1="#56b6c2",D1="#ffffff",os="#abb2bf",Do="#7d8799",E1="#61afef",q1="#98c379",kh="#d19a66",$1="#c678dd",B1="#21252b",wh="#2c313a",vh="#282c34",Cr="#353a42",L1="#3E4451",Th="#528bff",W1=Q.theme({"&":{color:os,backgroundColor:vh},".cm-content":{caretColor:Th},".cm-cursor, .cm-dropCursor":{borderLeftColor:Th},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:L1},".cm-panels":{backgroundColor:B1,color:os},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#6699ff0b"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:vh,color:Do,border:"none"},".cm-activeLineGutter":{backgroundColor:wh},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:Cr},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:Cr,borderBottomColor:Cr},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:wh,color:os}}},{dark:!0}),z1=On.define([{tag:O.keyword,color:$1},{tag:[O.name,O.deleted,O.character,O.propertyName,O.macroName],color:Sh},{tag:[O.function(O.variableName),O.labelName],color:E1},{tag:[O.color,O.constant(O.name),O.standard(O.name)],color:kh},{tag:[O.definition(O.name),O.separator],color:os},{tag:[O.typeName,O.className,O.number,O.changed,O.annotation,O.modifier,O.self,O.namespace],color:M1},{tag:[O.operator,O.operatorKeyword,O.url,O.escape,O.regexp,O.link,O.special(O.string)],color:R1},{tag:[O.meta,O.comment],color:Do},{tag:O.strong,fontWeight:"bold"},{tag:O.emphasis,fontStyle:"italic"},{tag:O.strikethrough,textDecoration:"line-through"},{tag:O.link,color:Do,textDecoration:"underline"},{tag:O.heading,fontWeight:"bold",color:Sh},{tag:[O.atom,O.bool,O.special(O.variableName)],color:kh},{tag:[O.processingInstruction,O.string,O.inserted],color:q1},{tag:O.invalid,color:D1}]),I1=[W1,zf(z1)];var Ch={};class Es{constructor(e,t,i,s,r,o,l,a,h,c=0,f){this.p=e,this.stack=t,this.state=i,this.reducePos=s,this.pos=r,this.score=o,this.buffer=l,this.bufferBase=a,this.curContext=h,this.lookAhead=c,this.parent=f}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,i=0){let s=e.parser.context;return new Es(e,[],t,i,i,0,[],0,s?new Ph(s,s.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let i=e>>19,s=e&65535,{parser:r}=this.p,o=this.reducePos=2e3&&!(!((t=this.p.parser.nodeSet.types[s])===null||t===void 0)&&t.isAnonymous)&&(h==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=c):this.p.lastBigReductionSizea;)this.stack.pop();this.reduceContext(s,h)}storeNode(e,t,i,s=4,r=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&o.buffer[l-4]==0&&o.buffer[l-1]>-1){if(t==i)return;if(o.buffer[l-2]>=t){o.buffer[l-2]=i;return}}}if(!r||this.pos==i)this.buffer.push(e,t,i,s);else{let o=this.buffer.length;if(o>0&&this.buffer[o-4]!=0){let l=!1;for(let a=o;a>0&&this.buffer[a-2]>i;a-=4)if(this.buffer[a-1]>=0){l=!0;break}if(l)for(;o>0&&this.buffer[o-2]>i;)this.buffer[o]=this.buffer[o-4],this.buffer[o+1]=this.buffer[o-3],this.buffer[o+2]=this.buffer[o-2],this.buffer[o+3]=this.buffer[o-1],o-=4,s>4&&(s-=4)}this.buffer[o]=e,this.buffer[o+1]=t,this.buffer[o+2]=i,this.buffer[o+3]=s}}shift(e,t,i,s){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let r=e,{parser:o}=this.p;(s>this.pos||t<=o.maxNode)&&(this.pos=s,o.stateFlag(r,1)||(this.reducePos=s)),this.pushState(r,i),this.shiftContext(t,i),t<=o.maxNode&&this.buffer.push(t,i,s,4)}else this.pos=s,this.shiftContext(t,i),t<=this.p.parser.maxNode&&this.buffer.push(t,i,s,4)}apply(e,t,i,s){e&65536?this.reduce(e):this.shift(e,t,i,s)}useNode(e,t){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let s=this.pos;this.reducePos=this.pos=s+e.length,this.pushState(t,s),this.buffer.push(i,s,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(;t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let i=e.buffer.slice(t),s=e.bufferBase+t;for(;e&&s==e.bufferBase;)e=e.parent;return new Es(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,s,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,i?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new V1(this);;){let i=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(i==0)return!1;if((i&65536)==0)return!0;t.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let s=[];for(let r=0,o;ra&1&&l==o)||s.push(t[r],o)}t=s}let i=[];for(let s=0;s>19,s=t&65535,r=this.stack.length-i*3;if(r<0||e.getGoto(this.stack[r],s,!1)<0){let o=this.findForcedReduction();if(o==null)return!1;t=o}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],i=(s,r)=>{if(!t.includes(s))return t.push(s),e.allActions(s,o=>{if(!(o&393216))if(o&65536){let l=(o>>19)-r;if(l>1){let a=o&65535,h=this.stack.length-l*3;if(h>=0&&e.getGoto(this.stack[h],a,!1)>=0)return l<<19|65536|a}}else{let l=i(o,r+1);if(l!=null)return l}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;tthis.lookAhead&&(this.emitLookAhead(),this.lookAhead=e)}close(){this.curContext&&this.curContext.tracker.strict&&this.emitContext(),this.lookAhead>0&&this.emitLookAhead()}}class Ph{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}}class V1{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let s=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=s}}class qs{constructor(e,t,i){this.stack=e,this.pos=t,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new qs(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new qs(this.stack,this.pos,this.index)}}function jn(n,e=Uint16Array){if(typeof n!="string")return n;let t=null;for(let i=0,s=0;i=92&&o--,o>=34&&o--;let a=o-32;if(a>=46&&(a-=46,l=!0),r+=a,l)break;r*=46}t?t[s++]=r:t=new e(r)}return t}class ls{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}}const Qh=new ls;class N1{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=Qh,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let i=this.range,s=this.rangeIndex,r=this.pos+e;for(;ri.to:r>=i.to;){if(s==this.ranges.length-1)return null;let o=this.ranges[++s];r+=o.from-i.to,i=o}return r}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,i,s;if(t>=0&&t=this.chunk2Pos&&il.to&&(this.chunk2=this.chunk2.slice(0,l.to-i)),s=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),s}acceptToken(e,t=0){let i=t?this.resolveOffset(t,-1):this.pos;if(i==null||i=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=Qh,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let i="";for(let s of this.ranges){if(s.from>=t)break;s.to>e&&(i+=this.input.read(Math.max(s.from,e),Math.min(s.to,t)))}return i}}class di{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:i}=t.p;F1(this.data,e,t,this.id,i.data,i.tokenPrecTable)}}di.prototype.contextual=di.prototype.fallback=di.prototype.extend=!1;di.prototype.fallback=di.prototype.extend=!1;class Zs{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}}function F1(n,e,t,i,s,r){let o=0,l=1<0){let p=n[d];if(a.allows(p)&&(e.token.value==-1||e.token.value==p||X1(p,e.token.value,s,r))){e.acceptToken(p);break}}let c=e.next,f=0,u=n[o+2];if(e.next<0&&u>f&&n[h+u*3-3]==65535){o=n[h+u*3-1];continue e}for(;f>1,p=h+d+(d<<1),m=n[p],g=n[p+1]||65536;if(c=g)f=d+1;else{o=n[p+2],e.advance();continue e}}break}}function Ah(n,e,t){for(let i=e,s;(s=n[i])!=65535;i++)if(s==t)return i-e;return-1}function X1(n,e,t,i){let s=Ah(t,i,e);return s<0||Ah(t,i,n)e)&&!i.type.isError)return t<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(n.length,Math.max(i.from+1,e+25));if(t<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return t<0?0:n.length}}class _1{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?Mh(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?Mh(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=o,null;if(r instanceof U){if(o==e){if(o=Math.max(this.safeFrom,e)&&(this.trees.push(r),this.start.push(o),this.index.push(0))}else this.index[t]++,this.nextStart=o+r.length}}}class U1{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new ls)}getActions(e){let t=0,i=null,{parser:s}=e.p,{tokenizers:r}=s,o=s.stateSlot(e.state,3),l=e.curContext?e.curContext.hash:0,a=0;for(let h=0;hf.end+25&&(a=Math.max(f.lookAhead,a)),f.value!=0)){let u=t;if(f.extended>-1&&(t=this.addActions(e,f.extended,f.end,t)),t=this.addActions(e,f.value,f.end,t),!c.extend&&(i=f,t>u))break}}for(;this.actions.length>t;)this.actions.pop();return a&&e.setLookAhead(a),!i&&e.pos==this.stream.end&&(i=new ls,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,t=this.addActions(e,i.value,i.end,t)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new ls,{pos:i,p:s}=e;return t.start=i,t.end=Math.min(i+1,s.stream.end),t.value=i==s.stream.end?s.parser.eofTerm:0,t}updateCachedToken(e,t,i){let s=this.stream.clipPos(i.pos);if(t.token(this.stream.reset(s,e),i),e.value>-1){let{parser:r}=i.p;for(let o=0;o=0&&i.p.parser.dialect.allows(l>>1)){(l&1)==0?e.value=l>>1:e.extended=l>>1;break}}}else e.value=0,e.end=this.stream.clipPos(s+1)}putAction(e,t,i,s){for(let r=0;re.bufferLength*4?new _1(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,i=this.stacks=[],s,r;if(this.bigReductionCount>300&&e.length==1){let[o]=e;for(;o.forceReduce()&&o.stack.length&&o.stack[o.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let o=0;ot)i.push(l);else{if(this.advanceStack(l,i,e))continue;{s||(s=[],r=[]),s.push(l);let a=this.tokens.getMainToken(l);r.push(a.value,a.end)}}break}}if(!i.length){let o=s&&Z1(s);if(o)return Ee&&console.log("Finish with "+this.stackID(o)),this.stackToTree(o);if(this.parser.strict)throw Ee&&s&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&s){let o=this.stoppedAt!=null&&s[0].pos>this.stoppedAt?s[0]:this.runRecovery(s,r,i);if(o)return Ee&&console.log("Force-finish "+this.stackID(o)),this.stackToTree(o.forceAll())}if(this.recovering){let o=this.recovering==1?1:this.recovering*3;if(i.length>o)for(i.sort((l,a)=>a.score-l.score);i.length>o;)i.pop();i.some(l=>l.reducePos>t)&&this.recovering--}else if(i.length>1){e:for(let o=0;o500&&h.buffer.length>500)if((l.score-h.score||l.buffer.length-h.buffer.length)>0)i.splice(a--,1);else{i.splice(o--,1);continue e}}}i.length>12&&i.splice(12,i.length-12)}this.minStackPos=i[0].pos;for(let o=1;o ":"";if(this.stoppedAt!=null&&s>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let h=e.curContext&&e.curContext.tracker.strict,c=h?e.curContext.hash:0;for(let f=this.fragments.nodeAt(s);f;){let u=this.parser.nodeSet.types[f.type.id]==f.type?r.getGoto(e.state,f.type.id):-1;if(u>-1&&f.length&&(!h||(f.prop(z.contextHash)||0)==c))return e.useNode(f,u),Ee&&console.log(o+this.stackID(e)+` (via reuse of ${r.getName(f.type.id)})`),!0;if(!(f instanceof U)||f.children.length==0||f.positions[0]>0)break;let d=f.children[0];if(d instanceof U&&f.positions[0]==0)f=d;else break}}let l=r.stateSlot(e.state,4);if(l>0)return e.reduce(l),Ee&&console.log(o+this.stackID(e)+` (via always-reduce ${r.getName(l&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let a=this.tokens.getActions(e);for(let h=0;hs?t.push(p):i.push(p)}return!1}advanceFully(e,t){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return Rh(e,t),!0}}runRecovery(e,t,i){let s=null,r=!1;for(let o=0;o ":"";if(l.deadEnd&&(r||(r=!0,l.restart(),Ee&&console.log(c+this.stackID(l)+" (restarted)"),this.advanceFully(l,i))))continue;let f=l.split(),u=c;for(let d=0;f.forceReduce()&&d<10&&(Ee&&console.log(u+this.stackID(f)+" (via force-reduce)"),!this.advanceFully(f,i));d++)Ee&&(u=this.stackID(f)+" -> ");for(let d of l.recoverByInsert(a))Ee&&console.log(c+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,i);this.stream.end>l.pos?(h==l.pos&&(h++,a=0),l.recoverByDelete(a,h),Ee&&console.log(c+this.stackID(l)+` (via recover-delete ${this.parser.getName(a)})`),Rh(l,i)):(!s||s.scoren;class G1{constructor(e){this.start=e.start,this.shift=e.shift||Qr,this.reduce=e.reduce||Qr,this.reuse=e.reuse||Qr,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}}class $s extends tl{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(" ");this.minRepeatTerm=t.length;for(let l=0;le.topRules[l][1]),s=[];for(let l=0;l=0)r(c,a,l[h++]);else{let f=l[h+-c];for(let u=-c;u>0;u--)r(l[h++],a,f);h++}}}this.nodeSet=new Vs(t.map((l,a)=>Te.define({name:a>=this.minRepeatTerm?void 0:l,id:a,props:s[a],top:i.indexOf(a)>-1,error:a==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(a)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=bf;let o=jn(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let l=0;ltypeof l=="number"?new di(o,l):l),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,i){let s=new H1(this,e,t,i);for(let r of this.wrappers)s=r(s,e,t,i);return s}getGoto(e,t,i=!1){let s=this.goto;if(t>=s[0])return-1;for(let r=s[t+1];;){let o=s[r++],l=o&1,a=s[r++];if(l&&i)return a;for(let h=r+(o>>1);r0}validAction(e,t){return!!this.allActions(e,i=>i==t?!0:null)}allActions(e,t){let i=this.stateSlot(e,4),s=i?t(i):void 0;for(let r=this.stateSlot(e,1);s==null;r+=3){if(this.data[r]==65535)if(this.data[r+1]==1)r=dt(this.data,r+2);else break;s=t(dt(this.data,r+1))}return s}nextStates(e){let t=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=dt(this.data,i+2);else break;if((this.data[i+2]&1)==0){let s=this.data[i+1];t.some((r,o)=>o&1&&r==s)||t.push(this.data[i],s)}}return t}configure(e){let t=Object.assign(Object.create($s.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=i}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(i=>{let s=e.tokenizers.find(r=>r.from==i);return s?s.to:i})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((i,s)=>{let r=e.specializers.find(l=>l.from==i.external);if(!r)return i;let o=Object.assign(Object.assign({},i),{external:r.to});return t.specializers[s]=Dh(o),o})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),i=t.map(()=>!1);if(e)for(let r of e.split(" ")){let o=t.indexOf(r);o>=0&&(i[o]=!0)}let s=null;for(let r=0;ri)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.scoren.external(t,i)<<1|e}return n.get}const Y1=1,Ku=194,Ju=195,K1=196,Eh=197,J1=198,eb=199,tb=200,ib=2,ed=3,qh=201,nb=24,sb=25,rb=49,ob=50,lb=55,ab=56,hb=57,cb=59,fb=60,ub=61,db=62,pb=63,mb=65,gb=238,Ob=71,yb=241,bb=242,xb=243,Sb=244,kb=245,wb=246,vb=247,Tb=248,td=72,Cb=249,Pb=250,Qb=251,Ab=252,Mb=253,Rb=254,Db=255,Eb=256,qb=73,$b=77,Bb=263,Lb=112,Wb=130,zb=151,Ib=152,Vb=155,Jt=10,un=13,kl=32,Ys=9,wl=35,Nb=40,Fb=46,Eo=123,$h=125,id=39,nd=34,Bh=92,Xb=111,_b=120,Ub=78,Hb=117,jb=85,Gb=new Set([sb,rb,ob,Bb,mb,Wb,ab,hb,gb,db,pb,td,qb,$b,fb,ub,zb,Ib,Vb,Lb]);function Ar(n){return n==Jt||n==un}function Mr(n){return n>=48&&n<=57||n>=65&&n<=70||n>=97&&n<=102}const Zb=new Zs((n,e)=>{let t;if(n.next<0)n.acceptToken(eb);else if(e.context.flags&as)Ar(n.next)&&n.acceptToken(J1,1);else if(((t=n.peek(-1))<0||Ar(t))&&e.canShift(Eh)){let i=0;for(;n.next==kl||n.next==Ys;)n.advance(),i++;(n.next==Jt||n.next==un||n.next==wl)&&n.acceptToken(Eh,-i)}else Ar(n.next)&&n.acceptToken(K1,1)},{contextual:!0}),Yb=new Zs((n,e)=>{let t=e.context;if(t.flags)return;let i=n.peek(-1);if(i==Jt||i==un){let s=0,r=0;for(;;){if(n.next==kl)s++;else if(n.next==Ys)s+=8-s%8;else break;n.advance(),r++}s!=t.indent&&n.next!=Jt&&n.next!=un&&n.next!=wl&&(s[n,e|sd])),ex=new G1({start:Kb,reduce(n,e,t,i){return n.flags&as&&Gb.has(e)||(e==Ob||e==td)&&n.flags&sd?n.parent:n},shift(n,e,t,i){return e==Ku?new hs(n,Jb(i.read(i.pos,t.pos)),0):e==Ju?n.parent:e==nb||e==lb||e==cb||e==ed?new hs(n,0,as):Lh.has(e)?new hs(n,0,Lh.get(e)|n.flags&as):n},hash(n){return n.hash}}),tx=new Zs(n=>{for(let e=0;e<5;e++){if(n.next!="print".charCodeAt(e))return;n.advance()}if(!/\w/.test(String.fromCharCode(n.next)))for(let e=0;;e++){let t=n.peek(e);if(!(t==kl||t==Ys)){t!=Nb&&t!=Fb&&t!=Jt&&t!=un&&t!=wl&&n.acceptToken(Y1);return}}}),ix=new Zs((n,e)=>{let{flags:t}=e.context,i=t&ht?nd:id,s=(t&ct)>0,r=!(t&ft),o=(t&ut)>0,l=n.pos;for(;!(n.next<0);)if(o&&n.next==Eo)if(n.peek(1)==Eo)n.advance(2);else{if(n.pos==l){n.acceptToken(ed,1);return}break}else if(r&&n.next==Bh){if(n.pos==l){n.advance();let a=n.next;a>=0&&(n.advance(),nx(n,a)),n.acceptToken(ib);return}break}else if(n.next==Bh&&!r&&n.peek(1)>-1)n.advance(2);else if(n.next==i&&(!s||n.peek(1)==i&&n.peek(2)==i)){if(n.pos==l){n.acceptToken(qh,s?3:1);return}break}else if(n.next==Jt){if(s)n.advance();else if(n.pos==l){n.acceptToken(qh);return}break}else n.advance();n.pos>l&&n.acceptToken(tb)});function nx(n,e){if(e==Xb)for(let t=0;t<2&&n.next>=48&&n.next<=55;t++)n.advance();else if(e==_b)for(let t=0;t<2&&Mr(n.next);t++)n.advance();else if(e==Hb)for(let t=0;t<4&&Mr(n.next);t++)n.advance();else if(e==jb)for(let t=0;t<8&&Mr(n.next);t++)n.advance();else if(e==Ub&&n.next==Eo){for(n.advance();n.next>=0&&n.next!=$h&&n.next!=id&&n.next!=nd&&n.next!=Jt;)n.advance();n.next==$h&&n.advance()}}const sx=wf({'async "*" "**" FormatConversion FormatSpec':O.modifier,"for while if elif else try except finally return raise break continue with pass assert await yield match case":O.controlKeyword,"in not and or is del":O.operatorKeyword,"from def class global nonlocal lambda":O.definitionKeyword,import:O.moduleKeyword,"with as print":O.keyword,Boolean:O.bool,None:O.null,VariableName:O.variableName,"CallExpression/VariableName":O.function(O.variableName),"FunctionDefinition/VariableName":O.function(O.definition(O.variableName)),"ClassDefinition/VariableName":O.definition(O.className),PropertyName:O.propertyName,"CallExpression/MemberExpression/PropertyName":O.function(O.propertyName),Comment:O.lineComment,Number:O.number,String:O.string,FormatString:O.special(O.string),Escape:O.escape,UpdateOp:O.updateOperator,"ArithOp!":O.arithmeticOperator,BitOp:O.bitwiseOperator,CompareOp:O.compareOperator,AssignOp:O.definitionOperator,Ellipsis:O.punctuation,At:O.meta,"( )":O.paren,"[ ]":O.squareBracket,"{ }":O.brace,".":O.derefOperator,", ;":O.separator}),rx={__proto__:null,await:44,or:54,and:56,in:60,not:62,is:64,if:70,else:72,lambda:76,yield:94,from:96,async:102,for:104,None:162,True:164,False:164,del:178,pass:182,break:186,continue:190,return:194,raise:202,import:206,as:208,global:212,nonlocal:214,assert:218,type:223,elif:236,while:240,try:246,except:248,finally:250,with:254,def:258,class:268,match:279,case:285},ox=$s.deserialize({version:14,states:"##jO`QeOOP$}OSOOO&WQtO'#HUOOQS'#Co'#CoOOQS'#Cp'#CpO'vQdO'#CnO*UQtO'#HTOOQS'#HU'#HUOOQS'#DU'#DUOOQS'#HT'#HTO*rQdO'#D_O+VQdO'#DfO+gQdO'#DjO+zOWO'#DuO,VOWO'#DvO.[QtO'#GuOOQS'#Gu'#GuO'vQdO'#GtO0ZQtO'#GtOOQS'#Eb'#EbO0rQdO'#EcOOQS'#Gs'#GsO0|QdO'#GrOOQV'#Gr'#GrO1XQdO'#FYOOQS'#G^'#G^O1^QdO'#FXOOQV'#IS'#ISOOQV'#Gq'#GqOOQV'#Fq'#FqQ`QeOOO'vQdO'#CqO1lQdO'#C}O1sQdO'#DRO2RQdO'#HYO2cQtO'#EVO'vQdO'#EWOOQS'#EY'#EYOOQS'#E['#E[OOQS'#E^'#E^O2wQdO'#E`O3_QdO'#EdO3rQdO'#EfO3zQtO'#EfO1XQdO'#EiO0rQdO'#ElO1XQdO'#EnO0rQdO'#EtO0rQdO'#EwO4VQdO'#EyO4^QdO'#FOO4iQdO'#EzO0rQdO'#FOO1XQdO'#FQO1XQdO'#FVO4nQdO'#F[P4uOdO'#GpPOOO)CBd)CBdOOQS'#Ce'#CeOOQS'#Cf'#CfOOQS'#Cg'#CgOOQS'#Ch'#ChOOQS'#Ci'#CiOOQS'#Cj'#CjOOQS'#Cl'#ClO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO5TQdO'#DoOOQS,5:Y,5:YO5hQdO'#HdOOQS,5:],5:]O5uQ!fO,5:]O5zQtO,59YO1lQdO,59bO1lQdO,59bO1lQdO,59bO8jQdO,59bO8oQdO,59bO8vQdO,59jO8}QdO'#HTO:TQdO'#HSOOQS'#HS'#HSOOQS'#D['#D[O:lQdO,59aO'vQdO,59aO:zQdO,59aOOQS,59y,59yO;PQdO,5:RO'vQdO,5:ROOQS,5:Q,5:QO;_QdO,5:QO;dQdO,5:XO'vQdO,5:XO'vQdO,5:VOOQS,5:U,5:UO;uQdO,5:UO;zQdO,5:WOOOW'#Fy'#FyOOOOQS'#Ds'#DsOOQS1G/w1G/wOOQS1G.|1G.|O!/[QtO1G.|O!/cQtO1G.|O1lQdO1G.|O!0OQdO1G/UOOQS'#DZ'#DZO0rQdO,59tOOQS1G.{1G.{O!0VQdO1G/eO!0gQdO1G/eO!0oQdO1G/fO'vQdO'#H[O!0tQdO'#H[O!0yQtO1G.{O!1ZQdO,59iO!2aQdO,5=zO!2qQdO,5=zO!2yQdO1G/mO!3OQtO1G/mOOQS1G/l1G/lO!3`QdO,5=uO!4VQdO,5=uO0rQdO1G/qO!4tQdO1G/sO!4yQtO1G/sO!5ZQtO1G/qOOQS1G/p1G/pOOQS1G/r1G/rOOOW-E9w-E9wOOQS1G/{1G/{O!5kQdO'#HxO0rQdO'#HxO!5|QdO,5>cOOOW-E9x-E9xOOQS1G/|1G/|OOQS-E9{-E9{O!6[Q#xO1G2zO!6{QtO1G2zO'vQdO,5kOOQS1G1`1G1`O!8RQdO1G1`OOQS'#DV'#DVO0rQdO,5=qOOQS,5=q,5=qO!8WQdO'#FrO!8cQdO,59oO!8kQdO1G/XO!8uQtO,5=uOOQS1G3`1G3`OOQS,5:m,5:mO!9fQdO'#GtOOQS,5jO!;ZQdO,5>jO1XQdO,5>jO!;lQdO,5>iOOQS-E:R-E:RO!;qQdO1G0lO!;|QdO1G0lO!lO!lO!hO!=VQdO,5>hO!=hQdO'#EpO0rQdO1G0tO!=sQdO1G0tO!=xQgO1G0zO!AvQgO1G0}O!EqQdO,5>oO!E{QdO,5>oO!FTQtO,5>oO0rQdO1G1PO!F_QdO1G1PO4iQdO1G1UO!!vQdO1G1WOOQV,5;a,5;aO!FdQfO,5;aO!FiQgO1G1QO!JjQdO'#GZO4iQdO1G1QO4iQdO1G1QO!JzQdO,5>pO!KXQdO,5>pO1XQdO,5>pOOQV1G1U1G1UO!KaQdO'#FSO!KrQ!fO1G1WO!KzQdO1G1WOOQV1G1]1G1]O4iQdO1G1]O!LPQdO1G1]O!LXQdO'#F^OOQV1G1b1G1bO!#ZQtO1G1bPOOO1G2v1G2vP!L^OSO1G2vOOQS,5=},5=}OOQS'#Dp'#DpO0rQdO,5=}O!LfQdO,5=|O!LyQdO,5=|OOQS1G/u1G/uO!MRQdO,5>PO!McQdO,5>PO!MkQdO,5>PO!NOQdO,5>PO!N`QdO,5>POOQS1G3j1G3jOOQS7+$h7+$hO!8kQdO7+$pO#!RQdO1G.|O#!YQdO1G.|OOQS1G/`1G/`OOQS,5<`,5<`O'vQdO,5<`OOQS7+%P7+%PO#!aQdO7+%POOQS-E9r-E9rOOQS7+%Q7+%QO#!qQdO,5=vO'vQdO,5=vOOQS7+$g7+$gO#!vQdO7+%PO##OQdO7+%QO##TQdO1G3fOOQS7+%X7+%XO##eQdO1G3fO##mQdO7+%XOOQS,5<_,5<_O'vQdO,5<_O##rQdO1G3aOOQS-E9q-E9qO#$iQdO7+%]OOQS7+%_7+%_O#$wQdO1G3aO#%fQdO7+%_O#%kQdO1G3gO#%{QdO1G3gO#&TQdO7+%]O#&YQdO,5>dO#&sQdO,5>dO#&sQdO,5>dOOQS'#Dx'#DxO#'UO&jO'#DzO#'aO`O'#HyOOOW1G3}1G3}O#'fQdO1G3}O#'nQdO1G3}O#'yQ#xO7+(fO#(jQtO1G2UP#)TQdO'#GOOOQS,5nQdO,5sQdO1G4OOOQS-E9y-E9yO#?^QdO1G4OO<[QdO'#H{OOOO'#D{'#D{OOOO'#F|'#F|O#?oO&jO,5:fOOOW,5>e,5>eOOOW7+)i7+)iO#?zQdO7+)iO#@SQdO1G2zO#@mQdO1G2zP'vQdO'#FuO0rQdO<mO#BQQdO,5>mOOQS1G0v1G0vOOQS<rO#KgQdO,5>rO#KrQdO,5>rO#K}QdO,5>qO#L`QdO,5>qOOQS1G1Y1G1YOOQS,5;p,5;pOOQV<VAN>VO$ oQdO<cAN>cO0rQdO1G1|O$!PQtO1G1|P$!ZQdO'#FvOOQS1G2R1G2RP$!hQdO'#F{O$!uQdO7+)jO$#`QdO,5>gOOOO-E9z-E9zOOOW<tO$4{QdO,5>tO1XQdO,5vO$)nQdO,5>vOOQS1G1p1G1pOOQS,5<[,5<[OOQU7+'P7+'PO$+zQdO1G/iO$)nQdO,5wO$8zQdO,5>wOOQS1G1s1G1sOOQS7+'S7+'SP$)nQdO'#GdO$9SQdO1G4bO$9^QdO1G4bO$9fQdO1G4bOOQS7+%T7+%TO$9tQdO1G1tO$:SQtO'#FaO$:ZQdO,5<}OOQS,5<},5<}O$:iQdO1G4cOOQS-E:a-E:aO$)nQdO,5<|O$:pQdO,5<|O$:uQdO7+)|OOQS-E:`-E:`O$;PQdO7+)|O$)nQdO,5S~O%cOS%^OSSOS%]PQ~OPdOVaOfoOhYOopOs!POvqO!PrO!Q{O!T!SO!U!RO!XZO!][O!h`O!r`O!s`O!t`O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#l!QO#o!TO#s!UO#u!VO#z!WO#}hO$P!XO%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~O%]!YO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%j![O%k!]O%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aO~Ok%xXl%xXm%xXn%xXo%xXp%xXs%xXz%xX{%xX!x%xX#g%xX%[%xX%_%xX%z%xXg%xX!T%xX!U%xX%{%xX!W%xX![%xX!Q%xX#[%xXt%xX!m%xX~P%SOfoOhYO!XZO!][O!h`O!r`O!s`O!t`O%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~Oz%wX{%wX#g%wX%[%wX%_%wX%z%wX~Ok!pOl!qOm!oOn!oOo!rOp!sOs!tO!x%wX~P)pOV!zOg!|Oo0cOv0qO!PrO~P'vOV#OOo0cOv0qO!W#PO~P'vOV#SOa#TOo0cOv0qO![#UO~P'vOQ#XO%`#XO%a#ZO~OQ#^OR#[O%`#^O%a#`O~OV%iX_%iXa%iXh%iXk%iXl%iXm%iXn%iXo%iXp%iXs%iXz%iX!X%iX!f%iX%j%iX%k%iX%l%iX%m%iX%n%iX%o%iX%p%iX%q%iX%r%iX%s%iXg%iX!T%iX!U%iX~O&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O{%iX!x%iX#g%iX%[%iX%_%iX%z%iX%{%iX!W%iX![%iX!Q%iX#[%iXt%iX!m%iX~P,eOz#dO{%hX!x%hX#g%hX%[%hX%_%hX%z%hX~Oo0cOv0qO~P'vO#g#gO%[#iO%_#iO~O%uWO~O!T#nO#u!VO#z!WO#}hO~OopO~P'vOV#sOa#tO%uWO{wP~OV#xOo0cOv0qO!Q#yO~P'vO{#{O!x$QO%z#|O#g!yX%[!yX%_!yX~OV#xOo0cOv0qO#g#SX%[#SX%_#SX~P'vOo0cOv0qO#g#WX%[#WX%_#WX~P'vOh$WO%uWO~O!f$YO!r$YO%uWO~OV$eO~P'vO!U$gO#s$hO#u$iO~O{$jO~OV$qO~P'vOS$sO%[$rO%_$rO%c$tO~OV$}Oa$}Og%POo0cOv0qO~P'vOo0cOv0qO{%SO~P'vO&Y%UO~Oa!bOh!iO!X!kO!f!mOVba_bakbalbambanbaobapbasbazba{ba!xba#gba%[ba%_ba%jba%kba%lba%mba%nba%oba%pba%qba%rba%sba%zbagba!Tba!Uba%{ba!Wba![ba!Qba#[batba!mba~On%ZO~Oo%ZO~P'vOo0cO~P'vOk0eOl0fOm0dOn0dOo0mOp0nOs0rOg%wX!T%wX!U%wX%{%wX!W%wX![%wX!Q%wX#[%wX!m%wX~P)pO%{%]Og%vXz%vX!T%vX!U%vX!W%vX{%vX~Og%_Oz%`O!T%dO!U%cO~Og%_O~Oz%gO!T%dO!U%cO!W&SX~O!W%kO~Oz%lO{%nO!T%dO!U%cO![%}X~O![%rO~O![%sO~OQ#XO%`#XO%a%uO~OV%wOo0cOv0qO!PrO~P'vOQ#^OR#[O%`#^O%a%zO~OV!qa_!qaa!qah!qak!qal!qam!qan!qao!qap!qas!qaz!qa{!qa!X!qa!f!qa!x!qa#g!qa%[!qa%_!qa%j!qa%k!qa%l!qa%m!qa%n!qa%o!qa%p!qa%q!qa%r!qa%s!qa%z!qag!qa!T!qa!U!qa%{!qa!W!qa![!qa!Q!qa#[!qat!qa!m!qa~P#yOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P%SOV&OOopOvqO{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P'vOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#g$zX%[$zX%_$zX~P'vO#g#gO%[&TO%_&TO~O!f&UOh&sX%[&sXz&sX#[&sX#g&sX%_&sX#Z&sXg&sX~Oh!iO%[&WO~Okealeameaneaoeapeaseazea{ea!xea#gea%[ea%_ea%zeagea!Tea!Uea%{ea!Wea![ea!Qea#[eatea!mea~P%SOsqazqa{qa#gqa%[qa%_qa%zqa~Ok!pOl!qOm!oOn!oOo!rOp!sO!xqa~PEcO%z&YOz%yX{%yX~O%uWOz%yX{%yX~Oz&]O{wX~O{&_O~Oz%lO#g%}X%[%}X%_%}Xg%}X{%}X![%}X!m%}X%z%}X~OV0lOo0cOv0qO!PrO~P'vO%z#|O#gUa%[Ua%_Ua~Oz&hO#g&PX%[&PX%_&PXn&PX~P%SOz&kO!Q&jO#g#Wa%[#Wa%_#Wa~Oz&lO#[&nO#g&rX%[&rX%_&rXg&rX~O!f$YO!r$YO#Z&qO%uWO~O#Z&qO~Oz&sO#g&tX%[&tX%_&tX~Oz&uO#g&pX%[&pX%_&pX{&pX~O!X&wO%z&xO~Oz&|On&wX~P%SOn'PO~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO%['UO~P'vOt'YO#p'WO#q'XOP#naV#naf#nah#nao#nas#nav#na!P#na!Q#na!T#na!U#na!X#na!]#na!h#na!r#na!s#na!t#na!{#na!}#na#P#na#R#na#T#na#X#na#Z#na#^#na#_#na#a#na#c#na#l#na#o#na#s#na#u#na#z#na#}#na$P#na%X#na%o#na%p#na%t#na%u#na&Z#na&[#na&]#na&^#na&_#na&`#na&a#na&b#na&c#na&d#na&e#na&f#na&g#na&h#na&i#na&j#na%Z#na%_#na~Oz'ZO#[']O{&xX~Oh'_O!X&wO~Oh!iO{$jO!X&wO~O{'eO~P%SO%['hO%_'hO~OS'iO%['hO%_'hO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%k!]O~P!#uO%kWi~P!#uOV!aO_!aOa!bOh!iO!X!kO!f!mO%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%m!_O%n!_O~P!&pO%mWi%nWi~P!&pOa!bOh!iO!X!kO!f!mOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%mWi%nWi%oWi%pWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~OV!aO_!aO%q!aO%r!aO%s!aO~P!)nOVWi_Wi%qWi%rWi%sWi~P!)nO!T%dO!U%cOg&VXz&VX~O%z'kO%{'kO~P,eOz'mOg&UX~Og'oO~Oz'pO{'rO!W&XX~Oo0cOv0qOz'pO{'sO!W&XX~P'vO!W'uO~Om!oOn!oOo!rOp!sOkjisjizji{ji!xji#gji%[ji%_ji%zji~Ol!qO~P!.aOlji~P!.aOk0eOl0fOm0dOn0dOo0mOp0nO~Ot'wO~P!/jOV'|Og'}Oo0cOv0qO~P'vOg'}Oz(OO~Og(QO~O!U(SO~Og(TOz(OO!T%dO!U%cO~P%SOk0eOl0fOm0dOn0dOo0mOp0nOgqa!Tqa!Uqa%{qa!Wqa![qa!Qqa#[qatqa!mqa~PEcOV'|Oo0cOv0qO!W&Sa~P'vOz(WO!W&Sa~O!W(XO~Oz(WO!T%dO!U%cO!W&Sa~P%SOV(]Oo0cOv0qO![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~P'vOz(^O![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~O![(aO~Oz(^O!T%dO!U%cO![%}a~P%SOz(dO!T%dO!U%cO![&Ta~P%SOz(gO{&lX![&lX!m&lX%z&lX~O{(kO![(mO!m(nO%z(jO~OV&OOopOvqO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~P'vOz(pO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~O!f&UOh&sa%[&saz&sa#[&sa#g&sa%_&sa#Z&sag&sa~O%[(uO~OV#sOa#tO%uWO~Oz&]O{wa~OopOvqO~P'vOz(^O#g%}a%[%}a%_%}ag%}a{%}a![%}a!m%}a%z%}a~P%SOz(zO#g%hX%[%hX%_%hX%z%hX~O%z#|O#gUi%[Ui%_Ui~O#g&Pa%[&Pa%_&Pan&Pa~P'vOz(}O#g&Pa%[&Pa%_&Pan&Pa~O%uWO#g&ra%[&ra%_&rag&ra~Oz)SO#g&ra%[&ra%_&rag&ra~Og)VO~OV)WOh$WO%uWO~O#Z)XO~O%uWO#g&ta%[&ta%_&ta~Oz)ZO#g&ta%[&ta%_&ta~Oo0cOv0qO#g&pa%[&pa%_&pa{&pa~P'vOz)^O#g&pa%[&pa%_&pa{&pa~OV)`Oa)`O%uWO~O%z)eO~Ot)hO#j)gOP#hiV#hif#hih#hio#his#hiv#hi!P#hi!Q#hi!T#hi!U#hi!X#hi!]#hi!h#hi!r#hi!s#hi!t#hi!{#hi!}#hi#P#hi#R#hi#T#hi#X#hi#Z#hi#^#hi#_#hi#a#hi#c#hi#l#hi#o#hi#s#hi#u#hi#z#hi#}#hi$P#hi%X#hi%o#hi%p#hi%t#hi%u#hi&Z#hi&[#hi&]#hi&^#hi&_#hi&`#hi&a#hi&b#hi&c#hi&d#hi&e#hi&f#hi&g#hi&h#hi&i#hi&j#hi%Z#hi%_#hi~Ot)iOP#kiV#kif#kih#kio#kis#kiv#ki!P#ki!Q#ki!T#ki!U#ki!X#ki!]#ki!h#ki!r#ki!s#ki!t#ki!{#ki!}#ki#P#ki#R#ki#T#ki#X#ki#Z#ki#^#ki#_#ki#a#ki#c#ki#l#ki#o#ki#s#ki#u#ki#z#ki#}#ki$P#ki%X#ki%o#ki%p#ki%t#ki%u#ki&Z#ki&[#ki&]#ki&^#ki&_#ki&`#ki&a#ki&b#ki&c#ki&d#ki&e#ki&f#ki&g#ki&h#ki&i#ki&j#ki%Z#ki%_#ki~OV)kOn&wa~P'vOz)lOn&wa~Oz)lOn&wa~P%SOn)pO~O%Y)tO~Ot)wO#p'WO#q)vOP#niV#nif#nih#nio#nis#niv#ni!P#ni!Q#ni!T#ni!U#ni!X#ni!]#ni!h#ni!r#ni!s#ni!t#ni!{#ni!}#ni#P#ni#R#ni#T#ni#X#ni#Z#ni#^#ni#_#ni#a#ni#c#ni#l#ni#o#ni#s#ni#u#ni#z#ni#}#ni$P#ni%X#ni%o#ni%p#ni%t#ni%u#ni&Z#ni&[#ni&]#ni&^#ni&_#ni&`#ni&a#ni&b#ni&c#ni&d#ni&e#ni&f#ni&g#ni&h#ni&i#ni&j#ni%Z#ni%_#ni~OV)zOo0cOv0qO{$jO~P'vOo0cOv0qO{&xa~P'vOz*OO{&xa~OV*SOa*TOg*WO%q*UO%uWO~O{$jO&{*YO~Oh'_O~Oh!iO{$jO~O%[*_O~O%[*aO%_*aO~OV$}Oa$}Oo0cOv0qOg&Ua~P'vOz*dOg&Ua~Oo0cOv0qO{*gO!W&Xa~P'vOz*hO!W&Xa~Oo0cOv0qOz*hO{*kO!W&Xa~P'vOo0cOv0qOz*hO!W&Xa~P'vOz*hO{*kO!W&Xa~Om0dOn0dOo0mOp0nOgjikjisjizji!Tji!Uji%{ji!Wji{ji![ji#gji%[ji%_ji!Qji#[jitji!mji%zji~Ol0fO~P!NkOlji~P!NkOV'|Og*pOo0cOv0qO~P'vOn*rO~Og*pOz*tO~Og*uO~OV'|Oo0cOv0qO!W&Si~P'vOz*vO!W&Si~O!W*wO~OV(]Oo0cOv0qO![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~P'vOz*zO!T%dO!U%cO![&Ti~Oz*}O![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~O![+OO~Oa+QOo0cOv0qO![&Ti~P'vOz*zO![&Ti~O![+SO~OV+UOo0cOv0qO{&la![&la!m&la%z&la~P'vOz+VO{&la![&la!m&la%z&la~O!]+YO&n+[O![!nX~O![+^O~O{(kO![+_O~O{(kO![+_O!m+`O~OV&OOopOvqO{%hq!x%hq#g%hq%[%hq%_%hq%z%hq~P'vOz$ri{$ri!x$ri#g$ri%[$ri%_$ri%z$ri~P%SOV&OOopOvqO~P'vOV&OOo0cOv0qO#g%ha%[%ha%_%ha%z%ha~P'vOz+aO#g%ha%[%ha%_%ha%z%ha~Oz$ia#g$ia%[$ia%_$ian$ia~P%SO#g&Pi%[&Pi%_&Pin&Pi~P'vOz+dO#g#Wq%[#Wq%_#Wq~O#[+eOz$va#g$va%[$va%_$vag$va~O%uWO#g&ri%[&ri%_&rig&ri~Oz+gO#g&ri%[&ri%_&rig&ri~OV+iOh$WO%uWO~O%uWO#g&ti%[&ti%_&ti~Oo0cOv0qO#g&pi%[&pi%_&pi{&pi~P'vO{#{Oz#eX!W#eX~Oz+mO!W&uX~O!W+oO~Ot+rO#j)gOP#hqV#hqf#hqh#hqo#hqs#hqv#hq!P#hq!Q#hq!T#hq!U#hq!X#hq!]#hq!h#hq!r#hq!s#hq!t#hq!{#hq!}#hq#P#hq#R#hq#T#hq#X#hq#Z#hq#^#hq#_#hq#a#hq#c#hq#l#hq#o#hq#s#hq#u#hq#z#hq#}#hq$P#hq%X#hq%o#hq%p#hq%t#hq%u#hq&Z#hq&[#hq&]#hq&^#hq&_#hq&`#hq&a#hq&b#hq&c#hq&d#hq&e#hq&f#hq&g#hq&h#hq&i#hq&j#hq%Z#hq%_#hq~On$|az$|a~P%SOV)kOn&wi~P'vOz+yOn&wi~Oz,TO{$jO#[,TO~O#q,VOP#nqV#nqf#nqh#nqo#nqs#nqv#nq!P#nq!Q#nq!T#nq!U#nq!X#nq!]#nq!h#nq!r#nq!s#nq!t#nq!{#nq!}#nq#P#nq#R#nq#T#nq#X#nq#Z#nq#^#nq#_#nq#a#nq#c#nq#l#nq#o#nq#s#nq#u#nq#z#nq#}#nq$P#nq%X#nq%o#nq%p#nq%t#nq%u#nq&Z#nq&[#nq&]#nq&^#nq&_#nq&`#nq&a#nq&b#nq&c#nq&d#nq&e#nq&f#nq&g#nq&h#nq&i#nq&j#nq%Z#nq%_#nq~O#[,WOz%Oa{%Oa~Oo0cOv0qO{&xi~P'vOz,YO{&xi~O{#{O%z,[Og&zXz&zX~O%uWOg&zXz&zX~Oz,`Og&yX~Og,bO~O%Y,eO~O!T%dO!U%cOg&Viz&Vi~OV$}Oa$}Oo0cOv0qOg&Ui~P'vO{,hOz$la!W$la~Oo0cOv0qO{,iOz$la!W$la~P'vOo0cOv0qO{*gO!W&Xi~P'vOz,lO!W&Xi~Oo0cOv0qOz,lO!W&Xi~P'vOz,lO{,oO!W&Xi~Og$hiz$hi!W$hi~P%SOV'|Oo0cOv0qO~P'vOn,qO~OV'|Og,rOo0cOv0qO~P'vOV'|Oo0cOv0qO!W&Sq~P'vOz$gi![$gi#g$gi%[$gi%_$gig$gi{$gi!m$gi%z$gi~P%SOV(]Oo0cOv0qO~P'vOa+QOo0cOv0qO![&Tq~P'vOz,sO![&Tq~O![,tO~OV(]Oo0cOv0qO![%}q#g%}q%[%}q%_%}qg%}q{%}q!m%}q%z%}q~P'vO{,uO~OV+UOo0cOv0qO{&li![&li!m&li%z&li~P'vOz,zO{&li![&li!m&li%z&li~O!]+YO&n+[O![!na~O{(kO![,}O~OV&OOo0cOv0qO#g%hi%[%hi%_%hi%z%hi~P'vOz-OO#g%hi%[%hi%_%hi%z%hi~O%uWO#g&rq%[&rq%_&rqg&rq~Oz-RO#g&rq%[&rq%_&rqg&rq~OV)`Oa)`O%uWO!W&ua~Oz-TO!W&ua~On$|iz$|i~P%SOV)kO~P'vOV)kOn&wq~P'vOt-XOP#myV#myf#myh#myo#mys#myv#my!P#my!Q#my!T#my!U#my!X#my!]#my!h#my!r#my!s#my!t#my!{#my!}#my#P#my#R#my#T#my#X#my#Z#my#^#my#_#my#a#my#c#my#l#my#o#my#s#my#u#my#z#my#}#my$P#my%X#my%o#my%p#my%t#my%u#my&Z#my&[#my&]#my&^#my&_#my&`#my&a#my&b#my&c#my&d#my&e#my&f#my&g#my&h#my&i#my&j#my%Z#my%_#my~O%Z-]O%_-]O~P`O#q-^OP#nyV#nyf#nyh#nyo#nys#nyv#ny!P#ny!Q#ny!T#ny!U#ny!X#ny!]#ny!h#ny!r#ny!s#ny!t#ny!{#ny!}#ny#P#ny#R#ny#T#ny#X#ny#Z#ny#^#ny#_#ny#a#ny#c#ny#l#ny#o#ny#s#ny#u#ny#z#ny#}#ny$P#ny%X#ny%o#ny%p#ny%t#ny%u#ny&Z#ny&[#ny&]#ny&^#ny&_#ny&`#ny&a#ny&b#ny&c#ny&d#ny&e#ny&f#ny&g#ny&h#ny&i#ny&j#ny%Z#ny%_#ny~Oz-aO{$jO#[-aO~Oo0cOv0qO{&xq~P'vOz-dO{&xq~O%z,[Og&zaz&za~O{#{Og&zaz&za~OV*SOa*TO%q*UO%uWOg&ya~Oz-hOg&ya~O$S-lO~OV$}Oa$}Oo0cOv0qO~P'vOo0cOv0qO{-mOz$li!W$li~P'vOo0cOv0qOz$li!W$li~P'vO{-mOz$li!W$li~Oo0cOv0qO{*gO~P'vOo0cOv0qO{*gO!W&Xq~P'vOz-pO!W&Xq~Oo0cOv0qOz-pO!W&Xq~P'vOs-sO!T%dO!U%cOg&Oq!W&Oq![&Oqz&Oq~P!/jOa+QOo0cOv0qO![&Ty~P'vOz$ji![$ji~P%SOa+QOo0cOv0qO~P'vOV+UOo0cOv0qO~P'vOV+UOo0cOv0qO{&lq![&lq!m&lq%z&lq~P'vO{(kO![-xO!m-yO%z-wO~OV&OOo0cOv0qO#g%hq%[%hq%_%hq%z%hq~P'vO%uWO#g&ry%[&ry%_&ryg&ry~OV)`Oa)`O%uWO!W&ui~Ot-}OP#m!RV#m!Rf#m!Rh#m!Ro#m!Rs#m!Rv#m!R!P#m!R!Q#m!R!T#m!R!U#m!R!X#m!R!]#m!R!h#m!R!r#m!R!s#m!R!t#m!R!{#m!R!}#m!R#P#m!R#R#m!R#T#m!R#X#m!R#Z#m!R#^#m!R#_#m!R#a#m!R#c#m!R#l#m!R#o#m!R#s#m!R#u#m!R#z#m!R#}#m!R$P#m!R%X#m!R%o#m!R%p#m!R%t#m!R%u#m!R&Z#m!R&[#m!R&]#m!R&^#m!R&_#m!R&`#m!R&a#m!R&b#m!R&c#m!R&d#m!R&e#m!R&f#m!R&g#m!R&h#m!R&i#m!R&j#m!R%Z#m!R%_#m!R~Oo0cOv0qO{&xy~P'vOV*SOa*TO%q*UO%uWOg&yi~O$S-lO%Z.VO%_.VO~OV.aOh._O!X.^O!].`O!h.YO!s.[O!t.[O%p.XO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O~Oo0cOv0qOz$lq!W$lq~P'vO{.fOz$lq!W$lq~Oo0cOv0qO{*gO!W&Xy~P'vOz.gO!W&Xy~Oo0cOv.kO~P'vOs-sO!T%dO!U%cOg&Oy!W&Oy![&Oyz&Oy~P!/jO{(kO![.nO~O{(kO![.nO!m.oO~OV*SOa*TO%q*UO%uWO~Oh.tO!f.rOz$TX#[$TX%j$TXg$TX~Os$TX{$TX!W$TX![$TX~P$-bO%o.vO%p.vOs$UXz$UX{$UX#[$UX%j$UX!W$UXg$UX![$UX~O!h.xO~Oz.|O#[/OO%j.yOs&|X{&|X!W&|Xg&|X~Oa/RO~P$)zOh.tOs&}Xz&}X{&}X#[&}X%j&}X!W&}Xg&}X![&}X~Os/VO{$jO~Oo0cOv0qOz$ly!W$ly~P'vOo0cOv0qO{*gO!W&X!R~P'vOz/ZO!W&X!R~Og&RXs&RX!T&RX!U&RX!W&RX![&RXz&RX~P!/jOs-sO!T%dO!U%cOg&Qa!W&Qa![&Qaz&Qa~O{(kO![/^O~O!f.rOh$[as$[az$[a{$[a#[$[a%j$[a!W$[ag$[a![$[a~O!h/eO~O%o.vO%p.vOs$Uaz$Ua{$Ua#[$Ua%j$Ua!W$Uag$Ua![$Ua~O%j.yOs$Yaz$Ya{$Ya#[$Ya!W$Yag$Ya![$Ya~Os&|a{&|a!W&|ag&|a~P$)nOz/jOs&|a{&|a!W&|ag&|a~O!W/mO~Og/mO~O{/oO~O![/pO~Oo0cOv0qO{*gO!W&X!Z~P'vO{/sO~O%z/tO~P$-bOz/uO#[/OO%j.yOg'PX~Oz/uOg'PX~Og/wO~O!h/xO~O#[/OOs%Saz%Sa{%Sa%j%Sa!W%Sag%Sa![%Sa~O#[/OO%j.yOs%Waz%Wa{%Wa!W%Wag%Wa~Os&|i{&|i!W&|ig&|i~P$)nOz/zO#[/OO%j.yO!['Oa~Og'Pa~P$)nOz0SOg'Pa~Oa0UO!['Oi~P$)zOz0WO!['Oi~Oz0WO#[/OO%j.yO!['Oi~O#[/OO%j.yOg$biz$bi~O%z0ZO~P$-bO#[/OO%j.yOg%Vaz%Va~Og'Pi~P$)nO{0^O~Oa0UO!['Oq~P$)zOz0`O!['Oq~O#[/OO%j.yOz%Ui![%Ui~Oa0UO~P$)zOa0UO!['Oy~P$)zO#[/OO%j.yOg$ciz$ci~O#[/OO%j.yOz%Uq![%Uq~Oz+aO#g%ha%[%ha%_%ha%z%ha~P%SOV&OOo0cOv0qO~P'vOn0hO~Oo0hO~P'vO{0iO~Ot0jO~P!/jO&]&Z&j&h&i&g&f&d&e&c&b&`&a&_&^&[%u~",goto:"!=j'QPPPPPP'RP'Z*s+[+t,_,y-fP.SP'Z.r.r'ZPPP'Z2[PPPPPP2[5PPP5PP7b7k=sPP=v>h>kPP'Z'ZPP>zPP'Z'ZPP'Z'Z'Z'Z'Z?O?w'ZP?zP@QDXGuGyPG|HWH['ZPPPH_Hk'RP'R'RP'RP'RP'RP'RP'R'R'RP'RPP'RPP'RP'RPHqH}IVPI^IdPI^PI^I^PPPI^PKrPK{LVL]KrPI^LfPI^PLmLsPLwM]MzNeLwLwNkNxLwLwLwLw! ^! d! g! l! o! y!!P!!]!!o!!u!#P!#V!#s!#y!$P!$Z!$a!$g!$y!%T!%Z!%a!%k!%q!%w!%}!&T!&Z!&e!&k!&u!&{!'U!'[!'k!'s!'}!(UPPPPPPPPPPP!([!(_!(e!(n!(x!)TPPPPPPPPPPPP!-u!/Z!3^!6oPP!6w!7W!7a!8Y!8P!8c!8i!8l!8o!8r!8z!9jPPPPPPPPPPPPPPPPP!9m!9q!9wP!:]!:a!:m!:v!;S!;j!;m!;p!;v!;|!_![!]Do!]!^Es!^!_FZ!_!`Gk!`!aHX!a!b%T!b!cIf!c!dJU!d!eK^!e!hJU!h!i!#f!i!tJU!t!u!,|!u!wJU!w!x!.t!x!}JU!}#O!0S#O#P&o#P#Q!0j#Q#R!1Q#R#SJU#S#T%T#T#UJU#U#VK^#V#YJU#Y#Z!#f#Z#fJU#f#g!,|#g#iJU#i#j!.t#j#oJU#o#p!1n#p#q!1s#q#r!2a#r#s!2f#s$g%T$g;'SJU;'S;=`KW<%lOJU`%YT&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T`%lP;=`<%l%To%v]&n`%c_OX%TXY%oY[%T[]%o]p%Tpq%oq#O%T#O#P&o#P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To&tX&n`OY%TYZ%oZ]%T]^%o^#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc'f[&n`O!_%T!_!`([!`#T%T#T#U(r#U#f%T#f#g(r#g#h(r#h#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(cTmR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(yT!mR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk)aV&n`&[ZOr%Trs)vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk){V&n`Or%Trs*bs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk*iT&n`&^ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To+PZS_&n`OY*xYZ%TZ]*x]^%T^#o*x#o#p+r#p#q*x#q#r+r#r;'S*x;'S;=`,^<%lO*x_+wTS_OY+rZ]+r^;'S+r;'S;=`,W<%lO+r_,ZP;=`<%l+ro,aP;=`<%l*xj,kV%rQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-XT!xY&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-oV%lQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.]V&n`&ZZOw%Twx.rx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.wV&n`Ow%Twx/^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/eT&n`&]ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/{ThZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc0cTgR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk0yXVZ&n`Oz%Tz{1f{!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk1mVaR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk2ZV%oZ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc2wTzR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To3_W%pZ&n`O!_%T!_!`-Q!`!a3w!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Td4OT&{S&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk4fX!fQ&n`O!O%T!O!P5R!P!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5WV&n`O!O%T!O!P5m!P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5tT!rZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti6[a!hX&n`O!Q%T!Q![6T![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S6T#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti7fZ&n`O{%T{|8X|}%T}!O8X!O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8^V&n`O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8z]!hX&n`O!Q%T!Q![8s![!l%T!l!m9s!m#R%T#R#S8s#S#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti9zT!hX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk:bX%qR&n`O!P%T!P!Q:}!Q!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj;UV%sQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti;ro!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!d%T!d!e?q!e!g%T!g!h7a!h!l%T!l!m9s!m!q%T!q!rA]!r!z%T!z!{Bq!{#R%T#R#S>_#S#U%T#U#V?q#V#X%T#X#Y7a#Y#^%T#^#_9s#_#c%T#c#dA]#d#l%T#l#mBq#m#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti=xV&n`O!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti>fc!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S>_#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti?vY&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti@mY!hX&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiAbX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBUX!hX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBv]&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiCv]!hX&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToDvV{_&n`O!_%T!_!`E]!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TcEdT%{R&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkEzT#gZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkFbXmR&n`O!^%T!^!_F}!_!`([!`!a([!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjGUV%mQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkGrV%zZ&n`O!_%T!_!`([!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkH`WmR&n`O!_%T!_!`([!`!aHx!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjIPV%nQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkIoV_Q#}P&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToJ_]&n`&YS%uZO!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoKZP;=`<%lJUoKge&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!tJU!t!uLx!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#gLx#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoMRa&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUkN_V&n`&`ZOr%TrsNts#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkNyV&n`Or%Trs! `s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! gT&n`&bZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! }V&n`&_ZOw%Twx!!dx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!!iV&n`Ow%Twx!#Ox#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!#VT&n`&aZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!#oe&n`&YS%uZOr%Trs!%Qsw%Twx!&px!Q%T!Q![JU![!c%T!c!tJU!t!u!(`!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#g!(`#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!%XV&n`&dZOr%Trs!%ns#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!%sV&n`Or%Trs!&Ys#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&aT&n`&fZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&wV&n`&cZOw%Twx!'^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!'cV&n`Ow%Twx!'xx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!(PT&n`&eZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!(ia&n`&YS%uZOr%Trs!)nsw%Twx!+^x!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!)uV&n`&hZOr%Trs!*[s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*aV&n`Or%Trs!*vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*}T&n`&jZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!+eV&n`&gZOw%Twx!+zx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,PV&n`Ow%Twx!,fx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,mT&n`&iZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!-Vi&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!dJU!d!eLx!e!hJU!h!i!(`!i!}JU!}#R%T#R#SJU#S#T%T#T#UJU#U#VLx#V#YJU#Y#Z!(`#Z#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUo!.}a&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!0ZT!XZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc!0qT!WR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj!1XV%kQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!1sO!]~k!1zV%jR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!2fO![~i!2mT%tX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T",tokenizers:[tx,Yb,Zb,ix,0,1,2,3,4],topRules:{Script:[0,5]},specialized:[{term:221,get:n=>rx[n]||-1}],tokenPrec:7668}),Wh=new Mg,rd=new Set(["Script","Body","FunctionDefinition","ClassDefinition","LambdaExpression","ForStatement","MatchClause"]);function Gn(n){return(e,t,i)=>{if(i)return!1;let s=e.node.getChild("VariableName");return s&&t(s,n),!0}}const lx={FunctionDefinition:Gn("function"),ClassDefinition:Gn("class"),ForStatement(n,e,t){if(t){for(let i=n.node.firstChild;i;i=i.nextSibling)if(i.name=="VariableName")e(i,"variable");else if(i.name=="in")break}},ImportStatement(n,e){var t,i;let{node:s}=n,r=((t=s.firstChild)===null||t===void 0?void 0:t.name)=="from";for(let o=s.getChild("import");o;o=o.nextSibling)o.name=="VariableName"&&((i=o.nextSibling)===null||i===void 0?void 0:i.name)!="as"&&e(o,r?"variable":"namespace")},AssignStatement(n,e){for(let t=n.node.firstChild;t;t=t.nextSibling)if(t.name=="VariableName")e(t,"variable");else if(t.name==":"||t.name=="AssignOp")break},ParamList(n,e){for(let t=null,i=n.node.firstChild;i;i=i.nextSibling)i.name=="VariableName"&&(!t||!/\*|AssignOp/.test(t.name))&&e(i,"variable"),t=i},CapturePattern:Gn("variable"),AsPattern:Gn("variable"),__proto__:null};function od(n,e){let t=Wh.get(e);if(t)return t;let i=[],s=!0;function r(o,l){let a=n.sliceString(o.from,o.to);i.push({label:a,type:l})}return e.cursor(he.IncludeAnonymous).iterate(o=>{if(o.name){let l=lx[o.name];if(l&&l(o,r,s)||!s&&rd.has(o.name))return!1;s=!1}else if(o.to-o.from>8192){for(let l of od(n,o.node))i.push(l);return!1}}),Wh.set(e,i),i}const zh=/^[\w\xa1-\uffff][\w\d\xa1-\uffff]*$/,ld=["String","FormatString","Comment","PropertyName"];function ax(n){let e=fe(n.state).resolveInner(n.pos,-1);if(ld.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&zh.test(n.state.sliceDoc(e.from,e.to));if(!t&&!n.explicit)return null;let i=[];for(let s=e;s;s=s.parent)rd.has(s.name)&&(i=i.concat(od(n.state.doc,s)));return{options:i,from:t?e.from:n.pos,validFor:zh}}const hx=["__annotations__","__builtins__","__debug__","__doc__","__import__","__name__","__loader__","__package__","__spec__","False","None","True"].map(n=>({label:n,type:"constant"})).concat(["ArithmeticError","AssertionError","AttributeError","BaseException","BlockingIOError","BrokenPipeError","BufferError","BytesWarning","ChildProcessError","ConnectionAbortedError","ConnectionError","ConnectionRefusedError","ConnectionResetError","DeprecationWarning","EOFError","Ellipsis","EncodingWarning","EnvironmentError","Exception","FileExistsError","FileNotFoundError","FloatingPointError","FutureWarning","GeneratorExit","IOError","ImportError","ImportWarning","IndentationError","IndexError","InterruptedError","IsADirectoryError","KeyError","KeyboardInterrupt","LookupError","MemoryError","ModuleNotFoundError","NameError","NotADirectoryError","NotImplemented","NotImplementedError","OSError","OverflowError","PendingDeprecationWarning","PermissionError","ProcessLookupError","RecursionError","ReferenceError","ResourceWarning","RuntimeError","RuntimeWarning","StopAsyncIteration","StopIteration","SyntaxError","SyntaxWarning","SystemError","SystemExit","TabError","TimeoutError","TypeError","UnboundLocalError","UnicodeDecodeError","UnicodeEncodeError","UnicodeError","UnicodeTranslateError","UnicodeWarning","UserWarning","ValueError","Warning","ZeroDivisionError"].map(n=>({label:n,type:"type"}))).concat(["bool","bytearray","bytes","classmethod","complex","float","frozenset","int","list","map","memoryview","object","range","set","staticmethod","str","super","tuple","type"].map(n=>({label:n,type:"class"}))).concat(["abs","aiter","all","anext","any","ascii","bin","breakpoint","callable","chr","compile","delattr","dict","dir","divmod","enumerate","eval","exec","exit","filter","format","getattr","globals","hasattr","hash","help","hex","id","input","isinstance","issubclass","iter","len","license","locals","max","min","next","oct","open","ord","pow","print","property","quit","repr","reversed","round","setattr","slice","sorted","sum","vars","zip"].map(n=>({label:n,type:"function"}))),cx=[at("def ${name}(${params}):\n ${}",{label:"def",detail:"function",type:"keyword"}),at("for ${name} in ${collection}:\n ${}",{label:"for",detail:"loop",type:"keyword"}),at("while ${}:\n ${}",{label:"while",detail:"loop",type:"keyword"}),at("try:\n ${}\nexcept ${error}:\n ${}",{label:"try",detail:"/ except block",type:"keyword"}),at(`if \${}: -`,{label:"if",detail:"block",type:"keyword"}),at("if ${}:\n ${}\nelse:\n ${}",{label:"if",detail:"/ else block",type:"keyword"}),at("class ${name}:\n def __init__(self, ${params}):\n ${}",{label:"class",detail:"definition",type:"keyword"}),at("import ${module}",{label:"import",detail:"statement",type:"keyword"}),at("from ${module} import ${names}",{label:"from",detail:"import",type:"keyword"})],fx=ky(ld,Bu(hx.concat(cx)));function Rr(n){let{node:e,pos:t}=n,i=n.lineIndent(t,-1),s=null;for(;;){let r=e.childBefore(t);if(r)if(r.name=="Comment")t=r.from;else if(r.name=="Body"||r.name=="MatchBody")n.baseIndentFor(r)+n.unit<=i&&(s=r),e=r;else if(r.name=="MatchClause")e=r;else if(r.type.is("Statement"))e=r;else break;else break}return s}function Dr(n,e){let t=n.baseIndentFor(e),i=n.lineAt(n.pos,-1),s=i.from+i.text.length;return/^\s*($|#)/.test(i.text)&&n.node.tot?null:t+n.unit}const Er=xs.define({name:"python",parser:ox.configure({props:[nl.add({Body:n=>{var e;let t=/^\s*(#|$)/.test(n.textAfter)&&Rr(n)||n.node;return(e=Dr(n,t))!==null&&e!==void 0?e:n.continue()},MatchBody:n=>{var e;let t=Rr(n);return(e=Dr(n,t||n.node))!==null&&e!==void 0?e:n.continue()},IfStatement:n=>/^\s*(else:|elif )/.test(n.textAfter)?n.baseIndent:n.continue(),"ForStatement WhileStatement":n=>/^\s*else:/.test(n.textAfter)?n.baseIndent:n.continue(),TryStatement:n=>/^\s*(except[ :]|finally:|else:)/.test(n.textAfter)?n.baseIndent:n.continue(),MatchStatement:n=>/^\s*case /.test(n.textAfter)?n.baseIndent+n.unit:n.continue(),"TupleExpression ComprehensionExpression ParamList ArgList ParenthesizedExpression":gr({closing:")"}),"DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression":gr({closing:"}"}),"ArrayExpression ArrayComprehensionExpression":gr({closing:"]"}),MemberExpression:n=>n.baseIndent+n.unit,"String FormatString":()=>null,Script:n=>{var e;let t=Rr(n);return(e=t&&Dr(n,t))!==null&&e!==void 0?e:n.continue()}}),Mf.add({"ArrayExpression DictionaryExpression SetExpression TupleExpression":tO,Body:(n,e)=>({from:n.from+1,to:n.to-(n.to==e.doc.length?0:1)}),"String FormatString":(n,e)=>({from:e.doc.lineAt(n.from).to,to:n.to})})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"'''",'"""'],stringPrefixes:["f","fr","rf","r","u","b","br","rb","F","FR","RF","R","U","B","BR","RB"]},commentTokens:{line:"#"},indentOnInput:/^\s*([\}\]\)]|else:|elif |except |finally:|case\s+[^:]*:?)$/}});function ux(){return new Xg(Er,[Er.data.of({autocomplete:ax}),Er.data.of({autocomplete:fx})])}var qo={};function vl(n,e){for(var t=0;t1&&n.eat("$");var t=n.next();return/['"({]/.test(t)?(e.tokens[0]=Ks(t,t=="("?"quote":t=="{"?"def":"string"),wi(n,e)):(/\d/.test(t)||n.eatWhile(/\w/),e.tokens.shift(),"def")};function mx(n){return function(e,t){return e.sol()&&e.string==n&&t.tokens.shift(),e.skipToEnd(),"string.special"}}function wi(n,e){return(e.tokens[0]||dx)(n,e)}const Ih={name:"shell",startState:function(){return{tokens:[]}},token:function(n,e){return wi(n,e)},languageData:{autocomplete:ad.concat(hd,cd),closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"#"}}};var gx=_h('
');function qx(n,e){Nh(e,!1);const[t,i]=Sd(),s=()=>xd(kd,"$themeStore",t),r=Wi(),o=Fh();let l=Be(e,"value",12,""),a=Be(e,"language",12,"text"),h=Be(e,"readonly",8,!1);const c="";let f=Be(e,"minHeight",8,"200px"),u=Be(e,"autoDetect",8,!0),d=Be(e,"enableTemplateCompletion",8,!1),p=Wi(),m=Wi();function g(R){return R?[I1]:[]}function y(R){switch(R){case"python":return ux();case"bash":return ws.define(Ih);case"powershell":return ws.define(Ih);case"text":default:return[]}}function S(R){const P=R.split(` -`)[0]?.trim()||"";return P.startsWith("#!/bin/bash")||P.startsWith("#!/bin/sh")?"bash":P.startsWith("#!/usr/bin/env pwsh")||P.includes("#ps1_sysnative")?"powershell":P.startsWith("#!/usr/bin/env python")||P.startsWith("#!/usr/bin/python")?"python":R.includes("param(")||R.includes("Write-Host")||R.includes("$_")?"powershell":R.includes("def ")||R.includes("import ")||R.includes("print(")?"python":R.includes("echo ")||R.includes("export ")||R.includes("if [")?"bash":"text"}const k=[{label:"RunnerName",type:"string",detail:"The name of the runner instance"},{label:"MetadataURL",type:"string",detail:"URL for accessing runner metadata service"},{label:"Token",type:"string",detail:"Authentication token for runner registration"},{label:"RepoURL",type:"string",detail:"Repository URL"},{label:"DownloadURL",type:"string",detail:"URL to download the runner package"},{label:"FileName",type:"string",detail:"Name of the downloaded runner file"},{label:"TempDir",type:"string",detail:"Temporary directory path"},{label:"RunnerDir",type:"string",detail:"Runner installation directory"},{label:"GitHubRunnerGroup",type:"string",detail:"GitHub runner group name"},{label:"Labels",type:"[]string",detail:"Array of runner labels"},{label:"CACertBundle",type:"[]byte",detail:"CA certificate bundle"},{label:"OSType",type:"string",detail:"Operating system type (linux/windows)"},{label:"OSArch",type:"string",detail:"Operating system architecture (amd64/arm64)"},{label:"Flavor",type:"string",detail:"Runner flavor/size specification"},{label:"Image",type:"string",detail:"Runner image name"},{label:"ImageOS",type:"string",detail:"Operating system of the image"},{label:"ImageOSVersion",type:"string",detail:"Version of the operating system"},{label:"PoolID",type:"string",detail:"Pool identifier"},{label:"ExtraSpecs",type:"json.RawMessage",detail:"Additional specifications as JSON"},{label:"JitConfigEnabled",type:"bool",detail:"Whether just-in-time configuration is enabled"},{label:"UserDataOptions",type:"UserDataOptions",detail:"User data configuration options"}],v=[{label:"print",type:"function",detail:"Print arguments to output"},{label:"printf",type:"function",detail:"Print formatted string"},{label:"println",type:"function",detail:"Print arguments with newline"},{label:"len",type:"function",detail:"Get length of array, slice, map, or string"},{label:"index",type:"function",detail:"Get element at index from array or slice"},{label:"slice",type:"function",detail:"Create slice from array"},{label:"range",type:"function",detail:"Iterate over array, slice, or map"},{label:"if",type:"function",detail:"Conditional execution"},{label:"else",type:"function",detail:"Alternative execution branch"},{label:"end",type:"function",detail:"End block statement"},{label:"with",type:"function",detail:"Change context to specified value"},{label:"template",type:"function",detail:"Include another template"},{label:"define",type:"function",detail:"Define a named template"},{label:"block",type:"function",detail:"Define a template block"}];function x(R){if(!d())return null;const E=R.state.doc.lineAt(R.pos),P=E.text,q=R.pos-E.from,W=P.slice(0,q),N=P.slice(q),ee=W.lastIndexOf("{{"),K=N.indexOf("}}");if(ee===-1||K===-1)return null;const te=W.slice(ee+2),ie=te.match(/\.(\w*)$/);if(ie){const H=ie[1];return{from:R.pos-H.length,options:k.filter(ne=>ne.label.toLowerCase().startsWith(H.toLowerCase())).map(ne=>({label:ne.label,type:ne.type,detail:ne.detail,info:`${ne.type}: ${ne.detail}`}))}}const Se=te.match(/(\w+)$/);if(Se){const H=Se[1],ke=R.pos-H.length,ne=[...v.map(se=>({label:se.label,type:se.type,detail:se.detail,info:se.detail})),...k.map(se=>({label:`.${se.label}`,type:se.type,detail:se.detail,info:`${se.type}: ${se.detail}`}))];return{from:ke,options:ne.filter(se=>se.label.toLowerCase().includes(H.toLowerCase()))}}return te.trim()===""?{from:R.pos,options:[...v.map(H=>({label:H.label,type:H.type,detail:H.detail,info:H.detail})),...k.map(H=>({label:`.${H.label}`,type:H.type,detail:H.detail,info:`${H.type}: ${H.detail}`}))]}:null}function w(){if(!j(m))return;const R=[xh,...g(j(r)),y(a()),Q.updateListener.of(P=>{if(P.docChanged){const q=P.state.doc.toString();l(q),o("change",{value:q})}}),I.readOnly.of(h()),Q.theme({"&":{minHeight:f()},".cm-editor":{minHeight:f()},".cm-scroller":{minHeight:f()}})];d()&&R.push(Ro({override:[x]}));const E=I.create({doc:l(),extensions:R});zi(p,new Q({state:E,parent:j(m)}))}function T(){if(!j(p))return;const R=j(p).state.doc.toString();R!==l()&&j(p).dispatch({changes:{from:0,to:R.length,insert:l()}});const E=[xh,...g(j(r)),y(a()),Q.updateListener.of(P=>{if(P.docChanged){const q=P.state.doc.toString();l(q),o("change",{value:q})}}),I.readOnly.of(h()),Q.theme({"&":{minHeight:f()},".cm-editor":{minHeight:f()},".cm-scroller":{minHeight:f()}})];d()&&E.push(Ro({override:[x]})),j(p).dispatch({effects:B.reconfigure.of(E)})}pd(()=>{w()}),md(()=>{j(p)&&j(p).destroy()}),Wt(()=>s(),()=>{zi(r,s())}),Wt(()=>(zt(u()),zt(a()),zt(l())),()=>{if(u()&&a()==="text"&&l()){const R=S(l());R!=="text"&&a(R)}}),Wt(()=>(j(p),zt(a())),()=>{j(p)&&a()&&T()}),Wt(()=>(j(p),zt(l())),()=>{j(p)&&l()!==j(p).state.doc.toString()&&T()}),Wt(()=>(j(p),j(r)),()=>{j(p)&&j(r)!==void 0&&T()}),Xh(),Vh();var $=gx();bd($,R=>zi(m,R),()=>j(m)),St(n,$),vd(e,"placeholder",c);var L=Uh({placeholder:c});return i(),L}var Ox=$o(''),yx=$o(''),bx=$o(''),xx=_h('

');function $x(n,e){Nh(e,!1);const t=Wi(),i=Wi();let s=Be(e,"title",8),r=Be(e,"message",8),o=Be(e,"confirmText",8,"Confirm"),l=Be(e,"cancelText",8,"Cancel"),a=Be(e,"variant",8,"warning"),h=Be(e,"loading",8,!1);const c=Fh();function f(){c("confirm")}Wt(()=>zt(a()),()=>{zi(t,a()==="danger"?"text-red-600 dark:text-red-400":a()==="warning"?"text-yellow-600 dark:text-yellow-400":"text-blue-600 dark:text-blue-400")}),Wt(()=>zt(a()),()=>{zi(i,a()==="danger"?"bg-red-100 dark:bg-red-900":a()==="warning"?"bg-yellow-100 dark:bg-yellow-900":"bg-blue-100 dark:bg-blue-900")}),Xh(),Vh(),wd(n,{$$events:{close:()=>c("close")},children:(u,d)=>{var p=xx(),m=$t(p),g=$t(m);{var y=P=>{var q=Ox();ti(()=>wn(q,0,`h-6 w-6 ${j(t)??""}`)),St(P,q)},S=P=>{var q=Od(),W=yd(q);{var N=K=>{var te=yx();ti(()=>wn(te,0,`h-6 w-6 ${j(t)??""}`)),St(K,te)},ee=K=>{var te=bx();ti(()=>wn(te,0,`h-6 w-6 ${j(t)??""}`)),St(K,te)};Ql(W,K=>{a()==="warning"?K(N):K(ee,!1)},!0)}St(P,q)};Ql(g,P=>{a()==="danger"?P(y):P(S,!1)})}Bt(m);var k=Sn(m,2),v=$t(k),x=$t(v,!0);Bt(v);var w=Sn(v,2),T=$t(w),$=$t(T,!0);Bt(T),Bt(w),Bt(k);var L=Sn(k,2),R=$t(L);Al(R,{variant:"secondary",get disabled(){return h()},$$events:{click:()=>c("close")},children:(P,q)=>{Cl();var W=Pl();ti(()=>kn(W,l())),St(P,W)},$$slots:{default:!0}});var E=Sn(R,2);{let P=gd(()=>a()==="info"||a()==="warning"?"primary":a());Al(E,{get variant(){return j(P)},get disabled(){return h()},get loading(){return h()},$$events:{click:f},children:(q,W)=>{Cl();var N=Pl();ti(()=>kn(N,o())),St(q,N)},$$slots:{default:!0}})}Bt(L),Bt(p),ti(()=>{wn(m,1,`mx-auto flex items-center justify-center h-12 w-12 rounded-full ${j(i)??""} mb-4`),kn(x,s()),kn($,r())}),St(u,p)},$$slots:{default:!0}}),Uh()}export{$x as C,qx as a}; +`,{label:"if",detail:"block",type:"keyword"}),at("if ${}:\n ${}\nelse:\n ${}",{label:"if",detail:"/ else block",type:"keyword"}),at("class ${name}:\n def __init__(self, ${params}):\n ${}",{label:"class",detail:"definition",type:"keyword"}),at("import ${module}",{label:"import",detail:"statement",type:"keyword"}),at("from ${module} import ${names}",{label:"from",detail:"import",type:"keyword"})],fx=ky(ld,Bu(hx.concat(cx)));function Rr(n){let{node:e,pos:t}=n,i=n.lineIndent(t,-1),s=null;for(;;){let r=e.childBefore(t);if(r)if(r.name=="Comment")t=r.from;else if(r.name=="Body"||r.name=="MatchBody")n.baseIndentFor(r)+n.unit<=i&&(s=r),e=r;else if(r.name=="MatchClause")e=r;else if(r.type.is("Statement"))e=r;else break;else break}return s}function Dr(n,e){let t=n.baseIndentFor(e),i=n.lineAt(n.pos,-1),s=i.from+i.text.length;return/^\s*($|#)/.test(i.text)&&n.node.tot?null:t+n.unit}const Er=Ss.define({name:"python",parser:ox.configure({props:[nl.add({Body:n=>{var e;let t=/^\s*(#|$)/.test(n.textAfter)&&Rr(n)||n.node;return(e=Dr(n,t))!==null&&e!==void 0?e:n.continue()},MatchBody:n=>{var e;let t=Rr(n);return(e=Dr(n,t||n.node))!==null&&e!==void 0?e:n.continue()},IfStatement:n=>/^\s*(else:|elif )/.test(n.textAfter)?n.baseIndent:n.continue(),"ForStatement WhileStatement":n=>/^\s*else:/.test(n.textAfter)?n.baseIndent:n.continue(),TryStatement:n=>/^\s*(except[ :]|finally:|else:)/.test(n.textAfter)?n.baseIndent:n.continue(),MatchStatement:n=>/^\s*case /.test(n.textAfter)?n.baseIndent+n.unit:n.continue(),"TupleExpression ComprehensionExpression ParamList ArgList ParenthesizedExpression":gr({closing:")"}),"DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression":gr({closing:"}"}),"ArrayExpression ArrayComprehensionExpression":gr({closing:"]"}),MemberExpression:n=>n.baseIndent+n.unit,"String FormatString":()=>null,Script:n=>{var e;let t=Rr(n);return(e=t&&Dr(n,t))!==null&&e!==void 0?e:n.continue()}}),Mf.add({"ArrayExpression DictionaryExpression SetExpression TupleExpression":tO,Body:(n,e)=>({from:n.from+1,to:n.to-(n.to==e.doc.length?0:1)}),"String FormatString":(n,e)=>({from:e.doc.lineAt(n.from).to,to:n.to})})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"'''",'"""'],stringPrefixes:["f","fr","rf","r","u","b","br","rb","F","FR","RF","R","U","B","BR","RB"]},commentTokens:{line:"#"},indentOnInput:/^\s*([\}\]\)]|else:|elif |except |finally:|case\s+[^:]*:?)$/}});function ux(){return new Xg(Er,[Er.data.of({autocomplete:ax}),Er.data.of({autocomplete:fx})])}var qo={};function vl(n,e){for(var t=0;t1&&n.eat("$");var t=n.next();return/['"({]/.test(t)?(e.tokens[0]=Ks(t,t=="("?"quote":t=="{"?"def":"string"),vi(n,e)):(/\d/.test(t)||n.eatWhile(/\w/),e.tokens.shift(),"def")};function mx(n){return function(e,t){return e.sol()&&e.string==n&&t.tokens.shift(),e.skipToEnd(),"string.special"}}function vi(n,e){return(e.tokens[0]||dx)(n,e)}const Ih={name:"shell",startState:function(){return{tokens:[]}},token:function(n,e){return vi(n,e)},languageData:{autocomplete:ad.concat(hd,cd),closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"#"}}};var gx=_h('
');function qx(n,e){Nh(e,!1);const[t,i]=Sd(),s=()=>xd(kd,"$themeStore",t),r=zi(),o=Fh();let l=Be(e,"value",12,""),a=Be(e,"language",12,"text"),h=Be(e,"readonly",8,!1);const c="";let f=Be(e,"minHeight",8,"200px"),u=Be(e,"autoDetect",8,!0),d=Be(e,"enableTemplateCompletion",8,!1),p=zi(),m=zi();function g(R){return R?[I1]:[]}function y(R){switch(R){case"python":return ux();case"bash":return vs.define(Ih);case"powershell":return vs.define(Ih);case"text":default:return[]}}function S(R){const C=R.split(` +`)[0]?.trim()||"";return C.startsWith("#!/bin/bash")||C.startsWith("#!/bin/sh")?"bash":C.startsWith("#!/usr/bin/env pwsh")||C.includes("#ps1_sysnative")?"powershell":C.startsWith("#!/usr/bin/env python")||C.startsWith("#!/usr/bin/python")?"python":R.includes("param(")||R.includes("Write-Host")||R.includes("$_")?"powershell":R.includes("def ")||R.includes("import ")||R.includes("print(")?"python":R.includes("echo ")||R.includes("export ")||R.includes("if [")?"bash":"text"}const k=[{label:"RunnerName",type:"string",detail:"The name of the runner instance"},{label:"MetadataURL",type:"string",detail:"URL for accessing runner metadata service"},{label:"Token",type:"string",detail:"Authentication token for runner registration"},{label:"RepoURL",type:"string",detail:"Repository URL"},{label:"DownloadURL",type:"string",detail:"URL to download the runner package"},{label:"FileName",type:"string",detail:"Name of the downloaded runner file"},{label:"TempDir",type:"string",detail:"Temporary directory path"},{label:"RunnerDir",type:"string",detail:"Runner installation directory"},{label:"GitHubRunnerGroup",type:"string",detail:"GitHub runner group name"},{label:"Labels",type:"[]string",detail:"Array of runner labels"},{label:"CACertBundle",type:"[]byte",detail:"CA certificate bundle"},{label:"OSType",type:"string",detail:"Operating system type (linux/windows)"},{label:"OSArch",type:"string",detail:"Operating system architecture (amd64/arm64)"},{label:"Flavor",type:"string",detail:"Runner flavor/size specification"},{label:"Image",type:"string",detail:"Runner image name"},{label:"ImageOS",type:"string",detail:"Operating system of the image"},{label:"ImageOSVersion",type:"string",detail:"Version of the operating system"},{label:"PoolID",type:"string",detail:"Pool identifier"},{label:"ExtraSpecs",type:"json.RawMessage",detail:"Additional specifications as JSON"},{label:"JitConfigEnabled",type:"bool",detail:"Whether just-in-time configuration is enabled"},{label:"UserDataOptions",type:"UserDataOptions",detail:"User data configuration options"}],v=[{label:"print",type:"function",detail:"Print arguments to output"},{label:"printf",type:"function",detail:"Print formatted string"},{label:"println",type:"function",detail:"Print arguments with newline"},{label:"len",type:"function",detail:"Get length of array, slice, map, or string"},{label:"index",type:"function",detail:"Get element at index from array or slice"},{label:"slice",type:"function",detail:"Create slice from array"},{label:"range",type:"function",detail:"Iterate over array, slice, or map"},{label:"if",type:"function",detail:"Conditional execution"},{label:"else",type:"function",detail:"Alternative execution branch"},{label:"end",type:"function",detail:"End block statement"},{label:"with",type:"function",detail:"Change context to specified value"},{label:"template",type:"function",detail:"Include another template"},{label:"define",type:"function",detail:"Define a named template"},{label:"block",type:"function",detail:"Define a template block"}];function x(R){if(!d())return null;const $=R.state.doc.lineAt(R.pos),C=$.text,E=R.pos-$.from,q=C.slice(0,E),N=C.slice(E),ee=q.lastIndexOf("{{"),K=N.indexOf("}}");if(ee===-1||K===-1)return null;const te=q.slice(ee+2),ie=te.match(/\.(\w*)$/);if(ie){const H=ie[1];return{from:R.pos-H.length,options:k.filter(ne=>ne.label.toLowerCase().startsWith(H.toLowerCase())).map(ne=>({label:ne.label,type:ne.type,detail:ne.detail,info:`${ne.type}: ${ne.detail}`}))}}const Se=te.match(/(\w+)$/);if(Se){const H=Se[1],ke=R.pos-H.length,ne=[...v.map(se=>({label:se.label,type:se.type,detail:se.detail,info:se.detail})),...k.map(se=>({label:`.${se.label}`,type:se.type,detail:se.detail,info:`${se.type}: ${se.detail}`}))];return{from:ke,options:ne.filter(se=>se.label.toLowerCase().includes(H.toLowerCase()))}}return te.trim()===""?{from:R.pos,options:[...v.map(H=>({label:H.label,type:H.type,detail:H.detail,info:H.detail})),...k.map(H=>({label:`.${H.label}`,type:H.type,detail:H.detail,info:`${H.type}: ${H.detail}`}))]}:null}function w(){if(!j(m))return;const R=[xh,...g(j(r)),y(a()),Q.updateListener.of(C=>{if(C.docChanged){const E=C.state.doc.toString();l(E),o("change",{value:E})}}),I.readOnly.of(h()),Q.theme({"&":{minHeight:f()},".cm-editor":{minHeight:f()},".cm-scroller":{minHeight:f()}}),bi.of([{key:"Tab",run:C=>{if(h())return!1;const E=C.state.changeByRange(q=>({changes:{from:q.from,to:q.to,insert:" "},range:b.range(q.from+4,q.from+4)}));return C.dispatch(E),!0}},{key:"Ctrl-s",preventDefault:!0,run:()=>h()?!1:(o("save"),!0)}])];d()&&R.push(Ro({override:[x]}));const $=I.create({doc:l(),extensions:R});Ii(p,new Q({state:$,parent:j(m)}))}function T(){if(!j(p))return;const R=j(p).state.doc.toString();R!==l()&&j(p).dispatch({changes:{from:0,to:R.length,insert:l()}});const $=[xh,...g(j(r)),y(a()),Q.updateListener.of(C=>{if(C.docChanged){const E=C.state.doc.toString();l(E),o("change",{value:E})}}),I.readOnly.of(h()),Q.theme({"&":{minHeight:f()},".cm-editor":{minHeight:f()},".cm-scroller":{minHeight:f()}}),bi.of([{key:"Tab",run:C=>{if(h())return!1;const E=C.state.changeByRange(q=>({changes:{from:q.from,to:q.to,insert:" "},range:b.range(q.from+4,q.from+4)}));return C.dispatch(E),!0}},{key:"Ctrl-s",preventDefault:!0,run:()=>h()?!1:(o("save"),!0)}])];d()&&$.push(Ro({override:[x]})),j(p).dispatch({effects:L.reconfigure.of($)})}pd(()=>{w()}),md(()=>{j(p)&&j(p).destroy()}),Wt(()=>s(),()=>{Ii(r,s())}),Wt(()=>(zt(u()),zt(a()),zt(l())),()=>{if(u()&&a()==="text"&&l()){const R=S(l());R!=="text"&&a(R)}}),Wt(()=>(j(p),zt(a())),()=>{j(p)&&a()&&T()}),Wt(()=>(j(p),zt(l())),()=>{j(p)&&l()!==j(p).state.doc.toString()&&T()}),Wt(()=>(j(p),j(r)),()=>{j(p)&&j(r)!==void 0&&T()}),Xh(),Vh();var B=gx();bd(B,R=>Ii(m,R),()=>j(m)),St(n,B),vd(e,"placeholder",c);var W=Uh({placeholder:c});return i(),W}var Ox=$o(''),yx=$o(''),bx=$o(''),xx=_h('

');function $x(n,e){Nh(e,!1);const t=zi(),i=zi();let s=Be(e,"title",8),r=Be(e,"message",8),o=Be(e,"confirmText",8,"Confirm"),l=Be(e,"cancelText",8,"Cancel"),a=Be(e,"variant",8,"warning"),h=Be(e,"loading",8,!1);const c=Fh();function f(){c("confirm")}Wt(()=>zt(a()),()=>{Ii(t,a()==="danger"?"text-red-600 dark:text-red-400":a()==="warning"?"text-yellow-600 dark:text-yellow-400":"text-blue-600 dark:text-blue-400")}),Wt(()=>zt(a()),()=>{Ii(i,a()==="danger"?"bg-red-100 dark:bg-red-900":a()==="warning"?"bg-yellow-100 dark:bg-yellow-900":"bg-blue-100 dark:bg-blue-900")}),Xh(),Vh(),wd(n,{$$events:{close:()=>c("close")},children:(u,d)=>{var p=xx(),m=$t(p),g=$t(m);{var y=C=>{var E=Ox();ti(()=>vn(E,0,`h-6 w-6 ${j(t)??""}`)),St(C,E)},S=C=>{var E=Od(),q=yd(E);{var N=K=>{var te=yx();ti(()=>vn(te,0,`h-6 w-6 ${j(t)??""}`)),St(K,te)},ee=K=>{var te=bx();ti(()=>vn(te,0,`h-6 w-6 ${j(t)??""}`)),St(K,te)};Ql(q,K=>{a()==="warning"?K(N):K(ee,!1)},!0)}St(C,E)};Ql(g,C=>{a()==="danger"?C(y):C(S,!1)})}Bt(m);var k=kn(m,2),v=$t(k),x=$t(v,!0);Bt(v);var w=kn(v,2),T=$t(w),B=$t(T,!0);Bt(T),Bt(w),Bt(k);var W=kn(k,2),R=$t(W);Al(R,{variant:"secondary",get disabled(){return h()},$$events:{click:()=>c("close")},children:(C,E)=>{Cl();var q=Pl();ti(()=>wn(q,l())),St(C,q)},$$slots:{default:!0}});var $=kn(R,2);{let C=gd(()=>a()==="info"||a()==="warning"?"primary":a());Al($,{get variant(){return j(C)},get disabled(){return h()},get loading(){return h()},$$events:{click:f},children:(E,q)=>{Cl();var N=Pl();ti(()=>wn(N,o())),St(E,N)},$$slots:{default:!0}})}Bt(W),Bt(p),ti(()=>{vn(m,1,`mx-auto flex items-center justify-center h-12 w-12 rounded-full ${j(i)??""} mb-4`),wn(x,s()),wn(B,r())}),St(u,p)},$$slots:{default:!0}}),Uh()}export{$x as C,qx as a}; diff --git a/webapp/assets/_app/immutable/entry/app.CTbtgQsL.js b/webapp/assets/_app/immutable/entry/app.CTbtgQsL.js new file mode 100644 index 00000000..6986487c --- /dev/null +++ b/webapp/assets/_app/immutable/entry/app.CTbtgQsL.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.mv9nsFl7.js","../chunks/DsnmJJEf.js","../chunks/De-I_rkH.js","../chunks/BIqNNOMq.js","../chunks/CfI2BFUj.js","../chunks/CQh-7xkh.js","../chunks/CYb6_lpF.js","../chunks/B-zJt1QP.js","../chunks/BSYpqPvJ.js","../chunks/Cx8owuas.js","../chunks/CBy1Js1f.js","../chunks/D8ZtP9JD.js","../chunks/BIfA0Pjo.js","../chunks/C4VNo_Nu.js","../chunks/DgRPqjXE.js","../assets/0.BR5LdSBX.css","../nodes/1.BvGfDR5D.js","../nodes/2.Cr6jkYhw.js","../chunks/B1uxuBYn.js","../chunks/Gs5uNKRr.js","../chunks/CdEA5IGF.js","../chunks/BFX8vI-4.js","../chunks/CBbBPkpt.js","../chunks/BZiHL9L3.js","../nodes/3.CwF8zAox.js","../chunks/Cq4AwQWc.js","../chunks/D2YBjDB9.js","../chunks/B7If18kh.js","../chunks/Dbr2TLcG.js","../chunks/BjNB1vhO.js","../chunks/D4ORNjyB.js","../chunks/CwE4al8R.js","../chunks/DFF0ZVx4.js","../chunks/DCu5KXBe.js","../chunks/ow_oMtSd.js","../nodes/4.KZXhOjkJ.js","../nodes/5.DsFyy4r9.js","../chunks/CpPzJ1l1.js","../chunks/Db7N5hjl.js","../chunks/C6HeU_02.js","../chunks/BLHP-Xk3.js","../nodes/6.C3tvfz51.js","../chunks/CjQpknJk.js","../chunks/CIekn_9e.js","../chunks/DAaZIIvX.js","../chunks/DBZ2eikH.js","../chunks/COXBdepE.js","../nodes/7.uDnTRQ0y.js","../nodes/8.Dvj6ciIV.js","../chunks/BKBUu_Ci.js","../assets/ShellTerminal.DCUnEedW.css","../nodes/9.Bb2A_eyq.js","../nodes/10.UukODHN5.js","../nodes/11.CjCq9fG3.js","../chunks/aK-A9Gop.js","../nodes/12.CvWBofMh.js","../nodes/13.C5rQKzlZ.js","../nodes/14.CHd-pZSz.js","../chunks/BOcC5fx5.js","../nodes/15.C78GwnyQ.js","../chunks/D8qjq9ho.js","../chunks/DFRbKD7c.js","../nodes/16.CgYZVDEy.js","../chunks/BLWgJqKz.js","../nodes/17.CR3NmUj6.js","../nodes/18.FaPm3Qgi.js","../nodes/19.-4iyqaEY.js","../chunks/If6x_I-9.js","../nodes/20.DEIMaB2j.js","../nodes/21.BYVkQ1Gx.js","../chunks/C98nByjP.js","../nodes/22.C1YmVgRY.js","../chunks/mAwhcVsI.js","../nodes/23.S7zWhPrB.js"])))=>i.map(i=>d[i]); +import{k as T,aL as U,g as d,aN as B,aO as G,aP as Q,ax as W,aQ as Y,m as F,p as H,an as J,ao as K,o as X,aR as D,aS as Z,f as C,a as y,s as $,b as P,c as tt,A as I,d as et,r as rt,aT as V,D as ot,t as st,e as at}from"../chunks/BIqNNOMq.js";import"../chunks/DsnmJJEf.js";import{p as b,i as w}from"../chunks/CfI2BFUj.js";import{c as k}from"../chunks/D4ORNjyB.js";import{b as x}from"../chunks/BLHP-Xk3.js";function it(_){return class extends nt{constructor(t){super({component:_,...t})}}}class nt{#e;#t;constructor(t){var a=new Map,c=(r,e)=>{var s=F(e,!1,!1);return a.set(r,s),s};const m=new Proxy({...t.props||{},$$events:{}},{get(r,e){return d(a.get(e)??c(e,Reflect.get(r,e)))},has(r,e){return e===U?!0:(d(a.get(e)??c(e,Reflect.get(r,e))),Reflect.has(r,e))},set(r,e,s){return T(a.get(e)??c(e,s),s),Reflect.set(r,e,s)}});this.#t=(t.hydrate?B:G)(t.component,{target:t.target,anchor:t.anchor,props:m,context:t.context,intro:t.intro??!1,recover:t.recover}),(!t?.props?.$$host||t.sync===!1)&&Q(),this.#e=m.$$events;for(const r of Object.keys(this.#t))r==="$set"||r==="$destroy"||r==="$on"||W(this,r,{get(){return this.#t[r]},set(e){this.#t[r]=e},enumerable:!0});this.#t.$set=r=>{Object.assign(m,r)},this.#t.$destroy=()=>{Y(this.#t)}}$set(t){this.#t.$set(t)}$on(t,a){this.#e[t]=this.#e[t]||[];const c=(...m)=>a.call(this,...m);return this.#e[t].push(c),()=>{this.#e[t]=this.#e[t].filter(m=>m!==c)}}$destroy(){this.#t.$destroy()}}const _t="modulepreload",ct=function(_,t){return new URL(_,t).href},j={},o=function(t,a,c){let m=Promise.resolve();if(a&&a.length>0){let A=function(n){return Promise.all(n.map(l=>Promise.resolve(l).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};const e=document.getElementsByTagName("link"),s=document.querySelector("meta[property=csp-nonce]"),L=s?.nonce||s?.getAttribute("nonce");m=A(a.map(n=>{if(n=ct(n,c),n in j)return;j[n]=!0;const l=n.endsWith(".css"),f=l?'[rel="stylesheet"]':"";if(c)for(let v=e.length-1;v>=0;v--){const i=e[v];if(i.href===n&&(!l||i.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${n}"]${f}`))return;const u=document.createElement("link");if(u.rel=l?"stylesheet":_t,l||(u.as="script"),u.crossOrigin="",u.href=n,L&&u.setAttribute("nonce",L),document.head.appendChild(u),l)return new Promise((v,i)=>{u.addEventListener("load",v),u.addEventListener("error",()=>i(new Error(`Unable to preload CSS for ${n}`)))})}))}function r(e){const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=e,window.dispatchEvent(s),!s.defaultPrevented)throw e}return m.then(e=>{for(const s of e||[])s.status==="rejected"&&r(s.reason);return t().catch(r)})},Rt={};var mt=C('
'),ut=C(" ",1);function lt(_,t){H(t,!0);let a=b(t,"components",23,()=>[]),c=b(t,"data_0",3,null),m=b(t,"data_1",3,null);J(()=>t.stores.page.set(t.page)),K(()=>{t.stores,t.page,t.constructors,a(),t.form,c(),m(),t.stores.page.notify()});let r=D(!1),e=D(!1),s=D(null);X(()=>{const i=t.stores.page.subscribe(()=>{d(r)&&(T(e,!0),Z().then(()=>{T(s,document.title||"untitled page",!0)}))});return T(r,!0),i});const L=V(()=>t.constructors[1]);var A=ut(),n=y(A);{var l=i=>{const h=V(()=>t.constructors[0]);var p=I(),R=y(p);k(R,()=>d(h),(E,g)=>{x(g(E,{get data(){return c()},get form(){return t.form},get params(){return t.page.params},children:(O,vt)=>{var S=I(),N=y(S);k(N,()=>d(L),(M,q)=>{x(q(M,{get data(){return m()},get form(){return t.form},get params(){return t.page.params}}),z=>a()[1]=z,()=>a()?.[1])}),P(O,S)},$$slots:{default:!0}}),O=>a()[0]=O,()=>a()?.[0])}),P(i,p)},f=i=>{const h=V(()=>t.constructors[0]);var p=I(),R=y(p);k(R,()=>d(h),(E,g)=>{x(g(E,{get data(){return c()},get form(){return t.form},get params(){return t.page.params}}),O=>a()[0]=O,()=>a()?.[0])}),P(i,p)};w(n,i=>{t.constructors[1]?i(l):i(f,!1)})}var u=$(n,2);{var v=i=>{var h=mt(),p=et(h);{var R=E=>{var g=ot();st(()=>at(g,d(s))),P(E,g)};w(p,E=>{d(e)&&E(R)})}rt(h),P(i,h)};w(u,i=>{d(r)&&i(v)})}P(_,A),tt()}const Ot=it(lt),Lt=[()=>o(()=>import("../nodes/0.mv9nsFl7.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),import.meta.url),()=>o(()=>import("../nodes/1.BvGfDR5D.js"),__vite__mapDeps([16,1,2,3,7,8,6]),import.meta.url),()=>o(()=>import("../nodes/2.Cr6jkYhw.js"),__vite__mapDeps([17,1,2,3,4,11,5,6,13,18,19,20,21,22,14,23]),import.meta.url),()=>o(()=>import("../nodes/3.CwF8zAox.js"),__vite__mapDeps([24,1,2,3,4,11,5,6,19,20,25,26,27,28,29,30,31,18,13,14,23,32,33,34]),import.meta.url),()=>o(()=>import("../nodes/4.KZXhOjkJ.js"),__vite__mapDeps([35,1,2,3,4,5,6,19,20,25,26,27,28,18,13,14,23,29,11,30,31,32,22]),import.meta.url),()=>o(()=>import("../nodes/5.DsFyy4r9.js"),__vite__mapDeps([36,1,2,3,4,5,6,25,11,19,20,21,23,18,13,37,38,14,27,31,29,30,28,39,40,32,33,34]),import.meta.url),()=>o(()=>import("../nodes/6.C3tvfz51.js"),__vite__mapDeps([41,1,2,3,4,5,6,12,8,37,11,19,20,23,21,38,42,27,31,18,13,29,30,28,39,40,33,34,43,44,14,45,46]),import.meta.url),()=>o(()=>import("../nodes/7.uDnTRQ0y.js"),__vite__mapDeps([47,1,2,3,4,5,6,19,20,8,9,14,23]),import.meta.url),()=>o(()=>import("../nodes/8.Dvj6ciIV.js"),__vite__mapDeps([48,1,2,3,4,5,6,38,21,25,49,11,40,20,50,13,14,29,30,19,28,31,27,23,39,33,34]),import.meta.url),()=>o(()=>import("../nodes/9.Bb2A_eyq.js"),__vite__mapDeps([51,1,2,3,4,11,5,6,40,12,8,38,21,49,20,50,13,34,27,23,31]),import.meta.url),()=>o(()=>import("../nodes/10.UukODHN5.js"),__vite__mapDeps([52,1,2,3,4,5,6,19,20,8,9,23]),import.meta.url),()=>o(()=>import("../nodes/11.CjCq9fG3.js"),__vite__mapDeps([53,1,2,3,4,11,5,6,19,20,8,25,29,30,28,31,27,21,14,23,38,39,40,54,13]),import.meta.url),()=>o(()=>import("../nodes/12.CvWBofMh.js"),__vite__mapDeps([55,1,2,3,4,11,5,6,19,20,12,8,14,23,54,38,21,31]),import.meta.url),()=>o(()=>import("../nodes/13.C5rQKzlZ.js"),__vite__mapDeps([56,1,2,3,4,5,6,11,19,20,21,26,27,23,18,13,37,38,25,14,31,29,30,28,39,40,32,33,34]),import.meta.url),()=>o(()=>import("../nodes/14.CHd-pZSz.js"),__vite__mapDeps([57,1,2,3,4,5,6,12,8,37,11,19,20,23,21,38,42,27,31,18,13,29,30,28,39,40,33,34,43,44,58,14,45,46]),import.meta.url),()=>o(()=>import("../nodes/15.C78GwnyQ.js"),__vite__mapDeps([59,1,2,3,4,5,6,25,45,11,19,20,21,23,46,13,18,60,38,29,30,28,31,27,14,39,40,32,33,34,61]),import.meta.url),()=>o(()=>import("../nodes/16.CgYZVDEy.js"),__vite__mapDeps([62,1,2,3,4,11,5,6,7,8,60,19,20,21,46,23,18,13,38,44,29,30,28,31,27,39,40,33,34,43,14,63]),import.meta.url),()=>o(()=>import("../nodes/17.CR3NmUj6.js"),__vite__mapDeps([64,1,2,3,4,5,6,11,19,20,21,23,26,27,18,13,37,38,25,14,29,30,28,31,39,40,32,33,34]),import.meta.url),()=>o(()=>import("../nodes/18.FaPm3Qgi.js"),__vite__mapDeps([65,1,2,3,4,5,6,12,8,37,11,19,20,23,21,38,42,27,31,18,13,29,30,28,39,40,33,34,43,44,58,14,45,46]),import.meta.url),()=>o(()=>import("../nodes/19.-4iyqaEY.js"),__vite__mapDeps([66,1,2,3,4,5,6,25,11,19,20,21,46,23,13,18,67,38,29,30,28,31,27,14,39,40,32,33,34,61]),import.meta.url),()=>o(()=>import("../nodes/20.DEIMaB2j.js"),__vite__mapDeps([68,1,2,3,4,5,6,7,8,67,11,19,20,21,23,46,18,13,38,44,29,30,28,31,27,39,40,33,34,43,14,63]),import.meta.url),()=>o(()=>import("../nodes/21.BYVkQ1Gx.js"),__vite__mapDeps([69,1,2,3,4,8,6,5,25,28,29,11,30,19,31,27,14,23,38,21,39,40,70,18,13]),import.meta.url),()=>o(()=>import("../nodes/22.C1YmVgRY.js"),__vite__mapDeps([71,1,2,3,4,5,6,19,20,7,8,28,14,23,31,43,72,40,10,21,38,70,27,13]),import.meta.url),()=>o(()=>import("../nodes/23.S7zWhPrB.js"),__vite__mapDeps([73,1,2,3,4,5,6,19,40,20,8,7,14,23,43,72,10,21]),import.meta.url)],At=[],yt={"/":[2],"/credentials":[3],"/endpoints":[4],"/enterprises":[5],"/enterprises/[id]":[6],"/init":[7],"/instances":[8],"/instances/[id]":[9],"/login":[10],"/objects":[11],"/objects/[id]":[12],"/organizations":[13],"/organizations/[id]":[14],"/pools":[15],"/pools/[id]":[16],"/repositories":[17],"/repositories/[id]":[18],"/scalesets":[19],"/scalesets/[id]":[20],"/templates":[21],"/templates/create":[23],"/templates/[id]":[22]},dt={handleError:({error:_})=>{console.error(_)},reroute:()=>{},transport:{}},ft=Object.fromEntries(Object.entries(dt.transport).map(([_,t])=>[_,t.decode])),Tt=!1,Dt=(_,t)=>ft[_](t);export{Dt as decode,ft as decoders,yt as dictionary,Tt as hash,dt as hooks,Rt as matchers,Lt as nodes,Ot as root,At as server_loads}; diff --git a/webapp/assets/_app/immutable/entry/app.ckt_VgS1.js b/webapp/assets/_app/immutable/entry/app.ckt_VgS1.js deleted file mode 100644 index 9fcc07cd..00000000 --- a/webapp/assets/_app/immutable/entry/app.ckt_VgS1.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.CZeAwb2w.js","../chunks/DsnmJJEf.js","../chunks/TJn6xDN9.js","../chunks/DniTuB_0.js","../chunks/DbNhg6mG.js","../chunks/DD3srElq.js","../chunks/BSR16q_V.js","../chunks/H2nrvwx_.js","../chunks/DeKGyprh.js","../chunks/B_3mRBsj.js","../chunks/2CDqnvrp.js","../chunks/Ck5PkeSc.js","../chunks/CzKtu-7o.js","../chunks/DmHFwzWx.js","../chunks/CBJzOE8U.js","../assets/0.BSyLSYks.css","../nodes/1.BJGHriae.js","../nodes/2.CA1VFb0O.js","../chunks/C-ow2qSP.js","../chunks/CCQwxxp9.js","../chunks/D4Caz1gY.js","../chunks/PC4wJWhj.js","../chunks/DxDw7UWv.js","../chunks/BZiHL9L3.js","../nodes/3.C6SgVmNt.js","../chunks/BlYHwhWl.js","../chunks/DNeHGP6d.js","../chunks/LMA6-4d1.js","../chunks/B5vVe1Fo.js","../chunks/QtGwBUod.js","../chunks/BZLWIdPw.js","../chunks/DcQdHuVc.js","../chunks/hsRG7ppz.js","../chunks/Dn_Ue57e.js","../chunks/ow_oMtSd.js","../nodes/4.CvH5IZ0t.js","../nodes/5.DMUQ3452.js","../chunks/C0wSEYM-.js","../chunks/B6XSaEl0.js","../chunks/D3pbRQAB.js","../nodes/6.B8hxA90H.js","../chunks/B9-0TtNc.js","../chunks/C-xTH-sp.js","../chunks/CCF1V3nS.js","../chunks/B3nevMeU.js","../chunks/A5UGwKpF.js","../chunks/DcEwzE5l.js","../nodes/7.Bh-gc64D.js","../nodes/8.BBGRj-oZ.js","../nodes/9.CuEtSZ_K.js","../nodes/10.CMhzaZps.js","../nodes/11.BWUkmv-e.js","../chunks/aK-A9Gop.js","../nodes/12.ClmuGH2C.js","../nodes/13.CBW2uV6V.js","../nodes/14.kxrYlryy.js","../chunks/CplfXZxg.js","../nodes/15.BfnF2i2C.js","../chunks/CQ6bqX5o.js","../chunks/DW-EakRM.js","../nodes/16.CsGz5Ufi.js","../nodes/17.0oceDyoA.js","../nodes/18.QrKqJrPa.js","../nodes/19.B65AgF01.js","../chunks/NLwquURr.js","../nodes/20.CaRE9IJw.js","../nodes/21.ReXW9QTm.js","../chunks/C98nByjP.js","../nodes/22.D6A1FyiW.js","../chunks/BB5NL1nO.js","../nodes/23.Dx1VueDf.js"])))=>i.map(i=>d[i]); -import{k as y,aL as z,g as f,aN as U,aO as G,aP as Q,ax as W,aQ as Y,m as F,p as H,an as J,ao as K,o as X,aR as T,aS as Z,f as C,a as A,s as $,b as g,c as tt,A as D,d as et,r as rt,aT as I,D as ot,t as st,e as at}from"../chunks/DniTuB_0.js";import"../chunks/DsnmJJEf.js";import{p as V,i as b}from"../chunks/DbNhg6mG.js";import{c as w}from"../chunks/BZLWIdPw.js";import{b as k}from"../chunks/C-xTH-sp.js";function it(_){return class extends nt{constructor(t){super({component:_,...t})}}}class nt{#e;#t;constructor(t){var a=new Map,c=(r,e)=>{var s=F(e,!1,!1);return a.set(r,s),s};const m=new Proxy({...t.props||{},$$events:{}},{get(r,e){return f(a.get(e)??c(e,Reflect.get(r,e)))},has(r,e){return e===z?!0:(f(a.get(e)??c(e,Reflect.get(r,e))),Reflect.has(r,e))},set(r,e,s){return y(a.get(e)??c(e,s),s),Reflect.set(r,e,s)}});this.#t=(t.hydrate?U:G)(t.component,{target:t.target,anchor:t.anchor,props:m,context:t.context,intro:t.intro??!1,recover:t.recover}),(!t?.props?.$$host||t.sync===!1)&&Q(),this.#e=m.$$events;for(const r of Object.keys(this.#t))r==="$set"||r==="$destroy"||r==="$on"||W(this,r,{get(){return this.#t[r]},set(e){this.#t[r]=e},enumerable:!0});this.#t.$set=r=>{Object.assign(m,r)},this.#t.$destroy=()=>{Y(this.#t)}}$set(t){this.#t.$set(t)}$on(t,a){this.#e[t]=this.#e[t]||[];const c=(...m)=>a.call(this,...m);return this.#e[t].push(c),()=>{this.#e[t]=this.#e[t].filter(m=>m!==c)}}$destroy(){this.#t.$destroy()}}const _t="modulepreload",ct=function(_,t){return new URL(_,t).href},j={},o=function(t,a,c){let m=Promise.resolve();if(a&&a.length>0){let L=function(n){return Promise.all(n.map(d=>Promise.resolve(d).then(v=>({status:"fulfilled",value:v}),v=>({status:"rejected",reason:v}))))};const e=document.getElementsByTagName("link"),s=document.querySelector("meta[property=csp-nonce]"),O=s?.nonce||s?.getAttribute("nonce");m=L(a.map(n=>{if(n=ct(n,c),n in j)return;j[n]=!0;const d=n.endsWith(".css"),v=d?'[rel="stylesheet"]':"";if(!!c)for(let i=e.length-1;i>=0;i--){const u=e[i];if(u.href===n&&(!d||u.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${n}"]${v}`))return;const l=document.createElement("link");if(l.rel=d?"stylesheet":_t,d||(l.as="script"),l.crossOrigin="",l.href=n,O&&l.setAttribute("nonce",O),document.head.appendChild(l),d)return new Promise((i,u)=>{l.addEventListener("load",i),l.addEventListener("error",()=>u(new Error(`Unable to preload CSS for ${n}`)))})}))}function r(e){const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=e,window.dispatchEvent(s),!s.defaultPrevented)throw e}return m.then(e=>{for(const s of e||[])s.status==="rejected"&&r(s.reason);return t().catch(r)})},Rt={};var mt=C('
'),ut=C(" ",1);function lt(_,t){H(t,!0);let a=V(t,"components",23,()=>[]),c=V(t,"data_0",3,null),m=V(t,"data_1",3,null);J(()=>t.stores.page.set(t.page)),K(()=>{t.stores,t.page,t.constructors,a(),t.form,c(),m(),t.stores.page.notify()});let r=T(!1),e=T(!1),s=T(null);X(()=>{const i=t.stores.page.subscribe(()=>{f(r)&&(y(e,!0),Z().then(()=>{y(s,document.title||"untitled page",!0)}))});return y(r,!0),i});const O=I(()=>t.constructors[1]);var L=ut(),n=A(L);{var d=i=>{const u=I(()=>t.constructors[0]);var h=D(),P=A(h);w(P,()=>f(u),(p,E)=>{k(E(p,{get data(){return c()},get form(){return t.form},get params(){return t.page.params},children:(R,vt)=>{var S=D(),N=A(S);w(N,()=>f(O),(B,M)=>{k(M(B,{get data(){return m()},get form(){return t.form},get params(){return t.page.params}}),q=>a()[1]=q,()=>a()?.[1])}),g(R,S)},$$slots:{default:!0}}),R=>a()[0]=R,()=>a()?.[0])}),g(i,h)},v=i=>{const u=I(()=>t.constructors[0]);var h=D(),P=A(h);w(P,()=>f(u),(p,E)=>{k(E(p,{get data(){return c()},get form(){return t.form},get params(){return t.page.params}}),R=>a()[0]=R,()=>a()?.[0])}),g(i,h)};b(n,i=>{t.constructors[1]?i(d):i(v,!1)})}var x=$(n,2);{var l=i=>{var u=mt(),h=et(u);{var P=p=>{var E=ot();st(()=>at(E,f(s))),g(p,E)};b(h,p=>{f(e)&&p(P)})}rt(u),g(i,u)};b(x,i=>{f(r)&&i(l)})}g(_,L),tt()}const Ot=it(lt),Lt=[()=>o(()=>import("../nodes/0.CZeAwb2w.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),import.meta.url),()=>o(()=>import("../nodes/1.BJGHriae.js"),__vite__mapDeps([16,1,2,3,7,8,6]),import.meta.url),()=>o(()=>import("../nodes/2.CA1VFb0O.js"),__vite__mapDeps([17,1,2,3,4,11,5,6,13,18,19,20,21,22,14,23]),import.meta.url),()=>o(()=>import("../nodes/3.C6SgVmNt.js"),__vite__mapDeps([24,1,2,3,4,11,5,6,19,20,25,26,27,28,29,30,31,18,13,14,23,32,33,34]),import.meta.url),()=>o(()=>import("../nodes/4.CvH5IZ0t.js"),__vite__mapDeps([35,1,2,3,4,5,6,19,20,25,26,27,28,18,13,14,23,29,11,30,31,32,22]),import.meta.url),()=>o(()=>import("../nodes/5.DMUQ3452.js"),__vite__mapDeps([36,1,2,3,4,5,6,25,11,19,20,21,23,18,13,37,38,14,27,31,29,30,28,39,32,33,34]),import.meta.url),()=>o(()=>import("../nodes/6.B8hxA90H.js"),__vite__mapDeps([40,1,2,3,4,5,6,12,8,37,11,19,20,23,21,38,41,27,31,18,13,29,30,28,39,33,34,42,43,44,14,45,46]),import.meta.url),()=>o(()=>import("../nodes/7.Bh-gc64D.js"),__vite__mapDeps([47,1,2,3,4,5,6,19,20,8,9,14,23]),import.meta.url),()=>o(()=>import("../nodes/8.BBGRj-oZ.js"),__vite__mapDeps([48,1,2,3,4,5,6,38,21,25,13,14,29,11,30,19,28,31,27,23,39,33,34]),import.meta.url),()=>o(()=>import("../nodes/9.CuEtSZ_K.js"),__vite__mapDeps([49,1,2,3,4,11,5,6,42,12,8,38,21,13,34,27,23,31]),import.meta.url),()=>o(()=>import("../nodes/10.CMhzaZps.js"),__vite__mapDeps([50,1,2,3,4,5,6,19,20,8,9,23]),import.meta.url),()=>o(()=>import("../nodes/11.BWUkmv-e.js"),__vite__mapDeps([51,1,2,3,4,11,5,6,19,20,8,25,29,30,28,31,27,21,14,23,38,39,52,13]),import.meta.url),()=>o(()=>import("../nodes/12.ClmuGH2C.js"),__vite__mapDeps([53,1,2,3,4,11,5,6,19,20,12,8,14,23,52,38,21,31]),import.meta.url),()=>o(()=>import("../nodes/13.CBW2uV6V.js"),__vite__mapDeps([54,1,2,3,4,5,6,11,19,20,21,26,27,23,18,13,37,38,25,14,31,29,30,28,39,32,33,34]),import.meta.url),()=>o(()=>import("../nodes/14.kxrYlryy.js"),__vite__mapDeps([55,1,2,3,4,5,6,12,8,37,11,19,20,23,21,38,41,27,31,18,13,29,30,28,39,33,34,42,43,44,56,14,45,46]),import.meta.url),()=>o(()=>import("../nodes/15.BfnF2i2C.js"),__vite__mapDeps([57,1,2,3,4,5,6,25,45,11,19,20,21,23,46,58,18,13,38,29,30,28,31,27,14,39,32,33,34,59]),import.meta.url),()=>o(()=>import("../nodes/16.CsGz5Ufi.js"),__vite__mapDeps([60,1,2,3,4,11,5,6,7,8,58,19,20,21,46,23,18,13,38,44,29,30,28,31,27,39,33,34,43,14]),import.meta.url),()=>o(()=>import("../nodes/17.0oceDyoA.js"),__vite__mapDeps([61,1,2,3,4,5,6,11,19,20,21,23,26,27,18,13,37,38,25,14,29,30,28,31,39,32,33,34]),import.meta.url),()=>o(()=>import("../nodes/18.QrKqJrPa.js"),__vite__mapDeps([62,1,2,3,4,5,6,12,8,37,11,19,20,23,21,38,41,27,31,18,13,29,30,28,39,33,34,42,43,44,56,14,45,46]),import.meta.url),()=>o(()=>import("../nodes/19.B65AgF01.js"),__vite__mapDeps([63,1,2,3,4,5,6,25,11,19,20,21,46,23,64,18,13,38,29,30,28,31,27,14,39,32,33,34,59]),import.meta.url),()=>o(()=>import("../nodes/20.CaRE9IJw.js"),__vite__mapDeps([65,1,2,3,4,5,6,7,8,64,11,19,20,21,23,46,18,13,38,44,29,30,28,31,27,39,33,34,43,14]),import.meta.url),()=>o(()=>import("../nodes/21.ReXW9QTm.js"),__vite__mapDeps([66,1,2,3,4,8,6,5,25,28,29,11,30,19,31,27,14,23,38,21,39,67,18,13]),import.meta.url),()=>o(()=>import("../nodes/22.D6A1FyiW.js"),__vite__mapDeps([68,1,2,3,4,5,6,19,20,7,8,28,14,23,31,43,69,42,10,21,38,67,27,13]),import.meta.url),()=>o(()=>import("../nodes/23.Dx1VueDf.js"),__vite__mapDeps([70,1,2,3,4,5,6,19,42,20,8,7,14,23,43,69,10,21]),import.meta.url)],At=[],yt={"/":[2],"/credentials":[3],"/endpoints":[4],"/enterprises":[5],"/enterprises/[id]":[6],"/init":[7],"/instances":[8],"/instances/[id]":[9],"/login":[10],"/objects":[11],"/objects/[id]":[12],"/organizations":[13],"/organizations/[id]":[14],"/pools":[15],"/pools/[id]":[16],"/repositories":[17],"/repositories/[id]":[18],"/scalesets":[19],"/scalesets/[id]":[20],"/templates":[21],"/templates/create":[23],"/templates/[id]":[22]},dt={handleError:({error:_})=>{console.error(_)},reroute:()=>{},transport:{}},ft=Object.fromEntries(Object.entries(dt.transport).map(([_,t])=>[_,t.decode])),Tt=!1,Dt=(_,t)=>ft[_](t);export{Dt as decode,ft as decoders,yt as dictionary,Tt as hash,dt as hooks,Rt as matchers,Lt as nodes,Ot as root,At as server_loads}; diff --git a/webapp/assets/_app/immutable/entry/start.Bny4a8x0.js b/webapp/assets/_app/immutable/entry/start.Bny4a8x0.js new file mode 100644 index 00000000..da6846a6 --- /dev/null +++ b/webapp/assets/_app/immutable/entry/start.Bny4a8x0.js @@ -0,0 +1 @@ +import{l as o,a as r}from"../chunks/BSYpqPvJ.js";export{o as load_css,r as start}; diff --git a/webapp/assets/_app/immutable/entry/start.STBCHZlH.js b/webapp/assets/_app/immutable/entry/start.STBCHZlH.js deleted file mode 100644 index 49501daf..00000000 --- a/webapp/assets/_app/immutable/entry/start.STBCHZlH.js +++ /dev/null @@ -1 +0,0 @@ -import{l as o,a as r}from"../chunks/DeKGyprh.js";export{o as load_css,r as start}; diff --git a/webapp/assets/_app/immutable/nodes/0.CZeAwb2w.js b/webapp/assets/_app/immutable/nodes/0.mv9nsFl7.js similarity index 70% rename from webapp/assets/_app/immutable/nodes/0.CZeAwb2w.js rename to webapp/assets/_app/immutable/nodes/0.mv9nsFl7.js index 9dfe4222..ccea258e 100644 --- a/webapp/assets/_app/immutable/nodes/0.CZeAwb2w.js +++ b/webapp/assets/_app/immutable/nodes/0.mv9nsFl7.js @@ -1,8 +1,8 @@ -import"../chunks/DsnmJJEf.js";import{i as Te}from"../chunks/TJn6xDN9.js";import{p as Ge,o as Ke,l as I,k as f,m as T,h as Oe,f as h,a as P,d as o,s as l,r as a,g as e,u as i,t as U,e as pe,b as s,A as F,C as re,q as ye,i as V,c as De,v as hr,j as ur,$ as fr,D as Qe}from"../chunks/DniTuB_0.js";import{a as _e,i as b,s as Ee}from"../chunks/DbNhg6mG.js";import{d as n,c as w,s as K,h as mr,B as xr,f as Fe}from"../chunks/DD3srElq.js";import{p as ze}from"../chunks/H2nrvwx_.js";import{g as Pe}from"../chunks/DeKGyprh.js";import{b as We,a as pr}from"../chunks/B_3mRBsj.js";import{t as Se}from"../chunks/2CDqnvrp.js";import{e as ve,i as xe}from"../chunks/Ck5PkeSc.js";import{p as br}from"../chunks/CzKtu-7o.js";import{w as kr}from"../chunks/DmHFwzWx.js";import{t as Je}from"../chunks/CBJzOE8U.js";const yr=async({url:ae})=>({url:ae.pathname}),_r=!1,wr=!1,fa=Object.freeze(Object.defineProperty({__proto__:null,load:yr,prerender:_r,ssr:wr},Symbol.toStringTag,{value:"Module"}));var Mr=h('
Live Updates
'),jr=h('
Connecting
'),zr=h('
Updates Unavailable
'),Sr=h('
Manual Refresh
'),Cr=re(''),Hr=re(''),Ar=re(''),Lr=re(''),$r=h(' '),Br=h(' '),Rr=h('
'),Vr=h('
'),Ir=h('
'),Pr=h('
'),Tr=re(''),Gr=re(''),Or=re(''),Dr=re(''),Er=h(' '),Nr=h(' '),Ur=h('
'),qr=h('
'),Qr=h('
GARM GARM

GARM

',1);function Fr(ae,te){Ge(te,!1);const[oe,be]=Ee(),d=()=>_e(kr,"$websocketStore",oe),se=()=>_e(Se,"$themeStore",oe),W=()=>_e(br,"$page",oe),u=T(),z=T(),k=T();let y=T(!1),m=T(!1);Ke(()=>{window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",v)});function v(t){(!localStorage.getItem("theme")||localStorage.getItem("theme")==="system")&&Se.set(t.matches)}function J(){Se.toggle()}function ie(){We.logout(),f(m,!1)}const X=[{href:n("/"),label:"Dashboard",icon:"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"},{href:n("/repositories"),label:"Repositories",icon:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"},{href:n("/organizations"),label:"Organizations",icon:"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"},{href:n("/enterprises"),label:"Enterprises",icon:"M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"},{href:n("/pools"),label:"Pools",icon:"M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"},{href:n("/scalesets"),label:"Scale Sets",icon:"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4"},{href:n("/instances"),label:"Runners",icon:"M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"}],M=[{href:n("/credentials"),label:"Credentials",icon:"M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1721 9z"},{href:n("/endpoints"),label:"Endpoints",icon:"M13 10V3L4 14h7v7l9-11h-7z"},{href:n("/templates"),label:"Runner Install Templates",icon:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"},{href:n("/objects"),label:"Object Storage",icon:"M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8m-9 4h4"}];I(()=>d(),()=>{f(u,d())}),I(()=>se(),()=>{f(z,se())}),I(()=>W(),()=>{W().url.pathname&&f(y,!1)}),I(()=>W(),()=>{f(k,W().url.pathname)}),Oe(),Te();var S=Qr(),q=P(S),ce=o(q),ne=o(ce),$=o(ne),B=o($),Y=o(B),G=l(Y,2);a(B),a($);var O=l($,2),D=o(O),R=o(D),ge=o(R);{var he=t=>{var r=Mr();s(t,r)},Z=t=>{var r=F(),g=P(r);{var _=x=>{var j=jr();s(x,j)},C=x=>{var j=F(),ee=P(j);{var H=p=>{var N=zr();s(p,N)},A=p=>{var N=Sr();s(p,N)};b(ee,p=>{e(u),i(()=>e(u).error)?p(H):p(A,!1)},!0)}s(x,j)};b(g,x=>{e(u),i(()=>e(u).connecting)?x(_):x(C,!1)},!0)}s(t,r)};b(ge,t=>{e(u),i(()=>e(u).connected)?t(he):t(Z,!1)})}a(R);var E=l(R,2),ue=o(E);{var we=t=>{var r=Cr();s(t,r)},Ce=t=>{var r=Hr();s(t,r)};b(ue,t=>{e(z)?t(we):t(Ce,!1)})}a(E),a(D),a(O),a(ne);var Me=l(ne,2),je=o(Me);ve(je,1,()=>X,xe,(t,r)=>{var g=$r(),_=o(g),C=o(_);{var x=H=>{var A=F(),p=P(A);ve(p,1,()=>(e(r),i(()=>e(r).icon)),xe,(N,le)=>{var c=Ar();U(()=>w(c,"d",e(le))),s(N,c)}),s(H,A)},j=H=>{var A=Lr();U(()=>w(A,"d",(e(r),i(()=>e(r).icon)))),s(H,A)};b(C,H=>{e(r),i(()=>Array.isArray(e(r).icon))?H(x):H(j,!1)})}a(_);var ee=l(_);a(g),U(()=>{w(g,"href",(e(r),i(()=>e(r).href))),K(g,1,`group flex items-center px-2 py-2 text-sm font-medium rounded-md transition-colors duration-200 - ${e(k),e(r),i(()=>e(k)===e(r).href?"bg-gray-100 text-gray-900 dark:bg-gray-700 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),pe(ee,` ${e(r),i(()=>e(r).label)??""}`)}),s(t,g)});var Q=l(je,2);ve(Q,5,()=>M,xe,(t,r)=>{var g=Br(),_=o(g),C=o(_);a(_);var x=l(_);a(g),U(()=>{w(g,"href",(e(r),i(()=>e(r).href))),K(g,1,`group flex items-center px-2 py-2 text-sm font-medium rounded-md transition-colors duration-200 - ${e(k),e(r),i(()=>e(k)===e(r).href?"bg-gray-100 text-gray-900 dark:bg-gray-700 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),w(C,"d",(e(r),i(()=>e(r).icon))),pe(x,` ${e(r),i(()=>e(r).label)??""}`)}),s(t,g)}),a(Q);var fe=l(Q,2),Xe=o(fe);a(fe),a(Me),a(ce),a(q);var He=l(q,2),Ae=o(He),Ne=o(Ae),Le=l(Ne,2),$e=o(Le),Be=l($e,2),Ue=l(Be,4),Ye=o(Ue);{var Ze=t=>{var r=Rr();s(t,r)},er=t=>{var r=F(),g=P(r);{var _=x=>{var j=Vr();s(x,j)},C=x=>{var j=F(),ee=P(j);{var H=p=>{var N=Ir();s(p,N)},A=p=>{var N=Pr();s(p,N)};b(ee,p=>{e(u),i(()=>e(u).error)?p(H):p(A,!1)},!0)}s(x,j)};b(g,x=>{e(u),i(()=>e(u).connecting)?x(_):x(C,!1)},!0)}s(t,r)};b(Ye,t=>{e(u),i(()=>e(u).connected)?t(Ze):t(er,!1)})}a(Ue),a(Le);var Re=l(Le,2),rr=o(Re);{var ar=t=>{var r=Tr();s(t,r)},tr=t=>{var r=Gr();s(t,r)};b(rr,t=>{e(z)?t(ar):t(tr,!1)})}a(Re),a(Ae);var or=l(Ae,2);{var sr=t=>{var r=Ur(),g=o(r),_=l(g,2),C=o(_),x=o(C);a(C);var j=l(C,2),ee=o(j),H=o(ee);ve(H,1,()=>X,xe,(le,c)=>{var L=Er(),de=o(L),Ve=o(de);{var Ie=me=>{var ke=F(),vr=P(ke);ve(vr,1,()=>(e(c),i(()=>e(c).icon)),xe,(cr,gr)=>{var qe=Or();U(()=>w(qe,"d",e(gr))),s(cr,qe)}),s(me,ke)},lr=me=>{var ke=Dr();U(()=>w(ke,"d",(e(c),i(()=>e(c).icon)))),s(me,ke)};b(Ve,me=>{e(c),i(()=>Array.isArray(e(c).icon))?me(Ie):me(lr,!1)})}a(de);var dr=l(de);a(L),U(()=>{w(L,"href",(e(c),i(()=>e(c).href))),K(L,1,`group flex items-center px-2 py-2 text-base font-medium rounded-md transition-colors duration-200 - ${e(k),e(c),i(()=>e(k)===e(c).href?"bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),pe(dr,` ${e(c),i(()=>e(c).label)??""}`)}),V("click",L,()=>f(y,!1)),s(le,L)});var A=l(H,2);ve(A,5,()=>M,xe,(le,c)=>{var L=Nr(),de=o(L),Ve=o(de);a(de);var Ie=l(de);a(L),U(()=>{w(L,"href",(e(c),i(()=>e(c).href))),K(L,1,`group flex items-center px-2 py-2 text-base font-medium rounded-md transition-colors duration-200 - ${e(k),e(c),i(()=>e(k)===e(c).href?"bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),w(Ve,"d",(e(c),i(()=>e(c).icon))),pe(Ie,` ${e(c),i(()=>e(c).label)??""}`)}),V("click",L,()=>f(y,!1)),s(le,L)}),a(A);var p=l(A,2),N=o(p);a(p),a(ee),a(j),a(_),a(r),V("click",g,()=>f(y,!1)),V("keydown",g,le=>{le.key==="Escape"&&f(y,!1)}),V("click",x,()=>f(y,!1)),V("click",N,ie),s(t,r)};b(or,t=>{e(y)&&t(sr)})}a(He);var ir=l(He,2);{var nr=t=>{var r=qr();V("click",r,()=>f(m,!1)),V("keydown",r,g=>{g.key==="Escape"&&f(m,!1)}),s(t,r)};b(ir,t=>{e(m)&&t(nr)})}U((t,r,g,_,C)=>{w(B,"href",t),w(Y,"src",r),w(G,"src",g),w(E,"title",e(z)?"Switch to Light Mode":"Switch to Dark Mode"),w($e,"src",_),K($e,1,`${e(z)?"hidden":"block"} h-8 w-8`),w(Be,"src",C),K(Be,1,`${e(z)?"block":"hidden"} h-8 w-8`)},[()=>(ye(n),i(()=>n("/"))),()=>(ye(n),i(()=>n("/assets/garm-light.svg"))),()=>(ye(n),i(()=>n("/assets/garm-dark.svg"))),()=>(ye(n),i(()=>n("/assets/garm-light.svg"))),()=>(ye(n),i(()=>n("/assets/garm-dark.svg")))]),V("click",E,J),V("click",Xe,ie),V("click",Ne,()=>f(y,!e(y))),V("click",Re,J),s(ae,S),De(),be()}var Jr=h("
"),Kr=h('

'),Wr=h('
');function Xr(ae,te){Ge(te,!1);const[oe,be]=Ee(),d=()=>_e(Je,"$toastStore",oe),se=T();function W(m){switch(m){case"success":return` +import"../chunks/DsnmJJEf.js";import{i as Te}from"../chunks/De-I_rkH.js";import{p as Ge,o as Ke,l as I,k as f,m as T,h as Oe,f as h,a as P,d as o,s as l,r as a,g as e,u as i,t as U,e as pe,b as s,A as F,C as re,q as ye,i as R,c as De,v as hr,j as ur,$ as fr,D as Qe}from"../chunks/BIqNNOMq.js";import{a as _e,i as b,s as Ee}from"../chunks/CfI2BFUj.js";import{d as n,c as w,s as K,h as mr,B as xr,f as Fe}from"../chunks/CQh-7xkh.js";import{p as je}from"../chunks/B-zJt1QP.js";import{g as Pe}from"../chunks/BSYpqPvJ.js";import{b as We,a as pr}from"../chunks/Cx8owuas.js";import{t as Se}from"../chunks/CBy1Js1f.js";import{e as ve,i as xe}from"../chunks/D8ZtP9JD.js";import{p as br}from"../chunks/BIfA0Pjo.js";import{w as kr}from"../chunks/C4VNo_Nu.js";import{t as Je}from"../chunks/DgRPqjXE.js";const yr=async({url:ae})=>({url:ae.pathname}),_r=!1,wr=!1,fa=Object.freeze(Object.defineProperty({__proto__:null,load:yr,prerender:_r,ssr:wr},Symbol.toStringTag,{value:"Module"}));var Mr=h('
Live Updates
'),zr=h('
Connecting
'),jr=h('
Updates Unavailable
'),Sr=h('
Manual Refresh
'),Cr=re(''),Hr=re(''),Ar=re(''),Lr=re(''),$r=h(' '),Br=h(' '),Vr=h('
'),Rr=h('
'),Ir=h('
'),Pr=h('
'),Tr=re(''),Gr=re(''),Or=re(''),Dr=re(''),Er=h(' '),Nr=h(' '),Ur=h('
'),qr=h('
'),Qr=h('
GARM GARM

GARM

',1);function Fr(ae,te){Ge(te,!1);const[oe,be]=Ee(),d=()=>_e(kr,"$websocketStore",oe),se=()=>_e(Se,"$themeStore",oe),W=()=>_e(br,"$page",oe),u=T(),j=T(),k=T();let y=T(!1),m=T(!1);Ke(()=>{window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",v)});function v(t){(!localStorage.getItem("theme")||localStorage.getItem("theme")==="system")&&Se.set(t.matches)}function J(){Se.toggle()}function ie(){We.logout(),f(m,!1)}const X=[{href:n("/"),label:"Dashboard",icon:"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"},{href:n("/repositories"),label:"Repositories",icon:"M7 16V4m0 0a2 2 0 100-4 2 2 0 000 4zm0 0a2 2 0 100 4 2 2 0 000-4zm10 12a2 2 0 100-4 2 2 0 000 4zm0 0V9a5 5 0 00-5-5"},{href:n("/organizations"),label:"Organizations",icon:"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"},{href:n("/enterprises"),label:"Enterprises",icon:"M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"},{href:n("/pools"),label:"Pools",icon:"M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"},{href:n("/scalesets"),label:"Scale Sets",icon:"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4"},{href:n("/instances"),label:"Runners",icon:"M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"}],M=[{href:n("/credentials"),label:"Credentials",icon:"M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1721 9z"},{href:n("/endpoints"),label:"Endpoints",icon:"M13 10V3L4 14h7v7l9-11h-7z"},{href:n("/templates"),label:"Runner Install Templates",icon:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"},{href:n("/objects"),label:"Object Storage",icon:"M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8m-9 4h4"}];I(()=>d(),()=>{f(u,d())}),I(()=>se(),()=>{f(j,se())}),I(()=>W(),()=>{W().url.pathname&&f(y,!1)}),I(()=>W(),()=>{f(k,W().url.pathname)}),Oe(),Te();var S=Qr(),q=P(S),ce=o(q),ne=o(ce),$=o(ne),B=o($),Y=o(B),G=l(Y,2);a(B),a($);var O=l($,2),D=o(O),V=o(D),ge=o(V);{var he=t=>{var r=Mr();s(t,r)},Z=t=>{var r=F(),g=P(r);{var _=x=>{var z=zr();s(x,z)},C=x=>{var z=F(),ee=P(z);{var H=p=>{var N=jr();s(p,N)},A=p=>{var N=Sr();s(p,N)};b(ee,p=>{e(u),i(()=>e(u).error)?p(H):p(A,!1)},!0)}s(x,z)};b(g,x=>{e(u),i(()=>e(u).connecting)?x(_):x(C,!1)},!0)}s(t,r)};b(ge,t=>{e(u),i(()=>e(u).connected)?t(he):t(Z,!1)})}a(V);var E=l(V,2),ue=o(E);{var we=t=>{var r=Cr();s(t,r)},Ce=t=>{var r=Hr();s(t,r)};b(ue,t=>{e(j)?t(we):t(Ce,!1)})}a(E),a(D),a(O),a(ne);var Me=l(ne,2),ze=o(Me);ve(ze,1,()=>X,xe,(t,r)=>{var g=$r(),_=o(g),C=o(_);{var x=H=>{var A=F(),p=P(A);ve(p,1,()=>(e(r),i(()=>e(r).icon)),xe,(N,le)=>{var c=Ar();U(()=>w(c,"d",e(le))),s(N,c)}),s(H,A)},z=H=>{var A=Lr();U(()=>w(A,"d",(e(r),i(()=>e(r).icon)))),s(H,A)};b(C,H=>{e(r),i(()=>Array.isArray(e(r).icon))?H(x):H(z,!1)})}a(_);var ee=l(_);a(g),U(()=>{w(g,"href",(e(r),i(()=>e(r).href))),K(g,1,`group flex items-center px-2 py-2 text-sm font-medium rounded-md transition-colors duration-200 + ${e(k),e(r),i(()=>e(k)===e(r).href?"bg-gray-100 text-gray-900 dark:bg-gray-700 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),pe(ee,` ${e(r),i(()=>e(r).label)??""}`)}),s(t,g)});var Q=l(ze,2);ve(Q,5,()=>M,xe,(t,r)=>{var g=Br(),_=o(g),C=o(_);a(_);var x=l(_);a(g),U(()=>{w(g,"href",(e(r),i(()=>e(r).href))),K(g,1,`group flex items-center px-2 py-2 text-sm font-medium rounded-md transition-colors duration-200 + ${e(k),e(r),i(()=>e(k)===e(r).href?"bg-gray-100 text-gray-900 dark:bg-gray-700 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),w(C,"d",(e(r),i(()=>e(r).icon))),pe(x,` ${e(r),i(()=>e(r).label)??""}`)}),s(t,g)}),a(Q);var fe=l(Q,2),Xe=o(fe);a(fe),a(Me),a(ce),a(q);var He=l(q,2),Ae=o(He),Ne=o(Ae),Le=l(Ne,2),$e=o(Le),Be=l($e,2),Ue=l(Be,4),Ye=o(Ue);{var Ze=t=>{var r=Vr();s(t,r)},er=t=>{var r=F(),g=P(r);{var _=x=>{var z=Rr();s(x,z)},C=x=>{var z=F(),ee=P(z);{var H=p=>{var N=Ir();s(p,N)},A=p=>{var N=Pr();s(p,N)};b(ee,p=>{e(u),i(()=>e(u).error)?p(H):p(A,!1)},!0)}s(x,z)};b(g,x=>{e(u),i(()=>e(u).connecting)?x(_):x(C,!1)},!0)}s(t,r)};b(Ye,t=>{e(u),i(()=>e(u).connected)?t(Ze):t(er,!1)})}a(Ue),a(Le);var Ve=l(Le,2),rr=o(Ve);{var ar=t=>{var r=Tr();s(t,r)},tr=t=>{var r=Gr();s(t,r)};b(rr,t=>{e(j)?t(ar):t(tr,!1)})}a(Ve),a(Ae);var or=l(Ae,2);{var sr=t=>{var r=Ur(),g=o(r),_=l(g,2),C=o(_),x=o(C);a(C);var z=l(C,2),ee=o(z),H=o(ee);ve(H,1,()=>X,xe,(le,c)=>{var L=Er(),de=o(L),Re=o(de);{var Ie=me=>{var ke=F(),vr=P(ke);ve(vr,1,()=>(e(c),i(()=>e(c).icon)),xe,(cr,gr)=>{var qe=Or();U(()=>w(qe,"d",e(gr))),s(cr,qe)}),s(me,ke)},lr=me=>{var ke=Dr();U(()=>w(ke,"d",(e(c),i(()=>e(c).icon)))),s(me,ke)};b(Re,me=>{e(c),i(()=>Array.isArray(e(c).icon))?me(Ie):me(lr,!1)})}a(de);var dr=l(de);a(L),U(()=>{w(L,"href",(e(c),i(()=>e(c).href))),K(L,1,`group flex items-center px-2 py-2 text-base font-medium rounded-md transition-colors duration-200 + ${e(k),e(c),i(()=>e(k)===e(c).href?"bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),pe(dr,` ${e(c),i(()=>e(c).label)??""}`)}),R("click",L,()=>f(y,!1)),s(le,L)});var A=l(H,2);ve(A,5,()=>M,xe,(le,c)=>{var L=Nr(),de=o(L),Re=o(de);a(de);var Ie=l(de);a(L),U(()=>{w(L,"href",(e(c),i(()=>e(c).href))),K(L,1,`group flex items-center px-2 py-2 text-base font-medium rounded-md transition-colors duration-200 + ${e(k),e(c),i(()=>e(k)===e(c).href?"bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-white":"text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white")??""}`),w(Re,"d",(e(c),i(()=>e(c).icon))),pe(Ie,` ${e(c),i(()=>e(c).label)??""}`)}),R("click",L,()=>f(y,!1)),s(le,L)}),a(A);var p=l(A,2),N=o(p);a(p),a(ee),a(z),a(_),a(r),R("click",g,()=>f(y,!1)),R("keydown",g,le=>{le.key==="Escape"&&f(y,!1)}),R("click",x,()=>f(y,!1)),R("click",N,ie),s(t,r)};b(or,t=>{e(y)&&t(sr)})}a(He);var ir=l(He,2);{var nr=t=>{var r=qr();R("click",r,()=>f(m,!1)),R("keydown",r,g=>{g.key==="Escape"&&f(m,!1)}),s(t,r)};b(ir,t=>{e(m)&&t(nr)})}U((t,r,g,_,C)=>{w(B,"href",t),w(Y,"src",r),w(G,"src",g),w(E,"title",e(j)?"Switch to Light Mode":"Switch to Dark Mode"),w($e,"src",_),K($e,1,`${e(j)?"hidden":"block"} h-8 w-8`),w(Be,"src",C),K(Be,1,`${e(j)?"block":"hidden"} h-8 w-8`)},[()=>(ye(n),i(()=>n("/"))),()=>(ye(n),i(()=>n("/assets/garm-light.svg"))),()=>(ye(n),i(()=>n("/assets/garm-dark.svg"))),()=>(ye(n),i(()=>n("/assets/garm-light.svg"))),()=>(ye(n),i(()=>n("/assets/garm-dark.svg")))]),R("click",E,J),R("click",Xe,ie),R("click",Ne,()=>f(y,!e(y))),R("click",Ve,J),s(ae,S),De(),be()}var Jr=h("
"),Kr=h('

'),Wr=h('
');function Xr(ae,te){Ge(te,!1);const[oe,be]=Ee(),d=()=>_e(Je,"$toastStore",oe),se=T();function W(m){switch(m){case"success":return` `;case"error":return` @@ -10,4 +10,4 @@ import"../chunks/DsnmJJEf.js";import{i as Te}from"../chunks/TJn6xDN9.js";import{ `;case"info":default:return` - `}}function u(m){switch(m){case"success":return"bg-green-50 dark:bg-green-900 border-green-200 dark:border-green-700";case"error":return"bg-red-50 dark:bg-red-900 border-red-200 dark:border-red-700";case"warning":return"bg-yellow-50 dark:bg-yellow-900 border-yellow-200 dark:border-yellow-700";case"info":default:return"bg-blue-50 dark:bg-blue-900 border-blue-200 dark:border-blue-700"}}function z(m){switch(m){case"success":return"text-green-800 dark:text-green-200";case"error":return"text-red-800 dark:text-red-200";case"warning":return"text-yellow-800 dark:text-yellow-200";case"info":default:return"text-blue-800 dark:text-blue-200"}}function k(m){switch(m){case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";case"warning":return"text-yellow-700 dark:text-yellow-300";case"info":default:return"text-blue-700 dark:text-blue-300"}}I(()=>d(),()=>{f(se,d())}),Oe(),Te();var y=Wr();ve(y,5,()=>e(se),m=>m.id,(m,v)=>{var J=Kr(),ie=o(J),X=o(ie),M=o(X);mr(M,()=>(e(v),i(()=>W(e(v).type)))),a(X);var S=l(X,2),q=o(S),ce=o(q,!0);a(q);var ne=l(q,2);{var $=G=>{var O=Jr(),D=o(O,!0);a(O),U(R=>{K(O,1,`mt-1 text-sm ${R??""}`),pe(D,(e(v),i(()=>e(v).message)))},[()=>(e(v),i(()=>k(e(v).type)))]),s(G,O)};b(ne,G=>{e(v),i(()=>e(v).message)&&G($)})}a(S);var B=l(S,2),Y=o(B);{let G=hr(()=>(e(v),i(()=>e(v).type==="success"?"text-green-400 hover:text-green-500 focus:ring-green-500":e(v).type==="error"?"text-red-400 hover:text-red-500 focus:ring-red-500":e(v).type==="warning"?"text-yellow-400 hover:text-yellow-500 focus:ring-yellow-500":"text-blue-400 hover:text-blue-500 focus:ring-blue-500")));xr(Y,{variant:"ghost",size:"sm","aria-label":"Dismiss notification",icon:"",get class(){return e(G)},$$events:{click:()=>Je.remove(e(v).id)}})}a(B),a(ie),a(J),U((G,O)=>{K(J,1,`relative rounded-lg border p-4 shadow-lg transition-all duration-300 ease-in-out ${G??""}`),K(q,1,`text-sm font-medium ${O??""}`),pe(ce,(e(v),i(()=>e(v).title)))},[()=>(e(v),i(()=>u(e(v).type))),()=>(e(v),i(()=>z(e(v).type)))]),s(m,J)}),a(y),s(ae,y),De(),be()}var Yr=h('

Loading...

'),Zr=h('
'),ea=h('

'),ra=h(" ",1);function ma(ae,te){Ge(te,!1);const[oe,be]=Ee(),d=()=>_e(pr,"$authStore",oe),se=T(),W=T(),u=T(),z=T(),k=T(),y=T();Ke(()=>{We.init(),Se.init()}),I(()=>(d(),Pe),()=>{if(!d().loading){const M=ze.url.pathname===n("/login"),S=ze.url.pathname===n("/init");!M&&!S&&!d().isAuthenticated&&(d().needsInitialization?Pe(n("/init"),{replaceState:!0}):Pe(n("/login"),{replaceState:!0}))}}),I(()=>n,()=>{f(se,ze.url.pathname===n("/login"))}),I(()=>n,()=>{f(W,ze.url.pathname===n("/init"))}),I(()=>d(),()=>{f(u,d().needsInitialization&&!d().isAuthenticated&&!d().loading)}),I(()=>d(),()=>{f(z,!d().needsInitialization&&!d().isAuthenticated&&!d().loading)}),I(()=>d(),()=>{f(k,d().isAuthenticated&&!d().loading)}),I(()=>(e(u),e(z),e(k)),()=>{f(y,!e(u)&&!e(z)&&!e(k))}),Oe(),Te();var m=ra();ur(M=>{fr.title="GARM - GitHub Actions Runner Manager"});var v=P(m);{var J=M=>{var S=Yr();s(M,S)},ie=M=>{var S=F(),q=P(S);{var ce=$=>{var B=F(),Y=P(B);Fe(Y,te,"default",{}),s($,B)},ne=$=>{var B=F(),Y=P(B);{var G=D=>{var R=Zr(),ge=o(R);Fr(ge,{});var he=l(ge,2),Z=o(he),E=o(Z),ue=o(E);Fe(ue,te,"default",{}),a(E),a(Z),a(he),a(R),s(D,R)},O=D=>{var R=F(),ge=P(R);{var he=Z=>{var E=ea(),ue=o(E),we=l(o(ue),2),Ce=o(we);{var Me=Q=>{var fe=Qe("Redirecting to initialization...");s(Q,fe)},je=Q=>{var fe=Qe("Redirecting to login...");s(Q,fe)};b(Ce,Q=>{d(),i(()=>d().needsInitialization)?Q(Me):Q(je,!1)})}a(we),a(ue),a(E),s(Z,E)};b(ge,Z=>{e(y)&&Z(he)},!0)}s(D,R)};b(Y,D=>{e(k)?D(G):D(O,!1)},!0)}s($,B)};b(q,$=>{e(z)||e(u)?$(ce):$(ne,!1)},!0)}s(M,S)};b(v,M=>{d(),i(()=>d().loading)?M(J):M(ie,!1)})}var X=l(v,2);Xr(X,{}),s(ae,m),De(),be()}export{ma as component,fa as universal}; + `}}function u(m){switch(m){case"success":return"bg-green-50 dark:bg-green-900 border-green-200 dark:border-green-700";case"error":return"bg-red-50 dark:bg-red-900 border-red-200 dark:border-red-700";case"warning":return"bg-yellow-50 dark:bg-yellow-900 border-yellow-200 dark:border-yellow-700";case"info":default:return"bg-blue-50 dark:bg-blue-900 border-blue-200 dark:border-blue-700"}}function j(m){switch(m){case"success":return"text-green-800 dark:text-green-200";case"error":return"text-red-800 dark:text-red-200";case"warning":return"text-yellow-800 dark:text-yellow-200";case"info":default:return"text-blue-800 dark:text-blue-200"}}function k(m){switch(m){case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";case"warning":return"text-yellow-700 dark:text-yellow-300";case"info":default:return"text-blue-700 dark:text-blue-300"}}I(()=>d(),()=>{f(se,d())}),Oe(),Te();var y=Wr();ve(y,5,()=>e(se),m=>m.id,(m,v)=>{var J=Kr(),ie=o(J),X=o(ie),M=o(X);mr(M,()=>(e(v),i(()=>W(e(v).type)))),a(X);var S=l(X,2),q=o(S),ce=o(q,!0);a(q);var ne=l(q,2);{var $=G=>{var O=Jr(),D=o(O,!0);a(O),U(V=>{K(O,1,`mt-1 text-sm ${V??""}`),pe(D,(e(v),i(()=>e(v).message)))},[()=>(e(v),i(()=>k(e(v).type)))]),s(G,O)};b(ne,G=>{e(v),i(()=>e(v).message)&&G($)})}a(S);var B=l(S,2),Y=o(B);{let G=hr(()=>(e(v),i(()=>e(v).type==="success"?"text-green-400 hover:text-green-500 focus:ring-green-500":e(v).type==="error"?"text-red-400 hover:text-red-500 focus:ring-red-500":e(v).type==="warning"?"text-yellow-400 hover:text-yellow-500 focus:ring-yellow-500":"text-blue-400 hover:text-blue-500 focus:ring-blue-500")));xr(Y,{variant:"ghost",size:"sm","aria-label":"Dismiss notification",icon:"",get class(){return e(G)},$$events:{click:()=>Je.remove(e(v).id)}})}a(B),a(ie),a(J),U((G,O)=>{K(J,1,`relative rounded-lg border p-4 shadow-lg transition-all duration-300 ease-in-out ${G??""}`),K(q,1,`text-sm font-medium ${O??""}`),pe(ce,(e(v),i(()=>e(v).title)))},[()=>(e(v),i(()=>u(e(v).type))),()=>(e(v),i(()=>j(e(v).type)))]),s(m,J)}),a(y),s(ae,y),De(),be()}var Yr=h('

Loading...

'),Zr=h('
'),ea=h('

'),ra=h(" ",1);function ma(ae,te){Ge(te,!1);const[oe,be]=Ee(),d=()=>_e(pr,"$authStore",oe),se=T(),W=T(),u=T(),j=T(),k=T(),y=T();Ke(()=>{We.init(),Se.init()}),I(()=>(d(),Pe),()=>{if(!d().loading){const M=je.url.pathname===n("/login"),S=je.url.pathname===n("/init");!M&&!S&&!d().isAuthenticated&&(d().needsInitialization?Pe(n("/init"),{replaceState:!0}):Pe(n("/login"),{replaceState:!0}))}}),I(()=>n,()=>{f(se,je.url.pathname===n("/login"))}),I(()=>n,()=>{f(W,je.url.pathname===n("/init"))}),I(()=>d(),()=>{f(u,d().needsInitialization&&!d().isAuthenticated&&!d().loading)}),I(()=>d(),()=>{f(j,!d().needsInitialization&&!d().isAuthenticated&&!d().loading)}),I(()=>d(),()=>{f(k,d().isAuthenticated&&!d().loading)}),I(()=>(e(u),e(j),e(k)),()=>{f(y,!e(u)&&!e(j)&&!e(k))}),Oe(),Te();var m=ra();ur(M=>{fr.title="GARM - GitHub Actions Runner Manager"});var v=P(m);{var J=M=>{var S=Yr();s(M,S)},ie=M=>{var S=F(),q=P(S);{var ce=$=>{var B=F(),Y=P(B);Fe(Y,te,"default",{}),s($,B)},ne=$=>{var B=F(),Y=P(B);{var G=D=>{var V=Zr(),ge=o(V);Fr(ge,{});var he=l(ge,2),Z=o(he),E=o(Z),ue=o(E);Fe(ue,te,"default",{}),a(E),a(Z),a(he),a(V),s(D,V)},O=D=>{var V=F(),ge=P(V);{var he=Z=>{var E=ea(),ue=o(E),we=l(o(ue),2),Ce=o(we);{var Me=Q=>{var fe=Qe("Redirecting to initialization...");s(Q,fe)},ze=Q=>{var fe=Qe("Redirecting to login...");s(Q,fe)};b(Ce,Q=>{d(),i(()=>d().needsInitialization)?Q(Me):Q(ze,!1)})}a(we),a(ue),a(E),s(Z,E)};b(ge,Z=>{e(y)&&Z(he)},!0)}s(D,V)};b(Y,D=>{e(k)?D(G):D(O,!1)},!0)}s($,B)};b(q,$=>{e(j)||e(u)?$(ce):$(ne,!1)},!0)}s(M,S)};b(v,M=>{d(),i(()=>d().loading)?M(J):M(ie,!1)})}var X=l(v,2);Xr(X,{}),s(ae,m),De(),be()}export{ma as component,fa as universal}; diff --git a/webapp/assets/_app/immutable/nodes/1.BJGHriae.js b/webapp/assets/_app/immutable/nodes/1.BJGHriae.js deleted file mode 100644 index 28026fcf..00000000 --- a/webapp/assets/_app/immutable/nodes/1.BJGHriae.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as h}from"../chunks/TJn6xDN9.js";import{p as c,f as l,a as v,t as u,b as _,c as d,d as s,r as e,s as g,e as p}from"../chunks/DniTuB_0.js";import{p as o}from"../chunks/H2nrvwx_.js";var x=l("

",1);function q(i,m){c(m,!1),h();var t=x(),r=v(t),f=s(r,!0);e(r);var a=g(r,2),n=s(a,!0);e(a),u(()=>{p(f,o.status),p(n,o.error?.message)}),_(i,t),d()}export{q as component}; diff --git a/webapp/assets/_app/immutable/nodes/1.BvGfDR5D.js b/webapp/assets/_app/immutable/nodes/1.BvGfDR5D.js new file mode 100644 index 00000000..16d66a74 --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/1.BvGfDR5D.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as h}from"../chunks/De-I_rkH.js";import{p as c,f as l,a as v,t as u,b as _,c as d,d as s,r as e,s as g,e as p}from"../chunks/BIqNNOMq.js";import{p as o}from"../chunks/B-zJt1QP.js";var x=l("

",1);function q(i,m){c(m,!1),h();var t=x(),r=v(t),f=s(r,!0);e(r);var a=g(r,2),n=s(a,!0);e(a),u(()=>{p(f,o.status),p(n,o.error?.message)}),_(i,t),d()}export{q as component}; diff --git a/webapp/assets/_app/immutable/nodes/10.CMhzaZps.js b/webapp/assets/_app/immutable/nodes/10.UukODHN5.js similarity index 89% rename from webapp/assets/_app/immutable/nodes/10.CMhzaZps.js rename to webapp/assets/_app/immutable/nodes/10.UukODHN5.js index e535406b..7aa24392 100644 --- a/webapp/assets/_app/immutable/nodes/10.CMhzaZps.js +++ b/webapp/assets/_app/immutable/nodes/10.UukODHN5.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as Z}from"../chunks/TJn6xDN9.js";import{p as ee,o as ae,l as re,h as te,f as K,j as se,t as _,g as a,i as k,b as w,c as de,$ as oe,s as d,D as ie,m as f,d as r,u as q,q as B,k as i,r as t,z as D,e as I}from"../chunks/DniTuB_0.js";import{i as le,s as ne,a as ce}from"../chunks/DbNhg6mG.js";import{B as me,d as l,c as T,r as U}from"../chunks/DD3srElq.js";import{b as C}from"../chunks/CCQwxxp9.js";import{p as ue}from"../chunks/D4Caz1gY.js";import{g as H}from"../chunks/DeKGyprh.js";import{a as pe,b as ve}from"../chunks/B_3mRBsj.js";import{e as fe}from"../chunks/BZiHL9L3.js";var ge=K('

'),he=K('
GARM

Sign in to GARM

GitHub Actions Runner Manager

');function Ae(W,F){ee(F,!1);const[J,N]=ne(),$=()=>ce(pe,"$authStore",J);let m=f(""),u=f(""),o=f(!1),n=f("");ae(()=>{O()});function O(){const e=localStorage.getItem("theme");let s=!1;e==="dark"?s=!0:e==="light"?s=!1:s=window.matchMedia("(prefers-color-scheme: dark)").matches,s?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")}async function M(){if(!a(m)||!a(u)){i(n,"Please enter both username and password");return}i(o,!0),i(n,"");try{await ve.login(a(m),a(u)),H(l("/"))}catch(e){i(n,fe(e))}finally{i(o,!1)}}function L(e){e.key==="Enter"&&M()}re(()=>($(),l),()=>{$().isAuthenticated&&H(l("/"))}),te(),Z();var g=he();se(e=>{oe.title="Login - GARM"});var z=r(g),h=r(z),A=r(h),S=r(A),Q=d(S,2);t(A),D(4),t(h);var b=d(h,2),x=r(b),y=r(x),p=d(r(y),2);U(p),t(y);var P=d(y,2),v=d(r(P),2);U(v),t(P),t(x);var G=d(x,2);{var V=e=>{var s=ge(),c=r(s),E=d(r(c),2),j=r(E),Y=r(j,!0);t(j),t(E),t(c),t(s),_(()=>I(Y,a(n))),w(e,s)};le(G,e=>{a(n)&&e(V)})}var R=d(G,2),X=r(R);me(X,{type:"submit",variant:"primary",size:"md",fullWidth:!0,get disabled(){return a(o)},get loading(){return a(o)},children:(e,s)=>{D();var c=ie();_(()=>I(c,a(o)?"Signing in...":"Sign in")),w(e,c)},$$slots:{default:!0}}),t(R),t(b),t(z),t(g),_((e,s)=>{T(S,"src",e),T(Q,"src",s),p.disabled=a(o),v.disabled=a(o)},[()=>(B(l),q(()=>l("/assets/garm-light.svg"))),()=>(B(l),q(()=>l("/assets/garm-dark.svg")))]),C(p,()=>a(m),e=>i(m,e)),k("keypress",p,L),C(v,()=>a(u),e=>i(u,e)),k("keypress",v,L),k("submit",b,ue(M)),w(W,g),de(),N()}export{Ae as component}; +import"../chunks/DsnmJJEf.js";import{i as Z}from"../chunks/De-I_rkH.js";import{p as ee,o as ae,l as re,h as te,f as K,j as se,t as _,g as a,i as k,b as w,c as de,$ as oe,s as d,D as ie,m as f,d as r,u as q,q as B,k as i,r as t,z as D,e as I}from"../chunks/BIqNNOMq.js";import{i as le,s as ne,a as ce}from"../chunks/CfI2BFUj.js";import{B as me,d as l,c as T,r as U}from"../chunks/CQh-7xkh.js";import{b as C}from"../chunks/Gs5uNKRr.js";import{p as ue}from"../chunks/CdEA5IGF.js";import{g as H}from"../chunks/BSYpqPvJ.js";import{a as pe,b as ve}from"../chunks/Cx8owuas.js";import{e as fe}from"../chunks/BZiHL9L3.js";var ge=K('

'),he=K('
GARM

Sign in to GARM

GitHub Actions Runner Manager

');function Ae(W,F){ee(F,!1);const[J,N]=ne(),$=()=>ce(pe,"$authStore",J);let m=f(""),u=f(""),o=f(!1),n=f("");ae(()=>{O()});function O(){const e=localStorage.getItem("theme");let s=!1;e==="dark"?s=!0:e==="light"?s=!1:s=window.matchMedia("(prefers-color-scheme: dark)").matches,s?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")}async function M(){if(!a(m)||!a(u)){i(n,"Please enter both username and password");return}i(o,!0),i(n,"");try{await ve.login(a(m),a(u)),H(l("/"))}catch(e){i(n,fe(e))}finally{i(o,!1)}}function L(e){e.key==="Enter"&&M()}re(()=>($(),l),()=>{$().isAuthenticated&&H(l("/"))}),te(),Z();var g=he();se(e=>{oe.title="Login - GARM"});var z=r(g),h=r(z),A=r(h),S=r(A),Q=d(S,2);t(A),D(4),t(h);var b=d(h,2),x=r(b),y=r(x),p=d(r(y),2);U(p),t(y);var P=d(y,2),v=d(r(P),2);U(v),t(P),t(x);var G=d(x,2);{var V=e=>{var s=ge(),c=r(s),E=d(r(c),2),j=r(E),Y=r(j,!0);t(j),t(E),t(c),t(s),_(()=>I(Y,a(n))),w(e,s)};le(G,e=>{a(n)&&e(V)})}var R=d(G,2),X=r(R);me(X,{type:"submit",variant:"primary",size:"md",fullWidth:!0,get disabled(){return a(o)},get loading(){return a(o)},children:(e,s)=>{D();var c=ie();_(()=>I(c,a(o)?"Signing in...":"Sign in")),w(e,c)},$$slots:{default:!0}}),t(R),t(b),t(z),t(g),_((e,s)=>{T(S,"src",e),T(Q,"src",s),p.disabled=a(o),v.disabled=a(o)},[()=>(B(l),q(()=>l("/assets/garm-light.svg"))),()=>(B(l),q(()=>l("/assets/garm-dark.svg")))]),C(p,()=>a(m),e=>i(m,e)),k("keypress",p,L),C(v,()=>a(u),e=>i(u,e)),k("keypress",v,L),k("submit",b,ue(M)),w(W,g),de(),N()}export{Ae as component}; diff --git a/webapp/assets/_app/immutable/nodes/11.BWUkmv-e.js b/webapp/assets/_app/immutable/nodes/11.BWUkmv-e.js deleted file mode 100644 index 33c42d68..00000000 --- a/webapp/assets/_app/immutable/nodes/11.BWUkmv-e.js +++ /dev/null @@ -1,7 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as tt}from"../chunks/TJn6xDN9.js";import{p as at,l as oe,q as z,g as e,m as g,h as vt,A as Tt,a as bt,b as v,c as rt,k as r,u as ut,f as C,d as l,r as o,t as E,e as w,s,E as zt,z as W,D as se,v as He,y as Et,C as ht,i as H,o as Ot,B as Ut,x as pt,w as V}from"../chunks/DniTuB_0.js";import{p as ue,i as te}from"../chunks/DbNhg6mG.js";import{e as Xe,i as Ve}from"../chunks/Ck5PkeSc.js";import{B as Y,b as At,g as Ge,s as Ft,r as qe,c as Ke,k as It}from"../chunks/DD3srElq.js";import{b as ye}from"../chunks/CCQwxxp9.js";import{p as gt}from"../chunks/D4Caz1gY.js";import"../chunks/DeKGyprh.js";import"../chunks/BSR16q_V.js";import{P as Bt}from"../chunks/BlYHwhWl.js";import{D as Rt,G as mt,A as Lt}from"../chunks/QtGwBUod.js";import{M as ft}from"../chunks/PC4wJWhj.js";import{t as ee}from"../chunks/CBJzOE8U.js";import{e as Ee}from"../chunks/BZiHL9L3.js";import{D as Nt}from"../chunks/B6XSaEl0.js";import{E as Ht}from"../chunks/D3pbRQAB.js";import{f as Gt,a as qt}from"../chunks/aK-A9Gop.js";import{w as Kt}from"../chunks/DmHFwzWx.js";var Xt=C('-'),Vt=C(' '),Wt=C(' '),Yt=C(' '),Zt=C(''),Jt=C('
');function Qt(_e,O){at(O,!1);const m=g(),S=g(),U=g();let M=ue(O,"item",8);const c=3;oe(()=>z(M()),()=>{r(m,M()?.tags||[])}),oe(()=>e(m),()=>{r(S,e(m).slice(0,c))}),oe(()=>e(m),()=>{r(U,Math.max(0,e(m).length-c))}),vt(),tt();var k=Tt(),B=bt(k);{var D=R=>{var b=Xt();v(R,b)},P=R=>{var b=Jt(),Z=l(b);Xe(Z,1,()=>e(S),Ve,(y,f)=>{var $=Vt(),T=l($,!0);o($),E(()=>w(T,e(f))),v(y,$)});var G=s(Z,2);{var ke=y=>{var f=Wt(),$=l(f);o(f),E(()=>w($,`+${e(U)??""} more`)),v(y,f)};te(G,y=>{e(U)>0&&y(ke)})}var q=s(G,2);{var L=y=>{var f=Zt(),$=l(f),T=s(l($),2);Xe(T,5,()=>e(m),Ve,(n,A)=>{var h=Yt(),p=l(h,!0);o(h),E(()=>w(p,e(A))),v(n,h)}),o(T),o($),o(f),v(y,f)};te(q,y=>{e(m),ut(()=>e(m).length>c)&&y(L)})}o(b),v(R,b)};te(B,R=>{e(m),ut(()=>!e(m)||e(m).length===0)?R(D):R(P,!1)})}v(_e,k),rt()}var ea=ht(''),ta=ht(''),aa=C('
');function ra(_e,O){at(O,!1);const m=g(),S=g(),U=g(),M=g();let c=ue(O,"currentPage",8,1),k=ue(O,"totalPages",8,1),B=ue(O,"totalItems",8,0),D=ue(O,"pageSize",12,25),P=ue(O,"loading",8,!1),R=ue(O,"itemName",8,"items");const b=zt();function Z(){e(S)&&!P()&&(b("pageChange",{page:c()-1}),c()-2>0&&b("prefetch",{page:c()-2}))}function G(){e(m)&&!P()&&(b("pageChange",{page:c()+1}),c()+2<=k()&&b("prefetch",{page:c()+2}))}function ke(j){const F=j.target,ae=parseInt(F.value);b("pageSizeChange",{pageSize:ae})}oe(()=>(z(c()),z(k())),()=>{r(m,c()z(c()),()=>{r(S,c()>1)}),oe(()=>(z(B()),z(c()),z(D())),()=>{r(U,B()===0?0:(c()-1)*D()+1)}),oe(()=>(z(c()),z(D()),z(B())),()=>{r(M,Math.min(c()*D(),B()))}),oe(()=>(z(c()),z(k()),z(P())),()=>{c()!e(S)||P());Y(y,{variant:"secondary",size:"sm",get disabled(){return e(j)},$$events:{click:Z},children:(F,ae)=>{W();var X=se("Previous");v(F,X)},$$slots:{default:!0}})}var f=s(y,2);{let j=He(()=>!e(m)||P());Y(f,{variant:"secondary",size:"sm",get disabled(){return e(j)},$$events:{click:G},children:(F,ae)=>{W();var X=se("Next");v(F,X)},$$slots:{default:!0}})}o(L);var $=s(L,2),T=l($),n=l(T),A=s(l(n)),h=l(A,!0);o(A);var p=s(A,2),We=l(p,!0);o(p);var pe=s(p,2),Ye=l(pe,!0);o(pe);var K=s(pe);o(n);var Oe=s(n,2),le=s(l(Oe),2);E(()=>{D(),Et(()=>{P()})});var we=l(le);we.value=we.__value=10;var $e=s(we);$e.value=$e.__value=25;var Pe=s($e);Pe.value=Pe.__value=50;var Ue=s(Pe);Ue.value=Ue.__value=100,o(le),o(Oe),o(T);var Ae=s(T,2),Fe=l(Ae);{let j=He(()=>!e(S)||P());Y(Fe,{variant:"secondary",size:"sm",get disabled(){return e(j)},$$events:{click:Z},children:(F,ae)=>{var X=ea();v(F,X)},$$slots:{default:!0}})}var je=s(Fe,2),Se=s(l(je)),Ze=l(Se,!0);o(Se);var Ie=s(Se,2),Je=l(Ie,!0);o(Ie),o(je);var ie=s(je,2);{let j=He(()=>!e(m)||P());Y(ie,{variant:"secondary",size:"sm",get disabled(){return e(j)},$$events:{click:G},children:(F,ae)=>{var X=ta();v(F,X)},$$slots:{default:!0}})}o(Ae),o($),o(q),E(()=>{w(h,e(U)),w(We,e(M)),w(Ye,B()),w(K,` ${R()??""}`),le.disabled=P(),w(Ze,c()),w(Je,k())}),At(le,D),H("change",le,ke),v(_e,q),rt()}var sa=C('
'),oa=C(' '),la=C('
Uploading...
'),ia=C('

Upload New Object

Press Space or Enter to add a tag. Press Backspace to remove the last tag.

'),na=C(' '),da=C('

Update Object

Press Space or Enter to add a tag. Press Backspace to remove the last tag.

'),ca=C(`
`,1);function Ca(_e,O){at(O,!1);let m=g([]),S=g(!0),U=g(""),M=g(""),c=g(1),k=g(25),B=g(1),D=g(0),P=1;const R="garm_objects_page_size";let b=new Map;const Z=300*1e3;let G=null;const ke=500;let q=g(!1),L=g(!1),y=g(!1),f=g(null),$=g(!1),T=null,n=g({name:"",file:null,tags:[],description:""}),A=g(0),h=g(!1),p=g({name:"",tags:[],description:""});function We(t){if(t.operation==="create")K();else if(t.operation==="update"){const a=t.payload;r(m,e(m).map(i=>i.id===a.id?a:i))}else if(t.operation==="delete"){const a=t.payload.id||t.payload;r(m,e(m).filter(i=>i.id!==a)),r(D,Math.max(0,e(D)-1))}}Ot(async()=>{const t=localStorage.getItem(R);if(t){const a=parseInt(t,10);!isNaN(a)&&a>0&&r(k,a)}await K(),T=Kt.subscribeToEntity("file_object",["create","update","delete"],We)}),Ut(()=>{T&&(T(),T=null)});function pe(t,a,i=e(k)){return`${t}-${a||"all"}-${i}`}function Ye(){const t=Date.now();for(const[a,i]of b.entries())t-i.timestamp>Z&&b.delete(a)}async function K(t=!1){try{r(S,!t),r(U,"");const a=e(M).trim()?e(M).trim().replace(/\s+/g,","):void 0,i=pe(e(c),a);if(t){const u=b.get(i);if(u&&Date.now()-u.timestampe(B))return;const a=e(M).trim()?e(M).trim().replace(/\s+/g,","):void 0,i=pe(t,a),d=b.get(i);if(!(d&&Date.now()-d.timestamp{i.lengthComputable&&r(A,Math.round(i.loaded/i.total*100))}),await new Promise((i,d)=>{a.addEventListener("load",async()=>{a.status>=200&&a.status<300?i():d(new Error(`Upload failed with status ${a.status}`))}),a.addEventListener("error",()=>{d(new Error("Upload failed"))});const u=localStorage.getItem("token"),N=window.location.origin;a.open("POST",`${N}/api/v1/objects/`),u&&a.setRequestHeader("Authorization",`Bearer ${u}`),a.setRequestHeader("X-File-Name",e(n).name),e(n).tags.length>0&&a.setRequestHeader("X-Tags",e(n).tags.join(",")),e(n).description.trim()&&a.setRequestHeader("X-File-Description",e(n).description.trim()),a.send(e(n).file)}),ee.add({type:"success",title:"Upload successful",message:`File "${e(n).name}" has been uploaded successfully.`}),r(L,!1),await K()}catch(t){const a=Ee(t);ee.add({type:"error",title:"Upload failed",message:a})}finally{r(h,!1),r(A,0)}}async function Ae(){if(e(f)?.id)try{await Ge.updateFileObject(e(f).id.toString(),{name:e(p).name||void 0,tags:e(p).tags,description:e(p).description||void 0}),ee.add({type:"success",title:"Object updated",message:"Object has been updated successfully."}),r(y,!1),r(f,null),await K()}catch(t){const a=Ee(t);ee.add({type:"error",title:"Failed to update object",message:a})}}async function Fe(t){try{const i=`${window.location.origin}/api/v1/objects/${t.id}/download`,d=await fetch(i,{method:"HEAD",credentials:"include"});if(!d.ok){const N=await d.text();throw new Error(N||`Download failed with status ${d.status}`)}const u=document.createElement("a");u.href=i,u.download=t.name||"download",document.body.appendChild(u),u.click(),document.body.removeChild(u)}catch(a){const i=Ee(a);ee.add({type:"error",title:"Download failed",message:i})}}function je(t){const a=t.detail.term,i=e(M).length>0,d=a.length>0;r(M,a),G&&clearTimeout(G),G=setTimeout(()=>{!i&&d?(P=e(c),r(c,1)):i&&!d?r(c,P):d&&r(c,1),b.clear(),K(),G=null},ke)}function Se(t){r(c,t.detail.page),K(!0)}function Ze(t){r(k,t.detail.pageSize),localStorage.setItem(R,e(k).toString()),r(c,1),b.clear(),K()}function Ie(t){Oe(t.detail.page)}function Je(t){const a=t.target;a.files&&a.files[0]&&(V(n,e(n).file=a.files[0]),V(n,e(n).name=a.files[0].name))}let ie=g(""),j=g("");function F(t,a){const d=t.target.value.trim();if((t.key===" "||t.key==="Enter")&&d)t.preventDefault(),X(d,a),a==="upload"?r(ie,""):r(j,"");else if(t.key==="Backspace"&&!d){t.preventDefault();const u=a==="upload"?e(n).tags:e(p).tags;u.length>0&&Qe(u.length-1,a)}}function ae(t){const a=t==="upload"?e(ie).trim():e(j).trim();a&&(X(a,t),t==="upload"?r(ie,""):r(j,""))}function X(t,a){const i=t.trim().toLowerCase();i&&(a==="upload"?e(n).tags.includes(i)||V(n,e(n).tags=[...e(n).tags,i]):e(p).tags.includes(i)||V(p,e(p).tags=[...e(p).tags,i]))}function Qe(t,a){a==="upload"?V(n,e(n).tags=e(n).tags.filter((i,d)=>d!==t)):V(p,e(p).tags=e(p).tags.filter((i,d)=>d!==t))}const xt=[{key:"name",title:"Name",cellComponent:Ht,cellProps:{entityType:"object"}},{key:"size",title:"Size",cellComponent:mt,cellProps:{getValue:t=>Gt(t.size||0)}},{key:"tags",title:"Tags",cellComponent:Qt,hideOnMobile:!0,cellProps:{tags:[]}},{key:"updated_at",title:"Last Modified",hideOnMobile:!0,cellComponent:mt,cellProps:{getValue:t=>qt(t.updated_at)}},{key:"actions",title:"Actions",align:"right",width:"min",cellComponent:Lt,cellProps:{actions:[{type:"custom",label:"Download",action:"download",title:"Download",ariaLabel:"Download object"},{type:"edit",action:"edit",title:"Update",ariaLabel:"Update object"},{type:"delete",action:"delete",title:"Delete",ariaLabel:"Delete object"}]}}],yt=` -This feature allows you to use GARM as a simple, private internal-use object storage system. The primary goal of this is to allow users to store provider binaries, agent binaries, runner tools and any other type of files needed for a functional GARM deployment. - -Files are stored in the database as blobs. You do not need to configure additional storage. - -It is not meant to be used to serve files outside of the needs of GARM and it does not implement S3, nor will it ever. - `.trim();tt();var st=ca(),ot=bt(st);Bt(ot,{title:"Object Storage",description:"Manage files stored in GARM's internal object storage",$$slots:{actions:(t,a)=>{Y(t,{variant:"primary",icon:'',$$events:{click:we},children:(i,d)=>{W();var u=se("Upload New Object");v(i,u)},$$slots:{default:!0}})}}});var et=s(ot,2),Be=l(et),_t=s(l(Be),2);o(Be);var kt=s(Be,2);{var wt=t=>{var a=sa(),i=l(a,!0);o(a),E(()=>w(i,yt)),v(t,a)};te(kt,t=>{e($)&&t(wt)})}o(et);var lt=s(et,2);Rt(lt,{get columns(){return xt},get data(){return e(m)},get loading(){return e(S)},get error(){return e(U)},itemName:"objects",emptyIconType:"document",showSearch:!0,searchType:"backend",searchPlaceholder:"Search by name or tags...",searchHelpText:"",showPagination:!1,get searchTerm(){return e(M)},set searchTerm(t){r(M,t)},$$events:{search:je,edit:t=>$e(t.detail.item),delete:t=>Pe(t.detail.item),action:t=>t.detail.type==="download"&&Fe(t.detail.item)},$$legacy:!0});var it=s(lt,2);{var $t=t=>{ra(t,{get currentPage(){return e(c)},get totalPages(){return e(B)},get totalItems(){return e(D)},get pageSize(){return e(k)},get loading(){return e(S)},itemName:"objects",$$events:{pageChange:Se,pageSizeChange:Ze,prefetch:Ie}})};te(it,t=>{!e(S)&&!e(U)&&e(D)>0&&t($t)})}var nt=s(it,2);{var Pt=t=>{ft(t,{$$events:{close:()=>!e(h)&&r(L,!1)},children:(a,i)=>{var d=ia(),u=s(l(d),2),N=l(u),ge=s(l(N),2);qe(ge),o(N);var ne=s(N,2),Me=s(l(ne),2),me=l(Me),re=s(me,2);Y(re,{type:"button",variant:"secondary",get disabled(){return e(h)},$$events:{click:()=>document.getElementById("upload-file-input")?.click()},children:(x,Q)=>{W();var I=se("Choose File");v(x,I)},$$slots:{default:!0}});var fe=s(re,2),De=l(fe,!0);o(fe),o(Me),o(ne);var ve=s(ne,2),Re=s(l(ve),2),Ce=l(Re);Xe(Ce,1,()=>e(n).tags,Ve,(x,Q,I)=>{var he=oa(),Ne=l(he),xe=s(Ne);o(he),E(()=>{w(Ne,`${e(Q)??""} `),xe.disabled=e(h),Ke(xe,"aria-label",`Remove tag ${e(Q)??""}`)}),H("click",xe,()=>Qe(I,"upload")),v(x,he)});var J=s(Ce,2);qe(J),o(Re),W(2),o(ve);var Te=s(ve,2),_=s(l(Te),2);pt(_);var de=s(_,2),ce=l(de);o(de),o(Te);var be=s(Te,2);{var Le=x=>{var Q=la(),I=l(Q),he=s(l(I),2),Ne=l(he);o(he),o(I);var xe=s(I,2),Ct=l(xe);o(xe),o(Q),E(()=>{w(Ne,`${e(A)??""}%`),It(Ct,`width: ${e(A)??""}%`)}),v(x,Q)};te(be,x=>{e(h)&&x(Le)})}var ze=s(be,2),ct=l(ze);Y(ct,{type:"button",variant:"secondary",get disabled(){return e(h)},$$events:{click:()=>r(L,!1)},children:(x,Q)=>{W();var I=se("Cancel");v(x,I)},$$slots:{default:!0}});var Dt=s(ct,2);Y(Dt,{type:"submit",variant:"primary",get disabled(){return e(h)},get loading(){return e(h)},children:(x,Q)=>{W();var I=se();E(()=>w(I,e(h)?"Uploading...":"Upload")),v(x,I)},$$slots:{default:!0}}),o(ze),o(u),o(d),E(()=>{ge.disabled=e(h),me.disabled=e(h),w(De,e(n).file?e(n).file.name:"No file chosen"),J.disabled=e(h),Ke(J,"placeholder",e(n).tags.length===0?"Type and press space to add tags...":""),_.disabled=e(h),w(ce,`${e(n).description.length??""} / 8192 characters`)}),ye(ge,()=>e(n).name,x=>V(n,e(n).name=x)),H("change",me,Je),ye(J,()=>e(ie),x=>r(ie,x)),H("keydown",J,x=>F(x,"upload")),H("blur",J,()=>ae("upload")),ye(_,()=>e(n).description,x=>V(n,e(n).description=x)),H("submit",u,gt(Ue)),v(a,d)},$$slots:{default:!0}})};te(nt,t=>{e(L)&&t(Pt)})}var dt=s(nt,2);{var jt=t=>{ft(t,{$$events:{close:()=>r(y,!1)},children:(a,i)=>{var d=da(),u=s(l(d),2),N=l(u),ge=s(l(N),2);qe(ge),o(N);var ne=s(N,2),Me=s(l(ne),2),me=l(Me);Xe(me,1,()=>e(p).tags,Ve,(_,de,ce)=>{var be=na(),Le=l(be),ze=s(Le);o(be),E(()=>{w(Le,`${e(de)??""} `),Ke(ze,"aria-label",`Remove tag ${e(de)??""}`)}),H("click",ze,()=>Qe(ce,"update")),v(_,be)});var re=s(me,2);qe(re),o(Me),W(2),o(ne);var fe=s(ne,2),De=s(l(fe),2);pt(De);var ve=s(De,2),Re=l(ve);o(ve),o(fe);var Ce=s(fe,2),J=l(Ce);Y(J,{type:"button",variant:"secondary",$$events:{click:()=>r(y,!1)},children:(_,de)=>{W();var ce=se("Cancel");v(_,ce)},$$slots:{default:!0}});var Te=s(J,2);Y(Te,{type:"submit",variant:"primary",children:(_,de)=>{W();var ce=se("Update");v(_,ce)},$$slots:{default:!0}}),o(Ce),o(u),o(d),E(()=>{Ke(re,"placeholder",e(p).tags.length===0?"Type and press space to add tags...":""),w(Re,`${e(p).description.length??""} / 8192 characters`)}),ye(ge,()=>e(p).name,_=>V(p,e(p).name=_)),ye(re,()=>e(j),_=>r(j,_)),H("keydown",re,_=>F(_,"update")),H("blur",re,()=>ae("update")),ye(De,()=>e(p).description,_=>V(p,e(p).description=_)),H("submit",u,gt(Ae)),v(a,d)},$$slots:{default:!0}})};te(dt,t=>{e(y)&&e(f)&&t(jt)})}var St=s(dt,2);{var Mt=t=>{Nt(t,{title:"Delete Object",get message(){return`Are you sure you want to delete the object '${e(f).name??""}'? This action cannot be undone.`},$$events:{confirm:le,close:()=>{r(q,!1),r(f,null)}}})};te(St,t=>{e(q)&&e(f)&&t(Mt)})}E(()=>Ft(_t,0,`w-4 h-4 ml-1 transform ${e($)?"rotate-180":""}`)),H("click",Be,()=>r($,!e($))),v(_e,st),rt()}export{Ca as component}; diff --git a/webapp/assets/_app/immutable/nodes/11.CjCq9fG3.js b/webapp/assets/_app/immutable/nodes/11.CjCq9fG3.js new file mode 100644 index 00000000..4320e8e7 --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/11.CjCq9fG3.js @@ -0,0 +1,7 @@ +import"../chunks/DsnmJJEf.js";import{i as tt}from"../chunks/De-I_rkH.js";import{p as at,o as bt,B as ht,l as le,q as O,g as e,m as p,h as xt,f as S,a as yt,b as f,c as rt,s,k as r,u as ct,d as l,r as i,t as z,e as j,i as U,E as Ut,D as ie,v as qe,C as _t,z as Y,y as At,x as pt,w as K}from"../chunks/BIqNNOMq.js";import{p as me,i as ne}from"../chunks/CfI2BFUj.js";import{e as Ye,i as We}from"../chunks/D8ZtP9JD.js";import{i as wt,B as W,b as Bt,g as Ve,s as It,r as Xe,c as Ke}from"../chunks/CQh-7xkh.js";import{b as Pe}from"../chunks/Gs5uNKRr.js";import{p as ut}from"../chunks/CdEA5IGF.js";import"../chunks/BSYpqPvJ.js";import"../chunks/CYb6_lpF.js";import{P as Lt}from"../chunks/Cq4AwQWc.js";import{D as Ft,G as gt,A as Rt}from"../chunks/BjNB1vhO.js";import{M as mt}from"../chunks/BFX8vI-4.js";import{t as te}from"../chunks/DgRPqjXE.js";import{e as Ue}from"../chunks/BZiHL9L3.js";import{D as Nt}from"../chunks/Db7N5hjl.js";import{E as Ht}from"../chunks/C6HeU_02.js";import{b as Gt}from"../chunks/BLHP-Xk3.js";import{f as ft,a as vt}from"../chunks/aK-A9Gop.js";import{w as qt}from"../chunks/C4VNo_Nu.js";var Vt=S('-'),Xt=S(' '),Kt=S(' '),Yt=S('
'),Wt=S(' '),Zt=S('
All tags:
'),Jt=S(" ",1);function Qt(je,A){at(A,!1);const m=p(),B=p(),R=p();let T=me(A,"item",8);const d=3;let x=p(null),D=p(!1),E=p(0),w=p(0),ae=p(!1);function b(){if(e(x)){const v=e(x).getBoundingClientRect();r(E,v.left),window.innerHeight-v.bottom<150?(r(ae,!0),r(w,v.top)):(r(ae,!1),r(w,v.bottom+4))}}function re(){r(D,!0),b()}function Z(){r(D,!1)}bt(()=>{window.addEventListener("scroll",b,!0),window.addEventListener("resize",b)}),ht(()=>{window.removeEventListener("scroll",b,!0),window.removeEventListener("resize",b)}),le(()=>O(T()),()=>{r(m,T()?.tags||[])}),le(()=>e(m),()=>{r(B,e(m).slice(0,d))}),le(()=>e(m),()=>{r(R,Math.max(0,e(m).length-d))}),xt(),tt();var fe=Jt(),N=yt(fe);{var H=v=>{var o=Vt();f(v,o)},V=v=>{var o=Yt(),$=l(o);Ye($,1,()=>e(B),We,(P,C)=>{var G=Xt(),I=l(G,!0);i(G),z(()=>j(I,e(C))),f(P,G)});var h=s($,2);{var u=P=>{var C=Kt(),G=l(C);i(C),z(()=>j(G,`+${e(R)??""} more`)),f(P,C)};ne(h,P=>{e(R)>0&&P(u)})}i(o),Gt(o,P=>r(x,P),()=>e(x)),U("mouseenter",o,function(...P){(e(m).length>d?re:void 0)?.apply(this,P)}),U("mouseleave",o,function(...P){(e(m).length>d?Z:void 0)?.apply(this,P)}),f(v,o)};ne(N,v=>{e(m),ct(()=>!e(m)||e(m).length===0)?v(H):v(V,!1)})}var k=s(N,2);{var J=v=>{var o=Zt(),$=l(o),h=s(l($),2);Ye(h,5,()=>e(m),We,(u,P)=>{var C=Wt(),G=l(C,!0);i(C),z(()=>j(G,e(P))),f(u,C)}),i(h),i($),i(o),z(()=>wt(o,`left: ${e(E)??""}px; top: ${e(w)??""}px; transform: translateY(${e(ae)?"-100%":"0"});`)),f(v,o)};ne(k,v=>{e(m),e(D),ct(()=>e(m).length>d&&e(D))&&v(J)})}f(je,fe),rt()}var ea=_t(''),ta=_t(''),aa=S('
');function ra(je,A){at(A,!1);const m=p(),B=p(),R=p(),T=p();let d=me(A,"currentPage",8,1),x=me(A,"totalPages",8,1),D=me(A,"totalItems",8,0),E=me(A,"pageSize",12,25),w=me(A,"loading",8,!1),ae=me(A,"itemName",8,"items");const b=Ut();function re(){e(B)&&!w()&&(b("pageChange",{page:d()-1}),d()-2>0&&b("prefetch",{page:d()-2}))}function Z(){e(m)&&!w()&&(b("pageChange",{page:d()+1}),d()+2<=x()&&b("prefetch",{page:d()+2}))}function fe(M){const L=M.target,se=parseInt(L.value);b("pageSizeChange",{pageSize:se})}le(()=>(O(d()),O(x())),()=>{r(m,d()O(d()),()=>{r(B,d()>1)}),le(()=>(O(D()),O(d()),O(E())),()=>{r(R,D()===0?0:(d()-1)*E()+1)}),le(()=>(O(d()),O(E()),O(D())),()=>{r(T,Math.min(d()*E(),D()))}),le(()=>(O(d()),O(x()),O(w())),()=>{d()!e(B)||w());W(V,{variant:"secondary",size:"sm",get disabled(){return e(M)},$$events:{click:re},children:(L,se)=>{Y();var X=ie("Previous");f(L,X)},$$slots:{default:!0}})}var k=s(V,2);{let M=qe(()=>!e(m)||w());W(k,{variant:"secondary",size:"sm",get disabled(){return e(M)},$$events:{click:Z},children:(L,se)=>{Y();var X=ie("Next");f(L,X)},$$slots:{default:!0}})}i(H);var J=s(H,2),v=l(J),o=l(v),$=s(l(o)),h=l($,!0);i($);var u=s($,2),P=l(u,!0);i(u);var C=s(u,2),G=l(C,!0);i(C);var I=s(C);i(o);var Ae=s(o,2),de=s(l(Ae),2);z(()=>{E(),At(()=>{w()})});var Ce=l(de);Ce.value=Ce.__value=10;var ve=s(Ce);ve.value=ve.__value=25;var be=s(ve);be.value=be.__value=50;var Be=s(be);Be.value=Be.__value=100,i(de),i(Ae),i(v);var Ie=s(v,2),Le=l(Ie);{let M=qe(()=>!e(B)||w());W(Le,{variant:"secondary",size:"sm",get disabled(){return e(M)},$$events:{click:re},children:(L,se)=>{var X=ea();f(L,X)},$$slots:{default:!0}})}var Me=s(Le,2),Se=s(l(Me)),Ze=l(Se,!0);i(Se);var Fe=s(Se,2),Je=l(Fe,!0);i(Fe),i(Me);var ce=s(Me,2);{let M=qe(()=>!e(m)||w());W(ce,{variant:"secondary",size:"sm",get disabled(){return e(M)},$$events:{click:Z},children:(L,se)=>{var X=ta();f(L,X)},$$slots:{default:!0}})}i(Ie),i(J),i(N),z(()=>{j(h,e(R)),j(P,e(T)),j(G,D()),j(I,` ${ae()??""}`),de.disabled=w(),j(Ze,d()),j(Je,x())}),Bt(de,E),U("change",de,fe),f(je,N),rt()}var sa=S('
'),oa=S(' '),ia=S('
Uploading...
'),la=S('

Upload New Object

Press Space or Enter to add a tag. Press Backspace to remove the last tag.

'),na=S(' '),da=S('

Update Object

Press Space or Enter to add a tag. Press Backspace to remove the last tag.

'),ca=S(`
`,1);function Da(je,A){at(A,!1);let m=p([]),B=p(!0),R=p(""),T=p(""),d=p(1),x=p(25),D=p(1),E=p(0),w=1;const ae="garm_objects_page_size";let b=new Map;const re=300*1e3;let Z=null;const fe=500;let N=p(!1),H=p(!1),V=p(!1),k=p(null),J=p(!1),v=null,o=p({name:"",file:null,tags:[],description:""}),$=p(0),h=p(!1),u=p({name:"",tags:[],description:""});function P(t){if(t.operation==="create")I();else if(t.operation==="update"){const a=t.payload;r(m,e(m).map(n=>n.id===a.id?a:n))}else if(t.operation==="delete"){const a=t.payload.id||t.payload;r(m,e(m).filter(n=>n.id!==a)),r(E,Math.max(0,e(E)-1))}}bt(async()=>{const t=localStorage.getItem(ae);if(t){const a=parseInt(t,10);!isNaN(a)&&a>0&&r(x,a)}await I(),v=qt.subscribeToEntity("file_object",["create","update","delete"],P)}),ht(()=>{v&&(v(),v=null)});function C(t,a,n=e(x)){return`${t}-${a||"all"}-${n}`}function G(){const t=Date.now();for(const[a,n]of b.entries())t-n.timestamp>re&&b.delete(a)}async function I(t=!1){try{r(B,!t),r(R,"");const a=e(T).trim()?e(T).trim().replace(/\s+/g,","):void 0,n=C(e(d),a);if(t){const g=b.get(n);if(g&&Date.now()-g.timestampe(D))return;const a=e(T).trim()?e(T).trim().replace(/\s+/g,","):void 0,n=C(t,a),c=b.get(n);if(!(c&&Date.now()-c.timestamp{n.lengthComputable&&r($,Math.round(n.loaded/n.total*100))}),await new Promise((n,c)=>{a.addEventListener("load",async()=>{a.status>=200&&a.status<300?n():c(new Error(`Upload failed with status ${a.status}`))}),a.addEventListener("error",()=>{c(new Error("Upload failed"))});const g=localStorage.getItem("token"),q=window.location.origin;a.open("POST",`${q}/api/v1/objects/`),g&&a.setRequestHeader("Authorization",`Bearer ${g}`),a.setRequestHeader("X-File-Name",e(o).name),e(o).tags.length>0&&a.setRequestHeader("X-Tags",e(o).tags.join(",")),e(o).description.trim()&&a.setRequestHeader("X-File-Description",e(o).description.trim()),a.send(e(o).file)}),te.add({type:"success",title:"Upload successful",message:`File "${e(o).name}" has been uploaded successfully.`}),r(H,!1),await I()}catch(t){const a=Ue(t);te.add({type:"error",title:"Upload failed",message:a})}finally{r(h,!1),r($,0)}}async function Ie(){if(e(k)?.id)try{await Ve.updateFileObject(e(k).id.toString(),{name:e(u).name||void 0,tags:e(u).tags,description:e(u).description||void 0}),te.add({type:"success",title:"Object updated",message:"Object has been updated successfully."}),r(V,!1),r(k,null),await I()}catch(t){const a=Ue(t);te.add({type:"error",title:"Failed to update object",message:a})}}async function Le(t){try{const n=`${window.location.origin}/api/v1/objects/${t.id}/download`,c=await fetch(n,{method:"HEAD",credentials:"include"});if(!c.ok){const q=await c.text();throw new Error(q||`Download failed with status ${c.status}`)}const g=document.createElement("a");g.href=n,g.download=t.name||"download",document.body.appendChild(g),g.click(),document.body.removeChild(g)}catch(a){const n=Ue(a);te.add({type:"error",title:"Download failed",message:n})}}function Me(t){const a=t.detail.term,n=e(T).length>0,c=a.length>0;r(T,a),Z&&clearTimeout(Z),Z=setTimeout(()=>{!n&&c?(w=e(d),r(d,1)):n&&!c?r(d,w):c&&r(d,1),b.clear(),I(),Z=null},fe)}function Se(t){r(d,t.detail.page),I(!0)}function Ze(t){r(x,t.detail.pageSize),localStorage.setItem(ae,e(x).toString()),r(d,1),b.clear(),I()}function Fe(t){Ae(t.detail.page)}function Je(t){const a=t.target;a.files&&a.files[0]&&(K(o,e(o).file=a.files[0]),K(o,e(o).name=a.files[0].name))}let ce=p(""),M=p("");function L(t,a){const c=t.target.value.trim();if((t.key===" "||t.key==="Enter")&&c)t.preventDefault(),X(c,a),a==="upload"?r(ce,""):r(M,"");else if(t.key==="Backspace"&&!c){t.preventDefault();const g=a==="upload"?e(o).tags:e(u).tags;g.length>0&&Qe(g.length-1,a)}}function se(t){const a=t==="upload"?e(ce).trim():e(M).trim();a&&(X(a,t),t==="upload"?r(ce,""):r(M,""))}function X(t,a){const n=t.trim().toLowerCase();n&&(a==="upload"?e(o).tags.includes(n)||K(o,e(o).tags=[...e(o).tags,n]):e(u).tags.includes(n)||K(u,e(u).tags=[...e(u).tags,n]))}function Qe(t,a){a==="upload"?K(o,e(o).tags=e(o).tags.filter((n,c)=>c!==t)):K(u,e(u).tags=e(u).tags.filter((n,c)=>c!==t))}const kt=[{key:"name",title:"Name",cellComponent:Ht,cellProps:{entityType:"object"}},{key:"size",title:"Size",cellComponent:gt,cellProps:{getValue:t=>ft(t.size||0)}},{key:"tags",title:"Tags",cellComponent:Qt,hideOnMobile:!0,cellProps:{tags:[]}},{key:"updated_at",title:"Last Modified",hideOnMobile:!0,cellComponent:gt,cellProps:{getValue:t=>vt(t.updated_at)}},{key:"actions",title:"Actions",align:"right",width:"min",cellComponent:Rt,cellProps:{actions:[{type:"custom",label:"Download",action:"download",title:"Download",ariaLabel:"Download object"},{type:"edit",action:"edit",title:"Update",ariaLabel:"Update object"},{type:"delete",action:"delete",title:"Delete",ariaLabel:"Delete object"}]}}],$t=` +This feature allows you to use GARM as a simple, private internal-use object storage system. The primary goal of this is to allow users to store provider binaries, agent binaries, runner tools and any other type of files needed for a functional GARM deployment. + +Files are stored in the database as blobs. You do not need to configure additional storage. + +It is not meant to be used to serve files outside of the needs of GARM and it does not implement S3, nor will it ever. + `.trim(),Pt={entityType:"repository",primaryText:{field:"name",isClickable:!0,href:"/objects/{id}"},secondaryText:{field:"description",computedValue:t=>{const a=t.description||"No description";return a.length>100?a.substring(0,100)+"...":a}},customInfo:[{icon:'',text:t=>ft(t.size||0)},{icon:'',text:t=>vt(t.updated_at)}],actions:[{type:"edit",handler:ve},{type:"delete",handler:be}]};tt();var st=ca(),ot=yt(st);Lt(ot,{title:"Object Storage",description:"Manage files stored in GARM's internal object storage",$$slots:{actions:(t,a)=>{W(t,{variant:"primary",icon:'',$$events:{click:Ce},children:(n,c)=>{Y();var g=ie("Upload New Object");f(n,g)},$$slots:{default:!0}})}}});var et=s(ot,2),Re=l(et),jt=s(l(Re),2);i(Re);var Ct=s(Re,2);{var Mt=t=>{var a=sa(),n=l(a,!0);i(a),z(()=>j(n,$t)),f(t,a)};ne(Ct,t=>{e(J)&&t(Mt)})}i(et);var it=s(et,2);Ft(it,{get columns(){return kt},get data(){return e(m)},get loading(){return e(B)},get error(){return e(R)},itemName:"objects",emptyIconType:"document",showSearch:!0,searchType:"backend",searchPlaceholder:"Search by name or tags...",searchHelpText:"",showPagination:!0,get paginationComponent(){return ra},get currentPage(){return e(d)},get totalPages(){return e(D)},get totalItems(){return e(E)},get perPage(){return e(x)},get mobileCardConfig(){return Pt},get searchTerm(){return e(T)},set searchTerm(t){r(T,t)},$$events:{search:Me,pageChange:Se,pageSizeChange:Ze,prefetch:Fe,edit:t=>ve(t.detail.item),delete:t=>be(t.detail.item),action:t=>t.detail.type==="download"&&Le(t.detail.item)},$$legacy:!0});var lt=s(it,2);{var St=t=>{mt(t,{$$events:{close:()=>!e(h)&&r(H,!1)},children:(a,n)=>{var c=la(),g=s(l(c),2),q=l(g),he=s(l(q),2);Xe(he),i(q);var pe=s(q,2),Te=s(l(pe),2),xe=l(Te),oe=s(xe,2);W(oe,{type:"button",variant:"secondary",get disabled(){return e(h)},$$events:{click:()=>document.getElementById("upload-file-input")?.click()},children:(y,ee)=>{Y();var F=ie("Choose File");f(y,F)},$$slots:{default:!0}});var ye=s(oe,2),De=l(ye,!0);i(ye),i(Te),i(pe);var _e=s(pe,2),Ne=s(l(_e),2),Ee=l(Ne);Ye(Ee,1,()=>e(o).tags,We,(y,ee,F)=>{var ke=oa(),Ge=l(ke),$e=s(Ge);i(ke),z(()=>{j(Ge,`${e(ee)??""} `),$e.disabled=e(h),Ke($e,"aria-label",`Remove tag ${e(ee)??""}`)}),U("click",$e,()=>Qe(F,"upload")),f(y,ke)});var Q=s(Ee,2);Xe(Q),i(Ne),Y(2),i(_e);var ze=s(_e,2),_=s(l(ze),2);pt(_);var ue=s(_,2),ge=l(ue);i(ue),i(ze);var we=s(ze,2);{var He=y=>{var ee=ia(),F=l(ee),ke=s(l(F),2),Ge=l(ke);i(ke),i(F);var $e=s(F,2),Ot=l($e);i($e),i(ee),z(()=>{j(Ge,`${e($)??""}%`),wt(Ot,`width: ${e($)??""}%`)}),f(y,ee)};ne(we,y=>{e(h)&&y(He)})}var Oe=s(we,2),dt=l(Oe);W(dt,{type:"button",variant:"secondary",get disabled(){return e(h)},$$events:{click:()=>r(H,!1)},children:(y,ee)=>{Y();var F=ie("Cancel");f(y,F)},$$slots:{default:!0}});var zt=s(dt,2);W(zt,{type:"submit",variant:"primary",get disabled(){return e(h)},get loading(){return e(h)},children:(y,ee)=>{Y();var F=ie();z(()=>j(F,e(h)?"Uploading...":"Upload")),f(y,F)},$$slots:{default:!0}}),i(Oe),i(g),i(c),z(()=>{he.disabled=e(h),xe.disabled=e(h),j(De,e(o).file?e(o).file.name:"No file chosen"),Q.disabled=e(h),Ke(Q,"placeholder",e(o).tags.length===0?"Type and press space to add tags...":""),_.disabled=e(h),j(ge,`${e(o).description.length??""} / 8192 characters`)}),Pe(he,()=>e(o).name,y=>K(o,e(o).name=y)),U("change",xe,Je),Pe(Q,()=>e(ce),y=>r(ce,y)),U("keydown",Q,y=>L(y,"upload")),U("blur",Q,()=>se("upload")),Pe(_,()=>e(o).description,y=>K(o,e(o).description=y)),U("submit",g,ut(Be)),f(a,c)},$$slots:{default:!0}})};ne(lt,t=>{e(H)&&t(St)})}var nt=s(lt,2);{var Tt=t=>{mt(t,{$$events:{close:()=>r(V,!1)},children:(a,n)=>{var c=da(),g=s(l(c),2),q=l(g),he=s(l(q),2);Xe(he),i(q);var pe=s(q,2),Te=s(l(pe),2),xe=l(Te);Ye(xe,1,()=>e(u).tags,We,(_,ue,ge)=>{var we=na(),He=l(we),Oe=s(He);i(we),z(()=>{j(He,`${e(ue)??""} `),Ke(Oe,"aria-label",`Remove tag ${e(ue)??""}`)}),U("click",Oe,()=>Qe(ge,"update")),f(_,we)});var oe=s(xe,2);Xe(oe),i(Te),Y(2),i(pe);var ye=s(pe,2),De=s(l(ye),2);pt(De);var _e=s(De,2),Ne=l(_e);i(_e),i(ye);var Ee=s(ye,2),Q=l(Ee);W(Q,{type:"button",variant:"secondary",$$events:{click:()=>r(V,!1)},children:(_,ue)=>{Y();var ge=ie("Cancel");f(_,ge)},$$slots:{default:!0}});var ze=s(Q,2);W(ze,{type:"submit",variant:"primary",children:(_,ue)=>{Y();var ge=ie("Update");f(_,ge)},$$slots:{default:!0}}),i(Ee),i(g),i(c),z(()=>{Ke(oe,"placeholder",e(u).tags.length===0?"Type and press space to add tags...":""),j(Ne,`${e(u).description.length??""} / 8192 characters`)}),Pe(he,()=>e(u).name,_=>K(u,e(u).name=_)),Pe(oe,()=>e(M),_=>r(M,_)),U("keydown",oe,_=>L(_,"update")),U("blur",oe,()=>se("update")),Pe(De,()=>e(u).description,_=>K(u,e(u).description=_)),U("submit",g,ut(Ie)),f(a,c)},$$slots:{default:!0}})};ne(nt,t=>{e(V)&&e(k)&&t(Tt)})}var Dt=s(nt,2);{var Et=t=>{Nt(t,{title:"Delete Object",get message(){return`Are you sure you want to delete the object '${e(k).name??""}'? This action cannot be undone.`},$$events:{confirm:de,close:()=>{r(N,!1),r(k,null)}}})};ne(Dt,t=>{e(N)&&e(k)&&t(Et)})}z(()=>It(jt,0,`w-4 h-4 ml-1 transform ${e(J)?"rotate-180":""}`)),U("click",Re,()=>r(J,!e(J))),f(je,st),rt()}export{Da as component}; diff --git a/webapp/assets/_app/immutable/nodes/12.ClmuGH2C.js b/webapp/assets/_app/immutable/nodes/12.CvWBofMh.js similarity index 94% rename from webapp/assets/_app/immutable/nodes/12.ClmuGH2C.js rename to webapp/assets/_app/immutable/nodes/12.CvWBofMh.js index b6112cb8..18bb688b 100644 --- a/webapp/assets/_app/immutable/nodes/12.ClmuGH2C.js +++ b/webapp/assets/_app/immutable/nodes/12.CvWBofMh.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as ct}from"../chunks/TJn6xDN9.js";import{p as vt,o as mt,l as ut,h as gt,f as y,a as de,t as C,b as x,c as xt,u as n,q as J,e as p,g as e,m as k,d as r,s,k as l,r as a,A as pt,i as j,z as se,x as ft,D as Fe,w as Q}from"../chunks/DniTuB_0.js";import{i as $,s as bt,a as yt}from"../chunks/DbNhg6mG.js";import{e as Be,i as Ee}from"../chunks/Ck5PkeSc.js";import{d as ie,c as oe,g as le,r as Se,B as Ue}from"../chunks/DD3srElq.js";import{b as ne}from"../chunks/CCQwxxp9.js";import{p as ht}from"../chunks/D4Caz1gY.js";import{p as _t}from"../chunks/CzKtu-7o.js";import{g as kt}from"../chunks/DeKGyprh.js";import{t as D}from"../chunks/CBJzOE8U.js";import{e as V}from"../chunks/BZiHL9L3.js";import{f as Ce,a as W}from"../chunks/aK-A9Gop.js";import{D as wt}from"../chunks/B6XSaEl0.js";import{M as jt}from"../chunks/PC4wJWhj.js";import{B as $t}from"../chunks/DcQdHuVc.js";var Dt=y('

Error

'),Mt=y('

Loading object details...

'),Ot=y('
'),Tt=y('No tags'),At=y('

Description

'),Ft=y('

File Information

ID:
Name:
Size:
File Type:
SHA256:

Metadata & Timestamps

Created At:
Updated At:
Tags:
',1),Bt=y(' '),Et=y('

Update Object

Press Space or Enter to add a tag. Press Backspace on empty field to remove last tag.

'),St=y(' ',1);function Xt(Ie,Le){vt(Le,!1);const[ze,Pe]=bt(),ce=()=>yt(_t,"$page",ze),X=k();let t=k(null),q=k(!0),M=k(""),Y=k(!1),I=k(!1),i=k({name:"",tags:[],description:""}),O=k("");mt(async()=>{await ve()});async function ve(){if(!e(X)){l(M,"Invalid object ID"),l(q,!1);return}try{l(q,!0),l(M,""),l(t,await le.getFileObject(e(X)))}catch(d){l(M,V(d)),D.add({type:"error",title:"Failed to load object",message:e(M)})}finally{l(q,!1)}}async function Ne(){if(e(t)?.id)try{await le.deleteFileObject(e(t).id.toString()),D.add({type:"success",title:"Object deleted",message:`Object "${e(t).name}" has been deleted successfully.`}),kt(ie("/objects"))}catch(d){const o=V(d);D.add({type:"error",title:"Failed to delete object",message:o})}}async function Re(){if(e(t)?.id)try{const o=`${window.location.origin}/api/v1/objects/${e(t).id}/download`,c=await fetch(o,{method:"HEAD",credentials:"include"});if(!c.ok){const u=await c.text();throw new Error(u||`Download failed with status ${c.status}`)}const v=document.createElement("a");v.href=o,v.download=e(t).name||"download",document.body.appendChild(v),v.click(),document.body.removeChild(v),D.add({type:"success",title:"Download started",message:`Downloading "${e(t).name}"...`})}catch(d){const o=V(d);D.add({type:"error",title:"Download failed",message:o})}}function He(){e(t)&&(l(i,{name:e(t).name||"",tags:e(t).tags||[],description:e(t).description||""}),l(O,""),l(I,!0))}async function qe(){if(e(t)?.id)try{await le.updateFileObject(e(t).id.toString(),{name:e(i).name||void 0,tags:e(i).tags,description:e(i).description||void 0}),D.add({type:"success",title:"Object updated",message:"Object has been updated successfully."}),l(I,!1),await ve()}catch(d){const o=V(d);D.add({type:"error",title:"Failed to update object",message:o})}}function Ke(d){const c=d.target.value.trim();(d.key===" "||d.key==="Enter")&&c?(d.preventDefault(),me(c),l(O,"")):d.key==="Backspace"&&!c&&e(i).tags.length>0&&(d.preventDefault(),ue(e(i).tags.length-1))}function Ge(){const d=e(O).trim();d&&(me(d),l(O,""))}function me(d){const o=d.trim().toLowerCase();o&&(e(i).tags.includes(o)||Q(i,e(i).tags=[...e(i).tags,o]))}function ue(d){Q(i,e(i).tags=e(i).tags.filter((o,c)=>c!==d))}ut(()=>ce(),()=>{l(X,ce().params.id||"")}),gt(),ct();var ge=St(),Z=de(ge),xe=r(Z),ee=r(xe),Je=r(ee);a(ee);var pe=s(ee,2),fe=r(pe),be=s(r(fe),2),Qe=r(be,!0);a(be),a(fe),a(pe),a(xe),a(Z);var ye=s(Z,2);{var Ve=d=>{var o=Dt(),c=r(o),v=r(c),u=s(r(v),2),h=r(u,!0);a(u),a(v),a(c),a(o),C(()=>p(h,e(M))),x(d,o)};$(ye,d=>{e(M)&&d(Ve)})}var he=s(ye,2);{var We=d=>{var o=Mt();x(d,o)},Xe=d=>{var o=pt(),c=de(o);{var v=u=>{var h=Ft(),T=de(h),w=r(T),A=r(w),L=s(r(A),2),_=r(L),F=s(_,2),z=s(F,2);a(L),a(A);var P=s(A,2),N=r(P),R=s(r(N),2),K=r(R,!0);a(R),a(N);var H=s(N,2),m=s(r(H),2),B=r(m,!0);a(m),a(H);var b=s(H,2),E=s(r(b),2),G=r(E,!0);a(E),a(b);var S=s(b,2),ke=s(r(S),2),tt=r(ke,!0);a(ke),a(S);var we=s(S,2),je=s(r(we),2),at=r(je,!0);a(je),a(we),a(P),a(w);var $e=s(w,2),De=s(r($e),2),te=r(De),Me=s(r(te),2),rt=r(Me,!0);a(Me),a(te);var ae=s(te,2),Oe=s(r(ae),2),dt=r(Oe,!0);a(Oe),a(ae);var Te=s(ae,2),Ae=s(r(Te),2),st=r(Ae);{var it=g=>{var f=Ot();Be(f,5,()=>(e(t),n(()=>e(t).tags)),Ee,(U,re)=>{$t(U,{variant:"blue",get text(){return e(re)}})}),a(f),x(g,f)},ot=g=>{var f=Tt();x(g,f)};$(st,g=>{e(t),n(()=>e(t).tags&&e(t).tags.length>0)?g(it):g(ot,!1)})}a(Ae),a(Te),a(De),a($e),a(T);var lt=s(T,2);{var nt=g=>{var f=At(),U=s(r(f),2),re=r(U,!0);a(U),a(f),C(()=>p(re,(e(t),n(()=>e(t).description)))),x(g,f)};$(lt,g=>{e(t),n(()=>e(t).description)&&g(nt)})}C((g,f,U)=>{p(K,(e(t),n(()=>e(t).id))),p(B,(e(t),n(()=>e(t).name))),p(G,g),p(tt,(e(t),n(()=>e(t).file_type||"N/A"))),p(at,(e(t),n(()=>e(t).sha256||"N/A"))),p(rt,f),p(dt,U)},[()=>(J(Ce),e(t),n(()=>Ce(e(t).size||0))),()=>(J(W),e(t),n(()=>W(e(t).created_at))),()=>(J(W),e(t),n(()=>W(e(t).updated_at)))]),j("click",_,He),j("click",F,Re),j("click",z,()=>l(Y,!0)),x(u,h)};$(c,u=>{e(t)&&u(v)},!0)}x(d,o)};$(he,d=>{e(q)?d(We):d(Xe,!1)})}var _e=s(he,2);{var Ye=d=>{jt(d,{$$events:{close:()=>l(I,!1)},children:(o,c)=>{var v=Et(),u=s(r(v),2),h=r(u),T=s(r(h),2);Se(T),a(h);var w=s(h,2),A=s(r(w),2),L=r(A);Be(L,1,()=>(e(i),n(()=>e(i).tags)),Ee,(m,B,b)=>{var E=Bt(),G=r(E),S=s(G);a(E),C(()=>{p(G,`${e(B)??""} `),oe(S,"aria-label",`Remove tag ${e(B)??""}`)}),j("click",S,()=>ue(b)),x(m,E)});var _=s(L,2);Se(_),a(A),se(2),a(w);var F=s(w,2),z=s(r(F),2);ft(z);var P=s(z,2),N=r(P);a(P),a(F);var R=s(F,2),K=r(R);Ue(K,{type:"button",variant:"secondary",$$events:{click:()=>l(I,!1)},children:(m,B)=>{se();var b=Fe("Cancel");x(m,b)},$$slots:{default:!0}});var H=s(K,2);Ue(H,{type:"submit",variant:"primary",children:(m,B)=>{se();var b=Fe("Update Object");x(m,b)},$$slots:{default:!0}}),a(R),a(u),a(v),C(()=>{oe(_,"placeholder",(e(i),n(()=>e(i).tags.length===0?"Type and press Space or Enter":""))),p(N,`${e(i),n(()=>e(i).description.length)??""} / 8192 characters`)}),ne(T,()=>e(i).name,m=>Q(i,e(i).name=m)),ne(_,()=>e(O),m=>l(O,m)),j("keydown",_,Ke),j("blur",_,Ge),ne(z,()=>e(i).description,m=>Q(i,e(i).description=m)),j("submit",u,ht(qe)),x(o,v)},$$slots:{default:!0}})};$(_e,d=>{e(I)&&e(t)&&d(Ye)})}var Ze=s(_e,2);{var et=d=>{wt(d,{title:"Delete Object",get message(){return`Are you sure you want to delete the object '${e(t),n(()=>e(t).name)??""}'? This action cannot be undone.`},$$events:{confirm:Ne,close:()=>l(Y,!1)}})};$(Ze,d=>{e(Y)&&e(t)&&d(et)})}C(d=>{oe(Je,"href",d),p(Qe,(e(t),n(()=>e(t)?e(t).name:"Object Details")))},[()=>(J(ie),n(()=>ie("/objects")))]),x(Ie,ge),xt(),Pe()}export{Xt as component}; +import"../chunks/DsnmJJEf.js";import{i as ct}from"../chunks/De-I_rkH.js";import{p as vt,o as mt,l as ut,h as gt,f as y,a as de,t as C,b as x,c as xt,u as n,q as J,e as p,g as e,m as k,d as r,s,k as l,r as a,A as pt,i as j,z as se,x as ft,D as Fe,w as Q}from"../chunks/BIqNNOMq.js";import{i as $,s as bt,a as yt}from"../chunks/CfI2BFUj.js";import{e as Be,i as Ee}from"../chunks/D8ZtP9JD.js";import{d as ie,c as oe,g as le,r as Se,B as Ue}from"../chunks/CQh-7xkh.js";import{b as ne}from"../chunks/Gs5uNKRr.js";import{p as ht}from"../chunks/CdEA5IGF.js";import{p as _t}from"../chunks/BIfA0Pjo.js";import{g as kt}from"../chunks/BSYpqPvJ.js";import{t as D}from"../chunks/DgRPqjXE.js";import{e as V}from"../chunks/BZiHL9L3.js";import{f as Ce,a as W}from"../chunks/aK-A9Gop.js";import{D as wt}from"../chunks/Db7N5hjl.js";import{M as jt}from"../chunks/BFX8vI-4.js";import{B as $t}from"../chunks/CwE4al8R.js";var Dt=y('

Error

'),Mt=y('

Loading object details...

'),Ot=y('
'),Tt=y('No tags'),At=y('

Description

'),Ft=y('

File Information

ID:
Name:
Size:
File Type:
SHA256:

Metadata & Timestamps

Created At:
Updated At:
Tags:
',1),Bt=y(' '),Et=y('

Update Object

Press Space or Enter to add a tag. Press Backspace on empty field to remove last tag.

'),St=y(' ',1);function Xt(Ie,Le){vt(Le,!1);const[ze,Pe]=bt(),ce=()=>yt(_t,"$page",ze),X=k();let t=k(null),q=k(!0),M=k(""),Y=k(!1),I=k(!1),i=k({name:"",tags:[],description:""}),O=k("");mt(async()=>{await ve()});async function ve(){if(!e(X)){l(M,"Invalid object ID"),l(q,!1);return}try{l(q,!0),l(M,""),l(t,await le.getFileObject(e(X)))}catch(d){l(M,V(d)),D.add({type:"error",title:"Failed to load object",message:e(M)})}finally{l(q,!1)}}async function Ne(){if(e(t)?.id)try{await le.deleteFileObject(e(t).id.toString()),D.add({type:"success",title:"Object deleted",message:`Object "${e(t).name}" has been deleted successfully.`}),kt(ie("/objects"))}catch(d){const o=V(d);D.add({type:"error",title:"Failed to delete object",message:o})}}async function Re(){if(e(t)?.id)try{const o=`${window.location.origin}/api/v1/objects/${e(t).id}/download`,c=await fetch(o,{method:"HEAD",credentials:"include"});if(!c.ok){const u=await c.text();throw new Error(u||`Download failed with status ${c.status}`)}const v=document.createElement("a");v.href=o,v.download=e(t).name||"download",document.body.appendChild(v),v.click(),document.body.removeChild(v),D.add({type:"success",title:"Download started",message:`Downloading "${e(t).name}"...`})}catch(d){const o=V(d);D.add({type:"error",title:"Download failed",message:o})}}function He(){e(t)&&(l(i,{name:e(t).name||"",tags:e(t).tags||[],description:e(t).description||""}),l(O,""),l(I,!0))}async function qe(){if(e(t)?.id)try{await le.updateFileObject(e(t).id.toString(),{name:e(i).name||void 0,tags:e(i).tags,description:e(i).description||void 0}),D.add({type:"success",title:"Object updated",message:"Object has been updated successfully."}),l(I,!1),await ve()}catch(d){const o=V(d);D.add({type:"error",title:"Failed to update object",message:o})}}function Ke(d){const c=d.target.value.trim();(d.key===" "||d.key==="Enter")&&c?(d.preventDefault(),me(c),l(O,"")):d.key==="Backspace"&&!c&&e(i).tags.length>0&&(d.preventDefault(),ue(e(i).tags.length-1))}function Ge(){const d=e(O).trim();d&&(me(d),l(O,""))}function me(d){const o=d.trim().toLowerCase();o&&(e(i).tags.includes(o)||Q(i,e(i).tags=[...e(i).tags,o]))}function ue(d){Q(i,e(i).tags=e(i).tags.filter((o,c)=>c!==d))}ut(()=>ce(),()=>{l(X,ce().params.id||"")}),gt(),ct();var ge=St(),Z=de(ge),xe=r(Z),ee=r(xe),Je=r(ee);a(ee);var pe=s(ee,2),fe=r(pe),be=s(r(fe),2),Qe=r(be,!0);a(be),a(fe),a(pe),a(xe),a(Z);var ye=s(Z,2);{var Ve=d=>{var o=Dt(),c=r(o),v=r(c),u=s(r(v),2),h=r(u,!0);a(u),a(v),a(c),a(o),C(()=>p(h,e(M))),x(d,o)};$(ye,d=>{e(M)&&d(Ve)})}var he=s(ye,2);{var We=d=>{var o=Mt();x(d,o)},Xe=d=>{var o=pt(),c=de(o);{var v=u=>{var h=Ft(),T=de(h),w=r(T),A=r(w),L=s(r(A),2),_=r(L),F=s(_,2),z=s(F,2);a(L),a(A);var P=s(A,2),N=r(P),R=s(r(N),2),K=r(R,!0);a(R),a(N);var H=s(N,2),m=s(r(H),2),B=r(m,!0);a(m),a(H);var b=s(H,2),E=s(r(b),2),G=r(E,!0);a(E),a(b);var S=s(b,2),ke=s(r(S),2),tt=r(ke,!0);a(ke),a(S);var we=s(S,2),je=s(r(we),2),at=r(je,!0);a(je),a(we),a(P),a(w);var $e=s(w,2),De=s(r($e),2),te=r(De),Me=s(r(te),2),rt=r(Me,!0);a(Me),a(te);var ae=s(te,2),Oe=s(r(ae),2),dt=r(Oe,!0);a(Oe),a(ae);var Te=s(ae,2),Ae=s(r(Te),2),st=r(Ae);{var it=g=>{var f=Ot();Be(f,5,()=>(e(t),n(()=>e(t).tags)),Ee,(U,re)=>{$t(U,{variant:"blue",get text(){return e(re)}})}),a(f),x(g,f)},ot=g=>{var f=Tt();x(g,f)};$(st,g=>{e(t),n(()=>e(t).tags&&e(t).tags.length>0)?g(it):g(ot,!1)})}a(Ae),a(Te),a(De),a($e),a(T);var lt=s(T,2);{var nt=g=>{var f=At(),U=s(r(f),2),re=r(U,!0);a(U),a(f),C(()=>p(re,(e(t),n(()=>e(t).description)))),x(g,f)};$(lt,g=>{e(t),n(()=>e(t).description)&&g(nt)})}C((g,f,U)=>{p(K,(e(t),n(()=>e(t).id))),p(B,(e(t),n(()=>e(t).name))),p(G,g),p(tt,(e(t),n(()=>e(t).file_type||"N/A"))),p(at,(e(t),n(()=>e(t).sha256||"N/A"))),p(rt,f),p(dt,U)},[()=>(J(Ce),e(t),n(()=>Ce(e(t).size||0))),()=>(J(W),e(t),n(()=>W(e(t).created_at))),()=>(J(W),e(t),n(()=>W(e(t).updated_at)))]),j("click",_,He),j("click",F,Re),j("click",z,()=>l(Y,!0)),x(u,h)};$(c,u=>{e(t)&&u(v)},!0)}x(d,o)};$(he,d=>{e(q)?d(We):d(Xe,!1)})}var _e=s(he,2);{var Ye=d=>{jt(d,{$$events:{close:()=>l(I,!1)},children:(o,c)=>{var v=Et(),u=s(r(v),2),h=r(u),T=s(r(h),2);Se(T),a(h);var w=s(h,2),A=s(r(w),2),L=r(A);Be(L,1,()=>(e(i),n(()=>e(i).tags)),Ee,(m,B,b)=>{var E=Bt(),G=r(E),S=s(G);a(E),C(()=>{p(G,`${e(B)??""} `),oe(S,"aria-label",`Remove tag ${e(B)??""}`)}),j("click",S,()=>ue(b)),x(m,E)});var _=s(L,2);Se(_),a(A),se(2),a(w);var F=s(w,2),z=s(r(F),2);ft(z);var P=s(z,2),N=r(P);a(P),a(F);var R=s(F,2),K=r(R);Ue(K,{type:"button",variant:"secondary",$$events:{click:()=>l(I,!1)},children:(m,B)=>{se();var b=Fe("Cancel");x(m,b)},$$slots:{default:!0}});var H=s(K,2);Ue(H,{type:"submit",variant:"primary",children:(m,B)=>{se();var b=Fe("Update Object");x(m,b)},$$slots:{default:!0}}),a(R),a(u),a(v),C(()=>{oe(_,"placeholder",(e(i),n(()=>e(i).tags.length===0?"Type and press Space or Enter":""))),p(N,`${e(i),n(()=>e(i).description.length)??""} / 8192 characters`)}),ne(T,()=>e(i).name,m=>Q(i,e(i).name=m)),ne(_,()=>e(O),m=>l(O,m)),j("keydown",_,Ke),j("blur",_,Ge),ne(z,()=>e(i).description,m=>Q(i,e(i).description=m)),j("submit",u,ht(qe)),x(o,v)},$$slots:{default:!0}})};$(_e,d=>{e(I)&&e(t)&&d(Ye)})}var Ze=s(_e,2);{var et=d=>{wt(d,{title:"Delete Object",get message(){return`Are you sure you want to delete the object '${e(t),n(()=>e(t).name)??""}'? This action cannot be undone.`},$$events:{confirm:Ne,close:()=>l(Y,!1)}})};$(Ze,d=>{e(Y)&&e(t)&&d(et)})}C(d=>{oe(Je,"href",d),p(Qe,(e(t),n(()=>e(t)?e(t).name:"Object Details")))},[()=>(J(ie),n(()=>ie("/objects")))]),x(Ie,ge),xt(),Pe()}export{Xt as component}; diff --git a/webapp/assets/_app/immutable/nodes/13.C5rQKzlZ.js b/webapp/assets/_app/immutable/nodes/13.C5rQKzlZ.js new file mode 100644 index 00000000..af2b11fd --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/13.C5rQKzlZ.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as je}from"../chunks/De-I_rkH.js";import{p as Ge,E as Qe,o as Le,l as x,k as a,m as l,g as e,w as F,h as Ne,f as T,s,d as o,r as n,b as E,t as K,e as de,y as Ue,u as v,z as Pe,i as Me,c as qe,j as Xe,a as Ze,$ as et,q as P,v as be}from"../chunks/BIqNNOMq.js";import{a as He,i as Q,s as Je}from"../chunks/CfI2BFUj.js";import{r as le,b as Re,h as tt,d as We,c as at,g as ve}from"../chunks/CQh-7xkh.js";import{e as rt,i as ot}from"../chunks/D8ZtP9JD.js";import{b as Ie,a as Ee}from"../chunks/Gs5uNKRr.js";import{p as nt}from"../chunks/CdEA5IGF.js";import{M as it}from"../chunks/BFX8vI-4.js";import{F as st}from"../chunks/D2YBjDB9.js";import{e as Ae}from"../chunks/BZiHL9L3.js";import{e as Ve,a as Se}from"../chunks/B1uxuBYn.js";import{U as lt}from"../chunks/CpPzJ1l1.js";import{D as dt}from"../chunks/Db7N5hjl.js";import{P as ct}from"../chunks/Cq4AwQWc.js";import{t as Y}from"../chunks/DgRPqjXE.js";import{k as Te,g as De,l as ut}from"../chunks/B7If18kh.js";import{B as gt}from"../chunks/CwE4al8R.js";import{D as mt,G as pt,A as ft}from"../chunks/BjNB1vhO.js";import{A as Be}from"../chunks/Dbr2TLcG.js";import{E as bt}from"../chunks/C6HeU_02.js";import{E as vt}from"../chunks/DFF0ZVx4.js";import{S as ht}from"../chunks/DCu5KXBe.js";var yt=T('

'),_t=T('

Loading...

'),xt=T(""),kt=T(''),wt=T('

Webhook secret will be automatically generated

'),zt=T('
'),$t=T('

Create Organization

');function Ct(he,ye){Ge(ye,!1);const[_e,xe]=Je(),f=()=>He(Ve,"$eagerCache",_e),D=l(),w=l(),z=l(),X=l(),$=Qe();let C=l(!1),b=l(""),h=l("github"),r=l({name:"",credentials_name:"",webhook_secret:"",pool_balancer_type:"roundrobin",agent_mode:!1}),k=l(!0),p=l(!0);async function U(){if(!f().loaded.credentials&&!f().loading.credentials)try{await Se.getCredentials()}catch(d){a(b,Ae(d))}}function B(d){a(h,d.detail),F(r,e(r).credentials_name="")}function u(){if(e(r).credentials_name){const d=e(D).find(j=>j.name===e(r).credentials_name);d&&d.forge_type&&a(h,d.forge_type)}}function ke(){const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,j=>j.toString(16).padStart(2,"0")).join("")}async function we(){if(!e(r).name?.trim()){a(b,"Organization name is required");return}if(!e(r).credentials_name){a(b,"Please select credentials");return}try{a(C,!0),a(b,"");const d={...e(r),install_webhook:e(k),auto_generate_secret:e(p)};$("submit",d)}catch(d){a(b,d instanceof Error?d.message:"Failed to create organization"),a(C,!1)}}Le(()=>{U()}),x(()=>f(),()=>{a(D,f().credentials)}),x(()=>f(),()=>{a(w,f().loading.credentials)}),x(()=>(e(D),e(h)),()=>{a(z,e(D).filter(d=>e(h)?d.forge_type===e(h):!0))}),x(()=>e(p),()=>{e(p)?F(r,e(r).webhook_secret=ke()):e(p)||F(r,e(r).webhook_secret="")}),x(()=>(e(r),e(p)),()=>{a(X,e(r).name?.trim()!==""&&e(r).credentials_name!==""&&(e(p)||e(r).webhook_secret&&e(r).webhook_secret.trim()!==""))}),Ne(),je(),it(he,{$$events:{close:()=>$("close")},children:(d,j)=>{var Z=$t(),G=s(o(Z),2);{var ee=y=>{var _=yt(),R=o(_),W=o(R,!0);n(R),n(_),K(()=>de(W,e(b))),E(y,_)};Q(G,y=>{e(b)&&y(ee)})}var ze=s(G,2);{var $e=y=>{var _=_t();E(y,_)},Ce=y=>{var _=zt(),R=o(_);st(R,{get selectedForgeType(){return e(h)},set selectedForgeType(i){a(h,i)},$$events:{select:B},$$legacy:!0});var W=s(R,2),ce=s(o(W),2);le(ce),n(W);var L=s(W,2),A=s(o(L),2);K(()=>{e(r),Ue(()=>{e(z)})});var N=o(A);N.value=N.__value="";var Oe=s(N);rt(Oe,1,()=>e(z),ot,(i,m)=>{var O=xt(),fe=o(O);n(O);var se={};K(()=>{de(fe,`${e(m),v(()=>e(m).name)??""} (${e(m),v(()=>e(m).endpoint?.name||"Unknown endpoint")??""})`),se!==(se=(e(m),v(()=>e(m).name)))&&(O.value=(O.__value=(e(m),v(()=>e(m).name)))??"")}),E(i,O)}),n(A),n(L);var q=s(L,2),te=s(o(q),2);K(()=>{e(r),Ue(()=>{})});var H=o(te);H.value=H.__value="roundrobin";var ue=s(H);ue.value=ue.__value="pack",n(te),n(q);var ae=s(q,2),ge=o(ae),t=o(ge);le(t),Pe(4),n(ge),n(ae);var c=s(ae,2),I=o(c),M=o(I);le(M),Pe(2),n(I);var g=s(I,2),S=o(g),J=o(S);le(J),Pe(2),n(S);var re=s(S,2);{var oe=i=>{var m=kt();le(m),Ie(m,()=>e(r).webhook_secret,O=>F(r,e(r).webhook_secret=O)),E(i,m)},ne=i=>{var m=wt();E(i,m)};Q(re,i=>{e(p)?i(ne,!1):i(oe)})}n(g),n(c);var me=s(c,2),ie=o(me),V=s(ie,2),pe=o(V,!0);n(V),n(me),n(_),K(()=>{V.disabled=e(C)||e(w)||!e(X),de(pe,e(C)?"Creating...":"Create Organization")}),Ie(ce,()=>e(r).name,i=>F(r,e(r).name=i)),Re(A,()=>e(r).credentials_name,i=>F(r,e(r).credentials_name=i)),Me("change",A,u),Re(te,()=>e(r).pool_balancer_type,i=>F(r,e(r).pool_balancer_type=i)),Ee(t,()=>e(r).agent_mode,i=>F(r,e(r).agent_mode=i)),Ee(M,()=>e(k),i=>a(k,i)),Ee(J,()=>e(p),i=>a(p,i)),Me("click",ie,()=>$("close")),Me("submit",_,nt(we)),E(y,_)};Q(ze,y=>{e(C)?y($e):y(Ce,!1)})}n(Z),E(d,Z)},$$slots:{default:!0}}),qe(),xe()}var Ot=T(''),Pt=T('
',1);function Xt(he,ye){Ge(ye,!1);const[_e,xe]=Je(),f=()=>He(Ve,"$eagerCache",_e),D=l(),w=l(),z=l(),X=l();let $=l([]),C=l(!0),b=l(""),h=l(""),r=l(1),k=l(25),p=l(!1),U=l(!1),B=l(!1),u=l(null);function ke(){a(p,!1),a(B,!1),a(U,!1)}async function we(t){try{a(b,"");const c=t.detail,I={name:c.name,credentials_name:c.credentials_name,webhook_secret:c.webhook_secret,pool_balancer_type:c.pool_balancer_type},M=await ve.createOrganization(I);if(c.install_webhook&&M.id)try{await ve.installOrganizationWebhook(M.id),Y.success("Webhook Installed",`Webhook for organization ${M.name} has been installed successfully.`)}catch(g){console.warn("Organization created but webhook installation failed:",g),Y.error("Webhook Installation Failed",g instanceof Error?g.message:"Failed to install webhook. You can try installing it manually from the organization details page.")}Y.success("Organization Created",`Organization ${M.name} has been created successfully.`),a(p,!1)}catch(c){throw a(b,Ae(c)),c}}async function d(t){if(e(u))try{await ve.updateOrganization(e(u).id,t),Y.success("Organization Updated",`Organization ${e(u).name} has been updated successfully.`),a(U,!1),a(u,null)}catch(c){throw c}}async function j(){if(e(u))try{a(b,""),await ve.deleteOrganization(e(u).id),Y.success("Organization Deleted",`Organization ${e(u).name} has been deleted successfully.`),a(u,null)}catch(t){const c=Ae(t);Y.error("Delete Failed",c)}finally{ke()}}function Z(){a(p,!0)}function G(t){a(u,t),a(U,!0)}function ee(t){a(u,t),a(B,!0)}Le(async()=>{try{a(C,!0);const t=await Se.getOrganizations();t&&Array.isArray(t)&&a($,t)}catch(t){console.error("Failed to load organizations:",t),a(b,t instanceof Error?t.message:"Failed to load organizations")}finally{a(C,!1)}});async function ze(){try{await Se.retryResource("organizations")}catch(t){console.error("Retry failed:",t)}}const $e=[{key:"name",title:"Name",cellComponent:bt,cellProps:{entityType:"organization"}},{key:"endpoint",title:"Endpoint",cellComponent:vt},{key:"credentials",title:"Credentials",cellComponent:pt,cellProps:{field:"credentials_name"}},{key:"status",title:"Status",cellComponent:ht,cellProps:{statusType:"entity"}},{key:"actions",title:"Actions",align:"right",cellComponent:ft}],Ce={entityType:"organization",primaryText:{field:"name",isClickable:!0,href:"/organizations/{id}"},customInfo:[{icon:t=>De(t?.endpoint?.endpoint_type||"unknown"),text:t=>t?.endpoint?.name||"Unknown"}],badges:[{type:"custom",value:t=>Te(t)}],actions:[{type:"edit",handler:t=>G(t)},{type:"delete",handler:t=>ee(t)}]};function y(t){a(h,t.detail.term),a(r,1)}function _(t){a(r,t.detail.page)}function R(t){a(k,t.detail.perPage),a(r,1)}function W(t){G(t.detail.item)}function ce(t){ee(t.detail.item)}x(()=>(e($),f()),()=>{(!e($).length||f().loaded.organizations)&&a($,f().organizations)}),x(()=>f(),()=>{a(C,f().loading.organizations)}),x(()=>f(),()=>{a(D,f().errorMessages.organizations)}),x(()=>(e($),e(h)),()=>{a(w,ut(e($),e(h)))}),x(()=>(e(w),e(k)),()=>{a(z,Math.ceil(e(w).length/e(k)))}),x(()=>(e(r),e(z)),()=>{e(r)>e(z)&&e(z)>0&&a(r,e(z))}),x(()=>(e(w),e(r),e(k)),()=>{a(X,e(w).slice((e(r)-1)*e(k),e(r)*e(k)))}),Ne(),je();var L=Pt();Xe(t=>{et.title="Organizations - GARM"});var A=Ze(L),N=o(A);ct(N,{title:"Organizations",description:"Manage GitHub and Gitea organizations",actionLabel:"Add Organization",$$events:{action:Z}});var Oe=s(N,2);{let t=be(()=>e(D)||e(b)),c=be(()=>!!e(D));mt(Oe,{get columns(){return $e},get data(){return e(X)},get loading(){return e(C)},get error(){return e(t)},get searchTerm(){return e(h)},searchPlaceholder:"Search organizations...",get currentPage(){return e(r)},get perPage(){return e(k)},get totalPages(){return e(z)},get totalItems(){return e(w),v(()=>e(w).length)},itemName:"organizations",emptyIconType:"building",get showRetry(){return e(c)},get mobileCardConfig(){return Ce},$$events:{search:y,pageChange:_,perPageChange:R,retry:ze,edit:W,delete:ce},$$slots:{"mobile-card":(I,M)=>{const g=be(()=>M.item),S=be(()=>(P(Te),P(e(g)),v(()=>Te(e(g)))));var J=Ot(),re=o(J),oe=o(re),ne=o(oe),me=o(ne,!0);n(ne);var ie=s(ne,2),V=o(ie),pe=o(V);tt(pe,()=>(P(De),P(e(g)),v(()=>De(e(g).endpoint?.endpoint_type||"unknown"))));var i=s(pe,2),m=o(i,!0);n(i),n(V),n(ie),n(oe),n(re);var O=s(re,2),fe=o(O);gt(fe,{get variant(){return P(e(S)),v(()=>e(S).variant)},get text(){return P(e(S)),v(()=>e(S).text)}});var se=s(fe,2),Fe=o(se);Be(Fe,{action:"edit",size:"sm",title:"Edit organization",ariaLabel:"Edit organization",$$events:{click:()=>G(e(g))}});var Ye=s(Fe,2);Be(Ye,{action:"delete",size:"sm",title:"Delete organization",ariaLabel:"Delete organization",$$events:{click:()=>ee(e(g))}}),n(se),n(O),n(J),K(Ke=>{at(oe,"href",Ke),de(me,(P(e(g)),v(()=>e(g).name))),de(m,(P(e(g)),v(()=>e(g).endpoint?.name||"Unknown")))},[()=>(P(We),P(e(g)),v(()=>We(`/organizations/${e(g).id}`)))]),E(I,J)}}})}n(A);var q=s(A,2);{var te=t=>{Ct(t,{$$events:{close:()=>a(p,!1),submit:we}})};Q(q,t=>{e(p)&&t(te)})}var H=s(q,2);{var ue=t=>{lt(t,{get entity(){return e(u)},entityType:"organization",$$events:{close:()=>{a(U,!1),a(u,null)},submit:c=>d(c.detail)}})};Q(H,t=>{e(U)&&e(u)&&t(ue)})}var ae=s(H,2);{var ge=t=>{dt(t,{title:"Delete Organization",message:"Are you sure you want to delete this organization? This action cannot be undone.",get itemName(){return e(u),v(()=>e(u).name)},$$events:{close:()=>{a(B,!1),a(u,null)},confirm:j}})};Q(ae,t=>{e(B)&&e(u)&&t(ge)})}E(he,L),qe(),xe()}export{Xt as component}; diff --git a/webapp/assets/_app/immutable/nodes/13.CBW2uV6V.js b/webapp/assets/_app/immutable/nodes/13.CBW2uV6V.js deleted file mode 100644 index 4f43f8fe..00000000 --- a/webapp/assets/_app/immutable/nodes/13.CBW2uV6V.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as Le}from"../chunks/TJn6xDN9.js";import{p as Ne,E as Qe,o as je,l as x,k as a,m as s,g as e,w as W,h as qe,f as T,s as i,d as o,r as n,b as E,t as Q,e as ie,y as Ae,u as v,z as Fe,i as $e,c as Ge,j as Xe,a as Ze,$ as et,q as P,v as ue}from"../chunks/DniTuB_0.js";import{a as He,i as X,s as Je}from"../chunks/DbNhg6mG.js";import{r as ge,b as Ue,h as tt,d as Ie,c as at,g as me}from"../chunks/DD3srElq.js";import{e as rt,i as ot}from"../chunks/Ck5PkeSc.js";import{b as Re,a as We}from"../chunks/CCQwxxp9.js";import{p as nt}from"../chunks/D4Caz1gY.js";import{M as it}from"../chunks/PC4wJWhj.js";import{F as st}from"../chunks/DNeHGP6d.js";import{e as Pe}from"../chunks/BZiHL9L3.js";import{e as Ve,a as Me}from"../chunks/C-ow2qSP.js";import{U as lt}from"../chunks/C0wSEYM-.js";import{D as dt}from"../chunks/B6XSaEl0.js";import{P as ct}from"../chunks/BlYHwhWl.js";import{t as K}from"../chunks/CBJzOE8U.js";import{k as Ce,g as Oe,l as ut}from"../chunks/LMA6-4d1.js";import{B as gt}from"../chunks/DcQdHuVc.js";import{D as mt,G as pt,A as ft}from"../chunks/QtGwBUod.js";import{A as Be}from"../chunks/B5vVe1Fo.js";import{E as bt}from"../chunks/D3pbRQAB.js";import{E as vt}from"../chunks/hsRG7ppz.js";import{S as yt}from"../chunks/Dn_Ue57e.js";var ht=T('

'),_t=T('

Loading...

'),xt=T(""),kt=T(''),wt=T('

Webhook secret will be automatically generated

'),zt=T('
'),$t=T('

Create Organization

');function Ct(pe,fe){Ne(fe,!1);const[be,ve]=Je(),f=()=>He(Ve,"$eagerCache",be),D=s(),w=s(),z=s(),Z=s(),$=Qe();let C=s(!1),b=s(""),y=s("github"),r=s({name:"",credentials_name:"",webhook_secret:"",pool_balancer_type:"roundrobin"}),k=s(!0),p=s(!0);async function A(){if(!f().loaded.credentials&&!f().loading.credentials)try{await Me.getCredentials()}catch(d){a(b,Pe(d))}}function B(d){a(y,d.detail),W(r,e(r).credentials_name="")}function c(){if(e(r).credentials_name){const d=e(D).find(L=>L.name===e(r).credentials_name);d&&d.forge_type&&a(y,d.forge_type)}}function ye(){const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,L=>L.toString(16).padStart(2,"0")).join("")}async function he(){if(!e(r).name?.trim()){a(b,"Organization name is required");return}if(!e(r).credentials_name){a(b,"Please select credentials");return}try{a(C,!0),a(b,"");const d={...e(r),install_webhook:e(k),auto_generate_secret:e(p)};$("submit",d)}catch(d){a(b,d instanceof Error?d.message:"Failed to create organization"),a(C,!1)}}je(()=>{A()}),x(()=>f(),()=>{a(D,f().credentials)}),x(()=>f(),()=>{a(w,f().loading.credentials)}),x(()=>(e(D),e(y)),()=>{a(z,e(D).filter(d=>e(y)?d.forge_type===e(y):!0))}),x(()=>e(p),()=>{e(p)?W(r,e(r).webhook_secret=ye()):e(p)||W(r,e(r).webhook_secret="")}),x(()=>(e(r),e(p)),()=>{a(Z,e(r).name?.trim()!==""&&e(r).credentials_name!==""&&(e(p)||e(r).webhook_secret&&e(r).webhook_secret.trim()!==""))}),qe(),Le(),it(pe,{$$events:{close:()=>$("close")},children:(d,L)=>{var ee=$t(),N=i(o(ee),2);{var te=h=>{var _=ht(),F=o(_),U=o(F,!0);n(F),n(_),Q(()=>ie(U,e(b))),E(h,_)};X(N,h=>{e(b)&&h(te)})}var _e=i(N,2);{var xe=h=>{var _=_t();E(h,_)},ke=h=>{var _=zt(),F=o(_);st(F,{get selectedForgeType(){return e(y)},set selectedForgeType(l){a(y,l)},$$events:{select:B},$$legacy:!0});var U=i(F,2),se=i(o(U),2);ge(se),n(U);var j=i(U,2),S=i(o(j),2);Q(()=>{e(r),Ae(()=>{e(z)})});var q=o(S);q.value=q.__value="";var we=i(q);rt(we,1,()=>e(z),ot,(l,m)=>{var O=xt(),de=o(O);n(O);var ce={};Q(()=>{ie(de,`${e(m),v(()=>e(m).name)??""} (${e(m),v(()=>e(m).endpoint?.name||"Unknown endpoint")??""})`),ce!==(ce=(e(m),v(()=>e(m).name)))&&(O.value=(O.__value=(e(m),v(()=>e(m).name)))??"")}),E(l,O)}),n(S),n(j);var G=i(j,2),ae=i(o(G),2);Q(()=>{e(r),Ae(()=>{})});var H=o(ae);H.value=H.__value="roundrobin";var le=i(H);le.value=le.__value="pack",n(ae),n(G);var re=i(G,2),oe=o(re),t=o(oe);ge(t),Fe(2),n(oe);var u=i(oe,2),I=o(u),M=o(I);ge(M),Fe(2),n(I);var g=i(I,2);{var J=l=>{var m=kt();ge(m),Re(m,()=>e(r).webhook_secret,O=>W(r,e(r).webhook_secret=O)),E(l,m)},ne=l=>{var m=wt();E(l,m)};X(g,l=>{e(p)?l(ne,!1):l(J)})}n(u),n(re);var V=i(re,2),Y=o(V),R=i(Y,2),ze=o(R,!0);n(R),n(V),n(_),Q(()=>{R.disabled=e(C)||e(w)||!e(Z),ie(ze,e(C)?"Creating...":"Create Organization")}),Re(se,()=>e(r).name,l=>W(r,e(r).name=l)),Ue(S,()=>e(r).credentials_name,l=>W(r,e(r).credentials_name=l)),$e("change",S,c),Ue(ae,()=>e(r).pool_balancer_type,l=>W(r,e(r).pool_balancer_type=l)),We(t,()=>e(k),l=>a(k,l)),We(M,()=>e(p),l=>a(p,l)),$e("click",Y,()=>$("close")),$e("submit",_,nt(he)),E(h,_)};X(_e,h=>{e(C)?h(xe):h(ke,!1)})}n(ee),E(d,ee)},$$slots:{default:!0}}),Ge(),ve()}var Ot=T(''),Pt=T('
',1);function Xt(pe,fe){Ne(fe,!1);const[be,ve]=Je(),f=()=>He(Ve,"$eagerCache",be),D=s(),w=s(),z=s(),Z=s();let $=s([]),C=s(!0),b=s(""),y=s(""),r=s(1),k=s(25),p=s(!1),A=s(!1),B=s(!1),c=s(null);function ye(){a(p,!1),a(B,!1),a(A,!1)}async function he(t){try{a(b,"");const u=t.detail,I={name:u.name,credentials_name:u.credentials_name,webhook_secret:u.webhook_secret,pool_balancer_type:u.pool_balancer_type},M=await me.createOrganization(I);if(u.install_webhook&&M.id)try{await me.installOrganizationWebhook(M.id),K.success("Webhook Installed",`Webhook for organization ${M.name} has been installed successfully.`)}catch(g){console.warn("Organization created but webhook installation failed:",g),K.error("Webhook Installation Failed",g instanceof Error?g.message:"Failed to install webhook. You can try installing it manually from the organization details page.")}K.success("Organization Created",`Organization ${M.name} has been created successfully.`),a(p,!1)}catch(u){throw a(b,Pe(u)),u}}async function d(t){if(e(c))try{await me.updateOrganization(e(c).id,t),K.success("Organization Updated",`Organization ${e(c).name} has been updated successfully.`),a(A,!1),a(c,null)}catch(u){throw u}}async function L(){if(e(c))try{a(b,""),await me.deleteOrganization(e(c).id),K.success("Organization Deleted",`Organization ${e(c).name} has been deleted successfully.`),a(c,null)}catch(t){const u=Pe(t);K.error("Delete Failed",u)}finally{ye()}}function ee(){a(p,!0)}function N(t){a(c,t),a(A,!0)}function te(t){a(c,t),a(B,!0)}je(async()=>{try{a(C,!0);const t=await Me.getOrganizations();t&&Array.isArray(t)&&a($,t)}catch(t){console.error("Failed to load organizations:",t),a(b,t instanceof Error?t.message:"Failed to load organizations")}finally{a(C,!1)}});async function _e(){try{await Me.retryResource("organizations")}catch(t){console.error("Retry failed:",t)}}const xe=[{key:"name",title:"Name",cellComponent:bt,cellProps:{entityType:"organization"}},{key:"endpoint",title:"Endpoint",cellComponent:vt},{key:"credentials",title:"Credentials",cellComponent:pt,cellProps:{field:"credentials_name"}},{key:"status",title:"Status",cellComponent:yt,cellProps:{statusType:"entity"}},{key:"actions",title:"Actions",align:"right",cellComponent:ft}],ke={entityType:"organization",primaryText:{field:"name",isClickable:!0,href:"/organizations/{id}"},customInfo:[{icon:t=>Oe(t?.endpoint?.endpoint_type||"unknown"),text:t=>t?.endpoint?.name||"Unknown"}],badges:[{type:"custom",value:t=>Ce(t)}],actions:[{type:"edit",handler:t=>N(t)},{type:"delete",handler:t=>te(t)}]};function h(t){a(y,t.detail.term),a(r,1)}function _(t){a(r,t.detail.page)}function F(t){a(k,t.detail.perPage),a(r,1)}function U(t){N(t.detail.item)}function se(t){te(t.detail.item)}x(()=>(e($),f()),()=>{(!e($).length||f().loaded.organizations)&&a($,f().organizations)}),x(()=>f(),()=>{a(C,f().loading.organizations)}),x(()=>f(),()=>{a(D,f().errorMessages.organizations)}),x(()=>(e($),e(y)),()=>{a(w,ut(e($),e(y)))}),x(()=>(e(w),e(k)),()=>{a(z,Math.ceil(e(w).length/e(k)))}),x(()=>(e(r),e(z)),()=>{e(r)>e(z)&&e(z)>0&&a(r,e(z))}),x(()=>(e(w),e(r),e(k)),()=>{a(Z,e(w).slice((e(r)-1)*e(k),e(r)*e(k)))}),qe(),Le();var j=Pt();Xe(t=>{et.title="Organizations - GARM"});var S=Ze(j),q=o(S);ct(q,{title:"Organizations",description:"Manage GitHub and Gitea organizations",actionLabel:"Add Organization",$$events:{action:ee}});var we=i(q,2);{let t=ue(()=>e(D)||e(b)),u=ue(()=>!!e(D));mt(we,{get columns(){return xe},get data(){return e(Z)},get loading(){return e(C)},get error(){return e(t)},get searchTerm(){return e(y)},searchPlaceholder:"Search organizations...",get currentPage(){return e(r)},get perPage(){return e(k)},get totalPages(){return e(z)},get totalItems(){return e(w),v(()=>e(w).length)},itemName:"organizations",emptyIconType:"building",get showRetry(){return e(u)},get mobileCardConfig(){return ke},$$events:{search:h,pageChange:_,perPageChange:F,retry:_e,edit:U,delete:se},$$slots:{"mobile-card":(I,M)=>{const g=ue(()=>M.item),J=ue(()=>(P(Ce),P(e(g)),v(()=>Ce(e(g)))));var ne=Ot(),V=o(ne),Y=o(V),R=o(Y),ze=o(R,!0);n(R);var l=i(R,2),m=o(l),O=o(m);tt(O,()=>(P(Oe),P(e(g)),v(()=>Oe(e(g).endpoint?.endpoint_type||"unknown"))));var de=i(O,2),ce=o(de,!0);n(de),n(m),n(l),n(Y),n(V);var Ee=i(V,2),Te=o(Ee);gt(Te,{get variant(){return P(e(J)),v(()=>e(J).variant)},get text(){return P(e(J)),v(()=>e(J).text)}});var De=i(Te,2),Se=o(De);Be(Se,{action:"edit",size:"sm",title:"Edit organization",ariaLabel:"Edit organization",$$events:{click:()=>N(e(g))}});var Ye=i(Se,2);Be(Ye,{action:"delete",size:"sm",title:"Delete organization",ariaLabel:"Delete organization",$$events:{click:()=>te(e(g))}}),n(De),n(Ee),n(ne),Q(Ke=>{at(Y,"href",Ke),ie(ze,(P(e(g)),v(()=>e(g).name))),ie(ce,(P(e(g)),v(()=>e(g).endpoint?.name||"Unknown")))},[()=>(P(Ie),P(e(g)),v(()=>Ie(`/organizations/${e(g).id}`)))]),E(I,ne)}}})}n(S);var G=i(S,2);{var ae=t=>{Ct(t,{$$events:{close:()=>a(p,!1),submit:he}})};X(G,t=>{e(p)&&t(ae)})}var H=i(G,2);{var le=t=>{lt(t,{get entity(){return e(c)},entityType:"organization",$$events:{close:()=>{a(A,!1),a(c,null)},submit:u=>d(u.detail)}})};X(H,t=>{e(A)&&e(c)&&t(le)})}var re=i(H,2);{var oe=t=>{dt(t,{title:"Delete Organization",message:"Are you sure you want to delete this organization? This action cannot be undone.",get itemName(){return e(c),v(()=>e(c).name)},$$events:{close:()=>{a(B,!1),a(c,null)},confirm:L}})};X(re,t=>{e(B)&&e(c)&&t(oe)})}E(pe,j),Ge(),ve()}export{Xt as component}; diff --git a/webapp/assets/_app/immutable/nodes/14.kxrYlryy.js b/webapp/assets/_app/immutable/nodes/14.CHd-pZSz.js similarity index 88% rename from webapp/assets/_app/immutable/nodes/14.kxrYlryy.js rename to webapp/assets/_app/immutable/nodes/14.CHd-pZSz.js index 1e6144fe..e13a4529 100644 --- a/webapp/assets/_app/immutable/nodes/14.kxrYlryy.js +++ b/webapp/assets/_app/immutable/nodes/14.CHd-pZSz.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as We}from"../chunks/TJn6xDN9.js";import{p as qe,o as He,B as je,l as Ge,h as Re,f as B,j as Ve,a as C,t as j,b as x,c as Je,u as i,q as de,e as ce,g as e,m as l,d as f,s as d,k as o,$ as Ke,r as m,w as Qe,A as ue,v as g}from"../chunks/DniTuB_0.js";import{i as h,s as Xe,a as Ye}from"../chunks/DbNhg6mG.js";import{d as A,c as Ze,g as _}from"../chunks/DD3srElq.js";import{p as et}from"../chunks/CzKtu-7o.js";import{g as fe}from"../chunks/DeKGyprh.js";import{U as tt}from"../chunks/C0wSEYM-.js";import{D as me}from"../chunks/B6XSaEl0.js";import{E as at,P as nt,a as ot}from"../chunks/B9-0TtNc.js";import{D as rt}from"../chunks/CCF1V3nS.js";import{g as ge}from"../chunks/LMA6-4d1.js";import{e as S}from"../chunks/BZiHL9L3.js";import{I as it}from"../chunks/B3nevMeU.js";import{W as st}from"../chunks/CplfXZxg.js";import{C as lt}from"../chunks/A5UGwKpF.js";import{w as G}from"../chunks/DmHFwzWx.js";import{t as I}from"../chunks/CBJzOE8U.js";var dt=B('

Loading organization...

'),ct=B('

'),ut=B(" ",1),ft=B(' ',1);function Mt(pe,ve){qe(ve,!1);const[ye,he]=Xe(),R=()=>Ye(et,"$page",ye),w=l();let a=l(null),c=l([]),p=l([]),F=l(!0),O=l(""),D=l(!1),P=l(!1),E=l(!1),T=l(!1),u=l(null),M=null,b=l();async function V(){if(e(w))try{o(F,!0),o(O,"");const[t,n,r]=await Promise.all([_.getOrganization(e(w)),_.listOrganizationPools(e(w)).catch(()=>[]),_.listOrganizationInstances(e(w)).catch(()=>[])]);o(a,t),o(c,n),o(p,r)}catch(t){o(O,S(t))}finally{o(F,!1)}}function _e(t,n){const{events:r}=t;return{...n,events:r}}async function be(t){if(e(a))try{await _.updateOrganization(e(a).id,t),await V(),I.success("Organization Updated",`Organization ${e(a).name} has been updated successfully.`),o(D,!1)}catch(n){throw n}}async function ze(){if(e(a)){try{await _.deleteOrganization(e(a).id),fe(A("/organizations"))}catch(t){const n=S(t);I.error("Delete Failed",n)}o(P,!1)}}async function $e(){if(e(u))try{await _.deleteInstance(e(u).name),I.success("Instance Deleted",`Instance ${e(u).name} has been deleted successfully.`),o(E,!1),o(u,null)}catch(t){const n=S(t);I.error("Delete Failed",n),o(E,!1),o(u,null)}}function xe(t){o(u,t),o(E,!0)}function Ie(){o(T,!0)}async function we(t){try{if(!e(a))return;await _.createOrganizationPool(e(a).id,t.detail),I.success("Pool Created",`Pool has been created successfully for organization ${e(a).name}.`),o(T,!1)}catch(n){const r=S(n);I.error("Pool Creation Failed",r)}}function J(){e(b)&&Qe(b,e(b).scrollTop=e(b).scrollHeight)}function Ee(t){if(t.operation==="update"){const n=t.payload;if(e(a)&&n.id===e(a).id){const r=e(a).events?.length||0,s=n.events?.length||0;o(a,_e(e(a),n)),s>r&&setTimeout(()=>{J()},100)}}else if(t.operation==="delete"){const n=t.payload.id||t.payload;e(a)&&e(a).id===n&&fe(A("/organizations"))}}function Oe(t){if(!e(a))return;const n=t.payload;if(n.org_id===e(a).id){if(t.operation==="create")o(c,[...e(c),n]);else if(t.operation==="update")o(c,e(c).map(r=>r.id===n.id?n:r));else if(t.operation==="delete"){const r=n.id||n;o(c,e(c).filter(s=>s.id!==r))}}}function De(t){if(!e(a)||!e(c))return;const n=t.payload;if(e(c).some(s=>s.id===n.pool_id)){if(t.operation==="create")o(p,[...e(p),n]);else if(t.operation==="update")o(p,e(p).map(s=>s.id===n.id?n:s));else if(t.operation==="delete"){const s=n.id||n;o(p,e(p).filter(W=>W.id!==s))}}}He(()=>{V().then(()=>{e(a)?.events?.length&&setTimeout(()=>{J()},100)});const t=G.subscribeToEntity("organization",["update","delete"],Ee),n=G.subscribeToEntity("pool",["create","update","delete"],Oe),r=G.subscribeToEntity("instance",["create","update","delete"],De);M=()=>{t(),n(),r()}}),je(()=>{M&&(M(),M=null)}),Ge(()=>R(),()=>{o(w,R().params.id)}),Re(),We();var K=ft();Ve(t=>{j(()=>Ke.title=`${e(a),i(()=>e(a)?`${e(a).name} - Organization Details`:"Organization Details")??""} - GARM`)});var U=C(K),L=f(U),Q=f(L),N=f(Q),Pe=f(N);m(N);var X=d(N,2),Y=f(X),Z=d(f(Y),2),Te=f(Z,!0);m(Z),m(Y),m(X),m(Q),m(L);var Me=d(L,2);{var ke=t=>{var n=dt();x(t,n)},Ce=t=>{var n=ue(),r=C(n);{var s=z=>{var $=ct(),k=f($),q=f(k,!0);m(k),m($),j(()=>ce(q,e(O))),x(z,$)},W=z=>{var $=ue(),k=C($);{var q=H=>{var ne=ut(),oe=C(ne);{let v=g(()=>(e(a),i(()=>e(a).name||"Organization"))),y=g(()=>(e(a),i(()=>e(a).endpoint?.name))),Ne=g(()=>(de(ge),e(a),i(()=>ge(e(a).endpoint?.endpoint_type||"unknown"))));rt(oe,{get title(){return e(v)},get subtitle(){return`Endpoint: ${e(y)??""}`},get forgeIcon(){return e(Ne)},onEdit:()=>o(D,!0),onDelete:()=>o(P,!0)})}var re=d(oe,2);at(re,{get entity(){return e(a)},entityType:"organization"});var ie=d(re,2);{let v=g(()=>(e(a),i(()=>e(a).id||""))),y=g(()=>(e(a),i(()=>e(a).name||"")));st(ie,{entityType:"organization",get entityId(){return e(v)},get entityName(){return e(y)}})}var se=d(ie,2);{let v=g(()=>(e(a),i(()=>e(a).id||""))),y=g(()=>(e(a),i(()=>e(a).name||"")));nt(se,{get pools(){return e(c)},entityType:"organization",get entityId(){return e(v)},get entityName(){return e(y)},$$events:{addPool:Ie}})}var le=d(se,2);it(le,{get instances(){return e(p)},entityType:"organization",onDeleteInstance:xe});var Le=d(le,2);{let v=g(()=>(e(a),i(()=>e(a)?.events)));ot(Le,{get events(){return e(v)},get eventsContainer(){return e(b)},set eventsContainer(y){o(b,y)},$$legacy:!0})}x(H,ne)};h(k,H=>{e(a)&&H(q)},!0)}x(z,$)};h(r,z=>{e(O)?z(s):z(W,!1)},!0)}x(t,n)};h(Me,t=>{e(F)?t(ke):t(Ce,!1)})}m(U);var ee=d(U,2);{var Ae=t=>{tt(t,{get entity(){return e(a)},entityType:"organization",$$events:{close:()=>o(D,!1),submit:n=>be(n.detail)}})};h(ee,t=>{e(D)&&e(a)&&t(Ae)})}var te=d(ee,2);{var Se=t=>{me(t,{title:"Delete Organization",message:"Are you sure you want to delete this organization? This action cannot be undone and will remove all associated pools and instances.",get itemName(){return e(a),i(()=>e(a).name)},$$events:{close:()=>o(P,!1),confirm:ze}})};h(te,t=>{e(P)&&e(a)&&t(Se)})}var ae=d(te,2);{var Be=t=>{me(t,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return e(u),i(()=>e(u).name)},$$events:{close:()=>{o(E,!1),o(u,null)},confirm:$e}})};h(ae,t=>{e(E)&&e(u)&&t(Be)})}var Fe=d(ae,2);{var Ue=t=>{{let n=g(()=>(e(a),i(()=>e(a).id||"")));lt(t,{initialEntityType:"organization",get initialEntityId(){return e(n)},$$events:{close:()=>o(T,!1),submit:we}})}};h(Fe,t=>{e(T)&&e(a)&&t(Ue)})}j(t=>{Ze(Pe,"href",t),ce(Te,(e(a),i(()=>e(a)?e(a).name:"Loading...")))},[()=>(de(A),i(()=>A("/organizations")))]),x(pe,K),Je(),he()}export{Mt as component}; +import"../chunks/DsnmJJEf.js";import{i as We}from"../chunks/De-I_rkH.js";import{p as qe,o as He,B as je,l as Ge,h as Re,f as B,j as Ve,a as C,t as j,b as x,c as Je,u as i,q as de,e as ce,g as e,m as l,d as f,s as d,k as o,$ as Ke,r as m,w as Qe,A as ue,v as g}from"../chunks/BIqNNOMq.js";import{i as h,s as Xe,a as Ye}from"../chunks/CfI2BFUj.js";import{d as A,c as Ze,g as _}from"../chunks/CQh-7xkh.js";import{p as et}from"../chunks/BIfA0Pjo.js";import{g as fe}from"../chunks/BSYpqPvJ.js";import{U as tt}from"../chunks/CpPzJ1l1.js";import{D as me}from"../chunks/Db7N5hjl.js";import{E as at,P as nt,a as ot}from"../chunks/CjQpknJk.js";import{D as rt}from"../chunks/CIekn_9e.js";import{g as ge}from"../chunks/B7If18kh.js";import{e as S}from"../chunks/BZiHL9L3.js";import{I as it}from"../chunks/DAaZIIvX.js";import{W as st}from"../chunks/BOcC5fx5.js";import{C as lt}from"../chunks/DBZ2eikH.js";import{w as G}from"../chunks/C4VNo_Nu.js";import{t as I}from"../chunks/DgRPqjXE.js";var dt=B('

Loading organization...

'),ct=B('

'),ut=B(" ",1),ft=B(' ',1);function Mt(pe,ve){qe(ve,!1);const[ye,he]=Xe(),R=()=>Ye(et,"$page",ye),w=l();let a=l(null),c=l([]),p=l([]),F=l(!0),O=l(""),D=l(!1),P=l(!1),E=l(!1),T=l(!1),u=l(null),M=null,b=l();async function V(){if(e(w))try{o(F,!0),o(O,"");const[t,n,r]=await Promise.all([_.getOrganization(e(w)),_.listOrganizationPools(e(w)).catch(()=>[]),_.listOrganizationInstances(e(w)).catch(()=>[])]);o(a,t),o(c,n),o(p,r)}catch(t){o(O,S(t))}finally{o(F,!1)}}function _e(t,n){const{events:r}=t;return{...n,events:r}}async function be(t){if(e(a))try{await _.updateOrganization(e(a).id,t),await V(),I.success("Organization Updated",`Organization ${e(a).name} has been updated successfully.`),o(D,!1)}catch(n){throw n}}async function ze(){if(e(a)){try{await _.deleteOrganization(e(a).id),fe(A("/organizations"))}catch(t){const n=S(t);I.error("Delete Failed",n)}o(P,!1)}}async function $e(){if(e(u))try{await _.deleteInstance(e(u).name),I.success("Instance Deleted",`Instance ${e(u).name} has been deleted successfully.`),o(E,!1),o(u,null)}catch(t){const n=S(t);I.error("Delete Failed",n),o(E,!1),o(u,null)}}function xe(t){o(u,t),o(E,!0)}function Ie(){o(T,!0)}async function we(t){try{if(!e(a))return;await _.createOrganizationPool(e(a).id,t.detail),I.success("Pool Created",`Pool has been created successfully for organization ${e(a).name}.`),o(T,!1)}catch(n){const r=S(n);I.error("Pool Creation Failed",r)}}function J(){e(b)&&Qe(b,e(b).scrollTop=e(b).scrollHeight)}function Ee(t){if(t.operation==="update"){const n=t.payload;if(e(a)&&n.id===e(a).id){const r=e(a).events?.length||0,s=n.events?.length||0;o(a,_e(e(a),n)),s>r&&setTimeout(()=>{J()},100)}}else if(t.operation==="delete"){const n=t.payload.id||t.payload;e(a)&&e(a).id===n&&fe(A("/organizations"))}}function Oe(t){if(!e(a))return;const n=t.payload;if(n.org_id===e(a).id){if(t.operation==="create")o(c,[...e(c),n]);else if(t.operation==="update")o(c,e(c).map(r=>r.id===n.id?n:r));else if(t.operation==="delete"){const r=n.id||n;o(c,e(c).filter(s=>s.id!==r))}}}function De(t){if(!e(a)||!e(c))return;const n=t.payload;if(e(c).some(s=>s.id===n.pool_id)){if(t.operation==="create")o(p,[...e(p),n]);else if(t.operation==="update")o(p,e(p).map(s=>s.id===n.id?n:s));else if(t.operation==="delete"){const s=n.id||n;o(p,e(p).filter(W=>W.id!==s))}}}He(()=>{V().then(()=>{e(a)?.events?.length&&setTimeout(()=>{J()},100)});const t=G.subscribeToEntity("organization",["update","delete"],Ee),n=G.subscribeToEntity("pool",["create","update","delete"],Oe),r=G.subscribeToEntity("instance",["create","update","delete"],De);M=()=>{t(),n(),r()}}),je(()=>{M&&(M(),M=null)}),Ge(()=>R(),()=>{o(w,R().params.id)}),Re(),We();var K=ft();Ve(t=>{j(()=>Ke.title=`${e(a),i(()=>e(a)?`${e(a).name} - Organization Details`:"Organization Details")??""} - GARM`)});var U=C(K),L=f(U),Q=f(L),N=f(Q),Pe=f(N);m(N);var X=d(N,2),Y=f(X),Z=d(f(Y),2),Te=f(Z,!0);m(Z),m(Y),m(X),m(Q),m(L);var Me=d(L,2);{var ke=t=>{var n=dt();x(t,n)},Ce=t=>{var n=ue(),r=C(n);{var s=z=>{var $=ct(),k=f($),q=f(k,!0);m(k),m($),j(()=>ce(q,e(O))),x(z,$)},W=z=>{var $=ue(),k=C($);{var q=H=>{var ne=ut(),oe=C(ne);{let v=g(()=>(e(a),i(()=>e(a).name||"Organization"))),y=g(()=>(e(a),i(()=>e(a).endpoint?.name))),Ne=g(()=>(de(ge),e(a),i(()=>ge(e(a).endpoint?.endpoint_type||"unknown"))));rt(oe,{get title(){return e(v)},get subtitle(){return`Endpoint: ${e(y)??""}`},get forgeIcon(){return e(Ne)},onEdit:()=>o(D,!0),onDelete:()=>o(P,!0)})}var re=d(oe,2);at(re,{get entity(){return e(a)},entityType:"organization"});var ie=d(re,2);{let v=g(()=>(e(a),i(()=>e(a).id||""))),y=g(()=>(e(a),i(()=>e(a).name||"")));st(ie,{entityType:"organization",get entityId(){return e(v)},get entityName(){return e(y)}})}var se=d(ie,2);{let v=g(()=>(e(a),i(()=>e(a).id||""))),y=g(()=>(e(a),i(()=>e(a).name||"")));nt(se,{get pools(){return e(c)},entityType:"organization",get entityId(){return e(v)},get entityName(){return e(y)},$$events:{addPool:Ie}})}var le=d(se,2);it(le,{get instances(){return e(p)},entityType:"organization",onDeleteInstance:xe});var Le=d(le,2);{let v=g(()=>(e(a),i(()=>e(a)?.events)));ot(Le,{get events(){return e(v)},get eventsContainer(){return e(b)},set eventsContainer(y){o(b,y)},$$legacy:!0})}x(H,ne)};h(k,H=>{e(a)&&H(q)},!0)}x(z,$)};h(r,z=>{e(O)?z(s):z(W,!1)},!0)}x(t,n)};h(Me,t=>{e(F)?t(ke):t(Ce,!1)})}m(U);var ee=d(U,2);{var Ae=t=>{tt(t,{get entity(){return e(a)},entityType:"organization",$$events:{close:()=>o(D,!1),submit:n=>be(n.detail)}})};h(ee,t=>{e(D)&&e(a)&&t(Ae)})}var te=d(ee,2);{var Se=t=>{me(t,{title:"Delete Organization",message:"Are you sure you want to delete this organization? This action cannot be undone and will remove all associated pools and instances.",get itemName(){return e(a),i(()=>e(a).name)},$$events:{close:()=>o(P,!1),confirm:ze}})};h(te,t=>{e(P)&&e(a)&&t(Se)})}var ae=d(te,2);{var Be=t=>{me(t,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return e(u),i(()=>e(u).name)},$$events:{close:()=>{o(E,!1),o(u,null)},confirm:$e}})};h(ae,t=>{e(E)&&e(u)&&t(Be)})}var Fe=d(ae,2);{var Ue=t=>{{let n=g(()=>(e(a),i(()=>e(a).id||"")));lt(t,{initialEntityType:"organization",get initialEntityId(){return e(n)},$$events:{close:()=>o(T,!1),submit:we}})}};h(Fe,t=>{e(T)&&e(a)&&t(Ue)})}j(t=>{Ze(Pe,"href",t),ce(Te,(e(a),i(()=>e(a)?e(a).name:"Loading...")))},[()=>(de(A),i(()=>A("/organizations")))]),x(pe,K),Je(),he()}export{Mt as component}; diff --git a/webapp/assets/_app/immutable/nodes/15.BfnF2i2C.js b/webapp/assets/_app/immutable/nodes/15.C78GwnyQ.js similarity index 84% rename from webapp/assets/_app/immutable/nodes/15.BfnF2i2C.js rename to webapp/assets/_app/immutable/nodes/15.C78GwnyQ.js index 4f8e1077..13a0fba5 100644 --- a/webapp/assets/_app/immutable/nodes/15.BfnF2i2C.js +++ b/webapp/assets/_app/immutable/nodes/15.C78GwnyQ.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as ye}from"../chunks/TJn6xDN9.js";import{p as he,o as Pe,l as p,h as ve,f as J,j as Ce,a as _e,b as V,c as $e,g as t,m as r,$ as be,d as q,v as w,u as j,s as y,k as o,r as H,q as Me}from"../chunks/DniTuB_0.js";import{i as _,s as Te,a as De}from"../chunks/DbNhg6mG.js";import{g as k}from"../chunks/DD3srElq.js";import{P as Ee}from"../chunks/BlYHwhWl.js";import{C as we}from"../chunks/A5UGwKpF.js";import{U as ke}from"../chunks/CQ6bqX5o.js";import{D as Ae}from"../chunks/B6XSaEl0.js";import{M as Ie}from"../chunks/PC4wJWhj.js";import{D as Se,G as A,A as xe,L as Fe}from"../chunks/QtGwBUod.js";import{e as Ue,a as z}from"../chunks/C-ow2qSP.js";import{t as u}from"../chunks/CBJzOE8U.js";import{e as $,h as Le}from"../chunks/LMA6-4d1.js";import{e as b}from"../chunks/BZiHL9L3.js";import{E as Ne}from"../chunks/D3pbRQAB.js";import{E as Re}from"../chunks/hsRG7ppz.js";import{S as Ge}from"../chunks/Dn_Ue57e.js";import{P as Ve}from"../chunks/DW-EakRM.js";import"../chunks/BSR16q_V.js";const B={};var qe=J('
'),je=J('
',1);function ct(K,O){he(O,!1);const[Q,W]=Te(),s=()=>De(Ue,"$eagerCache",Q),M=r(),c=r(),m=r(),I=r();let f=r([]),h=r(!0),S=r(""),P=r(""),n=r(1),d=r(25),v=r(!1),C=r(!1),g=r(!1),a=r(null),T=r(!1);async function X(e){try{u.success("Pool Created","Pool has been created successfully."),o(v,!1)}catch(l){const i=b(l);u.error("Pool Creation Failed",i)}}async function Y(e){if(t(a))try{await k.updatePool(t(a).id,e),o(C,!1),u.add({type:"success",title:"Pool Updated",message:`Pool ${t(a).id.slice(0,8)}... has been updated successfully.`}),o(a,null)}catch(l){const i=b(l);throw u.add({type:"error",title:"Update Failed",message:i}),l}}async function Z(){if(!t(a))return;const e=`Pool ${t(a).id.slice(0,8)}...`;try{await k.deletePool(t(a).id),o(g,!1),u.add({type:"success",title:"Pool Deleted",message:`${e} has been deleted successfully.`}),o(a,null)}catch(l){const i=b(l);u.add({type:"error",title:"Delete Failed",message:i})}o(g,!1),o(a,null)}function ee(){o(v,!0)}async function x(e){try{o(T,!0);const l=await k.getPool(e.id);o(a,l),o(C,!0)}catch(l){const i=b(l);u.error("Failed to Load Pool Details",i)}finally{o(T,!1)}}function F(e){o(a,e),o(g,!0)}Pe(async()=>{try{o(h,!0);const e=await z.getPools();e&&Array.isArray(e)&&o(f,e)}catch(e){B?.VITEST||console.error("Failed to load pools:",e),o(S,e instanceof Error?e.message:"Failed to load pools")}finally{o(h,!1)}});async function te(){try{await z.retryResource("pools")}catch(e){B?.VITEST||console.error("Retry failed:",e)}}const oe=[{key:"id",title:"ID",flexible:!0,cellComponent:Ne,cellProps:{entityType:"pool",showId:!0,fontMono:!0}},{key:"image",title:"Image",flexible:!0,cellComponent:A,cellProps:{field:"image",type:"code",showTitle:!0}},{key:"provider",title:"Provider",cellComponent:A,cellProps:{field:"provider_name"}},{key:"flavor",title:"Flavor",cellComponent:A,cellProps:{field:"flavor"}},{key:"entity",title:"Entity",cellComponent:Ve},{key:"endpoint",title:"Endpoint",cellComponent:Re},{key:"status",title:"Status",cellComponent:Ge,cellProps:{statusType:"enabled"}},{key:"actions",title:"Actions",align:"right",cellComponent:xe}],ae={entityType:"pool",primaryText:{field:"id",isClickable:!0,href:"/pools/{id}",useId:!0,isMonospace:!0},secondaryText:{field:"entity_name",computedValue:e=>$(e,s())},badges:[{type:"custom",value:e=>({variant:e.enabled?"success":"error",text:e.enabled?"Enabled":"Disabled"})}],actions:[{type:"edit",handler:e=>x(e)},{type:"delete",handler:e=>F(e)}]};function le(e){o(P,e.detail.term),o(n,1)}function re(e){o(n,e.detail.page)}function se(e){o(d,e.detail.perPage),o(n,1)}function ne(e){x(e.detail.item)}function ie(e){F(e.detail.item)}p(()=>(t(f),s()),()=>{(!t(f).length||s().loaded.pools)&&o(f,s().pools)}),p(()=>s(),()=>{o(h,s().loading.pools)}),p(()=>s(),()=>{o(M,s().errorMessages.pools)}),p(()=>(t(f),t(P),s()),()=>{o(c,Le(t(f),t(P),e=>$(e,s())))}),p(()=>(t(c),t(d)),()=>{o(m,Math.ceil(t(c).length/t(d)))}),p(()=>(t(n),t(m)),()=>{t(n)>t(m)&&t(m)>0&&o(n,t(m))}),p(()=>(t(c),t(n),t(d)),()=>{o(I,t(c).slice((t(n)-1)*t(d),t(n)*t(d)))}),ve(),ye();var U=je();Ce(e=>{be.title="Pools - GARM"});var D=_e(U),L=q(D);Ee(L,{title:"Pools",description:"Manage runner pools across all entities",actionLabel:"Add Pool",$$events:{action:ee}});var ce=y(L,2);{let e=w(()=>t(M)||t(S)),l=w(()=>!!t(M));Se(ce,{get columns(){return oe},get data(){return t(I)},get loading(){return t(h)},get error(){return t(e)},get searchTerm(){return t(P)},searchPlaceholder:"Search by entity name...",get currentPage(){return t(n)},get perPage(){return t(d)},get totalPages(){return t(m)},get totalItems(){return t(c),j(()=>t(c).length)},itemName:"pools",emptyIconType:"cog",get showRetry(){return t(l)},get mobileCardConfig(){return ae},$$events:{search:le,pageChange:re,perPageChange:se,retry:te,edit:ne,delete:ie}})}H(D);var N=y(D,2);{var de=e=>{we(e,{$$events:{close:()=>o(v,!1),submit:X}})};_(N,e=>{t(v)&&e(de)})}var R=y(N,2);{var pe=e=>{ke(e,{get pool(){return t(a)},$$events:{close:()=>{o(C,!1),o(a,null)},submit:l=>Y(l.detail)}})};_(R,e=>{t(C)&&t(a)&&e(pe)})}var G=y(R,2);{var ue=e=>{{let l=w(()=>(t(a),Me($),s(),j(()=>`Pool ${t(a).id.slice(0,8)}... (${$(t(a),s())})`)));Ae(e,{title:"Delete Pool",message:"Are you sure you want to delete this pool? This action cannot be undone and will remove all associated runners.",get itemName(){return t(l)},$$events:{close:()=>{o(g,!1),o(a,null)},confirm:Z}})}};_(G,e=>{t(g)&&t(a)&&e(ue)})}var me=y(G,2);{var fe=e=>{Ie(e,{$$events:{close:()=>{}},children:(l,i)=>{var E=qe(),ge=q(E);Fe(ge,{message:"Loading pool details..."}),H(E),V(l,E)},$$slots:{default:!0}})};_(me,e=>{t(T)&&e(fe)})}V(K,U),$e(),W()}export{ct as component}; +import"../chunks/DsnmJJEf.js";import{i as ye}from"../chunks/De-I_rkH.js";import{p as he,o as Pe,l as p,h as ve,f as J,j as Ce,a as _e,b as V,c as $e,g as t,m as r,$ as be,d as q,v as w,u as j,s as y,k as o,r as H,q as Me}from"../chunks/BIqNNOMq.js";import{i as _,s as Te,a as De}from"../chunks/CfI2BFUj.js";import{g as k}from"../chunks/CQh-7xkh.js";import{P as Ee}from"../chunks/Cq4AwQWc.js";import{C as we}from"../chunks/DBZ2eikH.js";import{U as ke}from"../chunks/D8qjq9ho.js";import{D as Ae}from"../chunks/Db7N5hjl.js";import{M as Ie}from"../chunks/BFX8vI-4.js";import{D as Se,G as A,A as xe,L as Fe}from"../chunks/BjNB1vhO.js";import{e as Ue,a as z}from"../chunks/B1uxuBYn.js";import{t as u}from"../chunks/DgRPqjXE.js";import{e as $,h as Le}from"../chunks/B7If18kh.js";import{e as b}from"../chunks/BZiHL9L3.js";import{E as Ne}from"../chunks/C6HeU_02.js";import{E as Re}from"../chunks/DFF0ZVx4.js";import{S as Ge}from"../chunks/DCu5KXBe.js";import{P as Ve}from"../chunks/DFRbKD7c.js";import"../chunks/CYb6_lpF.js";const B={};var qe=J('
'),je=J('
',1);function ct(K,O){he(O,!1);const[Q,W]=Te(),s=()=>De(Ue,"$eagerCache",Q),M=r(),c=r(),m=r(),I=r();let f=r([]),h=r(!0),S=r(""),P=r(""),n=r(1),d=r(25),v=r(!1),C=r(!1),g=r(!1),a=r(null),T=r(!1);async function X(e){try{u.success("Pool Created","Pool has been created successfully."),o(v,!1)}catch(l){const i=b(l);u.error("Pool Creation Failed",i)}}async function Y(e){if(t(a))try{await k.updatePool(t(a).id,e),o(C,!1),u.add({type:"success",title:"Pool Updated",message:`Pool ${t(a).id.slice(0,8)}... has been updated successfully.`}),o(a,null)}catch(l){const i=b(l);throw u.add({type:"error",title:"Update Failed",message:i}),l}}async function Z(){if(!t(a))return;const e=`Pool ${t(a).id.slice(0,8)}...`;try{await k.deletePool(t(a).id),o(g,!1),u.add({type:"success",title:"Pool Deleted",message:`${e} has been deleted successfully.`}),o(a,null)}catch(l){const i=b(l);u.add({type:"error",title:"Delete Failed",message:i})}o(g,!1),o(a,null)}function ee(){o(v,!0)}async function x(e){try{o(T,!0);const l=await k.getPool(e.id);o(a,l),o(C,!0)}catch(l){const i=b(l);u.error("Failed to Load Pool Details",i)}finally{o(T,!1)}}function F(e){o(a,e),o(g,!0)}Pe(async()=>{try{o(h,!0);const e=await z.getPools();e&&Array.isArray(e)&&o(f,e)}catch(e){B?.VITEST||console.error("Failed to load pools:",e),o(S,e instanceof Error?e.message:"Failed to load pools")}finally{o(h,!1)}});async function te(){try{await z.retryResource("pools")}catch(e){B?.VITEST||console.error("Retry failed:",e)}}const oe=[{key:"id",title:"ID",flexible:!0,cellComponent:Ne,cellProps:{entityType:"pool",showId:!0,fontMono:!0}},{key:"image",title:"Image",flexible:!0,cellComponent:A,cellProps:{field:"image",type:"code",showTitle:!0}},{key:"provider",title:"Provider",cellComponent:A,cellProps:{field:"provider_name"}},{key:"flavor",title:"Flavor",cellComponent:A,cellProps:{field:"flavor"}},{key:"entity",title:"Entity",cellComponent:Ve},{key:"endpoint",title:"Endpoint",cellComponent:Re},{key:"status",title:"Status",cellComponent:Ge,cellProps:{statusType:"enabled"}},{key:"actions",title:"Actions",align:"right",cellComponent:xe}],ae={entityType:"pool",primaryText:{field:"id",isClickable:!0,href:"/pools/{id}",useId:!0,isMonospace:!0},secondaryText:{field:"entity_name",computedValue:e=>$(e,s())},badges:[{type:"custom",value:e=>({variant:e.enabled?"success":"error",text:e.enabled?"Enabled":"Disabled"})}],actions:[{type:"edit",handler:e=>x(e)},{type:"delete",handler:e=>F(e)}]};function le(e){o(P,e.detail.term),o(n,1)}function re(e){o(n,e.detail.page)}function se(e){o(d,e.detail.perPage),o(n,1)}function ne(e){x(e.detail.item)}function ie(e){F(e.detail.item)}p(()=>(t(f),s()),()=>{(!t(f).length||s().loaded.pools)&&o(f,s().pools)}),p(()=>s(),()=>{o(h,s().loading.pools)}),p(()=>s(),()=>{o(M,s().errorMessages.pools)}),p(()=>(t(f),t(P),s()),()=>{o(c,Le(t(f),t(P),e=>$(e,s())))}),p(()=>(t(c),t(d)),()=>{o(m,Math.ceil(t(c).length/t(d)))}),p(()=>(t(n),t(m)),()=>{t(n)>t(m)&&t(m)>0&&o(n,t(m))}),p(()=>(t(c),t(n),t(d)),()=>{o(I,t(c).slice((t(n)-1)*t(d),t(n)*t(d)))}),ve(),ye();var U=je();Ce(e=>{be.title="Pools - GARM"});var D=_e(U),L=q(D);Ee(L,{title:"Pools",description:"Manage runner pools across all entities",actionLabel:"Add Pool",$$events:{action:ee}});var ce=y(L,2);{let e=w(()=>t(M)||t(S)),l=w(()=>!!t(M));Se(ce,{get columns(){return oe},get data(){return t(I)},get loading(){return t(h)},get error(){return t(e)},get searchTerm(){return t(P)},searchPlaceholder:"Search by entity name...",get currentPage(){return t(n)},get perPage(){return t(d)},get totalPages(){return t(m)},get totalItems(){return t(c),j(()=>t(c).length)},itemName:"pools",emptyIconType:"cog",get showRetry(){return t(l)},get mobileCardConfig(){return ae},$$events:{search:le,pageChange:re,perPageChange:se,retry:te,edit:ne,delete:ie}})}H(D);var N=y(D,2);{var de=e=>{we(e,{$$events:{close:()=>o(v,!1),submit:X}})};_(N,e=>{t(v)&&e(de)})}var R=y(N,2);{var pe=e=>{ke(e,{get pool(){return t(a)},$$events:{close:()=>{o(C,!1),o(a,null)},submit:l=>Y(l.detail)}})};_(R,e=>{t(C)&&t(a)&&e(pe)})}var G=y(R,2);{var ue=e=>{{let l=w(()=>(t(a),Me($),s(),j(()=>`Pool ${t(a).id.slice(0,8)}... (${$(t(a),s())})`)));Ae(e,{title:"Delete Pool",message:"Are you sure you want to delete this pool? This action cannot be undone and will remove all associated runners.",get itemName(){return t(l)},$$events:{close:()=>{o(g,!1),o(a,null)},confirm:Z}})}};_(G,e=>{t(g)&&t(a)&&e(ue)})}var me=y(G,2);{var fe=e=>{Ie(e,{$$events:{close:()=>{}},children:(l,i)=>{var E=qe(),ge=q(E);Fe(ge,{message:"Loading pool details..."}),H(E),V(l,E)},$$slots:{default:!0}})};_(me,e=>{t(T)&&e(fe)})}V(K,U),$e(),W()}export{ct as component}; diff --git a/webapp/assets/_app/immutable/nodes/16.CgYZVDEy.js b/webapp/assets/_app/immutable/nodes/16.CgYZVDEy.js new file mode 100644 index 00000000..d8a4f26f --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/16.CgYZVDEy.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as Ze}from"../chunks/De-I_rkH.js";import{p as ta,o as ea,B as aa,l as ra,h as da,f as _,j as sa,a as R,t as h,b as u,c as ia,u as i,q as g,e as o,g as t,m as k,d as r,s,k as v,$ as la,r as a,w as M,A as ee,v as E}from"../chunks/BIqNNOMq.js";import{i as p}from"../chunks/CfI2BFUj.js";import{e as oa,i as na}from"../chunks/D8ZtP9JD.js";import{d as P,c as _t,g as C,s as ae}from"../chunks/CQh-7xkh.js";import{p as re}from"../chunks/B-zJt1QP.js";import{g as de}from"../chunks/BSYpqPvJ.js";import{U as va}from"../chunks/D8qjq9ho.js";import{D as se}from"../chunks/Db7N5hjl.js";import{I as ma}from"../chunks/DAaZIIvX.js";import{D as ca}from"../chunks/CIekn_9e.js";import{w as ie}from"../chunks/C4VNo_Nu.js";import{t as T}from"../chunks/DgRPqjXE.js";import{e as D,i as L,j as le,b as O,g as oe}from"../chunks/B7If18kh.js";import{e as G}from"../chunks/BZiHL9L3.js";import{F as xa}from"../chunks/BLWgJqKz.js";var ua=_('

Loading pool...

'),ga=_('

'),pa=_('
Runner Install Template
'),fa=_('
GitHub Runner Group
'),_a=_(' '),ya=_('
Tags
'),ba=_('

Extra Specifications

 
'),ha=_('

Basic Information

Pool ID
Provider
Forge Type
Image
Flavor
Status
Entity
Created At
Updated At

Configuration

Max Runners
Min Idle Runners
Bootstrap Timeout
Priority
Runner Prefix
OS Type / Architecture
Shell Access
',1),ka=_(' ',1);function Oa(ne,ve){ta(ve,!1);const J=k();let e=k(null),j=k(!0),A=k(""),F=k(!1),S=k(!1),U=k(!1),f=k(null),B=null;async function me(){if(t(J))try{v(j,!0),v(A,""),v(e,await C.getPool(t(J))),t(e).instances||M(e,t(e).instances=[])}catch(d){v(A,G(d))}finally{v(j,!1)}}async function ce(d){if(t(e))try{const l=await C.updatePool(t(e).id,d);v(e,l),v(F,!1),T.success("Pool Updated",`Pool ${t(e).id} has been updated successfully.`)}catch(l){const y=G(l);T.error("Update Failed",y)}}async function xe(){if(t(e)){try{await C.deletePool(t(e).id),de(P("/pools"))}catch(d){const l=G(d);T.error("Delete Failed",l)}v(S,!1)}}async function ue(){if(t(f)){try{await C.deleteInstance(t(f).name),T.success("Instance Deleted",`Instance ${t(f).name} has been deleted successfully.`)}catch(d){const l=G(d);T.error("Delete Failed",l)}v(U,!1),v(f,null)}}function ge(d){v(f,d),v(U,!0)}function pe(d){if(!d)return"{}";try{if(typeof d=="string"){const l=JSON.parse(d);return JSON.stringify(l,null,2)}return JSON.stringify(d,null,2)}catch{return d.toString()}}function fe(d){if(d.operation==="update"){const l=d.payload;t(e)&&l.id===t(e).id&&v(e,l)}else if(d.operation==="delete"){const l=d.payload.id||d.payload;t(e)&&t(e).id===l&&de(P("/pools"))}}function _e(d){if(!t(e))return;const l=d.payload;if(l.pool_id===t(e).id){if(t(e).instances||M(e,t(e).instances=[]),d.operation==="create")M(e,t(e).instances=[...t(e).instances,l]);else if(d.operation==="update")M(e,t(e).instances=t(e).instances.map(y=>y.id===l.id?l:y));else if(d.operation==="delete"){const y=l.id||l;M(e,t(e).instances=t(e).instances.filter(V=>V.id!==y))}v(e,t(e))}}ea(()=>{me();const d=ie.subscribeToEntity("pool",["update","delete"],fe),l=ie.subscribeToEntity("instance",["create","update","delete"],_e);B=()=>{d(),l()}}),aa(()=>{B&&(B(),B=null)}),ra(()=>re,()=>{v(J,re.params.id)}),da(),Ze();var yt=ka();sa(d=>{h(()=>la.title=`${t(e),i(()=>t(e)?`Pool ${t(e).id} - Pool Details`:"Pool Details")??""} - GARM`)});var q=R(yt),z=r(q),bt=r(z),H=r(bt),ye=r(H);a(H);var ht=s(H,2),kt=r(ht),wt=s(r(kt),2),be=r(wt,!0);a(wt),a(kt),a(ht),a(bt),a(z);var he=s(z,2);{var ke=d=>{var l=ua();u(d,l)},we=d=>{var l=ee(),y=R(l);{var V=$=>{var I=ga(),N=r(I),W=r(N,!0);a(N),a(I),h(()=>o(W,t(A))),u($,I)},Me=$=>{var I=ee(),N=R(I);{var W=K=>{var Pt=ha(),Dt=R(Pt);{let n=E(()=>(g(D),t(e),i(()=>D(t(e))))),m=E(()=>(g(L),t(e),i(()=>L(t(e))))),c=E(()=>(g(oe),t(e),i(()=>oe(t(e).endpoint?.endpoint_type||"unknown"))));ca(Dt,{get title(){return t(e),i(()=>t(e).id)},get subtitle(){return`Pool for ${t(n)??""} (${t(m)??""})`},get forgeIcon(){return t(c)},onEdit:()=>v(F,!0),onDelete:()=>v(S,!0)})}var Q=s(Dt,2),X=r(Q),Mt=r(X),Et=s(r(Mt),2),Y=r(Et),Tt=s(r(Y),2),Ee=r(Tt,!0);a(Tt),a(Y);var Z=s(Y,2),At=s(r(Z),2),Te=r(At,!0);a(At),a(Z);var tt=s(Z,2),Ft=s(r(tt),2),Ae=r(Ft);xa(Ae,{get item(){return t(e)}}),a(Ft),a(tt);var et=s(tt,2),St=s(r(et),2),Ut=r(St),Fe=r(Ut,!0);a(Ut),a(St),a(et);var at=s(et,2),Bt=s(r(at),2),Se=r(Bt,!0);a(Bt),a(at);var rt=s(at,2),Nt=s(r(rt),2),dt=r(Nt),Ue=r(dt,!0);a(dt),a(Nt),a(rt);var st=s(rt,2),Rt=s(r(st),2),Ct=r(Rt),it=r(Ct),Be=r(it,!0);a(it);var lt=s(it,2),Ne=r(lt,!0);a(lt),a(Ct),a(Rt),a(st);var ot=s(st,2),Lt=s(r(ot),2),Re=r(Lt,!0);a(Lt),a(ot);var Ot=s(ot,2),Gt=s(r(Ot),2),Ce=r(Gt,!0);a(Gt),a(Ot),a(Et),a(Mt),a(X);var Jt=s(X,2),jt=r(Jt),qt=s(r(jt),2),nt=r(qt),zt=s(r(nt),2),Le=r(zt,!0);a(zt),a(nt);var vt=s(nt,2),Ht=s(r(vt),2),Oe=r(Ht,!0);a(Ht),a(vt);var mt=s(vt,2),Vt=s(r(mt),2),Ge=r(Vt);a(Vt),a(mt);var ct=s(mt,2),Wt=s(r(ct),2),Je=r(Wt,!0);a(Wt),a(ct);var xt=s(ct,2),Kt=s(r(xt),2),je=r(Kt,!0);a(Kt),a(xt);var ut=s(xt,2),Qt=s(r(ut),2),qe=r(Qt);a(Qt),a(ut);var gt=s(ut,2),Xt=s(r(gt),2),pt=r(Xt),ze=r(pt,!0);a(pt),a(Xt),a(gt);var Yt=s(gt,2);{var He=n=>{var m=pa(),c=s(r(m),2),x=r(c),w=r(x,!0);a(x),a(c),a(m),h(b=>{_t(x,"href",b),o(w,(t(e),i(()=>t(e).template_name)))},[()=>(g(P),t(e),i(()=>P(`/templates/${t(e).template_id}`)))]),u(n,m)};p(Yt,n=>{t(e),i(()=>t(e).template_name)&&n(He)})}var Zt=s(Yt,2);{var Ve=n=>{var m=fa(),c=s(r(m),2),x=r(c,!0);a(c),a(m),h(()=>o(x,(t(e),i(()=>t(e)["github-runner-group"])))),u(n,m)};p(Zt,n=>{t(e),i(()=>t(e)["github-runner-group"])&&n(Ve)})}var We=s(Zt,2);{var Ke=n=>{var m=ya(),c=s(r(m),2),x=r(c);oa(x,5,()=>(t(e),i(()=>t(e).tags)),na,(w,b)=>{var ft=_a(),Ye=r(ft,!0);a(ft),h(()=>o(Ye,(t(b),i(()=>typeof t(b)=="string"?t(b):t(b).name)))),u(w,ft)}),a(x),a(c),a(m),u(n,m)};p(We,n=>{t(e),i(()=>t(e).tags&&t(e).tags.length>0)&&n(Ke)})}a(qt),a(jt),a(Jt),a(Q);var te=s(Q,2);{var Qe=n=>{var m=ba(),c=r(m),x=s(r(c),2),w=r(x,!0);a(x),a(c),a(m),h(b=>o(w,b),[()=>(t(e),i(()=>pe(t(e).extra_specs)))]),u(n,m)};p(te,n=>{t(e),i(()=>t(e).extra_specs)&&n(Qe)})}var Xe=s(te,2);{let n=E(()=>(t(e),i(()=>t(e).instances||[])));ma(Xe,{get instances(){return t(n)},entityType:"pool",onDeleteInstance:ge})}h((n,m,c,x,w)=>{o(Ee,(t(e),i(()=>t(e).id))),o(Te,(t(e),i(()=>t(e).provider_name))),o(Fe,(t(e),i(()=>t(e).image))),o(Se,(t(e),i(()=>t(e).flavor))),ae(dt,1,`inline-flex px-2 py-1 text-xs font-medium rounded-full ${t(e),i(()=>t(e).enabled?"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200":"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200")??""}`),o(Ue,(t(e),i(()=>t(e).enabled?"Enabled":"Disabled"))),o(Be,n),_t(lt,"href",m),o(Ne,c),o(Re,x),o(Ce,w),o(Le,(t(e),i(()=>t(e).max_runners))),o(Oe,(t(e),i(()=>t(e).min_idle_runners))),o(Ge,`${t(e),i(()=>t(e).runner_bootstrap_timeout)??""} minutes`),o(Je,(t(e),i(()=>t(e).priority))),o(je,(t(e),i(()=>t(e).runner_prefix||"garm"))),o(qe,`${t(e),i(()=>t(e).os_type)??""} / ${t(e),i(()=>t(e).os_arch)??""}`),ae(pt,1,`inline-flex px-2 py-1 text-xs font-medium rounded-full ${t(e),i(()=>t(e).enable_shell?"bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200":"bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200")??""}`),o(ze,(t(e),i(()=>t(e).enable_shell?"Enabled":"Disabled")))},[()=>(g(L),t(e),i(()=>L(t(e)))),()=>(g(le),t(e),i(()=>le(t(e)))),()=>(g(D),t(e),i(()=>D(t(e)))),()=>(g(O),t(e),i(()=>O(t(e).created_at||""))),()=>(g(O),t(e),i(()=>O(t(e).updated_at||"")))]),u(K,Pt)};p(N,K=>{t(e)&&K(W)},!0)}u($,I)};p(y,$=>{t(A)?$(V):$(Me,!1)},!0)}u(d,l)};p(he,d=>{t(j)?d(ke):d(we,!1)})}a(q);var $t=s(q,2);{var $e=d=>{va(d,{get pool(){return t(e)},$$events:{close:()=>v(F,!1),submit:l=>ce(l.detail)}})};p($t,d=>{t(F)&&t(e)&&d($e)})}var It=s($t,2);{var Ie=d=>{{let l=E(()=>(t(e),g(D),i(()=>`Pool ${t(e).id} (${D(t(e))})`)));se(d,{title:"Delete Pool",message:"Are you sure you want to delete this pool? This action cannot be undone and will remove all associated runners.",get itemName(){return t(l)},$$events:{close:()=>v(S,!1),confirm:xe}})}};p(It,d=>{t(S)&&t(e)&&d(Ie)})}var Pe=s(It,2);{var De=d=>{se(d,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return t(f),i(()=>t(f).name)},$$events:{close:()=>{v(U,!1),v(f,null)},confirm:ue}})};p(Pe,d=>{t(U)&&t(f)&&d(De)})}h(d=>{_t(ye,"href",d),o(be,(t(e),i(()=>t(e)?t(e).id:"Loading...")))},[()=>(g(P),i(()=>P("/pools")))]),u(ne,yt),ia()}export{Oa as component}; diff --git a/webapp/assets/_app/immutable/nodes/16.CsGz5Ufi.js b/webapp/assets/_app/immutable/nodes/16.CsGz5Ufi.js deleted file mode 100644 index 556c3252..00000000 --- a/webapp/assets/_app/immutable/nodes/16.CsGz5Ufi.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as ze}from"../chunks/TJn6xDN9.js";import{p as He,o as Ve,B as We,l as Ke,h as Qe,f as _,j as Xe,a as F,t as b,b as u,c as Ye,u as i,q as g,e as n,g as t,m as k,d as r,s,k as v,$ as Ze,r as a,w as M,A as Qt,v as E}from"../chunks/DniTuB_0.js";import{i as f}from"../chunks/DbNhg6mG.js";import{e as ta,i as ea}from"../chunks/Ck5PkeSc.js";import{d as $,c as gt,g as C,s as aa}from"../chunks/DD3srElq.js";import{p as Xt}from"../chunks/H2nrvwx_.js";import{g as Yt}from"../chunks/DeKGyprh.js";import{U as ra}from"../chunks/CQ6bqX5o.js";import{D as Zt}from"../chunks/B6XSaEl0.js";import{I as da}from"../chunks/B3nevMeU.js";import{D as sa}from"../chunks/CCF1V3nS.js";import{w as te}from"../chunks/DmHFwzWx.js";import{t as T}from"../chunks/CBJzOE8U.js";import{e as D,i as L,j as ee,b as O,g as ae}from"../chunks/LMA6-4d1.js";import{e as G}from"../chunks/BZiHL9L3.js";var ia=_('

Loading pool...

'),oa=_('

'),la=_('
Runner Install Template
'),na=_('
GitHub Runner Group
'),va=_(' '),ma=_('
Tags
'),ca=_('

Extra Specifications

 
'),xa=_('

Basic Information

Pool ID
Provider
Image
Flavor
Status
Entity
Created At
Updated At

Configuration

Max Runners
Min Idle Runners
Bootstrap Timeout
Priority
Runner Prefix
OS Type / Architecture
',1),ua=_(' ',1);function Aa(re,de){He(de,!1);const J=k();let e=k(null),j=k(!0),A=k(""),U=k(!1),S=k(!1),B=k(!1),p=k(null),N=null;async function se(){if(t(J))try{v(j,!0),v(A,""),v(e,await C.getPool(t(J))),t(e).instances||M(e,t(e).instances=[])}catch(d){v(A,G(d))}finally{v(j,!1)}}async function ie(d){if(t(e))try{const o=await C.updatePool(t(e).id,d);v(e,o),v(U,!1),T.success("Pool Updated",`Pool ${t(e).id} has been updated successfully.`)}catch(o){const y=G(o);T.error("Update Failed",y)}}async function oe(){if(t(e)){try{await C.deletePool(t(e).id),Yt($("/pools"))}catch(d){const o=G(d);T.error("Delete Failed",o)}v(S,!1)}}async function le(){if(t(p)){try{await C.deleteInstance(t(p).name),T.success("Instance Deleted",`Instance ${t(p).name} has been deleted successfully.`)}catch(d){const o=G(d);T.error("Delete Failed",o)}v(B,!1),v(p,null)}}function ne(d){v(p,d),v(B,!0)}function ve(d){if(!d)return"{}";try{if(typeof d=="string"){const o=JSON.parse(d);return JSON.stringify(o,null,2)}return JSON.stringify(d,null,2)}catch{return d.toString()}}function me(d){if(d.operation==="update"){const o=d.payload;t(e)&&o.id===t(e).id&&v(e,o)}else if(d.operation==="delete"){const o=d.payload.id||d.payload;t(e)&&t(e).id===o&&Yt($("/pools"))}}function ce(d){if(!t(e))return;const o=d.payload;if(o.pool_id===t(e).id){if(t(e).instances||M(e,t(e).instances=[]),d.operation==="create")M(e,t(e).instances=[...t(e).instances,o]);else if(d.operation==="update")M(e,t(e).instances=t(e).instances.map(y=>y.id===o.id?o:y));else if(d.operation==="delete"){const y=o.id||o;M(e,t(e).instances=t(e).instances.filter(V=>V.id!==y))}v(e,t(e))}}Ve(()=>{se();const d=te.subscribeToEntity("pool",["update","delete"],me),o=te.subscribeToEntity("instance",["create","update","delete"],ce);N=()=>{d(),o()}}),We(()=>{N&&(N(),N=null)}),Ke(()=>Xt,()=>{v(J,Xt.params.id)}),Qe(),ze();var ft=ua();Xe(d=>{b(()=>Ze.title=`${t(e),i(()=>t(e)?`Pool ${t(e).id} - Pool Details`:"Pool Details")??""} - GARM`)});var q=F(ft),z=r(q),pt=r(z),H=r(pt),xe=r(H);a(H);var _t=s(H,2),yt=r(_t),ht=s(r(yt),2),ue=r(ht,!0);a(ht),a(yt),a(_t),a(pt),a(z);var ge=s(z,2);{var fe=d=>{var o=ia();u(d,o)},pe=d=>{var o=Qt(),y=F(o);{var V=I=>{var P=oa(),R=r(P),W=r(R,!0);a(R),a(P),b(()=>n(W,t(A))),u(I,P)},ke=I=>{var P=Qt(),R=F(P);{var W=K=>{var wt=xa(),It=F(wt);{let l=E(()=>(g(D),t(e),i(()=>D(t(e))))),m=E(()=>(g(L),t(e),i(()=>L(t(e))))),c=E(()=>(g(ae),t(e),i(()=>ae(t(e).endpoint?.endpoint_type||"unknown"))));sa(It,{get title(){return t(e),i(()=>t(e).id)},get subtitle(){return`Pool for ${t(l)??""} (${t(m)??""})`},get forgeIcon(){return t(c)},onEdit:()=>v(U,!0),onDelete:()=>v(S,!0)})}var Q=s(It,2),X=r(Q),Pt=r(X),$t=s(r(Pt),2),Y=r($t),Dt=s(r(Y),2),we=r(Dt,!0);a(Dt),a(Y);var Z=s(Y,2),Mt=s(r(Z),2),Ie=r(Mt,!0);a(Mt),a(Z);var tt=s(Z,2),Et=s(r(tt),2),Tt=r(Et),Pe=r(Tt,!0);a(Tt),a(Et),a(tt);var et=s(tt,2),At=s(r(et),2),$e=r(At,!0);a(At),a(et);var at=s(et,2),Ut=s(r(at),2),rt=r(Ut),De=r(rt,!0);a(rt),a(Ut),a(at);var dt=s(at,2),St=s(r(dt),2),Bt=r(St),st=r(Bt),Me=r(st,!0);a(st);var it=s(st,2),Ee=r(it,!0);a(it),a(Bt),a(St),a(dt);var ot=s(dt,2),Nt=s(r(ot),2),Te=r(Nt,!0);a(Nt),a(ot);var Rt=s(ot,2),Ft=s(r(Rt),2),Ae=r(Ft,!0);a(Ft),a(Rt),a($t),a(Pt),a(X);var Ct=s(X,2),Lt=r(Ct),Ot=s(r(Lt),2),lt=r(Ot),Gt=s(r(lt),2),Ue=r(Gt,!0);a(Gt),a(lt);var nt=s(lt,2),Jt=s(r(nt),2),Se=r(Jt,!0);a(Jt),a(nt);var vt=s(nt,2),jt=s(r(vt),2),Be=r(jt);a(jt),a(vt);var mt=s(vt,2),qt=s(r(mt),2),Ne=r(qt,!0);a(qt),a(mt);var ct=s(mt,2),zt=s(r(ct),2),Re=r(zt,!0);a(zt),a(ct);var xt=s(ct,2),Ht=s(r(xt),2),Fe=r(Ht);a(Ht),a(xt);var Vt=s(xt,2);{var Ce=l=>{var m=la(),c=s(r(m),2),x=r(c),w=r(x,!0);a(x),a(c),a(m),b(h=>{gt(x,"href",h),n(w,(t(e),i(()=>t(e).template_name)))},[()=>(g($),t(e),i(()=>$(`/templates/${t(e).template_id}`)))]),u(l,m)};f(Vt,l=>{t(e),i(()=>t(e).template_name)&&l(Ce)})}var Wt=s(Vt,2);{var Le=l=>{var m=na(),c=s(r(m),2),x=r(c,!0);a(c),a(m),b(()=>n(x,(t(e),i(()=>t(e)["github-runner-group"])))),u(l,m)};f(Wt,l=>{t(e),i(()=>t(e)["github-runner-group"])&&l(Le)})}var Oe=s(Wt,2);{var Ge=l=>{var m=ma(),c=s(r(m),2),x=r(c);ta(x,5,()=>(t(e),i(()=>t(e).tags)),ea,(w,h)=>{var ut=va(),qe=r(ut,!0);a(ut),b(()=>n(qe,(t(h),i(()=>typeof t(h)=="string"?t(h):t(h).name)))),u(w,ut)}),a(x),a(c),a(m),u(l,m)};f(Oe,l=>{t(e),i(()=>t(e).tags&&t(e).tags.length>0)&&l(Ge)})}a(Ot),a(Lt),a(Ct),a(Q);var Kt=s(Q,2);{var Je=l=>{var m=ca(),c=r(m),x=s(r(c),2),w=r(x,!0);a(x),a(c),a(m),b(h=>n(w,h),[()=>(t(e),i(()=>ve(t(e).extra_specs)))]),u(l,m)};f(Kt,l=>{t(e),i(()=>t(e).extra_specs)&&l(Je)})}var je=s(Kt,2);{let l=E(()=>(t(e),i(()=>t(e).instances||[])));da(je,{get instances(){return t(l)},entityType:"pool",onDeleteInstance:ne})}b((l,m,c,x,w)=>{n(we,(t(e),i(()=>t(e).id))),n(Ie,(t(e),i(()=>t(e).provider_name))),n(Pe,(t(e),i(()=>t(e).image))),n($e,(t(e),i(()=>t(e).flavor))),aa(rt,1,`inline-flex px-2 py-1 text-xs font-medium rounded-full ${t(e),i(()=>t(e).enabled?"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200":"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200")??""}`),n(De,(t(e),i(()=>t(e).enabled?"Enabled":"Disabled"))),n(Me,l),gt(it,"href",m),n(Ee,c),n(Te,x),n(Ae,w),n(Ue,(t(e),i(()=>t(e).max_runners))),n(Se,(t(e),i(()=>t(e).min_idle_runners))),n(Be,`${t(e),i(()=>t(e).runner_bootstrap_timeout)??""} minutes`),n(Ne,(t(e),i(()=>t(e).priority))),n(Re,(t(e),i(()=>t(e).runner_prefix||"garm"))),n(Fe,`${t(e),i(()=>t(e).os_type)??""} / ${t(e),i(()=>t(e).os_arch)??""}`)},[()=>(g(L),t(e),i(()=>L(t(e)))),()=>(g(ee),t(e),i(()=>ee(t(e)))),()=>(g(D),t(e),i(()=>D(t(e)))),()=>(g(O),t(e),i(()=>O(t(e).created_at||""))),()=>(g(O),t(e),i(()=>O(t(e).updated_at||"")))]),u(K,wt)};f(R,K=>{t(e)&&K(W)},!0)}u(I,P)};f(y,I=>{t(A)?I(V):I(ke,!1)},!0)}u(d,o)};f(ge,d=>{t(j)?d(fe):d(pe,!1)})}a(q);var bt=s(q,2);{var _e=d=>{ra(d,{get pool(){return t(e)},$$events:{close:()=>v(U,!1),submit:o=>ie(o.detail)}})};f(bt,d=>{t(U)&&t(e)&&d(_e)})}var kt=s(bt,2);{var ye=d=>{{let o=E(()=>(t(e),g(D),i(()=>`Pool ${t(e).id} (${D(t(e))})`)));Zt(d,{title:"Delete Pool",message:"Are you sure you want to delete this pool? This action cannot be undone and will remove all associated runners.",get itemName(){return t(o)},$$events:{close:()=>v(S,!1),confirm:oe}})}};f(kt,d=>{t(S)&&t(e)&&d(ye)})}var he=s(kt,2);{var be=d=>{Zt(d,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return t(p),i(()=>t(p).name)},$$events:{close:()=>{v(B,!1),v(p,null)},confirm:le}})};f(he,d=>{t(B)&&t(p)&&d(be)})}b(d=>{gt(xe,"href",d),n(ue,(t(e),i(()=>t(e)?t(e).id:"Loading...")))},[()=>(g($),i(()=>$("/pools")))]),u(re,ft),Ye()}export{Aa as component}; diff --git a/webapp/assets/_app/immutable/nodes/17.0oceDyoA.js b/webapp/assets/_app/immutable/nodes/17.0oceDyoA.js deleted file mode 100644 index 446eea77..00000000 --- a/webapp/assets/_app/immutable/nodes/17.0oceDyoA.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as Me}from"../chunks/TJn6xDN9.js";import{p as Te,E as Ne,o as De,l as w,k as r,m as a,g as e,w as T,h as Se,f as S,s as l,d as c,r as u,b as D,t as Q,e as fe,y as $e,u as j,z as Re,i as ye,c as Ae,j as ze,a as Be,$ as Oe,v as Ce}from"../chunks/DniTuB_0.js";import{a as Fe,i as V,s as Ie}from"../chunks/DbNhg6mG.js";import{r as X,b as Pe,g as oe}from"../chunks/DD3srElq.js";import{e as He,i as Je}from"../chunks/Ck5PkeSc.js";import{b as ve,a as Ee}from"../chunks/CCQwxxp9.js";import{p as Ve}from"../chunks/D4Caz1gY.js";import{M as Ye}from"../chunks/PC4wJWhj.js";import{e as ae}from"../chunks/BZiHL9L3.js";import{F as Ke}from"../chunks/DNeHGP6d.js";import{e as We,a as he}from"../chunks/C-ow2qSP.js";import{U as Qe}from"../chunks/C0wSEYM-.js";import{D as Xe}from"../chunks/B6XSaEl0.js";import{P as Ze}from"../chunks/BlYHwhWl.js";import{t as J}from"../chunks/CBJzOE8U.js";import{k as et,g as tt,c as rt,m as ot,p as at}from"../chunks/LMA6-4d1.js";import{D as st,G as nt,A as it}from"../chunks/QtGwBUod.js";import{E as lt}from"../chunks/D3pbRQAB.js";import{E as dt}from"../chunks/hsRG7ppz.js";import{S as ct}from"../chunks/Dn_Ue57e.js";import"../chunks/BSR16q_V.js";var ut=S('

'),pt=S('

Loading...

'),mt=S(""),gt=S(''),bt=S('

Webhook secret will be automatically generated

'),ft=S('
'),yt=S('

Create Repository

');function vt(se,ne){Te(ne,!1);const[ie,le]=Ie(),p=()=>Fe(We,"$eagerCache",ie),R=a(),k=a(),G=a(),x=a(),C=Ne();let y=a(!1),g=a(""),b=a("github"),o=a({name:"",owner:"",credentials_name:"",webhook_secret:"",pool_balancer_type:"roundrobin"}),A=a(!0),d=a(!0);async function f(){if(!p().loaded.credentials&&!p().loading.credentials)try{await he.getCredentials()}catch(i){r(g,ae(i))}}function _(i){r(b,i.detail),T(o,e(o).credentials_name="")}function P(){if(e(o).credentials_name){const i=e(R).find(F=>F.name===e(o).credentials_name);i&&i.forge_type&&r(b,i.forge_type)}}function E(){const i=new Uint8Array(32);return crypto.getRandomValues(i),Array.from(i,F=>F.toString(16).padStart(2,"0")).join("")}De(()=>{f()});async function de(){if(!e(o).name?.trim()){r(g,"Repository name is required");return}if(!e(o).owner?.trim()){r(g,"Repository owner is required");return}if(!e(o).credentials_name){r(g,"Please select credentials");return}try{r(y,!0),r(g,"");const i={...e(o),install_webhook:e(A),auto_generate_secret:e(d)};C("submit",i)}catch(i){r(g,ae(i)),r(y,!1)}}w(()=>p(),()=>{r(R,p().credentials)}),w(()=>p(),()=>{r(k,p().loading.credentials)}),w(()=>(e(R),e(b)),()=>{r(G,e(R).filter(i=>e(b)?i.forge_type===e(b):!0))}),w(()=>e(d),()=>{e(d)?T(o,e(o).webhook_secret=E()):e(d)||T(o,e(o).webhook_secret="")}),w(()=>(e(o),e(d)),()=>{r(x,e(o).name?.trim()!==""&&e(o).owner?.trim()!==""&&e(o).credentials_name!==""&&(e(d)||e(o).webhook_secret?.trim()!==""))}),Se(),Me(),Ye(se,{$$events:{close:()=>C("close")},children:(i,F)=>{var M=yt(),Z=l(c(M),2);{var ce=v=>{var h=ut(),I=c(h),W=c(I,!0);u(I),u(h),Q(()=>fe(W,e(g))),D(v,h)};V(Z,v=>{e(g)&&v(ce)})}var ue=l(Z,2);{var pe=v=>{var h=pt();D(v,h)},me=v=>{var h=ft(),I=c(h);Ke(I,{get selectedForgeType(){return e(b)},set selectedForgeType(n){r(b,n)},$$events:{select:_},$$legacy:!0});var W=l(I,2),ee=l(c(W),2);X(ee),u(W);var L=l(W,2),N=l(c(L),2);X(N),u(L);var z=l(L,2),B=l(c(z),2);Q(()=>{e(o),$e(()=>{e(G)})});var O=c(B);O.value=O.__value="";var ge=l(O);He(ge,1,()=>e(G),Je,(n,m)=>{var q=mt(),Le=c(q);u(q);var xe={};Q(()=>{fe(Le,`${e(m),j(()=>e(m).name)??""} (${e(m),j(()=>e(m).endpoint?.name)??""})`),xe!==(xe=(e(m),j(()=>e(m).name)))&&(q.value=(q.__value=(e(m),j(()=>e(m).name)))??"")}),D(n,q)}),u(B),u(z);var H=l(z,2),Y=l(c(H),2);Q(()=>{e(o),$e(()=>{})});var K=c(Y);K.value=K.__value="roundrobin";var te=l(K);te.value=te.__value="pack",u(Y),u(H);var t=l(H,2),s=c(t),re=c(s);X(re),Re(2),u(s);var $=l(s,2),U=c($),_e=c(U);X(_e),Re(2),u(U);var Ue=l(U,2);{var qe=n=>{var m=gt();X(m),ve(m,()=>e(o).webhook_secret,q=>T(o,e(o).webhook_secret=q)),D(n,m)},je=n=>{var m=bt();D(n,m)};V(Ue,n=>{e(d)?n(je,!1):n(qe)})}u($),u(t);var we=l(t,2),ke=c(we),be=l(ke,2),Ge=c(be,!0);u(be),u(we),u(h),Q(()=>{be.disabled=e(y)||e(k)||!e(x),fe(Ge,e(y)?"Creating...":"Create Repository")}),ve(ee,()=>e(o).name,n=>T(o,e(o).name=n)),ve(N,()=>e(o).owner,n=>T(o,e(o).owner=n)),Pe(B,()=>e(o).credentials_name,n=>T(o,e(o).credentials_name=n)),ye("change",B,P),Pe(Y,()=>e(o).pool_balancer_type,n=>T(o,e(o).pool_balancer_type=n)),Ee(re,()=>e(A),n=>r(A,n)),Ee(_e,()=>e(d),n=>r(d,n)),ye("click",ke,()=>C("close")),ye("submit",h,Ve(de)),D(v,h)};V(ue,v=>{e(y)?v(pe):v(me,!1)})}u(M),D(i,M)},$$slots:{default:!0}}),Ae(),le()}var ht=S('
',1);function Nt(se,ne){Te(ne,!1);const[ie,le]=Ie(),p=()=>Fe(We,"$eagerCache",ie),R=a(),k=a(),G=a();let x=a([]),C=a(!0),y=a(""),g=a(""),b=a(!1),o=a(!1),A=a(!1),d=a(null),f=a(null),_=a(1),P=a(25),E=a(1);De(async()=>{try{r(C,!0);const t=await he.getRepositories();t&&Array.isArray(t)&&r(x,t)}catch(t){console.error("Failed to load repositories:",t),r(y,t instanceof Error?t.message:"Failed to load repositories")}finally{r(C,!1)}});async function de(){try{await he.retryResource("repositories")}catch(t){console.error("Retry failed:",t)}}function i(t){r(d,t),r(o,!0)}function F(t){r(f,t),r(A,!0)}function M(){r(b,!1),r(o,!1),r(A,!1),r(d,null),r(f,null),r(y,"")}async function Z(t){try{r(y,"");const s=t.detail,re={name:s.name,owner:s.owner,credentials_name:s.credentials_name,webhook_secret:s.webhook_secret},$=await oe.createRepository(re);if(s.install_webhook&&$.id)try{await oe.installRepoWebhook($.id),J.success("Webhook Installed",`Webhook for repository ${$.owner}/${$.name} has been installed successfully.`)}catch(U){console.warn("Repository created but webhook installation failed:",U),J.error("Webhook Installation Failed",U instanceof Error?U.message:"Failed to install webhook. You can try installing it manually from the repository details page.")}r(b,!1),J.success("Repository Created",`Repository ${$.owner}/${$.name} has been created successfully.`)}catch(s){throw r(y,ae(s)),s}}async function ce(t){if(e(d))try{await oe.updateRepository(e(d).id,t),J.success("Repository Updated",`Repository ${e(d).owner}/${e(d).name} has been updated successfully.`),M()}catch(s){throw s}}async function ue(){if(e(f))try{r(y,""),await oe.deleteRepository(e(f).id),J.success("Repository Deleted",`Repository ${e(f).owner}/${e(f).name} has been deleted successfully.`)}catch(t){const s=ae(t);J.error("Delete Failed",s)}finally{M()}}const pe=[{key:"repository",title:"Repository",cellComponent:lt,cellProps:{entityType:"repository",showOwner:!0}},{key:"endpoint",title:"Endpoint",cellComponent:dt},{key:"credentials",title:"Credentials",cellComponent:nt,cellProps:{field:"credentials_name"}},{key:"status",title:"Status",cellComponent:ct,cellProps:{statusType:"entity"}},{key:"actions",title:"Actions",align:"right",cellComponent:it}],me={entityType:"repository",primaryText:{field:"name",isClickable:!0,href:"/repositories/{id}",showOwner:!0},customInfo:[{icon:t=>tt(t?.endpoint?.endpoint_type||"unknown"),text:t=>t?.endpoint?.name||"Unknown"}],badges:[{type:"custom",value:t=>et(t)}],actions:[{type:"edit",handler:t=>i(t)},{type:"delete",handler:t=>F(t)}]};function v(t){r(g,t.detail.term),r(_,1)}function h(t){r(_,t.detail.page)}function I(t){const s=rt(t.detail.perPage);r(P,s.newPerPage),r(_,s.newCurrentPage)}function W(t){i(t.detail.item)}function ee(t){F(t.detail.item)}w(()=>(e(x),p()),()=>{(!e(x).length||p().loaded.repositories)&&r(x,p().repositories)}),w(()=>p(),()=>{r(C,p().loading.repositories)}),w(()=>p(),()=>{r(R,p().errorMessages.repositories)}),w(()=>(e(x),e(g)),()=>{r(k,ot(e(x),e(g)))}),w(()=>(e(E),e(k),e(P),e(_)),()=>{r(E,Math.ceil(e(k).length/e(P))),e(_)>e(E)&&e(E)>0&&r(_,e(E))}),w(()=>(e(k),e(_),e(P)),()=>{r(G,at(e(k),e(_),e(P)))}),Se(),Me();var L=ht();ze(t=>{Oe.title="Repositories - GARM"});var N=Be(L),z=c(N);Ze(z,{title:"Repositories",description:"Manage your GitHub repositories and their runners",actionLabel:"Add Repository",$$events:{action:()=>{r(b,!0)}}});var B=l(z,2);{let t=Ce(()=>e(R)||e(y)),s=Ce(()=>!!e(R));st(B,{get columns(){return pe},get data(){return e(G)},get loading(){return e(C)},get error(){return e(t)},get searchTerm(){return e(g)},searchPlaceholder:"Search repositories by name or owner...",get currentPage(){return e(_)},get perPage(){return e(P)},get totalPages(){return e(E)},get totalItems(){return e(k),j(()=>e(k).length)},itemName:"repositories",emptyIconType:"building",get showRetry(){return e(s)},get mobileCardConfig(){return me},$$events:{search:v,pageChange:h,perPageChange:I,retry:de,edit:W,delete:ee}})}u(N);var O=l(N,2);{var ge=t=>{vt(t,{$$events:{close:()=>r(b,!1),submit:Z}})};V(O,t=>{e(b)&&t(ge)})}var H=l(O,2);{var Y=t=>{Qe(t,{get entity(){return e(d)},entityType:"repository",$$events:{close:M,submit:s=>ce(s.detail)}})};V(H,t=>{e(o)&&e(d)&&t(Y)})}var K=l(H,2);{var te=t=>{Xe(t,{title:"Delete Repository",message:"Are you sure you want to delete this repository? This action cannot be undone and will remove all associated pools and runners.",get itemName(){return`${e(f),j(()=>e(f).owner)??""}/${e(f),j(()=>e(f).name)??""}`},$$events:{close:M,confirm:ue}})};V(K,t=>{e(A)&&e(f)&&t(te)})}D(se,L),Ae(),le()}export{Nt as component}; diff --git a/webapp/assets/_app/immutable/nodes/17.CR3NmUj6.js b/webapp/assets/_app/immutable/nodes/17.CR3NmUj6.js new file mode 100644 index 00000000..2719d511 --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/17.CR3NmUj6.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as Se}from"../chunks/De-I_rkH.js";import{p as Ae,E as Oe,o as Fe,l as w,k as r,m as a,g as e,w as $,h as Ie,f as S,s as i,d,r as c,b as D,t as X,e as ye,y as Ee,u as j,z as ve,i as he,c as We,j as He,a as Je,$ as Ve,v as Te}from"../chunks/BIqNNOMq.js";import{a as Ue,i as Y,s as qe}from"../chunks/CfI2BFUj.js";import{r as J,b as De,g as oe}from"../chunks/CQh-7xkh.js";import{e as Ye,i as Ke}from"../chunks/D8ZtP9JD.js";import{b as _e,a as we}from"../chunks/Gs5uNKRr.js";import{p as Qe}from"../chunks/CdEA5IGF.js";import{M as Xe}from"../chunks/BFX8vI-4.js";import{e as ae}from"../chunks/BZiHL9L3.js";import{F as Ze}from"../chunks/D2YBjDB9.js";import{e as je,a as xe}from"../chunks/B1uxuBYn.js";import{U as et}from"../chunks/CpPzJ1l1.js";import{D as tt}from"../chunks/Db7N5hjl.js";import{P as rt}from"../chunks/Cq4AwQWc.js";import{t as V}from"../chunks/DgRPqjXE.js";import{k as ot,g as at,c as st,m as nt,p as it}from"../chunks/B7If18kh.js";import{D as lt,G as dt,A as ct}from"../chunks/BjNB1vhO.js";import{E as ut}from"../chunks/C6HeU_02.js";import{E as pt}from"../chunks/DFF0ZVx4.js";import{S as mt}from"../chunks/DCu5KXBe.js";import"../chunks/CYb6_lpF.js";var gt=S('

'),bt=S('

Loading...

'),ft=S(""),yt=S(''),vt=S('

Webhook secret will be automatically generated

'),ht=S('
'),_t=S('

Create Repository

');function wt(se,ne){Ae(ne,!1);const[ie,le]=qe(),p=()=>Ue(je,"$eagerCache",ie),C=a(),x=a(),z=a(),R=a(),P=Oe();let y=a(!1),g=a(""),b=a("github"),o=a({name:"",owner:"",credentials_name:"",webhook_secret:"",pool_balancer_type:"roundrobin",agent_mode:!1}),A=a(!0),u=a(!0);async function f(){if(!p().loaded.credentials&&!p().loading.credentials)try{await xe.getCredentials()}catch(l){r(g,ae(l))}}function _(l){r(b,l.detail),$(o,e(o).credentials_name="")}function M(){if(e(o).credentials_name){const l=e(C).find(F=>F.name===e(o).credentials_name);l&&l.forge_type&&r(b,l.forge_type)}}function E(){const l=new Uint8Array(32);return crypto.getRandomValues(l),Array.from(l,F=>F.toString(16).padStart(2,"0")).join("")}Fe(()=>{f()});async function de(){if(!e(o).name?.trim()){r(g,"Repository name is required");return}if(!e(o).owner?.trim()){r(g,"Repository owner is required");return}if(!e(o).credentials_name){r(g,"Please select credentials");return}try{r(y,!0),r(g,"");const l={...e(o),install_webhook:e(A),auto_generate_secret:e(u)};P("submit",l)}catch(l){r(g,ae(l)),r(y,!1)}}w(()=>p(),()=>{r(C,p().credentials)}),w(()=>p(),()=>{r(x,p().loading.credentials)}),w(()=>(e(C),e(b)),()=>{r(z,e(C).filter(l=>e(b)?l.forge_type===e(b):!0))}),w(()=>e(u),()=>{e(u)?$(o,e(o).webhook_secret=E()):e(u)||$(o,e(o).webhook_secret="")}),w(()=>(e(o),e(u)),()=>{r(R,e(o).name?.trim()!==""&&e(o).owner?.trim()!==""&&e(o).credentials_name!==""&&(e(u)||e(o).webhook_secret?.trim()!==""))}),Ie(),Se(),Xe(se,{$$events:{close:()=>P("close")},children:(l,F)=>{var T=_t(),Z=i(d(T),2);{var ce=v=>{var h=gt(),I=d(h),W=d(I,!0);c(I),c(h),X(()=>ye(W,e(g))),D(v,h)};Y(Z,v=>{e(g)&&v(ce)})}var ue=i(Z,2);{var pe=v=>{var h=bt();D(v,h)},me=v=>{var h=ht(),I=d(h);Ze(I,{get selectedForgeType(){return e(b)},set selectedForgeType(s){r(b,s)},$$events:{select:_},$$legacy:!0});var W=i(I,2),ee=i(d(W),2);J(ee),c(W);var G=i(W,2),B=i(d(G),2);J(B),c(G);var L=i(G,2),N=i(d(L),2);X(()=>{e(o),Ee(()=>{e(z)})});var O=d(N);O.value=O.__value="";var ge=i(O);Ye(ge,1,()=>e(z),Ke,(s,m)=>{var q=ft(),Ne=d(q);c(q);var Me={};X(()=>{ye(Ne,`${e(m),j(()=>e(m).name)??""} (${e(m),j(()=>e(m).endpoint?.name)??""})`),Me!==(Me=(e(m),j(()=>e(m).name)))&&(q.value=(q.__value=(e(m),j(()=>e(m).name)))??"")}),D(s,q)}),c(N),c(L);var H=i(L,2),K=i(d(H),2);X(()=>{e(o),Ee(()=>{})});var Q=d(K);Q.value=Q.__value="roundrobin";var te=i(Q);te.value=te.__value="pack",c(K),c(H);var t=i(H,2),n=d(t),re=d(n);J(re),ve(4),c(n),c(t);var k=i(t,2),U=d(k),ke=d(U);J(ke),ve(2),c(U);var Re=i(U,2),be=d(Re),$e=d(be);J($e),ve(2),c(be);var ze=i(be,2);{var Ge=s=>{var m=yt();J(m),_e(m,()=>e(o).webhook_secret,q=>$(o,e(o).webhook_secret=q)),D(s,m)},Be=s=>{var m=vt();D(s,m)};Y(ze,s=>{e(u)?s(Be,!1):s(Ge)})}c(Re),c(k);var Ce=i(k,2),Pe=d(Ce),fe=i(Pe,2),Le=d(fe,!0);c(fe),c(Ce),c(h),X(()=>{fe.disabled=e(y)||e(x)||!e(R),ye(Le,e(y)?"Creating...":"Create Repository")}),_e(ee,()=>e(o).name,s=>$(o,e(o).name=s)),_e(B,()=>e(o).owner,s=>$(o,e(o).owner=s)),De(N,()=>e(o).credentials_name,s=>$(o,e(o).credentials_name=s)),he("change",N,M),De(K,()=>e(o).pool_balancer_type,s=>$(o,e(o).pool_balancer_type=s)),we(re,()=>e(o).agent_mode,s=>$(o,e(o).agent_mode=s)),we(ke,()=>e(A),s=>r(A,s)),we($e,()=>e(u),s=>r(u,s)),he("click",Pe,()=>P("close")),he("submit",h,Qe(de)),D(v,h)};Y(ue,v=>{e(y)?v(pe):v(me,!1)})}c(T),D(l,T)},$$slots:{default:!0}}),We(),le()}var xt=S('
',1);function Ot(se,ne){Ae(ne,!1);const[ie,le]=qe(),p=()=>Ue(je,"$eagerCache",ie),C=a(),x=a(),z=a();let R=a([]),P=a(!0),y=a(""),g=a(""),b=a(!1),o=a(!1),A=a(!1),u=a(null),f=a(null),_=a(1),M=a(25),E=a(1);Fe(async()=>{try{r(P,!0);const t=await xe.getRepositories();t&&Array.isArray(t)&&r(R,t)}catch(t){console.error("Failed to load repositories:",t),r(y,t instanceof Error?t.message:"Failed to load repositories")}finally{r(P,!1)}});async function de(){try{await xe.retryResource("repositories")}catch(t){console.error("Retry failed:",t)}}function l(t){r(u,t),r(o,!0)}function F(t){r(f,t),r(A,!0)}function T(){r(b,!1),r(o,!1),r(A,!1),r(u,null),r(f,null),r(y,"")}async function Z(t){try{r(y,"");const n=t.detail,re={name:n.name,owner:n.owner,credentials_name:n.credentials_name,webhook_secret:n.webhook_secret},k=await oe.createRepository(re);if(n.install_webhook&&k.id)try{await oe.installRepoWebhook(k.id),V.success("Webhook Installed",`Webhook for repository ${k.owner}/${k.name} has been installed successfully.`)}catch(U){console.warn("Repository created but webhook installation failed:",U),V.error("Webhook Installation Failed",U instanceof Error?U.message:"Failed to install webhook. You can try installing it manually from the repository details page.")}r(b,!1),V.success("Repository Created",`Repository ${k.owner}/${k.name} has been created successfully.`)}catch(n){throw r(y,ae(n)),n}}async function ce(t){if(e(u))try{await oe.updateRepository(e(u).id,t),V.success("Repository Updated",`Repository ${e(u).owner}/${e(u).name} has been updated successfully.`),T()}catch(n){throw n}}async function ue(){if(e(f))try{r(y,""),await oe.deleteRepository(e(f).id),V.success("Repository Deleted",`Repository ${e(f).owner}/${e(f).name} has been deleted successfully.`)}catch(t){const n=ae(t);V.error("Delete Failed",n)}finally{T()}}const pe=[{key:"repository",title:"Repository",cellComponent:ut,cellProps:{entityType:"repository",showOwner:!0}},{key:"endpoint",title:"Endpoint",cellComponent:pt},{key:"credentials",title:"Credentials",cellComponent:dt,cellProps:{field:"credentials_name"}},{key:"status",title:"Status",cellComponent:mt,cellProps:{statusType:"entity"}},{key:"actions",title:"Actions",align:"right",cellComponent:ct}],me={entityType:"repository",primaryText:{field:"name",isClickable:!0,href:"/repositories/{id}",showOwner:!0},customInfo:[{icon:t=>at(t?.endpoint?.endpoint_type||"unknown"),text:t=>t?.endpoint?.name||"Unknown"}],badges:[{type:"custom",value:t=>ot(t)}],actions:[{type:"edit",handler:t=>l(t)},{type:"delete",handler:t=>F(t)}]};function v(t){r(g,t.detail.term),r(_,1)}function h(t){r(_,t.detail.page)}function I(t){const n=st(t.detail.perPage);r(M,n.newPerPage),r(_,n.newCurrentPage)}function W(t){l(t.detail.item)}function ee(t){F(t.detail.item)}w(()=>(e(R),p()),()=>{(!e(R).length||p().loaded.repositories)&&r(R,p().repositories)}),w(()=>p(),()=>{r(P,p().loading.repositories)}),w(()=>p(),()=>{r(C,p().errorMessages.repositories)}),w(()=>(e(R),e(g)),()=>{r(x,nt(e(R),e(g)))}),w(()=>(e(E),e(x),e(M),e(_)),()=>{r(E,Math.ceil(e(x).length/e(M))),e(_)>e(E)&&e(E)>0&&r(_,e(E))}),w(()=>(e(x),e(_),e(M)),()=>{r(z,it(e(x),e(_),e(M)))}),Ie(),Se();var G=xt();He(t=>{Ve.title="Repositories - GARM"});var B=Je(G),L=d(B);rt(L,{title:"Repositories",description:"Manage your GitHub repositories and their runners",actionLabel:"Add Repository",$$events:{action:()=>{r(b,!0)}}});var N=i(L,2);{let t=Te(()=>e(C)||e(y)),n=Te(()=>!!e(C));lt(N,{get columns(){return pe},get data(){return e(z)},get loading(){return e(P)},get error(){return e(t)},get searchTerm(){return e(g)},searchPlaceholder:"Search repositories by name or owner...",get currentPage(){return e(_)},get perPage(){return e(M)},get totalPages(){return e(E)},get totalItems(){return e(x),j(()=>e(x).length)},itemName:"repositories",emptyIconType:"building",get showRetry(){return e(n)},get mobileCardConfig(){return me},$$events:{search:v,pageChange:h,perPageChange:I,retry:de,edit:W,delete:ee}})}c(B);var O=i(B,2);{var ge=t=>{wt(t,{$$events:{close:()=>r(b,!1),submit:Z}})};Y(O,t=>{e(b)&&t(ge)})}var H=i(O,2);{var K=t=>{et(t,{get entity(){return e(u)},entityType:"repository",$$events:{close:T,submit:n=>ce(n.detail)}})};Y(H,t=>{e(o)&&e(u)&&t(K)})}var Q=i(H,2);{var te=t=>{tt(t,{title:"Delete Repository",message:"Are you sure you want to delete this repository? This action cannot be undone and will remove all associated pools and runners.",get itemName(){return`${e(f),j(()=>e(f).owner)??""}/${e(f),j(()=>e(f).name)??""}`},$$events:{close:T,confirm:ue}})};Y(Q,t=>{e(A)&&e(f)&&t(te)})}D(se,G),We(),le()}export{Ot as component}; diff --git a/webapp/assets/_app/immutable/nodes/18.QrKqJrPa.js b/webapp/assets/_app/immutable/nodes/18.FaPm3Qgi.js similarity index 88% rename from webapp/assets/_app/immutable/nodes/18.QrKqJrPa.js rename to webapp/assets/_app/immutable/nodes/18.FaPm3Qgi.js index 2e244fef..e9faeb57 100644 --- a/webapp/assets/_app/immutable/nodes/18.QrKqJrPa.js +++ b/webapp/assets/_app/immutable/nodes/18.FaPm3Qgi.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as ze}from"../chunks/TJn6xDN9.js";import{p as He,o as je,B as Ge,l as Oe,h as Ve,f as B,j as Je,a as C,t as j,b as w,c as Ke,u as n,q as de,e as ce,g as e,m as l,d as u,s as d,k as r,$ as Qe,r as f,w as Xe,A as pe,v as m}from"../chunks/DniTuB_0.js";import{i as g,s as Ye,a as Ze}from"../chunks/DbNhg6mG.js";import{d as A,c as et,g as h}from"../chunks/DD3srElq.js";import{p as tt}from"../chunks/CzKtu-7o.js";import{g as ue}from"../chunks/DeKGyprh.js";import{U as ot}from"../chunks/C0wSEYM-.js";import{D as fe}from"../chunks/B6XSaEl0.js";import{E as at,P as rt,a as st}from"../chunks/B9-0TtNc.js";import{D as nt}from"../chunks/CCF1V3nS.js";import{g as me}from"../chunks/LMA6-4d1.js";import{e as S}from"../chunks/BZiHL9L3.js";import{I as it}from"../chunks/B3nevMeU.js";import{W as lt}from"../chunks/CplfXZxg.js";import{C as dt}from"../chunks/A5UGwKpF.js";import{w as G}from"../chunks/DmHFwzWx.js";import{t as x}from"../chunks/CBJzOE8U.js";var ct=B('

Loading repository...

'),pt=B('

'),ut=B(" ",1),ft=B(' ',1);function Ct(ye,ve){He(ve,!1);const[ge,he]=Ye(),O=()=>Ze(tt,"$page",ge),I=l();let t=l(null),c=l([]),y=l([]),F=l(!0),E=l(""),D=l(!1),P=l(!1),R=l(!1),T=l(!1),p=l(null),M=null,_=l();async function V(){if(e(I))try{r(F,!0),r(E,"");const[o,a,s]=await Promise.all([h.getRepository(e(I)),h.listRepositoryPools(e(I)).catch(()=>[]),h.listRepositoryInstances(e(I)).catch(()=>[])]);r(t,o),r(c,a),r(y,s)}catch(o){r(E,S(o))}finally{r(F,!1)}}function _e(o,a){const{events:s}=o;return{...a,events:s}}async function $e(o){if(e(t))try{await h.updateRepository(e(t).id,o),await V(),x.success("Repository Updated",`Repository ${e(t).owner}/${e(t).name} has been updated successfully.`),r(D,!1)}catch(a){throw a}}async function be(){if(e(t)){try{await h.deleteRepository(e(t).id),ue(A("/repositories"))}catch(o){const a=S(o);x.error("Delete Failed",a)}r(P,!1)}}async function we(){if(e(p))try{await h.deleteInstance(e(p).name),x.success("Instance Deleted",`Instance ${e(p).name} has been deleted successfully.`),r(R,!1),r(p,null)}catch(o){const a=S(o);x.error("Delete Failed",a),r(R,!1),r(p,null)}}function xe(o){r(p,o),r(R,!0)}function Ie(){r(T,!0)}async function Re(o){try{if(!e(t))return;await h.createRepositoryPool(e(t).id,o.detail),x.success("Pool Created",`Pool has been created successfully for repository ${e(t).owner}/${e(t).name}.`),r(T,!1)}catch(a){const s=S(a);x.error("Pool Creation Failed",s)}}function J(){e(_)&&Xe(_,e(_).scrollTop=e(_).scrollHeight)}function Ee(o){if(o.operation==="update"){const a=o.payload;if(e(t)&&a.id===e(t).id){const s=e(t).events?.length||0,i=a.events?.length||0;r(t,_e(e(t),a)),i>s&&setTimeout(()=>{J()},100)}}else if(o.operation==="delete"){const a=o.payload.id||o.payload;e(t)&&e(t).id===a&&ue(A("/repositories"))}}function De(o){if(!e(t))return;const a=o.payload;if(a.repo_id===e(t).id){if(o.operation==="create")r(c,[...e(c),a]);else if(o.operation==="update")r(c,e(c).map(s=>s.id===a.id?a:s));else if(o.operation==="delete"){const s=a.id||a;r(c,e(c).filter(i=>i.id!==s))}}}function Pe(o){if(!e(t)||!e(c))return;const a=o.payload;if(e(c).some(i=>i.id===a.pool_id)){if(o.operation==="create")r(y,[...e(y),a]);else if(o.operation==="update")r(y,e(y).map(i=>i.id===a.id?a:i));else if(o.operation==="delete"){const i=a.id||a;r(y,e(y).filter(W=>W.id!==i))}}}je(()=>{V().then(()=>{e(t)?.events?.length&&setTimeout(()=>{J()},100)});const o=G.subscribeToEntity("repository",["update","delete"],Ee),a=G.subscribeToEntity("pool",["create","update","delete"],De),s=G.subscribeToEntity("instance",["create","update","delete"],Pe);M=()=>{o(),a(),s()}}),Ge(()=>{M&&(M(),M=null)}),Oe(()=>O(),()=>{r(I,O().params.id)}),Ve(),ze();var K=ft();Je(o=>{j(()=>Qe.title=`${e(t),n(()=>e(t)?`${e(t).name} - Repository Details`:"Repository Details")??""} - GARM`)});var U=C(K),L=u(U),Q=u(L),N=u(Q),Te=u(N);f(N);var X=d(N,2),Y=u(X),Z=d(u(Y),2),Me=u(Z,!0);f(Z),f(Y),f(X),f(Q),f(L);var ke=d(L,2);{var Ce=o=>{var a=ct();w(o,a)},Ae=o=>{var a=pe(),s=C(a);{var i=$=>{var b=pt(),k=u(b),q=u(k,!0);f(k),f(b),j(()=>ce(q,e(E))),w($,b)},W=$=>{var b=pe(),k=C(b);{var q=z=>{var ae=ut(),re=C(ae);{let v=m(()=>(e(t),n(()=>e(t).name||"Repository"))),H=m(()=>(e(t),n(()=>e(t).owner))),We=m(()=>(e(t),n(()=>e(t).endpoint?.name))),qe=m(()=>(de(me),e(t),n(()=>me(e(t).endpoint?.endpoint_type||"unknown"))));nt(re,{get title(){return e(v)},get subtitle(){return`Owner: ${e(H)??""} • Endpoint: ${e(We)??""}`},get forgeIcon(){return e(qe)},onEdit:()=>r(D,!0),onDelete:()=>r(P,!0)})}var se=d(re,2);at(se,{get entity(){return e(t)},entityType:"repository"});var ne=d(se,2);{let v=m(()=>(e(t),n(()=>e(t).id||"")));lt(ne,{entityType:"repository",get entityId(){return e(v)},get entityName(){return`${e(t),n(()=>e(t).owner)??""}/${e(t),n(()=>e(t).name)??""}`}})}var ie=d(ne,2);{let v=m(()=>(e(t),n(()=>e(t).id||"")));rt(ie,{get pools(){return e(c)},entityType:"repository",get entityId(){return e(v)},get entityName(){return`${e(t),n(()=>e(t).owner)??""}/${e(t),n(()=>e(t).name)??""}`},$$events:{addPool:Ie}})}var le=d(ie,2);it(le,{get instances(){return e(y)},entityType:"repository",onDeleteInstance:xe});var Ne=d(le,2);{let v=m(()=>(e(t),n(()=>e(t)?.events)));st(Ne,{get events(){return e(v)},get eventsContainer(){return e(_)},set eventsContainer(H){r(_,H)},$$legacy:!0})}w(z,ae)};g(k,z=>{e(t)&&z(q)},!0)}w($,b)};g(s,$=>{e(E)?$(i):$(W,!1)},!0)}w(o,a)};g(ke,o=>{e(F)?o(Ce):o(Ae,!1)})}f(U);var ee=d(U,2);{var Se=o=>{ot(o,{get entity(){return e(t)},entityType:"repository",$$events:{close:()=>r(D,!1),submit:a=>$e(a.detail)}})};g(ee,o=>{e(D)&&e(t)&&o(Se)})}var te=d(ee,2);{var Be=o=>{{let a=m(()=>(e(t),n(()=>`${e(t).owner}/${e(t).name}`)));fe(o,{title:"Delete Repository",message:"Are you sure you want to delete this repository? This action cannot be undone and will remove all associated pools and instances.",get itemName(){return e(a)},$$events:{close:()=>r(P,!1),confirm:be}})}};g(te,o=>{e(P)&&e(t)&&o(Be)})}var oe=d(te,2);{var Fe=o=>{fe(o,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return e(p),n(()=>e(p).name)},$$events:{close:()=>{r(R,!1),r(p,null)},confirm:we}})};g(oe,o=>{e(R)&&e(p)&&o(Fe)})}var Ue=d(oe,2);{var Le=o=>{{let a=m(()=>(e(t),n(()=>e(t).id||"")));dt(o,{initialEntityType:"repository",get initialEntityId(){return e(a)},$$events:{close:()=>r(T,!1),submit:Re}})}};g(Ue,o=>{e(T)&&e(t)&&o(Le)})}j(o=>{et(Te,"href",o),ce(Me,(e(t),n(()=>e(t)?e(t).name:"Loading...")))},[()=>(de(A),n(()=>A("/repositories")))]),w(ye,K),Ke(),he()}export{Ct as component}; +import"../chunks/DsnmJJEf.js";import{i as ze}from"../chunks/De-I_rkH.js";import{p as He,o as je,B as Ge,l as Oe,h as Ve,f as B,j as Je,a as C,t as j,b as w,c as Ke,u as n,q as de,e as ce,g as e,m as l,d as u,s as d,k as r,$ as Qe,r as f,w as Xe,A as pe,v as m}from"../chunks/BIqNNOMq.js";import{i as g,s as Ye,a as Ze}from"../chunks/CfI2BFUj.js";import{d as A,c as et,g as h}from"../chunks/CQh-7xkh.js";import{p as tt}from"../chunks/BIfA0Pjo.js";import{g as ue}from"../chunks/BSYpqPvJ.js";import{U as ot}from"../chunks/CpPzJ1l1.js";import{D as fe}from"../chunks/Db7N5hjl.js";import{E as at,P as rt,a as st}from"../chunks/CjQpknJk.js";import{D as nt}from"../chunks/CIekn_9e.js";import{g as me}from"../chunks/B7If18kh.js";import{e as S}from"../chunks/BZiHL9L3.js";import{I as it}from"../chunks/DAaZIIvX.js";import{W as lt}from"../chunks/BOcC5fx5.js";import{C as dt}from"../chunks/DBZ2eikH.js";import{w as G}from"../chunks/C4VNo_Nu.js";import{t as x}from"../chunks/DgRPqjXE.js";var ct=B('

Loading repository...

'),pt=B('

'),ut=B(" ",1),ft=B(' ',1);function Ct(ye,ve){He(ve,!1);const[ge,he]=Ye(),O=()=>Ze(tt,"$page",ge),I=l();let t=l(null),c=l([]),y=l([]),F=l(!0),E=l(""),D=l(!1),P=l(!1),R=l(!1),T=l(!1),p=l(null),M=null,_=l();async function V(){if(e(I))try{r(F,!0),r(E,"");const[o,a,s]=await Promise.all([h.getRepository(e(I)),h.listRepositoryPools(e(I)).catch(()=>[]),h.listRepositoryInstances(e(I)).catch(()=>[])]);r(t,o),r(c,a),r(y,s)}catch(o){r(E,S(o))}finally{r(F,!1)}}function _e(o,a){const{events:s}=o;return{...a,events:s}}async function $e(o){if(e(t))try{await h.updateRepository(e(t).id,o),await V(),x.success("Repository Updated",`Repository ${e(t).owner}/${e(t).name} has been updated successfully.`),r(D,!1)}catch(a){throw a}}async function be(){if(e(t)){try{await h.deleteRepository(e(t).id),ue(A("/repositories"))}catch(o){const a=S(o);x.error("Delete Failed",a)}r(P,!1)}}async function we(){if(e(p))try{await h.deleteInstance(e(p).name),x.success("Instance Deleted",`Instance ${e(p).name} has been deleted successfully.`),r(R,!1),r(p,null)}catch(o){const a=S(o);x.error("Delete Failed",a),r(R,!1),r(p,null)}}function xe(o){r(p,o),r(R,!0)}function Ie(){r(T,!0)}async function Re(o){try{if(!e(t))return;await h.createRepositoryPool(e(t).id,o.detail),x.success("Pool Created",`Pool has been created successfully for repository ${e(t).owner}/${e(t).name}.`),r(T,!1)}catch(a){const s=S(a);x.error("Pool Creation Failed",s)}}function J(){e(_)&&Xe(_,e(_).scrollTop=e(_).scrollHeight)}function Ee(o){if(o.operation==="update"){const a=o.payload;if(e(t)&&a.id===e(t).id){const s=e(t).events?.length||0,i=a.events?.length||0;r(t,_e(e(t),a)),i>s&&setTimeout(()=>{J()},100)}}else if(o.operation==="delete"){const a=o.payload.id||o.payload;e(t)&&e(t).id===a&&ue(A("/repositories"))}}function De(o){if(!e(t))return;const a=o.payload;if(a.repo_id===e(t).id){if(o.operation==="create")r(c,[...e(c),a]);else if(o.operation==="update")r(c,e(c).map(s=>s.id===a.id?a:s));else if(o.operation==="delete"){const s=a.id||a;r(c,e(c).filter(i=>i.id!==s))}}}function Pe(o){if(!e(t)||!e(c))return;const a=o.payload;if(e(c).some(i=>i.id===a.pool_id)){if(o.operation==="create")r(y,[...e(y),a]);else if(o.operation==="update")r(y,e(y).map(i=>i.id===a.id?a:i));else if(o.operation==="delete"){const i=a.id||a;r(y,e(y).filter(W=>W.id!==i))}}}je(()=>{V().then(()=>{e(t)?.events?.length&&setTimeout(()=>{J()},100)});const o=G.subscribeToEntity("repository",["update","delete"],Ee),a=G.subscribeToEntity("pool",["create","update","delete"],De),s=G.subscribeToEntity("instance",["create","update","delete"],Pe);M=()=>{o(),a(),s()}}),Ge(()=>{M&&(M(),M=null)}),Oe(()=>O(),()=>{r(I,O().params.id)}),Ve(),ze();var K=ft();Je(o=>{j(()=>Qe.title=`${e(t),n(()=>e(t)?`${e(t).name} - Repository Details`:"Repository Details")??""} - GARM`)});var U=C(K),L=u(U),Q=u(L),N=u(Q),Te=u(N);f(N);var X=d(N,2),Y=u(X),Z=d(u(Y),2),Me=u(Z,!0);f(Z),f(Y),f(X),f(Q),f(L);var ke=d(L,2);{var Ce=o=>{var a=ct();w(o,a)},Ae=o=>{var a=pe(),s=C(a);{var i=$=>{var b=pt(),k=u(b),q=u(k,!0);f(k),f(b),j(()=>ce(q,e(E))),w($,b)},W=$=>{var b=pe(),k=C(b);{var q=z=>{var ae=ut(),re=C(ae);{let v=m(()=>(e(t),n(()=>e(t).name||"Repository"))),H=m(()=>(e(t),n(()=>e(t).owner))),We=m(()=>(e(t),n(()=>e(t).endpoint?.name))),qe=m(()=>(de(me),e(t),n(()=>me(e(t).endpoint?.endpoint_type||"unknown"))));nt(re,{get title(){return e(v)},get subtitle(){return`Owner: ${e(H)??""} • Endpoint: ${e(We)??""}`},get forgeIcon(){return e(qe)},onEdit:()=>r(D,!0),onDelete:()=>r(P,!0)})}var se=d(re,2);at(se,{get entity(){return e(t)},entityType:"repository"});var ne=d(se,2);{let v=m(()=>(e(t),n(()=>e(t).id||"")));lt(ne,{entityType:"repository",get entityId(){return e(v)},get entityName(){return`${e(t),n(()=>e(t).owner)??""}/${e(t),n(()=>e(t).name)??""}`}})}var ie=d(ne,2);{let v=m(()=>(e(t),n(()=>e(t).id||"")));rt(ie,{get pools(){return e(c)},entityType:"repository",get entityId(){return e(v)},get entityName(){return`${e(t),n(()=>e(t).owner)??""}/${e(t),n(()=>e(t).name)??""}`},$$events:{addPool:Ie}})}var le=d(ie,2);it(le,{get instances(){return e(y)},entityType:"repository",onDeleteInstance:xe});var Ne=d(le,2);{let v=m(()=>(e(t),n(()=>e(t)?.events)));st(Ne,{get events(){return e(v)},get eventsContainer(){return e(_)},set eventsContainer(H){r(_,H)},$$legacy:!0})}w(z,ae)};g(k,z=>{e(t)&&z(q)},!0)}w($,b)};g(s,$=>{e(E)?$(i):$(W,!1)},!0)}w(o,a)};g(ke,o=>{e(F)?o(Ce):o(Ae,!1)})}f(U);var ee=d(U,2);{var Se=o=>{ot(o,{get entity(){return e(t)},entityType:"repository",$$events:{close:()=>r(D,!1),submit:a=>$e(a.detail)}})};g(ee,o=>{e(D)&&e(t)&&o(Se)})}var te=d(ee,2);{var Be=o=>{{let a=m(()=>(e(t),n(()=>`${e(t).owner}/${e(t).name}`)));fe(o,{title:"Delete Repository",message:"Are you sure you want to delete this repository? This action cannot be undone and will remove all associated pools and instances.",get itemName(){return e(a)},$$events:{close:()=>r(P,!1),confirm:be}})}};g(te,o=>{e(P)&&e(t)&&o(Be)})}var oe=d(te,2);{var Fe=o=>{fe(o,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return e(p),n(()=>e(p).name)},$$events:{close:()=>{r(R,!1),r(p,null)},confirm:we}})};g(oe,o=>{e(R)&&e(p)&&o(Fe)})}var Ue=d(oe,2);{var Le=o=>{{let a=m(()=>(e(t),n(()=>e(t).id||"")));dt(o,{initialEntityType:"repository",get initialEntityId(){return e(a)},$$events:{close:()=>r(T,!1),submit:Re}})}};g(Ue,o=>{e(T)&&e(t)&&o(Le)})}j(o=>{et(Te,"href",o),ce(Me,(e(t),n(()=>e(t)?e(t).name:"Loading...")))},[()=>(de(A),n(()=>A("/repositories")))]),w(ye,K),Ke(),he()}export{Ct as component}; diff --git a/webapp/assets/_app/immutable/nodes/19.-4iyqaEY.js b/webapp/assets/_app/immutable/nodes/19.-4iyqaEY.js new file mode 100644 index 00000000..780d7d2f --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/19.-4iyqaEY.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as st}from"../chunks/De-I_rkH.js";import{p as lt,E as Pt,o as it,g as e,m as n,k as r,B as Rt,l as U,h as nt,f as k,a as V,s as a,d as s,r as o,t as S,i as ke,b as v,e as H,z as rr,y as Oe,u as f,D as Ge,c as dt,A as we,v as ar,q as ct,j as zt,$ as At}from"../chunks/BIqNNOMq.js";import{i as x,s as ut,a as vt}from"../chunks/CfI2BFUj.js";import{r as F,s as tr,b as He,g as A,d as tt,c as Dt}from"../chunks/CQh-7xkh.js";import{P as Ut}from"../chunks/Cq4AwQWc.js";import{e as Ar,i as Dr}from"../chunks/D8ZtP9JD.js";import{b as le,a as at}from"../chunks/Gs5uNKRr.js";import{p as It}from"../chunks/CdEA5IGF.js";import{M as gt}from"../chunks/BFX8vI-4.js";import{J as jt,U as Lt,a as Ot,b as Gt}from"../chunks/COXBdepE.js";import{e as X}from"../chunks/BZiHL9L3.js";import{w as Ur}from"../chunks/C4VNo_Nu.js";import{e as pt,a as ot}from"../chunks/B1uxuBYn.js";import{U as Ht}from"../chunks/If6x_I-9.js";import{D as Nt}from"../chunks/Db7N5hjl.js";import{D as qt,G as Ir,A as Bt,L as Ft}from"../chunks/BjNB1vhO.js";import{t as Se}from"../chunks/DgRPqjXE.js";import{e as Ne,h as Vt}from"../chunks/B7If18kh.js";import{E as Jt}from"../chunks/C6HeU_02.js";import{E as Wt}from"../chunks/DFF0ZVx4.js";import{S as Kt}from"../chunks/DCu5KXBe.js";import{P as Qt}from"../chunks/DFRbKD7c.js";import"../chunks/CYb6_lpF.js";var Xt=k('

'),Yt=k('
'),Zt=k(""),ea=k(''),ra=k('
'),ta=k(""),aa=k(''),oa=k('
Loading templates...
'),sa=k(""),la=k('

Templates define how the runner software is installed and configured.

',1),ia=k('

Create a template first or proceed without a template to use default behavior.

'),na=k('

Select an entity first to see available templates

'),da=k(''),ca=k('
'),ua=k('

Entity & Provider Configuration

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Extra Specs (JSON)
',1),va=k('
Creating...
'),ga=k('

Create New Scale Set

Scale sets are only available for GitHub endpoints

Entity Level *
'),pa=k(" ",1);function ba(or,sr){lt(sr,!1);const[lr,ir]=ut(),L=()=>vt(pt,"$eagerCache",lr),ie=n(),$=n(),N=Pt();let Y=n(!1),P=n(""),d=n(""),E=n([]),Z=n([]),_=n([]),O=n(!1),ee=n(!1),re=n(!1),G=n(!1),p=n(null),J=n(""),c=n(""),te=n(""),ne=n(""),de=n(""),ge=n(void 0),pe=n(void 0),$e=n(void 0),Ee=n("garm"),D=n("linux"),be=n("amd64"),Ce=n(""),Me=n(!0),fe=n(!1),ce=n("{}"),I=n(void 0);async function Te(){try{r(ee,!0),r(Z,await A.listProviders())}catch(i){r(P,X(i))}finally{r(ee,!1)}}async function Pe(){try{r(re,!0);const i=Re();if(!i){r(_,[]);return}if(r(_,await A.listTemplates(e(D),void 0,i)),!e(I)||!e(_).find(u=>u.id===e(I))){const u=e(_).find(y=>y.owner_id==="system");u?r(I,u.id):e(_).length>0&&r(I,e(_)[0].id)}}catch(i){r(P,X(i))}finally{r(re,!1)}}function Re(){if(!e(c)||!e(E))return null;const i=e(E).find(u=>u.id===e(c));if(!i)return null;if("forge_type"in i)return i.forge_type;if("endpoint"in i){const u=i.endpoint;if(u&&"endpoint_type"in u)return u.endpoint_type||null}return"github"}function ue(){if(!e(c)||!e(E))return!1;const i=e(E).find(u=>u.id===e(c));return i&&"agent_mode"in i?i.agent_mode??!1:!1}async function qe(){if(e(d))try{switch(r(O,!0),r(E,[]),e(d)){case"repository":r(E,await A.listRepositories());break;case"organization":r(E,await A.listOrganizations());break;case"enterprise":r(E,await A.listEnterprises());break}}catch(i){r(P,X(i))}finally{r(O,!1)}}function me(i){e(d)!==i&&(r(d,i),r(c,""),r(I,void 0),qe())}function Be(i){if(i.operation!=="update")return;const u=i.payload;if(e(d)==="repository"&&u.id===e(c)){const y=L().repositories.find(j=>j.id===e(c));y&&(Object.assign(y,u),r($,ue()))}else if(e(d)==="organization"&&u.id===e(c)){const y=L().organizations.find(j=>j.id===e(c));y&&(Object.assign(y,u),r($,ue()))}else if(e(d)==="enterprise"&&u.id===e(c)){const y=L().enterprises.find(j=>j.id===e(c));y&&(Object.assign(y,u),r($,ue()))}}async function ye(i){if(!(!e(c)||!e(d)))try{switch(e(d)){case"repository":await A.updateRepository(e(c),i);break;case"organization":await A.updateOrganization(e(c),i);break;case"enterprise":await A.updateEnterprise(e(c),i);break}await qe(),r(G,!1)}catch(u){throw u}}function nr(){return!e(c)||!e(E)?null:e(E).find(i=>i.id===e(c))||null}async function dr(){if(!e(ie)){r(P,"Please fill in all required fields");return}try{r(Y,!0),r(P,"");let i={};if(e(ce).trim())try{i=JSON.parse(e(ce))}catch{throw new Error("Invalid JSON in extra specs")}const u={name:e(J),provider_name:e(te),image:e(ne),flavor:e(de),max_runners:e(ge)||10,min_idle_runners:e(pe)||0,runner_bootstrap_timeout:e($e)||20,runner_prefix:e(Ee),os_type:e(D),os_arch:e(be),"github-runner-group":e(Ce)||void 0,enabled:e(Me),enable_shell:e(fe),extra_specs:e(ce).trim()?i:void 0,template_id:e(I)};let y;switch(e(d)){case"repository":y=await A.createRepositoryScaleSet(e(c),u);break;case"organization":y=await A.createOrganizationScaleSet(e(c),u);break;case"enterprise":y=await A.createEnterpriseScaleSet(e(c),u);break;default:throw new Error("Invalid entity level selected")}N("submit",y)}catch(i){r(P,X(i))}finally{r(Y,!1)}}it(()=>{Te(),e(d)&&(e(d)==="repository"||e(d)==="organization"||e(d)==="enterprise")&&r(p,Ur.subscribeToEntity(e(d),["update"],Be))}),Rt(()=>{e(p)&&(e(p)(),r(p,null))}),U(()=>(e(Y),e(J),e(d),e(c),e(te),e(ne),e(de)),()=>{r(ie,!e(Y)&&e(J).trim()!==""&&e(d)!==""&&e(c)!==""&&e(te)!==""&&e(ne).trim()!==""&&e(de).trim()!=="")}),U(()=>{},()=>{r($,ue())}),U(()=>e($),()=>{e($)||r(fe,!1)}),U(()=>(e(c),e(D)),()=>{e(c)&&e(D)&&Pe()}),U(()=>(e(D),e(c)),()=>{e(D)&&e(c)&&Pe()}),U(()=>(e(d),e(p),Ur),()=>{e(d)&&(e(d)==="repository"||e(d)==="organization"||e(d)==="enterprise")&&(e(p)&&e(p)(),r(p,Ur.subscribeToEntity(e(d),["update"],Be)))}),nt(),st();var Fe=pa(),t=V(Fe);gt(t,{$$events:{close:()=>N("close")},children:(i,u)=>{var y=ga(),j=a(s(y),2),Ve=s(j);{var ze=M=>{var q=Xt(),_e=s(q),Ye=s(_e,!0);o(_e),o(q),S(()=>H(Ye,e(P))),v(M,q)};x(Ve,M=>{e(P)&&M(ze)})}var xe=a(Ve,2),Je=a(s(xe),2);F(Je),o(xe);var Ae=a(xe,2),We=s(Ae),W=a(s(We),2),ae=s(W),De=a(ae,2),Ke=a(De,2);o(W),o(We),o(Ae);var Qe=a(Ae,2);{var oe=M=>{var q=ua(),_e=V(q),Ye=a(s(_e),2),ur=s(Ye),vr=s(ur),ft=s(vr);rr(),o(vr);var mt=a(vr,2);{var yt=l=>{var h=Yt();v(l,h)},ht=l=>{var h=ea();S(()=>{e(c),Oe(()=>{e(d),e(E)})});var z=s(h),se=s(z);o(z),z.value=z.__value="";var K=a(z);Ar(K,1,()=>e(E),Dr,(w,g)=>{var C=Zt(),Q=s(C);{var je=b=>{var R=Ge();S(()=>H(R,`${e(g),f(()=>e(g).owner)??""}/${e(g),f(()=>e(g).name)??""} (${e(g),f(()=>e(g).endpoint?.name||"Unknown endpoint")??""})`)),v(b,R)},B=b=>{var R=Ge();S(()=>H(R,`${e(g),f(()=>e(g).name)??""} (${e(g),f(()=>e(g).endpoint?.name||"Unknown endpoint")??""})`)),v(b,R)};x(Q,b=>{e(d)==="repository"?b(je):b(B,!1)})}o(C);var T={};S(()=>{T!==(T=(e(g),f(()=>e(g).id)))&&(C.value=(C.__value=(e(g),f(()=>e(g).id)))??"")}),v(w,C)}),o(h),S(()=>H(se,`Select a ${e(d)??""}`)),He(h,()=>e(c),w=>r(c,w)),v(l,h)};x(mt,l=>{e(O)?l(yt):l(ht,!1)})}o(ur);var jr=a(ur,2),xt=a(s(jr),2);{var _t=l=>{var h=ra();v(l,h)},kt=l=>{var h=aa();S(()=>{e(te),Oe(()=>{e(Z)})});var z=s(h);z.value=z.__value="";var se=a(z);Ar(se,1,()=>e(Z),Dr,(K,w)=>{var g=ta(),C=s(g,!0);o(g);var Q={};S(()=>{H(C,(e(w),f(()=>e(w).name))),Q!==(Q=(e(w),f(()=>e(w).name)))&&(g.value=(g.__value=(e(w),f(()=>e(w).name)))??"")}),v(K,g)}),o(h),He(h,()=>e(te),K=>r(te,K)),v(l,h)};x(xt,l=>{e(ee)?l(_t):l(kt,!1)})}o(jr),o(Ye),o(_e);var gr=a(_e,2),pr=a(s(gr),2),br=s(pr),Lr=a(s(br),2);F(Lr),o(br);var fr=a(br,2),Or=a(s(fr),2);F(Or),o(fr);var mr=a(fr,2),yr=a(s(mr),2);S(()=>{e(D),Oe(()=>{})});var hr=s(yr);hr.value=hr.__value="linux";var Gr=a(hr);Gr.value=Gr.__value="windows",o(yr),o(mr);var Hr=a(mr,2),xr=a(s(Hr),2);S(()=>{e(be),Oe(()=>{})});var _r=s(xr);_r.value=_r.__value="amd64";var Nr=a(_r);Nr.value=Nr.__value="arm64",o(xr),o(Hr),o(pr);var qr=a(pr,2),wt=a(s(qr),2);{var St=l=>{var h=oa();v(l,h)},$t=l=>{var h=we(),z=V(h);{var se=w=>{var g=la(),C=V(g);S(()=>{e(I),Oe(()=>{e(_)})}),Ar(C,5,()=>e(_),Dr,(T,b)=>{var R=sa(),Le=s(R),Pr=a(Le);{var Rr=zr=>{var rt=Ge();S(()=>H(rt,`- ${e(b),f(()=>e(b).description)??""}`)),v(zr,rt)};x(Pr,zr=>{e(b),f(()=>e(b).description)&&zr(Rr)})}o(R);var er={};S(()=>{H(Le,`${e(b),f(()=>e(b).name)??""} ${e(b),f(()=>e(b).owner_id==="system"?"(System)":"")??""} `),er!==(er=(e(b),f(()=>e(b).id)))&&(R.value=(R.__value=(e(b),f(()=>e(b).id)))??"")}),v(T,R)}),o(C);var Q=a(C,2),je=a(s(Q));{var B=T=>{var b=Ge();S(R=>H(b,`Showing templates for ${R??""} ${e(D)??""}.`),[()=>f(Re)]),v(T,b)};x(je,T=>{e(c)&&T(B)})}o(Q),He(C,()=>e(I),T=>r(I,T)),v(w,g)},K=w=>{var g=we(),C=V(g);{var Q=B=>{var T=ia(),b=s(T),R=s(b);o(b);var Le=a(b,2),Pr=s(Le);rr(),o(Le),o(T),S((Rr,er)=>{H(R,`No templates found for ${Rr??""} ${e(D)??""}.`),Dt(Pr,"href",er)},[()=>f(Re),()=>(ct(tt),f(()=>tt("/templates")))]),v(B,T)},je=B=>{var T=na();v(B,T)};x(C,B=>{e(c)?B(Q):B(je,!1)},!0)}v(w,g)};x(z,w=>{e(_),f(()=>e(_).length>0)?w(se):w(K,!1)},!0)}v(l,h)};x(wt,l=>{e(re)?l(St):l($t,!1)})}o(qr),o(gr);var kr=a(gr,2),Br=a(s(kr),2),wr=s(Br),Fr=a(s(wr),2);F(Fr),o(wr);var Sr=a(wr,2),Vr=a(s(Sr),2);F(Vr),o(Sr);var Jr=a(Sr,2),Wr=a(s(Jr),2);F(Wr),o(Jr),o(Br),o(kr);var Kr=a(kr,2),$r=a(s(Kr),2),Er=s($r),Qr=a(s(Er),2);F(Qr),o(Er);var Xr=a(Er,2),Yr=a(s(Xr),2);F(Yr),o(Xr),o($r);var Cr=a($r,2),Et=a(s(Cr),2);jt(Et,{rows:4,placeholder:"{}",get value(){return e(ce)},set value(l){r(ce,l)},$$legacy:!0}),o(Cr);var Mr=a(Cr,2),Zr=s(Mr);F(Zr),rr(2),o(Mr);var et=a(Mr,2),Tr=s(et),Ze=s(Tr);F(Ze);var Ct=a(Ze,2);rr(2),o(Tr);var Mt=a(Tr,2);{var Tt=l=>{var h=ca(),z=a(s(h),2),se=s(z),K=a(se);{var w=g=>{var C=da();ke("click",C,()=>r(G,!0)),v(g,C)};x(K,g=>{e(c)&&g(w)})}o(z),o(h),S(()=>H(se,`Shell access requires agent mode to be enabled on the ${e(d)??""}. `)),v(l,h)};x(Mt,l=>{e($)||l(Tt)})}o(et),o(Kr),S(l=>{H(ft,`${l??""} `),Ze.disabled=!e($),tr(Ct,1,`ml-2 block text-sm font-medium text-gray-700 dark:text-gray-300 ${e($)?"":"opacity-50"}`)},[()=>(e(d),f(()=>e(d).charAt(0).toUpperCase()+e(d).slice(1)))]),le(Lr,()=>e(ne),l=>r(ne,l)),le(Or,()=>e(de),l=>r(de,l)),He(yr,()=>e(D),l=>r(D,l)),He(xr,()=>e(be),l=>r(be,l)),le(Fr,()=>e(pe),l=>r(pe,l)),le(Vr,()=>e(ge),l=>r(ge,l)),le(Wr,()=>e($e),l=>r($e,l)),le(Qr,()=>e(Ee),l=>r(Ee,l)),le(Yr,()=>e(Ce),l=>r(Ce,l)),at(Zr,()=>e(Me),l=>r(Me,l)),at(Ze,()=>e(fe),l=>r(fe,l)),v(M,q)};x(Qe,M=>{e(d)&&M(oe)})}var ve=a(Qe,2),Xe=s(ve),Ue=a(Xe,2),Ie=s(Ue);{var cr=M=>{var q=va();v(M,q)},bt=M=>{var q=Ge("Create Scale Set");v(M,q)};x(Ie,M=>{e(Y)?M(cr):M(bt,!1)})}o(Ue),o(ve),o(j),o(y),S(()=>{tr(ae,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(d)==="repository"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),tr(De,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(d)==="organization"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),tr(Ke,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(d)==="enterprise"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),Ue.disabled=!e(ie)}),le(Je,()=>e(J),M=>r(J,M)),ke("click",ae,()=>me("repository")),ke("click",De,()=>me("organization")),ke("click",Ke,()=>me("enterprise")),ke("click",Xe,()=>N("close")),ke("submit",j,It(dr)),v(i,y)},$$slots:{default:!0}});var m=a(t,2);{var he=i=>{const u=ar(()=>f(nr));var y=we(),j=V(y);{var Ve=ze=>{var xe=we(),Je=V(xe);{var Ae=W=>{Lt(W,{get repository(){return e(u)},$$events:{close:()=>r(G,!1),submit:ae=>ye(ae.detail)}})},We=W=>{var ae=we(),De=V(ae);{var Ke=oe=>{Ot(oe,{get organization(){return e(u)},$$events:{close:()=>r(G,!1),submit:ve=>ye(ve.detail)}})},Qe=oe=>{var ve=we(),Xe=V(ve);{var Ue=Ie=>{Gt(Ie,{get enterprise(){return e(u)},$$events:{close:()=>r(G,!1),submit:cr=>ye(cr.detail)}})};x(Xe,Ie=>{e(d)==="enterprise"&&Ie(Ue)},!0)}v(oe,ve)};x(De,oe=>{e(d)==="organization"?oe(Ke):oe(Qe,!1)},!0)}v(W,ae)};x(Je,W=>{e(d)==="repository"?W(Ae):W(We,!1)})}v(ze,xe)};x(j,ze=>{e(u)&&ze(Ve)})}v(i,y)};x(m,i=>{e(G)&&e(c)&&i(he)})}v(or,Fe),dt(),ir()}const fa={};var ma=k('
'),ya=k('
',1);function qa(or,sr){lt(sr,!1);const[lr,ir]=ut(),L=()=>vt(pt,"$eagerCache",lr),ie=n(),$=n(),N=n(),Y=n();let P=n([]),d=n(!0),E=n(""),Z=n(""),_=n(1),O=n(25),ee=n(!1),re=n(!1),G=n(!1),p=n(null),J=n(!1);async function c(t){try{r(E,""),r(ee,!1),Se.success("Scale Set Created","Scale set has been created successfully.")}catch(m){throw r(E,X(m)),m}}async function te(t){if(e(p))try{await A.updateScaleSet(e(p).id,t),Se.success("Scale Set Updated",`Scale set ${e(p).name} has been updated successfully.`),r(re,!1),r(p,null)}catch(m){const he=X(m);throw Se.error("Update Failed",he),m}}async function ne(){if(e(p))try{await A.deleteScaleSet(e(p).id),Se.success("Scale Set Deleted",`Scale set ${e(p).name} has been deleted successfully.`)}catch(t){const m=X(t);Se.error("Delete Failed",m)}finally{r(G,!1),r(p,null)}}function de(){r(ee,!0)}async function ge(t){try{r(J,!0);const m=await A.getScaleSet(t.id);r(p,m),r(re,!0)}catch(m){const he=X(m);Se.error("Failed to Load Scale Set Details",he)}finally{r(J,!1)}}function pe(t){r(p,t),r(G,!0)}it(async()=>{try{r(d,!0);const t=await ot.getScaleSets();t&&Array.isArray(t)&&r(P,t)}catch(t){fa?.VITEST||console.error("Failed to load scale sets:",t),r(E,X(t))}finally{r(d,!1)}});async function $e(){try{await ot.retryResource("scalesets")}catch(t){console.error("Retry failed:",t)}}const Ee=[{key:"name",title:"Name",cellComponent:Jt,cellProps:{entityType:"scaleset"}},{key:"image",title:"Image",cellComponent:Ir,cellProps:{field:"image",type:"code",showTitle:!0}},{key:"provider",title:"Provider",cellComponent:Ir,cellProps:{field:"provider_name"}},{key:"flavor",title:"Flavor",cellComponent:Ir,cellProps:{field:"flavor"}},{key:"entity",title:"Entity",cellComponent:Qt},{key:"endpoint",title:"Endpoint",cellComponent:Wt},{key:"status",title:"Status",cellComponent:Kt,cellProps:{statusType:"enabled"}},{key:"actions",title:"Actions",align:"right",cellComponent:Bt}],D={entityType:"scaleset",primaryText:{field:"name",isClickable:!0,href:"/scalesets/{id}"},secondaryText:{field:"entity_name",computedValue:t=>Ne(t)},badges:[{type:"custom",value:t=>({variant:t.enabled?"success":"error",text:t.enabled?"Enabled":"Disabled"})}],actions:[{type:"edit",handler:t=>ge(t)},{type:"delete",handler:t=>pe(t)}]};function be(t){r(Z,t.detail.term),r(_,1)}function Ce(t){r(_,t.detail.page)}function Me(t){r(O,t.detail.perPage),r(_,1)}function fe(t){ge(t.detail.item)}function ce(t){pe(t.detail.item)}U(()=>(e(P),L()),()=>{(!e(P).length||L().loaded.scalesets)&&r(P,L().scalesets)}),U(()=>L(),()=>{r(d,L().loading.scalesets)}),U(()=>L(),()=>{r(ie,L().errorMessages.scalesets)}),U(()=>(e(P),e(Z),Ne),()=>{r($,Vt(e(P),e(Z),t=>Ne(t)))}),U(()=>(e($),e(O)),()=>{r(N,Math.ceil(e($).length/e(O)))}),U(()=>(e(_),e(N)),()=>{e(_)>e(N)&&e(N)>0&&r(_,e(N))}),U(()=>(e($),e(_),e(O)),()=>{r(Y,e($).slice((e(_)-1)*e(O),e(_)*e(O)))}),nt(),st();var I=ya();zt(t=>{At.title="Scale Sets - GARM"});var Te=V(I),Pe=s(Te);Ut(Pe,{title:"Scale Sets",description:"Manage GitHub runner scale sets",actionLabel:"Add Scale Set",$$events:{action:de}});var Re=a(Pe,2);{let t=ar(()=>e(ie)||e(E)),m=ar(()=>!!e(ie));qt(Re,{get columns(){return Ee},get data(){return e(Y)},get loading(){return e(d)},get error(){return e(t)},get searchTerm(){return e(Z)},searchPlaceholder:"Search by entity name...",get currentPage(){return e(_)},get perPage(){return e(O)},get totalPages(){return e(N)},get totalItems(){return e($),f(()=>e($).length)},itemName:"scale sets",emptyIconType:"cog",get showRetry(){return e(m)},get mobileCardConfig(){return D},$$events:{search:be,pageChange:Ce,perPageChange:Me,retry:$e,edit:fe,delete:ce}})}o(Te);var ue=a(Te,2);{var qe=t=>{ba(t,{$$events:{close:()=>r(ee,!1),submit:m=>c(m.detail)}})};x(ue,t=>{e(ee)&&t(qe)})}var me=a(ue,2);{var Be=t=>{Ht(t,{get scaleSet(){return e(p)},$$events:{close:()=>{r(re,!1),r(p,null)},submit:m=>te(m.detail)}})};x(me,t=>{e(re)&&e(p)&&t(Be)})}var ye=a(me,2);{var nr=t=>{{let m=ar(()=>(e(p),ct(Ne),f(()=>`Scale Set ${e(p).name} (${Ne(e(p))})`)));Nt(t,{title:"Delete Scale Set",message:"Are you sure you want to delete this scale set? This action cannot be undone and will remove all associated runners.",get itemName(){return e(m)},$$events:{close:()=>{r(G,!1),r(p,null)},confirm:ne}})}};x(ye,t=>{e(G)&&e(p)&&t(nr)})}var dr=a(ye,2);{var Fe=t=>{gt(t,{$$events:{close:()=>{}},children:(m,he)=>{var i=ma(),u=s(i);Ft(u,{message:"Loading scale set details..."}),o(i),v(m,i)},$$slots:{default:!0}})};x(dr,t=>{e(J)&&t(Fe)})}v(or,I),dt(),ir()}export{qa as component}; diff --git a/webapp/assets/_app/immutable/nodes/19.B65AgF01.js b/webapp/assets/_app/immutable/nodes/19.B65AgF01.js deleted file mode 100644 index 29408f16..00000000 --- a/webapp/assets/_app/immutable/nodes/19.B65AgF01.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as Gr}from"../chunks/TJn6xDN9.js";import{p as Hr,E as ot,o as Nr,l as F,k as r,g as e,m as d,h as Ur,f as k,s as a,d as l,r as o,t as _,i as ke,b,e as q,a as Pe,z as ir,y as we,u as p,D as Se,c as jr,A as Ir,q as qr,j as lt,$ as st,v as nr}from"../chunks/DniTuB_0.js";import{i as M,s as dt,a as it}from"../chunks/DbNhg6mG.js";import{r as V,s as cr,b as $e,g as G,d as zr,c as nt}from"../chunks/DD3srElq.js";import{P as ct}from"../chunks/BlYHwhWl.js";import{e as ur,i as gr}from"../chunks/Ck5PkeSc.js";import{b as Q,a as ut}from"../chunks/CCQwxxp9.js";import{p as gt}from"../chunks/D4Caz1gY.js";import{M as Fr}from"../chunks/PC4wJWhj.js";import{J as vt}from"../chunks/DcEwzE5l.js";import{e as B}from"../chunks/BZiHL9L3.js";import{U as bt}from"../chunks/NLwquURr.js";import{D as pt}from"../chunks/B6XSaEl0.js";import{D as mt,G as vr,A as ft,L as yt}from"../chunks/QtGwBUod.js";import{e as xt,a as Lr}from"../chunks/C-ow2qSP.js";import{t as ne}from"../chunks/CBJzOE8U.js";import{e as Ce,h as ht}from"../chunks/LMA6-4d1.js";import{E as _t}from"../chunks/D3pbRQAB.js";import{E as kt}from"../chunks/hsRG7ppz.js";import{S as wt}from"../chunks/Dn_Ue57e.js";import{P as St}from"../chunks/DW-EakRM.js";import"../chunks/BSR16q_V.js";var $t=k('

'),Ct=k('
'),Pt=k(""),Mt=k(''),Tt=k('
'),Et=k(""),Rt=k(''),Dt=k('
Loading templates...
'),At=k(""),It=k('

Templates define how the runner software is installed and configured.

',1),zt=k('

Create a template first or proceed without a template to use default behavior.

'),Lt=k('

Select an entity first to see available templates

'),Gt=k('

Entity & Provider Configuration

Image & OS Configuration

Runner Limits & Timing

Advanced Settings

Extra Specs (JSON)
',1),Ht=k('
Creating...
'),Nt=k('

Create New Scale Set

Scale sets are only available for GitHub endpoints

Entity Level *
');function Ut(ze,Le){Hr(Le,!1);const ce=d(),ue=ot();let E=d(!1),A=d(""),u=d(""),C=d([]),re=d([]),x=d([]),J=d(!1),W=d(!1),K=d(!1),w=d(""),g=d(""),I=d(""),H=d(""),N=d(""),m=d(void 0),X=d(void 0),ge=d(void 0),ve=d("garm"),R=d("linux"),te=d("amd64"),ae=d(""),oe=d(!0),Y=d("{}"),z=d(void 0);async function Ge(){try{r(W,!0),r(re,await G.listProviders())}catch(i){r(A,B(i))}finally{r(W,!1)}}async function Me(){try{r(K,!0);const i=be();if(!i){r(x,[]);return}if(r(x,await G.listTemplates(e(R),void 0,i)),!e(z)||!e(x).find(f=>f.id===e(z))){const f=e(x).find(D=>D.owner_id==="system");f?r(z,f.id):e(x).length>0&&r(z,e(x)[0].id)}}catch(i){r(A,B(i))}finally{r(K,!1)}}function be(){if(!e(g)||!e(C))return null;const i=e(C).find(f=>f.id===e(g));if(!i)return null;if("forge_type"in i)return i.forge_type;if("endpoint"in i){const f=i.endpoint;if(f&&"endpoint_type"in f)return f.endpoint_type||null}return"github"}async function He(){if(e(u))try{switch(r(J,!0),r(C,[]),e(u)){case"repository":r(C,await G.listRepositories());break;case"organization":r(C,await G.listOrganizations());break;case"enterprise":r(C,await G.listEnterprises());break}}catch(i){r(A,B(i))}finally{r(J,!1)}}function pe(i){e(u)!==i&&(r(u,i),r(g,""),r(z,void 0),He())}async function Ne(){if(!e(ce)){r(A,"Please fill in all required fields");return}try{r(E,!0),r(A,"");let i={};if(e(Y).trim())try{i=JSON.parse(e(Y))}catch{throw new Error("Invalid JSON in extra specs")}const f={name:e(w),provider_name:e(I),image:e(H),flavor:e(N),max_runners:e(m)||10,min_idle_runners:e(X)||0,runner_bootstrap_timeout:e(ge)||20,runner_prefix:e(ve),os_type:e(R),os_arch:e(te),"github-runner-group":e(ae)||void 0,enabled:e(oe),extra_specs:e(Y).trim()?i:void 0,template_id:e(z)};let D;switch(e(u)){case"repository":D=await G.createRepositoryScaleSet(e(g),f);break;case"organization":D=await G.createOrganizationScaleSet(e(g),f);break;case"enterprise":D=await G.createEnterpriseScaleSet(e(g),f);break;default:throw new Error("Invalid entity level selected")}ue("submit",D)}catch(i){r(A,B(i))}finally{r(E,!1)}}Nr(()=>{Ge()}),F(()=>(e(E),e(w),e(u),e(g),e(I),e(H),e(N)),()=>{r(ce,!e(E)&&e(w).trim()!==""&&e(u)!==""&&e(g)!==""&&e(I)!==""&&e(H).trim()!==""&&e(N).trim()!=="")}),F(()=>(e(g),e(R)),()=>{e(g)&&e(R)&&Me()}),F(()=>(e(R),e(g)),()=>{e(R)&&e(g)&&Me()}),Ur(),Gr(),Fr(ze,{$$events:{close:()=>ue("close")},children:(i,f)=>{var D=Nt(),le=a(l(D),2),me=l(le);{var Ue=S=>{var U=$t(),ie=l(U),Ae=l(ie,!0);o(ie),o(U),_(()=>q(Ae,e(A))),b(S,U)};M(me,S=>{e(A)&&S(Ue)})}var se=a(me,2),Te=a(l(se),2);V(Te),o(se);var de=a(se,2),Ee=l(de),Re=a(l(Ee),2),fe=l(Re),t=a(fe,2),v=a(t,2);o(Re),o(Ee),o(de);var Z=a(de,2);{var ye=S=>{var U=Gt(),ie=Pe(U),Ae=a(l(ie),2),qe=l(Ae),Fe=l(qe),Jr=l(Fe);ir(),o(Fe);var Wr=a(Fe,2);{var Kr=s=>{var y=Ct();b(s,y)},Qr=s=>{var y=Mt();_(()=>{e(g),we(()=>{e(u),e(C)})});var L=l(y),xe=l(L);o(L),L.value=L.__value="";var ee=a(L);ur(ee,1,()=>e(C),gr,(h,n)=>{var T=Pt(),O=l(T);{var he=c=>{var P=Se();_(()=>q(P,`${e(n),p(()=>e(n).owner)??""}/${e(n),p(()=>e(n).name)??""} (${e(n),p(()=>e(n).endpoint?.name||"Unknown endpoint")??""})`)),b(c,P)},j=c=>{var P=Se();_(()=>q(P,`${e(n),p(()=>e(n).name)??""} (${e(n),p(()=>e(n).endpoint?.name||"Unknown endpoint")??""})`)),b(c,P)};M(O,c=>{e(u)==="repository"?c(he):c(j,!1)})}o(T);var $={};_(()=>{$!==($=(e(n),p(()=>e(n).id)))&&(T.value=(T.__value=(e(n),p(()=>e(n).id)))??"")}),b(h,T)}),o(y),_(()=>q(xe,`Select a ${e(u)??""}`)),$e(y,()=>e(g),h=>r(g,h)),b(s,y)};M(Wr,s=>{e(J)?s(Kr):s(Qr,!1)})}o(qe);var pr=a(qe,2),Xr=a(l(pr),2);{var Yr=s=>{var y=Tt();b(s,y)},Zr=s=>{var y=Rt();_(()=>{e(I),we(()=>{e(re)})});var L=l(y);L.value=L.__value="";var xe=a(L);ur(xe,1,()=>e(re),gr,(ee,h)=>{var n=Et(),T=l(n,!0);o(n);var O={};_(()=>{q(T,(e(h),p(()=>e(h).name))),O!==(O=(e(h),p(()=>e(h).name)))&&(n.value=(n.__value=(e(h),p(()=>e(h).name)))??"")}),b(ee,n)}),o(y),$e(y,()=>e(I),ee=>r(I,ee)),b(s,y)};M(Xr,s=>{e(W)?s(Yr):s(Zr,!1)})}o(pr),o(Ae),o(ie);var Oe=a(ie,2),Ve=a(l(Oe),2),Be=l(Ve),mr=a(l(Be),2);V(mr),o(Be);var Je=a(Be,2),fr=a(l(Je),2);V(fr),o(Je);var We=a(Je,2),Ke=a(l(We),2);_(()=>{e(R),we(()=>{})});var Qe=l(Ke);Qe.value=Qe.__value="linux";var yr=a(Qe);yr.value=yr.__value="windows",o(Ke),o(We);var xr=a(We,2),Xe=a(l(xr),2);_(()=>{e(te),we(()=>{})});var Ye=l(Xe);Ye.value=Ye.__value="amd64";var hr=a(Ye);hr.value=hr.__value="arm64",o(Xe),o(xr),o(Ve);var _r=a(Ve,2),et=a(l(_r),2);{var rt=s=>{var y=Dt();b(s,y)},tt=s=>{var y=Ir(),L=Pe(y);{var xe=h=>{var n=It(),T=Pe(n);_(()=>{e(z),we(()=>{e(x)})}),ur(T,5,()=>e(x),gr,($,c)=>{var P=At(),_e=l(P),lr=a(_e);{var sr=dr=>{var Ar=Se();_(()=>q(Ar,`- ${e(c),p(()=>e(c).description)??""}`)),b(dr,Ar)};M(lr,dr=>{e(c),p(()=>e(c).description)&&dr(sr)})}o(P);var Ie={};_(()=>{q(_e,`${e(c),p(()=>e(c).name)??""} ${e(c),p(()=>e(c).owner_id==="system"?"(System)":"")??""} `),Ie!==(Ie=(e(c),p(()=>e(c).id)))&&(P.value=(P.__value=(e(c),p(()=>e(c).id)))??"")}),b($,P)}),o(T);var O=a(T,2),he=a(l(O));{var j=$=>{var c=Se();_(P=>q(c,`Showing templates for ${P??""} ${e(R)??""}.`),[()=>p(be)]),b($,c)};M(he,$=>{e(g)&&$(j)})}o(O),$e(T,()=>e(z),$=>r(z,$)),b(h,n)},ee=h=>{var n=Ir(),T=Pe(n);{var O=j=>{var $=zt(),c=l($),P=l(c);o(c);var _e=a(c,2),lr=l(_e);ir(),o(_e),o($),_((sr,Ie)=>{q(P,`No templates found for ${sr??""} ${e(R)??""}.`),nt(lr,"href",Ie)},[()=>p(be),()=>(qr(zr),p(()=>zr("/templates")))]),b(j,$)},he=j=>{var $=Lt();b(j,$)};M(T,j=>{e(g)?j(O):j(he,!1)},!0)}b(h,n)};M(L,h=>{e(x),p(()=>e(x).length>0)?h(xe):h(ee,!1)},!0)}b(s,y)};M(et,s=>{e(K)?s(rt):s(tt,!1)})}o(_r),o(Oe);var Ze=a(Oe,2),kr=a(l(Ze),2),er=l(kr),wr=a(l(er),2);V(wr),o(er);var rr=a(er,2),Sr=a(l(rr),2);V(Sr),o(rr);var $r=a(rr,2),Cr=a(l($r),2);V(Cr),o($r),o(kr),o(Ze);var Pr=a(Ze,2),tr=a(l(Pr),2),ar=l(tr),Mr=a(l(ar),2);V(Mr),o(ar);var Tr=a(ar,2),Er=a(l(Tr),2);V(Er),o(Tr),o(tr);var or=a(tr,2),at=a(l(or),2);vt(at,{rows:4,placeholder:"{}",get value(){return e(Y)},set value(s){r(Y,s)},$$legacy:!0}),o(or);var Rr=a(or,2),Dr=l(Rr);V(Dr),ir(2),o(Rr),o(Pr),_(s=>q(Jr,`${s??""} `),[()=>(e(u),p(()=>e(u).charAt(0).toUpperCase()+e(u).slice(1)))]),Q(mr,()=>e(H),s=>r(H,s)),Q(fr,()=>e(N),s=>r(N,s)),$e(Ke,()=>e(R),s=>r(R,s)),$e(Xe,()=>e(te),s=>r(te,s)),Q(wr,()=>e(X),s=>r(X,s)),Q(Sr,()=>e(m),s=>r(m,s)),Q(Cr,()=>e(ge),s=>r(ge,s)),Q(Mr,()=>e(ve),s=>r(ve,s)),Q(Er,()=>e(ae),s=>r(ae,s)),ut(Dr,()=>e(oe),s=>r(oe,s)),b(S,U)};M(Z,S=>{e(u)&&S(ye)})}var De=a(Z,2),br=l(De),je=a(br,2),Or=l(je);{var Vr=S=>{var U=Ht();b(S,U)},Br=S=>{var U=Se("Create Scale Set");b(S,U)};M(Or,S=>{e(E)?S(Vr):S(Br,!1)})}o(je),o(De),o(le),o(D),_(()=>{cr(fe,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(u)==="repository"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),cr(t,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(u)==="organization"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),cr(v,1,`flex flex-col items-center justify-center p-4 border-2 rounded-lg transition-colors cursor-pointer ${e(u)==="enterprise"?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"}`),je.disabled=!e(ce)}),Q(Te,()=>e(w),S=>r(w,S)),ke("click",fe,()=>pe("repository")),ke("click",t,()=>pe("organization")),ke("click",v,()=>pe("enterprise")),ke("click",br,()=>ue("close")),ke("submit",le,gt(Ne)),b(i,D)},$$slots:{default:!0}}),jr()}const jt={};var qt=k('
'),Ft=k('
',1);function va(ze,Le){Hr(Le,!1);const[ce,ue]=dt(),E=()=>it(xt,"$eagerCache",ce),A=d(),u=d(),C=d(),re=d();let x=d([]),J=d(!0),W=d(""),K=d(""),w=d(1),g=d(25),I=d(!1),H=d(!1),N=d(!1),m=d(null),X=d(!1);async function ge(t){try{r(W,""),r(I,!1),ne.success("Scale Set Created","Scale set has been created successfully.")}catch(v){throw r(W,B(v)),v}}async function ve(t){if(e(m))try{await G.updateScaleSet(e(m).id,t),ne.success("Scale Set Updated",`Scale set ${e(m).name} has been updated successfully.`),r(H,!1),r(m,null)}catch(v){const Z=B(v);throw ne.error("Update Failed",Z),v}}async function R(){if(e(m))try{await G.deleteScaleSet(e(m).id),ne.success("Scale Set Deleted",`Scale set ${e(m).name} has been deleted successfully.`)}catch(t){const v=B(t);ne.error("Delete Failed",v)}finally{r(N,!1),r(m,null)}}function te(){r(I,!0)}async function ae(t){try{r(X,!0);const v=await G.getScaleSet(t.id);r(m,v),r(H,!0)}catch(v){const Z=B(v);ne.error("Failed to Load Scale Set Details",Z)}finally{r(X,!1)}}function oe(t){r(m,t),r(N,!0)}Nr(async()=>{try{r(J,!0);const t=await Lr.getScaleSets();t&&Array.isArray(t)&&r(x,t)}catch(t){jt?.VITEST||console.error("Failed to load scale sets:",t),r(W,B(t))}finally{r(J,!1)}});async function Y(){try{await Lr.retryResource("scalesets")}catch(t){console.error("Retry failed:",t)}}const z=[{key:"name",title:"Name",cellComponent:_t,cellProps:{entityType:"scaleset"}},{key:"image",title:"Image",cellComponent:vr,cellProps:{field:"image",type:"code",showTitle:!0}},{key:"provider",title:"Provider",cellComponent:vr,cellProps:{field:"provider_name"}},{key:"flavor",title:"Flavor",cellComponent:vr,cellProps:{field:"flavor"}},{key:"entity",title:"Entity",cellComponent:St},{key:"endpoint",title:"Endpoint",cellComponent:kt},{key:"status",title:"Status",cellComponent:wt,cellProps:{statusType:"enabled"}},{key:"actions",title:"Actions",align:"right",cellComponent:ft}],Ge={entityType:"scaleset",primaryText:{field:"name",isClickable:!0,href:"/scalesets/{id}"},secondaryText:{field:"entity_name",computedValue:t=>Ce(t)},badges:[{type:"custom",value:t=>({variant:t.enabled?"success":"error",text:t.enabled?"Enabled":"Disabled"})}],actions:[{type:"edit",handler:t=>ae(t)},{type:"delete",handler:t=>oe(t)}]};function Me(t){r(K,t.detail.term),r(w,1)}function be(t){r(w,t.detail.page)}function He(t){r(g,t.detail.perPage),r(w,1)}function pe(t){ae(t.detail.item)}function Ne(t){oe(t.detail.item)}F(()=>(e(x),E()),()=>{(!e(x).length||E().loaded.scalesets)&&r(x,E().scalesets)}),F(()=>E(),()=>{r(J,E().loading.scalesets)}),F(()=>E(),()=>{r(A,E().errorMessages.scalesets)}),F(()=>(e(x),e(K),Ce),()=>{r(u,ht(e(x),e(K),t=>Ce(t)))}),F(()=>(e(u),e(g)),()=>{r(C,Math.ceil(e(u).length/e(g)))}),F(()=>(e(w),e(C)),()=>{e(w)>e(C)&&e(C)>0&&r(w,e(C))}),F(()=>(e(u),e(w),e(g)),()=>{r(re,e(u).slice((e(w)-1)*e(g),e(w)*e(g)))}),Ur(),Gr();var i=Ft();lt(t=>{st.title="Scale Sets - GARM"});var f=Pe(i),D=l(f);ct(D,{title:"Scale Sets",description:"Manage GitHub runner scale sets",actionLabel:"Add Scale Set",$$events:{action:te}});var le=a(D,2);{let t=nr(()=>e(A)||e(W)),v=nr(()=>!!e(A));mt(le,{get columns(){return z},get data(){return e(re)},get loading(){return e(J)},get error(){return e(t)},get searchTerm(){return e(K)},searchPlaceholder:"Search by entity name...",get currentPage(){return e(w)},get perPage(){return e(g)},get totalPages(){return e(C)},get totalItems(){return e(u),p(()=>e(u).length)},itemName:"scale sets",emptyIconType:"cog",get showRetry(){return e(v)},get mobileCardConfig(){return Ge},$$events:{search:Me,pageChange:be,perPageChange:He,retry:Y,edit:pe,delete:Ne}})}o(f);var me=a(f,2);{var Ue=t=>{Ut(t,{$$events:{close:()=>r(I,!1),submit:v=>ge(v.detail)}})};M(me,t=>{e(I)&&t(Ue)})}var se=a(me,2);{var Te=t=>{bt(t,{get scaleSet(){return e(m)},$$events:{close:()=>{r(H,!1),r(m,null)},submit:v=>ve(v.detail)}})};M(se,t=>{e(H)&&e(m)&&t(Te)})}var de=a(se,2);{var Ee=t=>{{let v=nr(()=>(e(m),qr(Ce),p(()=>`Scale Set ${e(m).name} (${Ce(e(m))})`)));pt(t,{title:"Delete Scale Set",message:"Are you sure you want to delete this scale set? This action cannot be undone and will remove all associated runners.",get itemName(){return e(v)},$$events:{close:()=>{r(N,!1),r(m,null)},confirm:R}})}};M(de,t=>{e(N)&&e(m)&&t(Ee)})}var Re=a(de,2);{var fe=t=>{Fr(t,{$$events:{close:()=>{}},children:(v,Z)=>{var ye=qt(),De=l(ye);yt(De,{message:"Loading scale set details..."}),o(ye),b(v,ye)},$$slots:{default:!0}})};M(Re,t=>{e(X)&&t(fe)})}b(ze,i),jr(),ue()}export{va as component}; diff --git a/webapp/assets/_app/immutable/nodes/2.CA1VFb0O.js b/webapp/assets/_app/immutable/nodes/2.CA1VFb0O.js deleted file mode 100644 index af65d0fb..00000000 --- a/webapp/assets/_app/immutable/nodes/2.CA1VFb0O.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as Ve}from"../chunks/TJn6xDN9.js";import{p as We,E as lt,l as Ue,k as c,m as j,g as e,h as Je,f as L,a as dt,d as r,s as a,r as t,C as ct,z as X,b as U,q as f,u as v,t as H,e as $,c as Fe,i as Ae,o as vt,B as ut,j as mt,$ as gt,w as P}from"../chunks/DniTuB_0.js";import{p as pt,i as A,s as bt,a as ft}from"../chunks/DbNhg6mG.js";import{e as xt,i as ht}from"../chunks/Ck5PkeSc.js";import{B as kt,r as ke,s as Me,g as Oe,d as I,c as Y}from"../chunks/DD3srElq.js";import{w as ye}from"../chunks/DmHFwzWx.js";import{e as yt,a as _e}from"../chunks/C-ow2qSP.js";import{b as we}from"../chunks/CCQwxxp9.js";import{p as _t}from"../chunks/D4Caz1gY.js";import{M as wt}from"../chunks/PC4wJWhj.js";import{T as oe}from"../chunks/DxDw7UWv.js";import{t as De}from"../chunks/CBJzOE8U.js";import{e as Mt}from"../chunks/BZiHL9L3.js";var Ut=ct(' Settings',1),Ct=L('
Metadata
'),Rt=L('
Callback
'),Lt=L('
Webhook
'),zt=L('

No URLs configured

'),St=L('
Controller Webhook URL

Use this URL in your GitHub organization/repository webhook settings

'),$t=L('

Please enter a valid URL

'),jt=L('

Please enter a valid URL

'),Bt=L('

Please enter a valid URL

'),It=L('

Controller Settings

URL where runners can fetch metadata and setup information

URL where runners send status updates and lifecycle events

URL where GitHub/Gitea will send webhook events for job notifications

Time to wait before spinning up a runner for a new job (0 = immediate)

'),At=L('

Controller Information

Identity

Controller ID
Hostname
Job Age Backoff

Integration URLs

',1);function Et(Ce,se){We(se,!1);const b=j(),ie=j();let l=pt(se,"controllerInfo",12);const ne=lt();let i=j(!1),C=j(!1),x=j(""),M=j(""),u=j(""),z=j(null);function le(){c(x,l().metadata_url||""),c(M,l().callback_url||""),c(u,l().webhook_url||""),c(z,l().minimum_job_age_backoff||null),c(i,!0)}async function Re(){try{c(C,!0);const n={};e(x).trim()&&(n.metadata_url=e(x).trim()),e(M).trim()&&(n.callback_url=e(M).trim()),e(u).trim()&&(n.webhook_url=e(u).trim()),e(z)!==null&&e(z)>=0&&(n.minimum_job_age_backoff=e(z));const d=await Oe.updateController(n);De.success("Settings Updated","Controller settings have been updated successfully."),c(i,!1),l(d),ne("updated",d)}catch(n){De.error("Update Failed",n instanceof Error?n.message:"Failed to update controller settings")}finally{c(C,!1)}}function de(){c(i,!1),c(x,""),c(M,""),c(u,""),c(z,null)}Ue(()=>{},()=>{c(b,n=>{if(!n.trim())return!0;try{return new URL(n),!0}catch{return!1}})}),Ue(()=>(e(b),e(x),e(M),e(u),e(z)),()=>{c(ie,e(b)(e(x))&&e(b)(e(M))&&e(b)(e(u))&&(e(z)===null||e(z)>=0))}),Je(),Ve();var ce=At(),Z=dt(ce),J=r(Z),F=r(J),ee=r(F),O=a(r(ee),2),te=a(r(O),2),ve=r(te),ue=r(ve);t(ve),t(te),t(O),t(ee);var me=a(ee,2);kt(me,{variant:"secondary",size:"sm",$$events:{click:le},children:(n,d)=>{var g=Ut();X(),U(n,g)},$$slots:{default:!0}}),t(F);var N=a(F,2),Q=r(N),re=r(Q),ge=a(r(re),2),s=r(ge),o=a(r(s),2),h=r(o,!0);t(o),t(s);var k=a(s,2),p=a(r(k),2),y=r(p,!0);t(p),t(k);var S=a(k,2),E=r(S),T=a(r(E),2),D=r(T);oe(D,{title:"Job Age Backoff",content:"Time in seconds GARM waits after receiving a new job before spinning up a runner. This delay allows existing idle runners to pick up jobs first, preventing unnecessary runner creation. Set to 0 for immediate response."}),t(T),t(E);var G=a(E,2),q=r(G);t(G),t(S),t(ge),t(re),t(Q);var V=a(Q,2),K=r(V),pe=a(r(K),2),be=r(pe);{var Le=n=>{var d=Ct(),g=r(d),_=a(r(g),2),B=r(_);oe(B,{title:"Metadata URL",content:"URL where runners retrieve setup information and metadata. Runners must be able to connect to this URL during their initialization process. Usually accessible at /api/v1/metadata endpoint."}),t(_),t(g);var w=a(g,2),R=r(w,!0);t(w),t(d),H(()=>$(R,(f(l()),v(()=>l().metadata_url)))),U(n,d)};A(be,n=>{f(l()),v(()=>l().metadata_url)&&n(Le)})}var Ee=a(be,2);{var Ne=n=>{var d=Rt(),g=r(d),_=a(r(g),2),B=r(_);oe(B,{title:"Callback URL",content:"URL where runners send status updates and system information (OS version, runner agent ID, etc.) to the controller. Runners must be able to connect to this URL. Usually accessible at /api/v1/callbacks endpoint."}),t(_),t(g);var w=a(g,2),R=r(w,!0);t(w),t(d),H(()=>$(R,(f(l()),v(()=>l().callback_url)))),U(n,d)};A(Ee,n=>{f(l()),v(()=>l().callback_url)&&n(Ne)})}var He=a(Ee,2);{var Qe=n=>{var d=Lt(),g=r(d),_=a(r(g),2),B=r(_);oe(B,{title:"Webhook Base URL",content:"Base URL for webhooks where GitHub sends job notifications. GARM needs to receive these webhooks to know when to create new runners for jobs. GitHub must be able to connect to this URL. Usually accessible at /webhooks endpoint."}),t(_),t(g);var w=a(g,2),R=r(w,!0);t(w),t(d),H(()=>$(R,(f(l()),v(()=>l().webhook_url)))),U(n,d)};A(He,n=>{f(l()),v(()=>l().webhook_url)&&n(Qe)})}var Ke=a(He,2);{var Xe=n=>{var d=zt(),g=a(r(d),4);t(d),Ae("click",g,le),U(n,d)};A(Ke,n=>{f(l()),v(()=>!l().metadata_url&&!l().callback_url&&!l().webhook_url)&&n(Xe)})}t(pe),t(K),t(V),t(N);var Ye=a(N,2);{var Ze=n=>{var d=St(),g=r(d),_=a(r(g),2),B=r(_);oe(B,{title:"Controller Webhook URL",content:"Unique webhook URL for this GARM controller. This is the preferred URL to use in GitHub webhook settings as it's controller-specific and allows multiple GARM controllers to work with the same repository. Automatically combines the webhook base URL with the controller ID."}),t(_),t(g);var w=a(g,2),R=r(w),ae=a(r(R),2),fe=r(ae),ze=r(fe,!0);t(fe),X(2),t(ae),t(R),t(w),t(d),H(()=>$(ze,(f(l()),v(()=>l().controller_webhook_url)))),U(n,d)};A(Ye,n=>{f(l()),v(()=>l().controller_webhook_url)&&n(Ze)})}t(J),t(Z);var et=a(Z,2);{var tt=n=>{wt(n,{$$events:{close:de},children:(d,g)=>{var _=It(),B=a(r(_),2),w=r(B),R=a(r(w),2);ke(R);let ae;var fe=a(R,2);{var ze=m=>{var W=$t();U(m,W)};A(fe,m=>{e(b),e(x),v(()=>!e(b)(e(x)))&&m(ze)})}X(2),t(w);var Se=a(w,2),xe=a(r(Se),2);ke(xe);let Ge;var rt=a(xe,2);{var at=m=>{var W=jt();U(m,W)};A(rt,m=>{e(b),e(M),v(()=>!e(b)(e(M)))&&m(at)})}X(2),t(Se);var $e=a(Se,2),he=a(r($e),2);ke(he);let qe;var ot=a(he,2);{var st=m=>{var W=Bt();U(m,W)};A(ot,m=>{e(b),e(u),v(()=>!e(b)(e(u)))&&m(st)})}X(2),t($e);var je=a($e,2),Pe=a(r(je),2);ke(Pe),X(2),t(je);var Te=a(je,2),Be=r(Te),Ie=a(Be,2),it=r(Ie,!0);t(Ie),t(Te),t(B),t(_),H((m,W,nt)=>{ae=Me(R,1,"block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm",null,ae,m),Ge=Me(xe,1,"block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm",null,Ge,W),qe=Me(he,1,"block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm",null,qe,nt),Be.disabled=e(C),Ie.disabled=!e(ie)||e(C),$(it,e(C)?"Saving...":"Save Changes")},[()=>({"border-red-300":!e(b)(e(x))}),()=>({"border-red-300":!e(b)(e(M))}),()=>({"border-red-300":!e(b)(e(u))})]),we(R,()=>e(x),m=>c(x,m)),we(xe,()=>e(M),m=>c(M,m)),we(he,()=>e(u),m=>c(u,m)),we(Pe,()=>e(z),m=>c(z,m)),Ae("click",Be,de),Ae("submit",B,_t(Re)),U(d,_)},$$slots:{default:!0}})};A(et,n=>{e(i)&&n(tt)})}H(n=>{$(ue,`v${n??""}`),$(h,(f(l()),v(()=>l().controller_id))),$(y,(f(l()),v(()=>l().hostname||"Unknown"))),$(q,`${f(l()),v(()=>l().minimum_job_age_backoff||30)??""}s`)},[()=>(f(l()),v(()=>l().version?.replace(/^v/,"")||"Unknown"))]),U(Ce,ce),Fe()}var Ht=L('

Error loading dashboard

'),Gt=L('
'),qt=L('

Dashboard

Welcome to GARM - GitHub Actions Runner Manager

');function er(Ce,se){We(se,!1);const[b,ie]=bt(),l=()=>ft(yt,"$eagerCache",b),ne=j();let i=j({repositories:0,organizations:0,pools:0,instances:0}),C=j(null),x=j(""),M=[];function u(s,o,h=1e3){const k=parseInt(s.textContent||"0"),p=(o-k)/(h/16);let y=k;const S=()=>{if(y+=p,p>0&&y>=o||p<0&&y<=o){s.textContent=o.toString();return}s.textContent=Math.floor(y).toString(),requestAnimationFrame(S)};k!==o&&requestAnimationFrame(S)}vt(async()=>{try{const[p,y,S,E,T]=await Promise.all([_e.getRepositories(),_e.getOrganizations(),_e.getPools(),Oe.listInstances(),_e.getControllerInfo()]);setTimeout(()=>{const D=document.querySelector('[data-stat="repositories"]'),G=document.querySelector('[data-stat="organizations"]'),q=document.querySelector('[data-stat="pools"]'),V=document.querySelector('[data-stat="instances"]');D&&u(D,p.length),G&&u(G,y.length),q&&u(q,S.length),V&&u(V,E.length)},100),c(i,{repositories:p.length,organizations:y.length,pools:S.length,instances:E.length}),T&&c(C,T)}catch(p){c(x,Mt(p)),console.error("Dashboard error:",p)}const s=ye.subscribeToEntity("repository",["create","delete"],z),o=ye.subscribeToEntity("organization",["create","delete"],le),h=ye.subscribeToEntity("pool",["create","delete"],Re),k=ye.subscribeToEntity("instance",["create","delete"],de);M=[s,o,h,k]}),ut(()=>{M.forEach(s=>s())});function z(s){const o=document.querySelector('[data-stat="repositories"]');s.operation==="create"?(P(i,e(i).repositories++),o&&u(o,e(i).repositories,500)):s.operation==="delete"&&(P(i,e(i).repositories=Math.max(0,e(i).repositories-1)),o&&u(o,e(i).repositories,500))}function le(s){const o=document.querySelector('[data-stat="organizations"]');s.operation==="create"?(P(i,e(i).organizations++),o&&u(o,e(i).organizations,500)):s.operation==="delete"&&(P(i,e(i).organizations=Math.max(0,e(i).organizations-1)),o&&u(o,e(i).organizations,500))}function Re(s){const o=document.querySelector('[data-stat="pools"]');s.operation==="create"?(P(i,e(i).pools++),o&&u(o,e(i).pools,500)):s.operation==="delete"&&(P(i,e(i).pools=Math.max(0,e(i).pools-1)),o&&u(o,e(i).pools,500))}function de(s){const o=document.querySelector('[data-stat="instances"]');s.operation==="create"?(P(i,e(i).instances++),o&&u(o,e(i).instances,500)):s.operation==="delete"&&(P(i,e(i).instances=Math.max(0,e(i).instances-1)),o&&u(o,e(i).instances,500))}function ce(s){c(C,s.detail)}function Z(s){return{blue:"bg-blue-500 text-white",green:"bg-green-500 text-white",purple:"bg-purple-500 text-white",yellow:"bg-yellow-500 text-white"}[s]||"bg-gray-500 text-white"}Ue(()=>(e(C),l()),()=>{(!e(C)||l().loaded.controllerInfo)&&c(C,l().controllerInfo)}),Ue(()=>(e(i),I),()=>{c(ne,[{title:"Repositories",value:e(i).repositories,icon:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z",color:"blue",href:I("/repositories")},{title:"Organizations",value:e(i).organizations,icon:"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z",color:"green",href:I("/organizations")},{title:"Pools",value:e(i).pools,icon:"M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z",color:"purple",href:I("/pools")},{title:"Instances",value:e(i).instances,icon:"M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z",color:"yellow",href:I("/instances")}])}),Je(),Ve();var J=qt();mt(s=>{gt.title="Dashboard - GARM"});var F=a(r(J),2);{var ee=s=>{var o=Ht(),h=r(o),k=a(r(h),2),p=a(r(k),2),y=r(p,!0);t(p),t(k),t(h),t(o),H(()=>$(y,e(x))),U(s,o)};A(F,s=>{e(x)&&s(ee)})}var O=a(F,2);xt(O,5,()=>e(ne),ht,(s,o)=>{var h=Gt(),k=r(h),p=r(k),y=r(p),S=r(y),E=r(S),T=r(E);t(E),t(S),t(y);var D=a(y,2),G=r(D),q=r(G),V=r(q,!0);t(q);var K=a(q,2),pe=r(K,!0);t(K),t(G),t(D),t(p),t(k),t(h),H((be,Le)=>{Y(h,"href",(e(o),v(()=>e(o).href))),Me(S,1,`w-8 h-8 rounded-md ${be??""} flex items-center justify-center`),Y(T,"d",(e(o),v(()=>e(o).icon))),$(V,(e(o),v(()=>e(o).title))),Y(K,"data-stat",Le),$(pe,(e(o),v(()=>e(o).value)))},[()=>(e(o),v(()=>Z(e(o).color))),()=>(e(o),v(()=>e(o).title.toLowerCase()))]),U(s,h)}),t(O);var te=a(O,2);{var ve=s=>{Et(s,{get controllerInfo(){return e(C)},$$events:{updated:ce}})};A(te,s=>{e(C)&&s(ve)})}var ue=a(te,2),me=r(ue),N=a(r(me),4),Q=r(N),re=a(Q,2),ge=a(re,2);t(N),t(me),t(ue),t(J),H((s,o,h)=>{Y(Q,"href",s),Y(re,"href",o),Y(ge,"href",h)},[()=>(f(I),v(()=>I("/repositories"))),()=>(f(I),v(()=>I("/pools"))),()=>(f(I),v(()=>I("/instances")))]),U(Ce,J),Fe(),ie()}export{er as component}; diff --git a/webapp/assets/_app/immutable/nodes/2.Cr6jkYhw.js b/webapp/assets/_app/immutable/nodes/2.Cr6jkYhw.js new file mode 100644 index 00000000..b79bcea7 --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/2.Cr6jkYhw.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as st}from"../chunks/De-I_rkH.js";import{p as it,E as Ht,l as Le,k as v,m as C,g as e,h as nt,f as y,a as Tt,d as r,s as a,r as t,C as Pt,z as P,b as h,q as f,u,t as T,e as S,c as lt,i as Pe,o as qt,B as Dt,j as Wt,$ as Vt,w as J}from"../chunks/BIqNNOMq.js";import{p as Jt,i as U,s as Ft,a as Ot}from"../chunks/CfI2BFUj.js";import{e as Nt,i as Qt}from"../chunks/D8ZtP9JD.js";import{B as Kt,r as N,s as ae,g as dt,d as H,c as te}from"../chunks/CQh-7xkh.js";import{w as Re}from"../chunks/C4VNo_Nu.js";import{e as Xt,a as Me}from"../chunks/B1uxuBYn.js";import{b as re,a as Yt}from"../chunks/Gs5uNKRr.js";import{p as Zt}from"../chunks/CdEA5IGF.js";import{M as er}from"../chunks/BFX8vI-4.js";import{T as F}from"../chunks/CBbBPkpt.js";import{t as ot}from"../chunks/DgRPqjXE.js";import{e as tr}from"../chunks/BZiHL9L3.js";var rr=Pt(' Settings',1),ar=y('Enabled'),or=y('Disabled'),sr=y('
Agent Releases URL
'),ir=y('
Metadata
'),nr=y('
Callback
'),lr=y('
Webhook
'),dr=y('
Agent
'),cr=y('

No URLs configured

'),vr=y('
Controller Webhook URL

Use this URL in your GitHub organization/repository webhook settings

'),ur=y('

Please enter a valid URL

'),gr=y('

Please enter a valid URL

'),mr=y('

Please enter a valid URL

'),pr=y('

Please enter a valid URL

'),br=y('

Please enter a valid URL

'),xr=y('

Controller Settings

URL where runners can fetch metadata and setup information

URL where runners send status updates and lifecycle events

URL where GitHub/Gitea will send webhook events for job notifications

URL where GARM agents connect. Must support websocket connections

Time to wait before spinning up a runner for a new job (0 = immediate)

URL where GARM fetches garm-agent binaries (must be compatible with GitHub releases API)

Automatically synchronize garm-agent tools from the configured releases URL

'),fr=y('

Controller Information

Identity

Controller ID
Hostname
Job Age Backoff
Agent Tools Sync

Integration URLs

',1);function hr(Ae,me){it(me,!1);const m=C(),pe=C();let s=Jt(me,"controllerInfo",12);const be=Ht();let l=C(!1),$=C(!1),R=C(""),z=C(""),p=C(""),j=C(""),B=C(null),G=C(""),O=C(!1);function xe(){v(R,s().metadata_url||""),v(z,s().callback_url||""),v(p,s().webhook_url||""),v(j,s().agent_url||""),v(B,s().minimum_job_age_backoff||null),v(G,s().garm_agent_releases_url||""),v(O,s().enable_agent_tools_sync??!1),v(l,!0)}async function Ce(){try{v($,!0);const o={};e(R).trim()&&(o.metadata_url=e(R).trim()),e(z).trim()&&(o.callback_url=e(z).trim()),e(p).trim()&&(o.webhook_url=e(p).trim()),e(j).trim()&&(o.agent_url=e(j).trim()),e(B)!==null&&e(B)>=0&&(o.minimum_job_age_backoff=e(B)),e(G).trim()&&(o.garm_agent_releases_url=e(G).trim()),o.enable_agent_tools_sync=e(O);const d=await dt.updateController(o);ot.success("Settings Updated","Controller settings have been updated successfully."),v(l,!1),s(d),be("updated",d)}catch(o){ot.error("Update Failed",o instanceof Error?o.message:"Failed to update controller settings")}finally{v($,!1)}}function Q(){v(l,!1),v(R,""),v(z,""),v(p,""),v(j,""),v(B,null),v(G,""),v(O,!1)}Le(()=>{},()=>{v(m,o=>{if(!o.trim())return!0;try{return new URL(o),!0}catch{return!1}})}),Le(()=>(e(m),e(R),e(z),e(p),e(j),e(G),e(B)),()=>{v(pe,e(m)(e(R))&&e(m)(e(z))&&e(m)(e(p))&&e(m)(e(j))&&e(m)(e(G))&&(e(B)===null||e(B)>=0))}),nt(),st();var oe=fr(),se=Tt(oe),K=r(se),X=r(K),ie=r(X),ne=a(r(ie),2),le=a(r(ne),2),de=r(le),fe=r(de);t(de),t(le),t(ne),t(ie);var he=a(ie,2);Kt(he,{variant:"secondary",size:"sm",$$events:{click:xe},children:(o,d)=>{var g=rr();P(),h(o,g)},$$slots:{default:!0}}),t(X);var ce=a(X,2),n=r(ce),i=r(n),w=a(r(i),2),M=r(w),k=a(r(M),2),L=r(k,!0);t(k),t(M);var I=a(M,2),V=a(r(I),2),Y=r(V,!0);t(V),t(I);var q=a(I,2),D=r(q),W=a(r(D),2),Z=r(W);F(Z,{title:"Job Age Backoff",content:"Time in seconds GARM waits after receiving a new job before spinning up a runner. This delay allows existing idle runners to pick up jobs first, preventing unnecessary runner creation. Set to 0 for immediate response."}),t(W),t(D);var ee=a(D,2),ze=r(ee);t(ee),t(q);var ve=a(q,2),ue=r(ve),qe=a(r(ue),2),ct=r(qe);F(ct,{title:"Agent Tools Sync",content:"When enabled, GARM will automatically synchronize garm-agent tools from the configured releases URL. This ensures agents are up-to-date with the latest versions."}),t(qe),t(ue);var De=a(ue,2),vt=r(De);{var ut=o=>{var d=ar();h(o,d)},gt=o=>{var d=or();h(o,d)};U(vt,o=>{f(s()),u(()=>s().enable_agent_tools_sync)?o(ut):o(gt,!1)})}t(De),t(ve);var mt=a(ve,2);{var pt=o=>{var d=sr(),g=r(d),b=a(r(g),2),A=r(b);F(A,{title:"Agent Releases URL",content:"URL from where GARM fetches garm-agent binaries. Must be compatible with the GitHub releases API format. Defaults to the official garm-agent releases repository."}),t(b),t(g);var x=a(g,2),_=r(x,!0);t(x),t(d),T(()=>S(_,(f(s()),u(()=>s().garm_agent_releases_url)))),h(o,d)};U(mt,o=>{f(s()),u(()=>s().garm_agent_releases_url)&&o(pt)})}t(w),t(i),t(n);var We=a(n,2),Ve=r(We),Je=a(r(Ve),2),Fe=r(Je);{var bt=o=>{var d=ir(),g=r(d),b=a(r(g),2),A=r(b);F(A,{title:"Metadata URL",content:"URL where runners retrieve setup information and metadata. Runners must be able to connect to this URL during their initialization process. Usually accessible at /api/v1/metadata endpoint."}),t(b),t(g);var x=a(g,2),_=r(x,!0);t(x),t(d),T(()=>S(_,(f(s()),u(()=>s().metadata_url)))),h(o,d)};U(Fe,o=>{f(s()),u(()=>s().metadata_url)&&o(bt)})}var Oe=a(Fe,2);{var xt=o=>{var d=nr(),g=r(d),b=a(r(g),2),A=r(b);F(A,{title:"Callback URL",content:"URL where runners send status updates and system information (OS version, runner agent ID, etc.) to the controller. Runners must be able to connect to this URL. Usually accessible at /api/v1/callbacks endpoint."}),t(b),t(g);var x=a(g,2),_=r(x,!0);t(x),t(d),T(()=>S(_,(f(s()),u(()=>s().callback_url)))),h(o,d)};U(Oe,o=>{f(s()),u(()=>s().callback_url)&&o(xt)})}var Ne=a(Oe,2);{var ft=o=>{var d=lr(),g=r(d),b=a(r(g),2),A=r(b);F(A,{title:"Webhook Base URL",content:"Base URL for webhooks where GitHub sends job notifications. GARM needs to receive these webhooks to know when to create new runners for jobs. GitHub must be able to connect to this URL. Usually accessible at /webhooks endpoint."}),t(b),t(g);var x=a(g,2),_=r(x,!0);t(x),t(d),T(()=>S(_,(f(s()),u(()=>s().webhook_url)))),h(o,d)};U(Ne,o=>{f(s()),u(()=>s().webhook_url)&&o(ft)})}var Qe=a(Ne,2);{var ht=o=>{var d=dr(),g=r(d),b=a(r(g),2),A=r(b);F(A,{title:"Agent URL",content:"URL where GARM agents connect for communication. This URL must support websocket connections for real-time communication between the controller and agent instances. Usually accessible at /agent endpoint."}),t(b),t(g);var x=a(g,2),_=r(x,!0);t(x),t(d),T(()=>S(_,(f(s()),u(()=>s().agent_url)))),h(o,d)};U(Qe,o=>{f(s()),u(()=>s().agent_url)&&o(ht)})}var yt=a(Qe,2);{var kt=o=>{var d=cr(),g=a(r(d),4);t(d),Pe("click",g,xe),h(o,d)};U(yt,o=>{f(s()),u(()=>!s().metadata_url&&!s().callback_url&&!s().webhook_url&&!s().agent_url)&&o(kt)})}t(Je),t(Ve),t(We),t(ce);var _t=a(ce,2);{var wt=o=>{var d=vr(),g=r(d),b=a(r(g),2),A=r(b);F(A,{title:"Controller Webhook URL",content:"Unique webhook URL for this GARM controller. This is the preferred URL to use in GitHub webhook settings as it's controller-specific and allows multiple GARM controllers to work with the same repository. Automatically combines the webhook base URL with the controller ID."}),t(b),t(g);var x=a(g,2),_=r(x),ge=a(r(_),2),ye=r(ge),Se=r(ye,!0);t(ye),P(2),t(ge),t(_),t(x),t(d),T(()=>S(Se,(f(s()),u(()=>s().controller_webhook_url)))),h(o,d)};U(_t,o=>{f(s()),u(()=>s().controller_webhook_url)&&o(wt)})}t(K),t(se);var Ut=a(se,2);{var Rt=o=>{er(o,{$$events:{close:Q},children:(d,g)=>{var b=xr(),A=a(r(b),2),x=r(A),_=a(r(x),2);N(_);let ge;var ye=a(_,2);{var Se=c=>{var E=ur();h(c,E)};U(ye,c=>{e(m),e(R),u(()=>!e(m)(e(R)))&&c(Se)})}P(2),t(x);var $e=a(x,2),ke=a(r($e),2);N(ke);let Ke;var Mt=a(ke,2);{var Lt=c=>{var E=gr();h(c,E)};U(Mt,c=>{e(m),e(z),u(()=>!e(m)(e(z)))&&c(Lt)})}P(2),t($e);var je=a($e,2),_e=a(r(je),2);N(_e);let Xe;var At=a(_e,2);{var Ct=c=>{var E=mr();h(c,E)};U(At,c=>{e(m),e(p),u(()=>!e(m)(e(p)))&&c(Ct)})}P(2),t(je);var Ge=a(je,2),we=a(r(Ge),2);N(we);let Ye;var zt=a(we,2);{var St=c=>{var E=pr();h(c,E)};U(zt,c=>{e(m),e(j),u(()=>!e(m)(e(j)))&&c(St)})}P(2),t(Ge);var Ie=a(Ge,2),Ze=a(r(Ie),2);N(Ze),P(2),t(Ie);var Be=a(Ie,2),Ue=a(r(Be),2);N(Ue);let et;var $t=a(Ue,2);{var jt=c=>{var E=br();h(c,E)};U($t,c=>{e(m),e(G),u(()=>!e(m)(e(G)))&&c(jt)})}P(2),t(Be);var Ee=a(Be,2),tt=r(Ee),rt=r(tt);N(rt),P(2),t(tt),P(2),t(Ee);var at=a(Ee,2),He=r(at),Te=a(He,2),Gt=r(Te,!0);t(Te),t(at),t(A),t(b),T((c,E,It,Bt,Et)=>{ge=ae(_,1,"block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm",null,ge,c),Ke=ae(ke,1,"block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm",null,Ke,E),Xe=ae(_e,1,"block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm",null,Xe,It),Ye=ae(we,1,"block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm",null,Ye,Bt),et=ae(Ue,1,"block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm",null,et,Et),He.disabled=e($),Te.disabled=!e(pe)||e($),S(Gt,e($)?"Saving...":"Save Changes")},[()=>({"border-red-300":!e(m)(e(R))}),()=>({"border-red-300":!e(m)(e(z))}),()=>({"border-red-300":!e(m)(e(p))}),()=>({"border-red-300":!e(m)(e(j))}),()=>({"border-red-300":!e(m)(e(G))})]),re(_,()=>e(R),c=>v(R,c)),re(ke,()=>e(z),c=>v(z,c)),re(_e,()=>e(p),c=>v(p,c)),re(we,()=>e(j),c=>v(j,c)),re(Ze,()=>e(B),c=>v(B,c)),re(Ue,()=>e(G),c=>v(G,c)),Yt(rt,()=>e(O),c=>v(O,c)),Pe("click",He,Q),Pe("submit",A,Zt(Ce)),h(d,b)},$$slots:{default:!0}})};U(Ut,o=>{e(l)&&o(Rt)})}T(o=>{S(fe,`v${o??""}`),S(L,(f(s()),u(()=>s().controller_id))),S(Y,(f(s()),u(()=>s().hostname||"Unknown"))),S(ze,`${f(s()),u(()=>s().minimum_job_age_backoff||30)??""}s`)},[()=>(f(s()),u(()=>s().version?.replace(/^v/,"")||"Unknown"))]),h(Ae,oe),lt()}var yr=y('

Error loading dashboard

'),kr=y('
'),_r=y('

Dashboard

Welcome to GARM - GitHub Actions Runner Manager

');function Er(Ae,me){it(me,!1);const[m,pe]=Ft(),s=()=>Ot(Xt,"$eagerCache",m),be=C();let l=C({repositories:0,organizations:0,pools:0,instances:0}),$=C(null),R=C(""),z=[];function p(n,i,w=1e3){const M=parseInt(n.textContent||"0"),k=(i-M)/(w/16);let L=M;const I=()=>{if(L+=k,k>0&&L>=i||k<0&&L<=i){n.textContent=i.toString();return}n.textContent=Math.floor(L).toString(),requestAnimationFrame(I)};M!==i&&requestAnimationFrame(I)}qt(async()=>{try{const[k,L,I,V,Y]=await Promise.all([Me.getRepositories(),Me.getOrganizations(),Me.getPools(),dt.listInstances(),Me.getControllerInfo()]);setTimeout(()=>{const q=document.querySelector('[data-stat="repositories"]'),D=document.querySelector('[data-stat="organizations"]'),W=document.querySelector('[data-stat="pools"]'),Z=document.querySelector('[data-stat="instances"]');q&&p(q,k.length),D&&p(D,L.length),W&&p(W,I.length),Z&&p(Z,V.length)},100),v(l,{repositories:k.length,organizations:L.length,pools:I.length,instances:V.length}),Y&&v($,Y)}catch(k){v(R,tr(k)),console.error("Dashboard error:",k)}const n=Re.subscribeToEntity("repository",["create","delete"],j),i=Re.subscribeToEntity("organization",["create","delete"],B),w=Re.subscribeToEntity("pool",["create","delete"],G),M=Re.subscribeToEntity("instance",["create","delete"],O);z=[n,i,w,M]}),Dt(()=>{z.forEach(n=>n())});function j(n){const i=document.querySelector('[data-stat="repositories"]');n.operation==="create"?(J(l,e(l).repositories++),i&&p(i,e(l).repositories,500)):n.operation==="delete"&&(J(l,e(l).repositories=Math.max(0,e(l).repositories-1)),i&&p(i,e(l).repositories,500))}function B(n){const i=document.querySelector('[data-stat="organizations"]');n.operation==="create"?(J(l,e(l).organizations++),i&&p(i,e(l).organizations,500)):n.operation==="delete"&&(J(l,e(l).organizations=Math.max(0,e(l).organizations-1)),i&&p(i,e(l).organizations,500))}function G(n){const i=document.querySelector('[data-stat="pools"]');n.operation==="create"?(J(l,e(l).pools++),i&&p(i,e(l).pools,500)):n.operation==="delete"&&(J(l,e(l).pools=Math.max(0,e(l).pools-1)),i&&p(i,e(l).pools,500))}function O(n){const i=document.querySelector('[data-stat="instances"]');n.operation==="create"?(J(l,e(l).instances++),i&&p(i,e(l).instances,500)):n.operation==="delete"&&(J(l,e(l).instances=Math.max(0,e(l).instances-1)),i&&p(i,e(l).instances,500))}function xe(n){v($,n.detail)}function Ce(n){return{blue:"bg-blue-500 text-white",green:"bg-green-500 text-white",purple:"bg-purple-500 text-white",yellow:"bg-yellow-500 text-white"}[n]||"bg-gray-500 text-white"}Le(()=>(e($),s()),()=>{(!e($)||s().loaded.controllerInfo)&&v($,s().controllerInfo)}),Le(()=>(e(l),H),()=>{v(be,[{title:"Repositories",value:e(l).repositories,icon:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z",color:"blue",href:H("/repositories")},{title:"Organizations",value:e(l).organizations,icon:"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z",color:"green",href:H("/organizations")},{title:"Pools",value:e(l).pools,icon:"M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z",color:"purple",href:H("/pools")},{title:"Instances",value:e(l).instances,icon:"M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z",color:"yellow",href:H("/instances")}])}),nt(),st();var Q=_r();Wt(n=>{Vt.title="Dashboard - GARM"});var oe=a(r(Q),2);{var se=n=>{var i=yr(),w=r(i),M=a(r(w),2),k=a(r(M),2),L=r(k,!0);t(k),t(M),t(w),t(i),T(()=>S(L,e(R))),h(n,i)};U(oe,n=>{e(R)&&n(se)})}var K=a(oe,2);Nt(K,5,()=>e(be),Qt,(n,i)=>{var w=kr(),M=r(w),k=r(M),L=r(k),I=r(L),V=r(I),Y=r(V);t(V),t(I),t(L);var q=a(L,2),D=r(q),W=r(D),Z=r(W,!0);t(W);var ee=a(W,2),ze=r(ee,!0);t(ee),t(D),t(q),t(k),t(M),t(w),T((ve,ue)=>{te(w,"href",(e(i),u(()=>e(i).href))),ae(I,1,`w-8 h-8 rounded-md ${ve??""} flex items-center justify-center`),te(Y,"d",(e(i),u(()=>e(i).icon))),S(Z,(e(i),u(()=>e(i).title))),te(ee,"data-stat",ue),S(ze,(e(i),u(()=>e(i).value)))},[()=>(e(i),u(()=>Ce(e(i).color))),()=>(e(i),u(()=>e(i).title.toLowerCase()))]),h(n,w)}),t(K);var X=a(K,2);{var ie=n=>{hr(n,{get controllerInfo(){return e($)},$$events:{updated:xe}})};U(X,n=>{e($)&&n(ie)})}var ne=a(X,2),le=r(ne),de=a(r(le),4),fe=r(de),he=a(fe,2),ce=a(he,2);t(de),t(le),t(ne),t(Q),T((n,i,w)=>{te(fe,"href",n),te(he,"href",i),te(ce,"href",w)},[()=>(f(H),u(()=>H("/repositories"))),()=>(f(H),u(()=>H("/pools"))),()=>(f(H),u(()=>H("/instances")))]),h(Ae,Q),lt(),pe()}export{Er as component}; diff --git a/webapp/assets/_app/immutable/nodes/20.CaRE9IJw.js b/webapp/assets/_app/immutable/nodes/20.CaRE9IJw.js deleted file mode 100644 index 3cc1e804..00000000 --- a/webapp/assets/_app/immutable/nodes/20.CaRE9IJw.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as Ve}from"../chunks/TJn6xDN9.js";import{p as We,o as Ke,B as Qe,l as Xe,h as Ye,f as _,j as Ze,a as T,t as h,b as u,c as ta,u as i,q as g,e as n,g as t,m as b,d as a,s,k as v,$ as ea,r,w as A,A as ft,v as $}from"../chunks/DniTuB_0.js";import{i as f}from"../chunks/DbNhg6mG.js";import{d as k,c as L,g as O,s as aa}from"../chunks/DD3srElq.js";import{p as Xt}from"../chunks/H2nrvwx_.js";import{g as Yt}from"../chunks/DeKGyprh.js";import{U as ra}from"../chunks/NLwquURr.js";import{D as Zt}from"../chunks/B6XSaEl0.js";import{I as da}from"../chunks/B3nevMeU.js";import{D as sa}from"../chunks/CCF1V3nS.js";import{w as te}from"../chunks/DmHFwzWx.js";import{t as H}from"../chunks/CBJzOE8U.js";import{e as ee}from"../chunks/BZiHL9L3.js";import{e as E,i as J,j as ae,b as P,g as re}from"../chunks/LMA6-4d1.js";var ia=_('

Loading scale set...

'),la=_('

'),na=_(' '),oa=_(' '),va=_('Default system template'),ca=_('
GitHub Runner Group
'),ma=_('

Extra Specifications

 
'),xa=_('

Basic Information

Scale Set ID
Name
Provider
Image
Flavor
Status
Entity
Created At
Updated At

Configuration

Max Runners
Min Idle Runners
Bootstrap Timeout
Runner Prefix
OS Type / Architecture
Runner Install Template
',1),ua=_(' ',1);function Ta(de,se){We(se,!1);const N=b();let e=b(null),j=b(!0),R=b(""),U=b(!1),B=b(!1),F=b(!1),p=b(null),C=null;async function pt(){if(!(!t(N)||isNaN(t(N))))try{v(j,!0),v(R,""),v(e,await O.getScaleSet(t(N))),t(e).instances||A(e,t(e).instances=[])}catch(d){v(R,d instanceof Error?d.message:"Failed to load scale set")}finally{v(j,!1)}}async function ie(d){if(t(e))try{await O.updateScaleSet(t(e).id,d),await pt(),H.success("Scale Set Updated",`Scale Set ${t(e).name} has been updated successfully.`),v(U,!1)}catch(l){throw l}}async function le(){if(t(e)){try{await O.deleteScaleSet(t(e).id),Yt(k("/scalesets"))}catch(d){const l=ee(d);H.error("Delete Failed",l)}v(B,!1)}}async function ne(){if(t(p)){try{await O.deleteInstance(t(p).name),H.success("Instance Deleted",`Instance ${t(p).name} has been deleted successfully.`)}catch(d){const l=ee(d);H.error("Delete Failed",l)}v(F,!1),v(p,null)}}function oe(d){v(p,d),v(F,!0)}function ve(d){if(!d)return"{}";try{if(typeof d=="string"){const l=JSON.parse(d);return JSON.stringify(l,null,2)}return JSON.stringify(d,null,2)}catch{return d.toString()}}function ce(d){if(d.operation==="update"){const l=d.payload;t(e)&&l.id===t(e).id&&v(e,l)}else if(d.operation==="delete"){const l=d.payload.id||d.payload;t(e)&&t(e).id===l&&Yt(k("/scalesets"))}}function me(d){if(!t(e))return;const l=d.payload;if(l.scale_set_id===t(e).id){if(t(e).instances||A(e,t(e).instances=[]),d.operation==="create")A(e,t(e).instances=[...t(e).instances,l]);else if(d.operation==="update")A(e,t(e).instances=t(e).instances.map(S=>S.id===l.id?l:S));else if(d.operation==="delete"){const S=l.id||l;A(e,t(e).instances=t(e).instances.filter(W=>W.id!==S))}v(e,t(e))}}Ke(()=>{pt();const d=te.subscribeToEntity("scaleset",["update","delete"],ce),l=te.subscribeToEntity("instance",["create","update","delete"],me);C=()=>{d(),l()}}),Qe(()=>{C&&(C(),C=null)}),Xe(()=>Xt,()=>{v(N,parseInt(Xt.params.id||"0"))}),Ye(),Ve();var _t=ua();Ze(d=>{h(()=>ea.title=`${t(e),i(()=>t(e)?`${t(e).name} - Scale Set Details`:"Scale Set Details")??""} - GARM`)});var q=T(_t),z=a(q),yt=a(z),V=a(yt),xe=a(V);r(V);var ht=s(V,2),bt=a(ht),kt=s(a(bt),2),ue=a(kt,!0);r(kt),r(bt),r(ht),r(yt),r(z);var ge=s(z,2);{var fe=d=>{var l=ia();u(d,l)},pe=d=>{var l=ft(),S=T(l);{var W=w=>{var I=la(),G=a(I),K=a(G,!0);r(G),r(I),h(()=>n(K,t(R))),u(w,I)},ke=w=>{var I=ft(),G=T(I);{var K=Q=>{var It=xa(),Dt=T(It);{let o=$(()=>(t(e),i(()=>t(e).name||"Scale Set"))),c=$(()=>(g(E),t(e),i(()=>E(t(e))))),m=$(()=>(g(J),t(e),i(()=>J(t(e))))),x=$(()=>(g(re),i(()=>re("github"))));sa(Dt,{get title(){return t(o)},get subtitle(){return`Scale set for ${t(c)??""} (${t(m)??""}) • GitHub Runner Scale Set`},get forgeIcon(){return t(x)},onEdit:()=>v(U,!0),onDelete:()=>v(B,!0)})}var X=s(Dt,2),Y=a(X),$t=a(Y),Et=s(a($t),2),Z=a(Et),Mt=s(a(Z),2),Se=a(Mt,!0);r(Mt),r(Z);var tt=s(Z,2),Tt=s(a(tt),2),we=a(Tt,!0);r(Tt),r(tt);var et=s(tt,2),At=s(a(et),2),Ie=a(At,!0);r(At),r(et);var at=s(et,2),Nt=s(a(at),2),Rt=a(Nt),De=a(Rt,!0);r(Rt),r(Nt),r(at);var rt=s(at,2),Ut=s(a(rt),2),$e=a(Ut,!0);r(Ut),r(rt);var dt=s(rt,2),Bt=s(a(dt),2),st=a(Bt),Ee=a(st,!0);r(st),r(Bt),r(dt);var it=s(dt,2),Ft=s(a(it),2),Ct=a(Ft),lt=a(Ct),Me=a(lt,!0);r(lt);var nt=s(lt,2),Te=a(nt,!0);r(nt),r(Ct),r(Ft),r(it);var ot=s(it,2),Gt=s(a(ot),2),Ae=a(Gt,!0);r(Gt),r(ot);var Lt=s(ot,2),Ot=s(a(Lt),2),Ne=a(Ot,!0);r(Ot),r(Lt),r(Et),r($t),r(Y);var Ht=s(Y,2),Jt=a(Ht),Pt=s(a(Jt),2),vt=a(Pt),jt=s(a(vt),2),Re=a(jt,!0);r(jt),r(vt);var ct=s(vt,2),qt=s(a(ct),2),Ue=a(qt,!0);r(qt),r(ct);var mt=s(ct,2),zt=s(a(mt),2),Be=a(zt);r(zt),r(mt);var xt=s(mt,2),Vt=s(a(xt),2),Fe=a(Vt,!0);r(Vt),r(xt);var ut=s(xt,2),Wt=s(a(ut),2),Ce=a(Wt);r(Wt),r(ut);var gt=s(ut,2),Kt=s(a(gt),2),Ge=a(Kt);{var Le=o=>{var c=na(),m=a(c,!0);r(c),h(x=>{L(c,"href",x),n(m,(t(e),i(()=>t(e).template_name)))},[()=>(g(k),t(e),i(()=>k(`/templates/${t(e).template_id}`)))]),u(o,c)},Oe=o=>{var c=ft(),m=T(c);{var x=y=>{var D=oa(),qe=a(D);r(D),h(ze=>{L(D,"href",ze),n(qe,`Template ID: ${t(e),i(()=>t(e).template_id)??""}`)},[()=>(g(k),t(e),i(()=>k(`/templates/${t(e).template_id}`)))]),u(y,D)},M=y=>{var D=va();u(y,D)};f(m,y=>{t(e),i(()=>t(e).template_id)?y(x):y(M,!1)},!0)}u(o,c)};f(Ge,o=>{t(e),i(()=>t(e).template_name)?o(Le):o(Oe,!1)})}r(Kt),r(gt);var He=s(gt,2);{var Je=o=>{var c=ca(),m=s(a(c),2),x=a(m,!0);r(m),r(c),h(()=>n(x,(t(e),i(()=>t(e)["github-runner-group"])))),u(o,c)};f(He,o=>{t(e),i(()=>t(e)["github-runner-group"])&&o(Je)})}r(Pt),r(Jt),r(Ht),r(X);var Qt=s(X,2);{var Pe=o=>{var c=ma(),m=a(c),x=s(a(m),2),M=a(x,!0);r(x),r(m),r(c),h(y=>n(M,y),[()=>(t(e),i(()=>ve(t(e).extra_specs)))]),u(o,c)};f(Qt,o=>{t(e),i(()=>t(e).extra_specs)&&o(Pe)})}var je=s(Qt,2);{let o=$(()=>(t(e),i(()=>t(e).instances||[])));da(je,{get instances(){return t(o)},entityType:"scaleset",onDeleteInstance:oe})}h((o,c,m,x,M)=>{n(Se,(t(e),i(()=>t(e).id))),n(we,(t(e),i(()=>t(e).name))),n(Ie,(t(e),i(()=>t(e).provider_name))),n(De,(t(e),i(()=>t(e).image))),n($e,(t(e),i(()=>t(e).flavor))),aa(st,1,`inline-flex px-2 py-1 text-xs font-medium rounded-full ${t(e),i(()=>t(e).enabled?"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200":"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200")??""}`),n(Ee,(t(e),i(()=>t(e).enabled?"Enabled":"Disabled"))),n(Me,o),L(nt,"href",c),n(Te,m),n(Ae,x),n(Ne,M),n(Re,(t(e),i(()=>t(e).max_runners))),n(Ue,(t(e),i(()=>t(e).min_idle_runners))),n(Be,`${t(e),i(()=>t(e).runner_bootstrap_timeout)??""} minutes`),n(Fe,(t(e),i(()=>t(e).runner_prefix||"garm"))),n(Ce,`${t(e),i(()=>t(e).os_type)??""} / ${t(e),i(()=>t(e).os_arch)??""}`)},[()=>(g(J),t(e),i(()=>J(t(e)))),()=>(g(ae),t(e),i(()=>ae(t(e)))),()=>(g(E),t(e),i(()=>E(t(e)))),()=>(g(P),t(e),i(()=>P(t(e).created_at||""))),()=>(g(P),t(e),i(()=>P(t(e).updated_at||"")))]),u(Q,It)};f(G,Q=>{t(e)&&Q(K)},!0)}u(w,I)};f(S,w=>{t(R)?w(W):w(ke,!1)},!0)}u(d,l)};f(ge,d=>{t(j)?d(fe):d(pe,!1)})}r(q);var St=s(q,2);{var _e=d=>{ra(d,{get scaleSet(){return t(e)},$$events:{close:()=>v(U,!1),submit:l=>ie(l.detail)}})};f(St,d=>{t(U)&&t(e)&&d(_e)})}var wt=s(St,2);{var ye=d=>{{let l=$(()=>(t(e),g(E),i(()=>`Scale Set ${t(e).name} (${E(t(e))})`)));Zt(d,{title:"Delete Scale Set",message:"Are you sure you want to delete this scale set? This action cannot be undone and will remove all associated runners.",get itemName(){return t(l)},$$events:{close:()=>v(B,!1),confirm:le}})}};f(wt,d=>{t(B)&&t(e)&&d(ye)})}var he=s(wt,2);{var be=d=>{Zt(d,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return t(p),i(()=>t(p).name)},$$events:{close:()=>{v(F,!1),v(p,null)},confirm:ne}})};f(he,d=>{t(F)&&t(p)&&d(be)})}h(d=>{L(xe,"href",d),n(ue,(t(e),i(()=>t(e)?t(e).name:"Loading...")))},[()=>(g(k),i(()=>k("/scalesets")))]),u(de,_t),ta()}export{Ta as component}; diff --git a/webapp/assets/_app/immutable/nodes/20.DEIMaB2j.js b/webapp/assets/_app/immutable/nodes/20.DEIMaB2j.js new file mode 100644 index 00000000..397eb7bc --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/20.DEIMaB2j.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as ea}from"../chunks/De-I_rkH.js";import{p as aa,o as ra,B as da,l as sa,h as ia,f as _,j as la,a as T,t as h,b as u,c as na,u as i,q as g,e as n,g as t,m as b,d as a,s,k as v,$ as oa,r,w as A,A as yt,v as $}from"../chunks/BIqNNOMq.js";import{i as f}from"../chunks/CfI2BFUj.js";import{d as k,c as L,g as O,s as ae}from"../chunks/CQh-7xkh.js";import{p as re}from"../chunks/B-zJt1QP.js";import{g as de}from"../chunks/BSYpqPvJ.js";import{U as va}from"../chunks/If6x_I-9.js";import{D as se}from"../chunks/Db7N5hjl.js";import{I as ca}from"../chunks/DAaZIIvX.js";import{D as ma}from"../chunks/CIekn_9e.js";import{w as ie}from"../chunks/C4VNo_Nu.js";import{t as H}from"../chunks/DgRPqjXE.js";import{e as le}from"../chunks/BZiHL9L3.js";import{e as E,i as J,j as ne,b as P,g as oe}from"../chunks/B7If18kh.js";import{F as xa}from"../chunks/BLWgJqKz.js";var ua=_('

Loading scale set...

'),ga=_('

'),fa=_(' '),pa=_(' '),_a=_('Default system template'),ya=_('
GitHub Runner Group
'),ha=_('

Extra Specifications

 
'),ba=_('

Basic Information

Scale Set ID
Name
Provider
Forge Type
Image
Flavor
Status
Entity
Created At
Updated At

Configuration

Max Runners
Min Idle Runners
Bootstrap Timeout
Runner Prefix
OS Type / Architecture
Shell Access
Runner Install Template
',1),ka=_(' ',1);function La(ve,ce){aa(ce,!1);const N=b();let e=b(null),j=b(!0),F=b(""),R=b(!1),U=b(!1),B=b(!1),p=b(null),C=null;async function ht(){if(!(!t(N)||isNaN(t(N))))try{v(j,!0),v(F,""),v(e,await O.getScaleSet(t(N))),t(e).instances||A(e,t(e).instances=[])}catch(d){v(F,d instanceof Error?d.message:"Failed to load scale set")}finally{v(j,!1)}}async function me(d){if(t(e))try{await O.updateScaleSet(t(e).id,d),await ht(),H.success("Scale Set Updated",`Scale Set ${t(e).name} has been updated successfully.`),v(R,!1)}catch(l){throw l}}async function xe(){if(t(e)){try{await O.deleteScaleSet(t(e).id),de(k("/scalesets"))}catch(d){const l=le(d);H.error("Delete Failed",l)}v(U,!1)}}async function ue(){if(t(p)){try{await O.deleteInstance(t(p).name),H.success("Instance Deleted",`Instance ${t(p).name} has been deleted successfully.`)}catch(d){const l=le(d);H.error("Delete Failed",l)}v(B,!1),v(p,null)}}function ge(d){v(p,d),v(B,!0)}function fe(d){if(!d)return"{}";try{if(typeof d=="string"){const l=JSON.parse(d);return JSON.stringify(l,null,2)}return JSON.stringify(d,null,2)}catch{return d.toString()}}function pe(d){if(d.operation==="update"){const l=d.payload;t(e)&&l.id===t(e).id&&v(e,l)}else if(d.operation==="delete"){const l=d.payload.id||d.payload;t(e)&&t(e).id===l&&de(k("/scalesets"))}}function _e(d){if(!t(e))return;const l=d.payload;if(l.scale_set_id===t(e).id){if(t(e).instances||A(e,t(e).instances=[]),d.operation==="create")A(e,t(e).instances=[...t(e).instances,l]);else if(d.operation==="update")A(e,t(e).instances=t(e).instances.map(S=>S.id===l.id?l:S));else if(d.operation==="delete"){const S=l.id||l;A(e,t(e).instances=t(e).instances.filter(W=>W.id!==S))}v(e,t(e))}}ra(()=>{ht();const d=ie.subscribeToEntity("scaleset",["update","delete"],pe),l=ie.subscribeToEntity("instance",["create","update","delete"],_e);C=()=>{d(),l()}}),da(()=>{C&&(C(),C=null)}),sa(()=>re,()=>{v(N,parseInt(re.params.id||"0"))}),ia(),ea();var bt=ka();la(d=>{h(()=>oa.title=`${t(e),i(()=>t(e)?`${t(e).name} - Scale Set Details`:"Scale Set Details")??""} - GARM`)});var q=T(bt),z=a(q),kt=a(z),V=a(kt),ye=a(V);r(V);var St=s(V,2),wt=a(St),It=s(a(wt),2),he=a(It,!0);r(It),r(wt),r(St),r(kt),r(z);var be=s(z,2);{var ke=d=>{var l=ua();u(d,l)},Se=d=>{var l=yt(),S=T(l);{var W=w=>{var I=ga(),G=a(I),K=a(G,!0);r(G),r(I),h(()=>n(K,t(F))),u(w,I)},Ee=w=>{var I=yt(),G=T(I);{var K=Q=>{var Et=ba(),Mt=T(Et);{let o=$(()=>(t(e),i(()=>t(e).name||"Scale Set"))),c=$(()=>(g(E),t(e),i(()=>E(t(e))))),m=$(()=>(g(J),t(e),i(()=>J(t(e))))),x=$(()=>(g(oe),i(()=>oe("github"))));ma(Mt,{get title(){return t(o)},get subtitle(){return`Scale set for ${t(c)??""} (${t(m)??""}) • GitHub Runner Scale Set`},get forgeIcon(){return t(x)},onEdit:()=>v(R,!0),onDelete:()=>v(U,!0)})}var X=s(Mt,2),Y=a(X),Tt=a(Y),At=s(a(Tt),2),Z=a(At),Nt=s(a(Z),2),Me=a(Nt,!0);r(Nt),r(Z);var tt=s(Z,2),Ft=s(a(tt),2),Te=a(Ft,!0);r(Ft),r(tt);var et=s(tt,2),Rt=s(a(et),2),Ae=a(Rt,!0);r(Rt),r(et);var at=s(et,2),Ut=s(a(at),2),Ne=a(Ut);xa(Ne,{get item(){return t(e)}}),r(Ut),r(at);var rt=s(at,2),Bt=s(a(rt),2),Ct=a(Bt),Fe=a(Ct,!0);r(Ct),r(Bt),r(rt);var dt=s(rt,2),Gt=s(a(dt),2),Re=a(Gt,!0);r(Gt),r(dt);var st=s(dt,2),Lt=s(a(st),2),it=a(Lt),Ue=a(it,!0);r(it),r(Lt),r(st);var lt=s(st,2),Ot=s(a(lt),2),Ht=a(Ot),nt=a(Ht),Be=a(nt,!0);r(nt);var ot=s(nt,2),Ce=a(ot,!0);r(ot),r(Ht),r(Ot),r(lt);var vt=s(lt,2),Jt=s(a(vt),2),Ge=a(Jt,!0);r(Jt),r(vt);var Pt=s(vt,2),jt=s(a(Pt),2),Le=a(jt,!0);r(jt),r(Pt),r(At),r(Tt),r(Y);var qt=s(Y,2),zt=a(qt),Vt=s(a(zt),2),ct=a(Vt),Wt=s(a(ct),2),Oe=a(Wt,!0);r(Wt),r(ct);var mt=s(ct,2),Kt=s(a(mt),2),He=a(Kt,!0);r(Kt),r(mt);var xt=s(mt,2),Qt=s(a(xt),2),Je=a(Qt);r(Qt),r(xt);var ut=s(xt,2),Xt=s(a(ut),2),Pe=a(Xt,!0);r(Xt),r(ut);var gt=s(ut,2),Yt=s(a(gt),2),je=a(Yt);r(Yt),r(gt);var ft=s(gt,2),Zt=s(a(ft),2),pt=a(Zt),qe=a(pt,!0);r(pt),r(Zt),r(ft);var _t=s(ft,2),te=s(a(_t),2),ze=a(te);{var Ve=o=>{var c=fa(),m=a(c,!0);r(c),h(x=>{L(c,"href",x),n(m,(t(e),i(()=>t(e).template_name)))},[()=>(g(k),t(e),i(()=>k(`/templates/${t(e).template_id}`)))]),u(o,c)},We=o=>{var c=yt(),m=T(c);{var x=y=>{var D=pa(),Ze=a(D);r(D),h(ta=>{L(D,"href",ta),n(Ze,`Template ID: ${t(e),i(()=>t(e).template_id)??""}`)},[()=>(g(k),t(e),i(()=>k(`/templates/${t(e).template_id}`)))]),u(y,D)},M=y=>{var D=_a();u(y,D)};f(m,y=>{t(e),i(()=>t(e).template_id)?y(x):y(M,!1)},!0)}u(o,c)};f(ze,o=>{t(e),i(()=>t(e).template_name)?o(Ve):o(We,!1)})}r(te),r(_t);var Ke=s(_t,2);{var Qe=o=>{var c=ya(),m=s(a(c),2),x=a(m,!0);r(m),r(c),h(()=>n(x,(t(e),i(()=>t(e)["github-runner-group"])))),u(o,c)};f(Ke,o=>{t(e),i(()=>t(e)["github-runner-group"])&&o(Qe)})}r(Vt),r(zt),r(qt),r(X);var ee=s(X,2);{var Xe=o=>{var c=ha(),m=a(c),x=s(a(m),2),M=a(x,!0);r(x),r(m),r(c),h(y=>n(M,y),[()=>(t(e),i(()=>fe(t(e).extra_specs)))]),u(o,c)};f(ee,o=>{t(e),i(()=>t(e).extra_specs)&&o(Xe)})}var Ye=s(ee,2);{let o=$(()=>(t(e),i(()=>t(e).instances||[])));ca(Ye,{get instances(){return t(o)},entityType:"scaleset",onDeleteInstance:ge})}h((o,c,m,x,M)=>{n(Me,(t(e),i(()=>t(e).id))),n(Te,(t(e),i(()=>t(e).name))),n(Ae,(t(e),i(()=>t(e).provider_name))),n(Fe,(t(e),i(()=>t(e).image))),n(Re,(t(e),i(()=>t(e).flavor))),ae(it,1,`inline-flex px-2 py-1 text-xs font-medium rounded-full ${t(e),i(()=>t(e).enabled?"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200":"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200")??""}`),n(Ue,(t(e),i(()=>t(e).enabled?"Enabled":"Disabled"))),n(Be,o),L(ot,"href",c),n(Ce,m),n(Ge,x),n(Le,M),n(Oe,(t(e),i(()=>t(e).max_runners))),n(He,(t(e),i(()=>t(e).min_idle_runners))),n(Je,`${t(e),i(()=>t(e).runner_bootstrap_timeout)??""} minutes`),n(Pe,(t(e),i(()=>t(e).runner_prefix||"garm"))),n(je,`${t(e),i(()=>t(e).os_type)??""} / ${t(e),i(()=>t(e).os_arch)??""}`),ae(pt,1,`inline-flex px-2 py-1 text-xs font-medium rounded-full ${t(e),i(()=>t(e).enable_shell?"bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200":"bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200")??""}`),n(qe,(t(e),i(()=>t(e).enable_shell?"Enabled":"Disabled")))},[()=>(g(J),t(e),i(()=>J(t(e)))),()=>(g(ne),t(e),i(()=>ne(t(e)))),()=>(g(E),t(e),i(()=>E(t(e)))),()=>(g(P),t(e),i(()=>P(t(e).created_at||""))),()=>(g(P),t(e),i(()=>P(t(e).updated_at||"")))]),u(Q,Et)};f(G,Q=>{t(e)&&Q(K)},!0)}u(w,I)};f(S,w=>{t(F)?w(W):w(Ee,!1)},!0)}u(d,l)};f(be,d=>{t(j)?d(ke):d(Se,!1)})}r(q);var Dt=s(q,2);{var we=d=>{va(d,{get scaleSet(){return t(e)},$$events:{close:()=>v(R,!1),submit:l=>me(l.detail)}})};f(Dt,d=>{t(R)&&t(e)&&d(we)})}var $t=s(Dt,2);{var Ie=d=>{{let l=$(()=>(t(e),g(E),i(()=>`Scale Set ${t(e).name} (${E(t(e))})`)));se(d,{title:"Delete Scale Set",message:"Are you sure you want to delete this scale set? This action cannot be undone and will remove all associated runners.",get itemName(){return t(l)},$$events:{close:()=>v(U,!1),confirm:xe}})}};f($t,d=>{t(U)&&t(e)&&d(Ie)})}var De=s($t,2);{var $e=d=>{se(d,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return t(p),i(()=>t(p).name)},$$events:{close:()=>{v(B,!1),v(p,null)},confirm:ue}})};f(De,d=>{t(B)&&t(p)&&d($e)})}h(d=>{L(ye,"href",d),n(he,(t(e),i(()=>t(e)?t(e).name:"Loading...")))},[()=>(g(k),i(()=>k("/scalesets")))]),u(ve,bt),na()}export{La as component}; diff --git a/webapp/assets/_app/immutable/nodes/21.BYVkQ1Gx.js b/webapp/assets/_app/immutable/nodes/21.BYVkQ1Gx.js new file mode 100644 index 00000000..a7566bfa --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/21.BYVkQ1Gx.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as Re}from"../chunks/De-I_rkH.js";import{p as Ee,o as Se,l as P,h as Be,f as pe,j as Ie,a as L,b as p,c as Fe,g as e,m as l,$ as Ge,A as I,k as a,u as n,s as b,q as i,z as oe,D as q,v as F,d as M,r as A,t as le,e as ne}from"../chunks/BIqNNOMq.js";import{i as C,s as ze,a as He}from"../chunks/CfI2BFUj.js";import{g as G}from"../chunks/BSYpqPvJ.js";import{d as z,B as Ne,g as ie}from"../chunks/CQh-7xkh.js";import{P as Ue}from"../chunks/Cq4AwQWc.js";import{A as Oe}from"../chunks/Dbr2TLcG.js";import{D as je,G as H,A as qe}from"../chunks/BjNB1vhO.js";import{t as D}from"../chunks/DgRPqjXE.js";import{e as de}from"../chunks/BZiHL9L3.js";import{B as ce}from"../chunks/CwE4al8R.js";import{D as me}from"../chunks/Db7N5hjl.js";import{E as We}from"../chunks/C6HeU_02.js";import{i as W}from"../chunks/C98nByjP.js";import{e as Je,a as J}from"../chunks/B1uxuBYn.js";var Ke=pe('

Error loading templates

'),Qe=pe(" ",1);function pt(ue,ge){Ee(ge,!1);const[fe,ye]=ze(),y=()=>He(Je,"$eagerCache",fe),N=l(),U=l(),v=l(),K=l();let h=l([]),R=l(""),u=l(""),d=l(1),_=l(25),$=l(1),E=l(!1),S=l(!1),m=l(null);async function ve(){try{await J.retryResource("templates")}catch(t){console.error("Retry failed:",t)}}async function he(){if(e(m)?.id)try{await ie.deleteTemplate(e(m).id),D.add({type:"success",title:"Template deleted",message:`Template "${e(m).name}" has been deleted successfully.`}),a(E,!1),a(m,null)}catch(t){const r=de(t);D.add({type:"error",title:"Failed to delete template",message:r})}}function _e(){G(z("/templates/create"))}async function Q(t){if(!t.id){D.add({type:"error",title:"Error",message:"Template ID is missing"});return}G(z(`/templates/create?clone=${t.id}`))}function V(t){a(m,t),a(E,!0)}function we(){a(S,!0)}async function xe(){try{await ie.restoreTemplates({restore_all:!0}),D.add({type:"success",title:"Templates restored",message:"System templates have been restored successfully."}),a(S,!1),await J.retryResource("templates")}catch(t){const r=de(t);D.add({type:"error",title:"Failed to restore templates",message:r})}}function X(t){switch(t){case"github":return{color:"blue",text:"GitHub"};case"gitea":return{color:"green",text:"Gitea"};default:return{color:"gray",text:t||"Unknown"}}}function Y(t){switch(t){case"linux":return{color:"blue",text:"Linux"};case"windows":return{color:"info",text:"Windows"};default:return{color:"gray",text:t||"Unknown"}}}const be=[{key:"name",title:"Name",cellComponent:We,cellProps:{entityType:"template"}},{key:"description",title:"Description",cellComponent:H,cellProps:{field:"description",type:"description"}},{key:"forge_type",title:"Forge Type",cellComponent:H,cellProps:{field:"forge_type"}},{key:"os_type",title:"OS Type",cellComponent:H,cellProps:{field:"os_type"}},{key:"owner_id",title:"Owner",cellComponent:H,cellProps:{field:"owner_id"}},{key:"actions",title:"Actions",align:"right",cellComponent:qe,cellProps:t=>{const r=W(),s=t.owner_id==="system",o=[];return o.push({type:"copy",title:"Clone",ariaLabel:"Clone template",action:"clone"}),(r||!s)&&o.push({type:"edit",title:"Edit",ariaLabel:"Edit template",action:"edit"}),(r||!s)&&o.push({type:"delete",title:"Delete",ariaLabel:"Delete template",action:"delete"}),{actions:o}}}],Ce={entityType:"template",primaryText:{field:"name",isClickable:!0,href:"/templates/{id}"},secondaryText:{field:"description"},badges:[{type:"custom",value:t=>{const r=X(t.forge_type);return{variant:r.color,text:r.text}}},{type:"custom",value:t=>{const r=Y(t.os_type);return{variant:r.color,text:r.text}}}],actions:[{type:"clone",handler:t=>Q(t)},{type:"edit",handler:t=>G(z(`/templates/${t.id}?edit=true`))},{type:"delete",handler:t=>V(t)}]};Se(async()=>{try{const t=await J.getTemplates();t&&Array.isArray(t)&&a(h,t)}catch(t){console.error("Failed to load templates:",t),a(R,t instanceof Error?t.message:"Failed to load templates")}}),P(()=>(e(h),y()),()=>{(!e(h).length||y().loaded.templates)&&a(h,y().templates)}),P(()=>y(),()=>{a(N,y().loading.templates)}),P(()=>y(),()=>{a(U,y().errorMessages.templates)}),P(()=>(e(u),e(h)),()=>{a(v,e(u)?e(h).filter(t=>t.name?.toLowerCase().includes(e(u).toLowerCase())||t.description?.toLowerCase().includes(e(u).toLowerCase())||t.forge_type?.toLowerCase().includes(e(u).toLowerCase())||t.os_type?.toLowerCase().includes(e(u).toLowerCase())):e(h))}),P(()=>(e($),e(v),e(_),e(d)),()=>{a($,Math.ceil(e(v).length/e(_))),e(d)>e($)&&e($)>0&&a(d,e($))}),P(()=>(e(v),e(d),e(_)),()=>{a(K,e(v).slice((e(d)-1)*e(_),e(d)*e(_)))}),Be(),Re();var Z=Qe();Ie(t=>{Ge.title="Runner Install Templates - GARM"});var ee=L(Z);Ue(ee,{title:"Runner Install Templates",description:"Manage templates for configuring runner software installation. These templates can be set on pools or scale sets.",actionLabel:"Create Template",showAction:!0,$$events:{action:_e},$$slots:{"secondary-actions":(t,r)=>{var s=I(),o=L(s);{var g=w=>{Ne(w,{variant:"secondary",icon:'',$$events:{click:we},children:(T,B)=>{oe();var c=q("Restore System Templates");p(T,c)},$$slots:{default:!0}})};C(o,w=>{i(W),n(W)&&w(g)})}p(t,s)}}});var te=b(ee,2);{var $e=t=>{var r=Ke(),s=M(r),o=b(M(s),2),g=b(M(o),2),w=M(g,!0);A(g);var T=b(g,2),B=M(T);Oe(B,{variant:"secondary",size:"sm",$$events:{click:ve},children:(c,f)=>{oe();var O=q("Try Again");p(c,O)},$$slots:{default:!0}}),A(T),A(o),A(s),A(r),le(()=>ne(w,e(R)||e(U))),p(t,r)};C(te,t=>{(e(R)||e(U))&&!e(N)&&t($e)})}var ae=b(te,2);je(ae,{get columns(){return be},get data(){return e(K)},get loading(){return e(N)},get error(){return e(R)},get searchTerm(){return e(u)},searchPlaceholder:"Search templates by name, description, type...",get currentPage(){return e(d)},get perPage(){return e(_)},get totalPages(){return e($)},get totalItems(){return e(v),n(()=>e(v).length)},get mobileCardConfig(){return Ce},emptyMessage:"No templates found",$$events:{search:t=>{a(u,t.detail.term),a(d,1)},pageChange:t=>a(d,t.detail.page),perPageChange:t=>{a(_,t.detail.perPage),a(d,1)},clone:t=>Q(t.detail.item),edit:t=>G(z(`/templates/${t.detail.item.id}?edit=true`)),delete:t=>V(t.detail.item)},$$slots:{cell:(t,r)=>{const s=F(()=>r.item),o=F(()=>r.column);var g=I(),w=L(g);{var T=c=>{const f=F(()=>(i(e(s)),n(()=>X(e(s).forge_type))));ce(c,{get variant(){return i(e(f)),n(()=>e(f).color)},get text(){return i(e(f)),n(()=>e(f).text)}})},B=c=>{var f=I(),O=L(f);{var Le=k=>{const x=F(()=>(i(e(s)),n(()=>Y(e(s).os_type))));ce(k,{get variant(){return i(e(x)),n(()=>e(x).color)},get text(){return i(e(x)),n(()=>e(x).text)}})},Me=k=>{var x=I(),Ae=L(x);{var De=j=>{var se=q();le(()=>ne(se,(i(e(s)),n(()=>e(s).owner_id==="system"?"System":e(s).owner_id||"Unknown")))),p(j,se)};C(Ae,j=>{i(e(o)),n(()=>e(o).key==="owner_id")&&j(De)},!0)}p(k,x)};C(O,k=>{i(e(o)),n(()=>e(o).key==="os_type")?k(Le):k(Me,!1)},!0)}p(c,f)};C(w,c=>{i(e(o)),n(()=>e(o).key==="forge_type")?c(T):c(B,!1)})}p(t,g)}}});var re=b(ae,2);{var Te=t=>{me(t,{title:"Delete Template",message:"Are you sure you want to delete this template? This action cannot be undone.",get itemName(){return e(m),n(()=>e(m).name)},$$events:{close:()=>{a(E,!1),a(m,null)},confirm:he}})};C(re,t=>{e(E)&&e(m)&&t(Te)})}var ke=b(re,2);{var Pe=t=>{me(t,{title:"Restore System Templates",message:"This will restore all system templates from the default configuration. Any missing system templates will be created, and any changes made to existing system templates will be overwritten with the default content.",itemName:"",confirmLabel:"Restore Templates",danger:!1,$$events:{close:()=>a(S,!1),confirm:xe}})};C(ke,t=>{e(S)&&t(Pe)})}p(ue,Z),Fe(),ye()}export{pt as component}; diff --git a/webapp/assets/_app/immutable/nodes/21.ReXW9QTm.js b/webapp/assets/_app/immutable/nodes/21.ReXW9QTm.js deleted file mode 100644 index 33ad0bf1..00000000 --- a/webapp/assets/_app/immutable/nodes/21.ReXW9QTm.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as we}from"../chunks/TJn6xDN9.js";import{p as be,o as Te,l as b,h as $e,f as se,j as ke,a as D,b as h,c as Le,g as e,m as l,$ as Pe,k as a,A as O,u as n,s as T,q as d,v as E,d as $,r as k,z as Ae,D as ee,t as te,e as ae}from"../chunks/DniTuB_0.js";import{i as L,s as Me,a as De}from"../chunks/DbNhg6mG.js";import{g as I}from"../chunks/DeKGyprh.js";import{d as B,g as Ee}from"../chunks/DD3srElq.js";import{P as Ie}from"../chunks/BlYHwhWl.js";import{A as Be}from"../chunks/B5vVe1Fo.js";import{D as Se,G as S,A as Fe}from"../chunks/QtGwBUod.js";import{t as q}from"../chunks/CBJzOE8U.js";import{e as Ge}from"../chunks/BZiHL9L3.js";import{B as re}from"../chunks/DcQdHuVc.js";import{D as Re}from"../chunks/B6XSaEl0.js";import{E as ze}from"../chunks/D3pbRQAB.js";import{i as Ue}from"../chunks/C98nByjP.js";import{e as Ne,a as oe}from"../chunks/C-ow2qSP.js";var Oe=se('

Error loading templates

'),qe=se(" ",1);function lt(le,ne){be(ne,!1);const[ie,de]=Me(),g=()=>De(Ne,"$eagerCache",ie),F=l(),G=l(),f=l(),H=l();let y=l([]),P=l(""),m=l(""),i=l(1),v=l(25),x=l(1),A=l(!1),c=l(null);async function ce(){try{await oe.retryResource("templates")}catch(t){console.error("Retry failed:",t)}}async function me(){if(e(c)?.id)try{await Ee.deleteTemplate(e(c).id),q.add({type:"success",title:"Template deleted",message:`Template "${e(c).name}" has been deleted successfully.`}),a(A,!1),a(c,null)}catch(t){const r=Ge(t);q.add({type:"error",title:"Failed to delete template",message:r})}}function pe(){I(B("/templates/create"))}async function j(t){if(!t.id){q.add({type:"error",title:"Error",message:"Template ID is missing"});return}I(B(`/templates/create?clone=${t.id}`))}function W(t){a(c,t),a(A,!0)}function J(t){switch(t){case"github":return{color:"blue",text:"GitHub"};case"gitea":return{color:"green",text:"Gitea"};default:return{color:"gray",text:t||"Unknown"}}}function K(t){switch(t){case"linux":return{color:"blue",text:"Linux"};case"windows":return{color:"info",text:"Windows"};default:return{color:"gray",text:t||"Unknown"}}}const ue=[{key:"name",title:"Name",cellComponent:ze,cellProps:{entityType:"template"}},{key:"description",title:"Description",cellComponent:S,cellProps:{field:"description",type:"description"}},{key:"forge_type",title:"Forge Type",cellComponent:S,cellProps:{field:"forge_type"}},{key:"os_type",title:"OS Type",cellComponent:S,cellProps:{field:"os_type"}},{key:"owner_id",title:"Owner",cellComponent:S,cellProps:{field:"owner_id"}},{key:"actions",title:"Actions",align:"right",cellComponent:Fe,cellProps:t=>{const r=Ue(),s=t.owner_id==="system",o=[];return o.push({type:"copy",title:"Clone",ariaLabel:"Clone template",action:"clone"}),(r||!s)&&o.push({type:"edit",title:"Edit",ariaLabel:"Edit template",action:"edit"}),(r||!s)&&o.push({type:"delete",title:"Delete",ariaLabel:"Delete template",action:"delete"}),{actions:o}}}],ge={entityType:"template",primaryText:{field:"name",isClickable:!0,href:"/templates/{id}"},secondaryText:{field:"description"},badges:[{type:"custom",value:t=>{const r=J(t.forge_type);return{variant:r.color,text:r.text}}},{type:"custom",value:t=>{const r=K(t.os_type);return{variant:r.color,text:r.text}}}],actions:[{type:"clone",handler:t=>j(t)},{type:"edit",handler:t=>I(B(`/templates/${t.id}?edit=true`))},{type:"delete",handler:t=>W(t)}]};Te(async()=>{try{const t=await oe.getTemplates();t&&Array.isArray(t)&&a(y,t)}catch(t){console.error("Failed to load templates:",t),a(P,t instanceof Error?t.message:"Failed to load templates")}}),b(()=>(e(y),g()),()=>{(!e(y).length||g().loaded.templates)&&a(y,g().templates)}),b(()=>g(),()=>{a(F,g().loading.templates)}),b(()=>g(),()=>{a(G,g().errorMessages.templates)}),b(()=>(e(m),e(y)),()=>{a(f,e(m)?e(y).filter(t=>t.name?.toLowerCase().includes(e(m).toLowerCase())||t.description?.toLowerCase().includes(e(m).toLowerCase())||t.forge_type?.toLowerCase().includes(e(m).toLowerCase())||t.os_type?.toLowerCase().includes(e(m).toLowerCase())):e(y))}),b(()=>(e(x),e(f),e(v),e(i)),()=>{a(x,Math.ceil(e(f).length/e(v))),e(i)>e(x)&&e(x)>0&&a(i,e(x))}),b(()=>(e(f),e(i),e(v)),()=>{a(H,e(f).slice((e(i)-1)*e(v),e(i)*e(v)))}),$e(),we();var Q=qe();ke(t=>{Pe.title="Runner Install Templates - GARM"});var V=D(Q);Ie(V,{title:"Runner Install Templates",description:"Manage templates for configuring runner software installation. These templates can be set on pools or scale sets.",actionLabel:"Create Template",showAction:!0,$$events:{action:pe}});var X=T(V,2);{var fe=t=>{var r=Oe(),s=$(r),o=T($(s),2),C=T($(o),2),R=$(C,!0);k(C);var M=T(C,2),z=$(M);Be(z,{variant:"secondary",size:"sm",$$events:{click:ce},children:(p,u)=>{Ae();var U=ee("Try Again");h(p,U)},$$slots:{default:!0}}),k(M),k(o),k(s),k(r),te(()=>ae(R,e(P)||e(G))),h(t,r)};L(X,t=>{(e(P)||e(G))&&!e(F)&&t(fe)})}var Y=T(X,2);Se(Y,{get columns(){return ue},get data(){return e(H)},get loading(){return e(F)},get error(){return e(P)},get searchTerm(){return e(m)},searchPlaceholder:"Search templates by name, description, type...",get currentPage(){return e(i)},get perPage(){return e(v)},get totalPages(){return e(x)},get totalItems(){return e(f),n(()=>e(f).length)},get mobileCardConfig(){return ge},emptyMessage:"No templates found",$$events:{search:t=>{a(m,t.detail.term),a(i,1)},pageChange:t=>a(i,t.detail.page),perPageChange:t=>{a(v,t.detail.perPage),a(i,1)},clone:t=>j(t.detail.item),edit:t=>I(B(`/templates/${t.detail.item.id}?edit=true`)),delete:t=>W(t.detail.item)},$$slots:{cell:(t,r)=>{const s=E(()=>r.item),o=E(()=>r.column);var C=O(),R=D(C);{var M=p=>{const u=E(()=>(d(e(s)),n(()=>J(e(s).forge_type))));re(p,{get variant(){return d(e(u)),n(()=>e(u).color)},get text(){return d(e(u)),n(()=>e(u).text)}})},z=p=>{var u=O(),U=D(u);{var _e=w=>{const _=E(()=>(d(e(s)),n(()=>K(e(s).os_type))));re(w,{get variant(){return d(e(_)),n(()=>e(_).color)},get text(){return d(e(_)),n(()=>e(_).text)}})},he=w=>{var _=O(),xe=D(_);{var Ce=N=>{var Z=ee();te(()=>ae(Z,(d(e(s)),n(()=>e(s).owner_id==="system"?"System":e(s).owner_id||"Unknown")))),h(N,Z)};L(xe,N=>{d(e(o)),n(()=>e(o).key==="owner_id")&&N(Ce)},!0)}h(w,_)};L(U,w=>{d(e(o)),n(()=>e(o).key==="os_type")?w(_e):w(he,!1)},!0)}h(p,u)};L(R,p=>{d(e(o)),n(()=>e(o).key==="forge_type")?p(M):p(z,!1)})}h(t,C)}}});var ye=T(Y,2);{var ve=t=>{Re(t,{title:"Delete Template",message:"Are you sure you want to delete this template? This action cannot be undone.",get itemName(){return e(c),n(()=>e(c).name)},$$events:{close:()=>{a(A,!1),a(c,null)},confirm:me}})};L(ye,t=>{e(A)&&e(c)&&t(ve)})}h(le,Q),Le(),de()}export{lt as component}; diff --git a/webapp/assets/_app/immutable/nodes/22.D6A1FyiW.js b/webapp/assets/_app/immutable/nodes/22.C1YmVgRY.js similarity index 50% rename from webapp/assets/_app/immutable/nodes/22.D6A1FyiW.js rename to webapp/assets/_app/immutable/nodes/22.C1YmVgRY.js index f7446efc..4ec7be99 100644 --- a/webapp/assets/_app/immutable/nodes/22.D6A1FyiW.js +++ b/webapp/assets/_app/immutable/nodes/22.C1YmVgRY.js @@ -1,2 +1,2 @@ -import"../chunks/DsnmJJEf.js";import{i as Dt}from"../chunks/TJn6xDN9.js";import{p as Ut,o as Lt,l as ue,h as Rt,f as A,j as It,a as ee,b as _,c as Mt,g as e,m as w,t as P,k as l,u as s,$ as Et,s as r,w as I,A as Oe,d,r as o,z as W,D as qe,v as g,e as S,q as U,i as Ce,y as Ft}from"../chunks/DniTuB_0.js";import{i as T}from"../chunks/DbNhg6mG.js";import{d as te,g as $e,r as Ye,b as St}from"../chunks/DD3srElq.js";import{b as Je}from"../chunks/CCQwxxp9.js";import{p as Ht}from"../chunks/D4Caz1gY.js";import{p as me}from"../chunks/H2nrvwx_.js";import{g as Ae}from"../chunks/DeKGyprh.js";import{A as Ke}from"../chunks/B5vVe1Fo.js";import{t as M}from"../chunks/CBJzOE8U.js";import{e as De}from"../chunks/BZiHL9L3.js";import{B as pe}from"../chunks/DcQdHuVc.js";import{D as Bt}from"../chunks/CCF1V3nS.js";import{C as Pt,a as Qe}from"../chunks/BB5NL1nO.js";import{D as jt}from"../chunks/B6XSaEl0.js";import{i as Xe}from"../chunks/C98nByjP.js";import{g as Ze}from"../chunks/LMA6-4d1.js";import{w as Gt}from"../chunks/DmHFwzWx.js";var Vt=A('
Loading template...
'),zt=A('

Error loading template

'),Nt=A('
Forge Type

Cannot be changed

OS Type

Cannot be changed

'),Wt=A('
Created
'),Ot=A('
Last Updated
'),qt=A('
Name
Description
Forge Type
OS Type
Owner
Template ID
'),Yt=A('
'),Jt=A('

Available Template Variables

Your template can use the following variables using Go template syntax (e.g., ):

Runner Info
  • .RunnerName - Runner name
  • .RunnerLabels - Comma separated labels
  • .RunnerUsername - Runner service username
  • .RunnerGroup - Runner service group
  • .GitHubRunnerGroup - GitHub runner group
Download & Install
  • .FileName - Download file name
  • .DownloadURL - Runner download URL
  • .TempDownloadToken - Download token
  • .RepoURL - Repository URL
Configuration
  • .MetadataURL - Instance metadata URL
  • .CallbackURL - Status callback URL
  • .CallbackToken - Callback token
  • .CABundle - CA certificate bundle
  • .EnableBootDebug - Enable debug mode
  • .UseJITConfig - Use JIT configuration
  • .ExtraContext - Additional context map

💡 Tip: Use for conditional content, or to iterate over extra context.

'),Kt=A('

'),Qt=A('
',1),Xt=A('

Template Information

Template Content

',1),Zt=A(" ",1);function ya(et,tt){Ut(tt,!1);const ae=w(),ge=w(),ve=w();let re=w(!0),t=w(null),j=w(""),y=w(!1),i=w({name:"",description:"",data:new Uint8Array}),m=w(""),O=w("text"),H=w(!1),C=w({name:"",description:""}),F=w(""),be=w(!1),de=w(!1);async function xe(){try{if(l(re,!0),l(j,""),l(t,await $e.getTemplate(e(ae))),!e(t))throw new Error("Template not found");if(I(i,e(i).name=e(t).name||""),I(i,e(i).description=e(t).description||""),I(C,e(C).name=e(t).name||""),I(C,e(C).description=e(t).description||""),e(t).data)try{if(Array.isArray(e(t).data)){const a=new Uint8Array(e(t).data);l(m,new TextDecoder().decode(a)),l(F,e(m))}else l(m,atob(e(t).data)),l(F,e(m))}catch(a){console.error("Failed to decode template data:",a),l(m,""),l(F,"")}else l(m,""),l(F,"")}catch(a){l(j,De(a)),M.add({type:"error",title:"Failed to load template",message:e(j)})}finally{l(re,!1)}}async function Ue(){if(!(!e(t)?.id||!e(ve)))try{const a={name:e(i).name,description:e(i).description||void 0,data:Array.from(new TextEncoder().encode(e(m)))},n=await $e.updateTemplate(e(t).id,a);l(t,n),M.add({type:"success",title:"Template updated",message:`Template "${e(i).name}" has been updated successfully.`}),I(C,e(C).name=e(i).name),I(C,e(C).description=e(i).description),l(F,e(m)),l(y,!1)}catch(a){const n=De(a);M.add({type:"error",title:"Failed to update template",message:n})}}async function at(){if(e(t)?.id)try{await $e.deleteTemplate(e(t).id),M.add({type:"success",title:"Template deleted",message:`Template "${e(t).name}" has been deleted successfully.`}),Ae(te("/templates"))}catch(a){const n=De(a);M.add({type:"error",title:"Failed to delete template",message:n})}}function Le(){l(y,!0),l(H,!1)}function rt(){return e(i).name!==e(C).name||e(i).description!==e(C).description||e(m)!==e(F)}function dt(){if(rt()){l(de,!0);return}Re()}function Re(){if(l(y,!1),l(H,!1),me.url.searchParams.get("edit")==="true"){Ae(te("/templates"));return}if(e(t))if(I(i,e(i).name=e(t).name||""),I(i,e(i).description=e(t).description||""),e(t).data)try{if(Array.isArray(e(t).data)){const a=new Uint8Array(e(t).data);l(m,new TextDecoder().decode(a))}else l(m,atob(e(t).data))}catch(a){console.error("Failed to decode template data:",a),l(m,"")}else l(m,"")}function ot(){l(de,!1),Re()}function Ie(a){switch(a){case"github":return{color:"blue",text:"GitHub"};case"gitea":return{color:"green",text:"Gitea"};default:return{color:"gray",text:a||"Unknown"}}}function Me(a){switch(a){case"linux":return{color:"blue",text:"Linux"};case"windows":return{color:"info",text:"Windows"};default:return{color:"gray",text:a||"Unknown"}}}function fe(){if(!e(t)?.data)return"";try{if(Array.isArray(e(t).data)){const a=new Uint8Array(e(t).data);return new TextDecoder().decode(a)}else return atob(e(t).data)}catch(a){return console.error("Failed to decode template data:",a),"Error: Failed to decode template content"}}function Ee(a){const L=a.split(` -`)[0]?.trim()||"";return L.startsWith("#!/bin/bash")||L.startsWith("#!/bin/sh")?"bash":L.startsWith("#!/usr/bin/env pwsh")||L.includes("#ps1_sysnative")?"powershell":L.startsWith("#!/usr/bin/env python")||L.startsWith("#!/usr/bin/python")?"python":a.includes("param(")||a.includes("Write-Host")||a.includes("$_")?"powershell":a.includes("def ")||a.includes("import ")||a.includes("print(")?"python":a.includes("echo ")||a.includes("export ")||a.includes("if [")?"bash":"text"}async function lt(a){try{navigator.clipboard&&navigator.clipboard.writeText?(await navigator.clipboard.writeText(a),M.add({type:"success",title:"Copied to clipboard",message:"Template content has been copied to your clipboard."})):Fe(a)}catch(n){console.error("Failed to copy to clipboard:",n),Fe(a)}}function Fe(a){try{const n=document.createElement("textarea");n.value=a,n.style.position="fixed",n.style.left="-999999px",n.style.top="-999999px",document.body.appendChild(n),n.focus(),n.select();const L=document.execCommand("copy");if(document.body.removeChild(n),L)M.add({type:"success",title:"Copied to clipboard",message:"Template content has been copied to your clipboard."});else throw new Error("Copy command failed")}catch(n){console.error("Fallback copy failed:",n),M.add({type:"error",title:"Copy failed",message:"Unable to copy to clipboard. Please manually select and copy the content."})}}Lt(()=>{if(e(ae))return xe().then(()=>{me.url.searchParams.get("edit")==="true"&&Le()}),Gt.subscribeToEntity("template",["update","delete"],n=>{n.payload&&n.payload.id===e(ae)&&(n.operation==="update"?e(y)?M.add({type:"info",title:"Template updated",message:"This template has been updated externally. Your changes are preserved."}):xe():n.operation==="delete"&&(M.add({type:"info",title:"Template deleted",message:`Template "${e(t)?.name||"Unknown"}" has been deleted.`}),Ae(te("/templates"))))});l(j,"Invalid template ID"),l(re,!1)}),ue(()=>me,()=>{l(ae,parseInt(me.params.id||"0"))}),ue(()=>(e(m),e(H)),()=>{e(m)&&!e(H)&&l(O,Ee(e(m)))}),ue(()=>(e(i),e(C),e(m),e(F)),()=>{l(ge,e(i).name!==e(C).name||e(i).description!==e(C).description||e(m)!==e(F))}),ue(()=>(e(ge),e(i),e(m)),()=>{l(ve,e(ge)&&e(i).name.trim().length>0&&e(m).trim().length>0)}),Rt(),Dt();var Se=Zt();It(a=>{P(()=>Et.title=`${e(t),s(()=>e(t)?.name||"Template")??""} - GARM`)});var He=ee(Se);{var st=a=>{var n=Vt();_(a,n)},nt=a=>{var n=Oe(),L=ee(n);{var mt=G=>{var V=zt(),oe=d(V),le=r(d(oe),2),B=r(d(le),2),se=d(B,!0);o(B);var q=r(B,2),ne=d(q);Ke(ne,{variant:"secondary",size:"sm",$$events:{click:xe},children:(z,Y)=>{W();var J=qe("Try Again");_(z,J)},$$slots:{default:!0}});var ye=r(ne,2);{let z=g(()=>(U(te),s(()=>te("/templates"))));Ke(ye,{variant:"secondary",size:"sm",get href(){return e(z)},children:(Y,J)=>{W();var K=qe("Back to Templates");_(Y,K)},$$slots:{default:!0}})}o(q),o(le),o(oe),o(V),P(()=>S(se,e(j))),_(G,V)},pt=G=>{var V=Oe(),oe=ee(V);{var le=B=>{const se=g(()=>(U(Xe),s(Xe))),q=g(()=>(e(t),s(()=>e(t).owner_id==="system"))),ne=g(()=>e(se)||!e(q)),ye=g(()=>e(se)||!e(q));var z=Xt(),Y=ee(z);{let p=g(()=>(e(t),s(()=>e(t).name||"Unnamed Template"))),c=g(()=>(U(Ze),e(t),s(()=>Ze(e(t).forge_type||"unknown")))),u=g(()=>e(y)?dt:e(ne)?Le:null),v=g(()=>e(y)?Ue:e(ye)?()=>l(be,!0):null),x=g(()=>e(y)?"Close":"Edit"),b=g(()=>e(y)?"Save Changes":"Delete"),f=g(()=>(e(y),"secondary")),R=g(()=>e(y)?"primary":"danger"),E=g(()=>e(y)?!e(ve):!1),N=g(()=>e(y)?"":""),Q=g(()=>e(y)?"":"");Bt(Y,{get title(){return e(p)},subtitle:"View and manage template details",get forgeIcon(){return e(c)},get onEdit(){return e(u)},get onDelete(){return e(v)},get editLabel(){return e(x)},get deleteLabel(){return e(b)},get editVariant(){return e(f)},get deleteVariant(){return e(R)},get deleteDisabled(){return e(E)},get editIcon(){return e(N)},get deleteIcon(){return e(Q)}})}var J=r(Y,2),K=d(J),Pe=d(K),gt=r(d(Pe),2);{var vt=p=>{var c=Nt(),u=d(c),v=d(u),x=r(d(v),2);Ye(x),o(v);var b=r(v,2),f=r(d(b),2);Ye(f),o(b),o(u);var R=r(u,2),E=d(R),N=r(d(E),2);{var Q=$=>{const D=g(()=>(e(t),s(()=>Ie(e(t).forge_type))));pe($,{get variant(){return U(e(D)),s(()=>e(D).color)},get text(){return U(e(D)),s(()=>e(D).text)}})};T(N,$=>{e(t),s(()=>e(t).forge_type)&&$(Q)})}W(2),o(E);var ie=r(E,2),X=r(d(ie),2);{var ce=$=>{const D=g(()=>(e(t),s(()=>Me(e(t).os_type))));pe($,{get variant(){return U(e(D)),s(()=>e(D).color)},get text(){return U(e(D)),s(()=>e(D).text)}})};T(X,$=>{e(t),s(()=>e(t).os_type)&&$(ce)})}W(2),o(ie),o(R),o(c),Je(x,()=>e(i).name,$=>I(i,e(i).name=$)),Je(f,()=>e(i).description,$=>I(i,e(i).description=$)),Ce("submit",c,Ht(Ue)),_(p,c)},bt=p=>{var c=qt(),u=d(c),v=r(d(u),2),x=d(v,!0);o(v),o(u);var b=r(u,2),f=r(d(b),2),R=d(f,!0);o(f),o(b);var E=r(b,2),N=r(d(E),2),Q=d(N);{var ie=k=>{const h=g(()=>(e(t),s(()=>Ie(e(t).forge_type))));pe(k,{get variant(){return U(e(h)),s(()=>e(h).color)},get text(){return U(e(h)),s(()=>e(h).text)}})};T(Q,k=>{e(t),s(()=>e(t).forge_type)&&k(ie)})}o(N),o(E);var X=r(E,2),ce=r(d(X),2),$=d(ce);{var D=k=>{const h=g(()=>(e(t),s(()=>Me(e(t).os_type))));pe(k,{get variant(){return U(e(h)),s(()=>e(h).color)},get text(){return U(e(h)),s(()=>e(h).text)}})};T($,k=>{e(t),s(()=>e(t).os_type)&&k(D)})}o(ce),o(X);var _e=r(X,2),ze=r(d(_e),2),wt=d(ze,!0);o(ze),o(_e);var ke=r(_e,2),Ne=r(d(ke),2),Tt=d(Ne,!0);o(Ne),o(ke);var We=r(ke,2);{var Ct=k=>{var h=Wt(),Z=r(d(h),2),we=d(Z,!0);o(Z),o(h),P(Te=>S(we,Te),[()=>(e(t),s(()=>new Date(e(t).created_at).toLocaleDateString()))]),_(k,h)};T(We,k=>{e(t),s(()=>e(t).created_at)&&k(Ct)})}var $t=r(We,2);{var At=k=>{var h=Ot(),Z=r(d(h),2),we=d(Z,!0);o(Z),o(h),P(Te=>S(we,Te),[()=>(e(t),s(()=>new Date(e(t).updated_at).toLocaleDateString()))]),_(k,h)};T($t,k=>{e(t),s(()=>e(t).updated_at)&&k(At)})}o(c),P(()=>{S(x,(e(t),s(()=>e(t).name||"Unnamed Template"))),S(R,(e(t),s(()=>e(t).description||"No description"))),S(wt,(e(t),s(()=>e(t).owner_id==="system"?"System":e(t).owner_id||"Unknown"))),S(Tt,(e(t),s(()=>e(t).id)))}),_(p,c)};T(gt,p=>{e(y)?p(vt):p(bt,!1)})}o(Pe),o(K);var je=r(K,2),Ge=d(je),he=d(Ge),xt=r(d(he),2);{var ft=p=>{var c=Yt(),u=r(d(c),2);P(()=>{e(O),Ft(()=>{e(H)})});var v=d(u);v.value=v.__value="bash";var x=r(v);x.value=x.__value="powershell";var b=r(x);b.value=b.__value="python";var f=r(b);f.value=f.__value="text",o(u),o(c),St(u,()=>e(O),R=>l(O,R)),Ce("change",u,()=>l(H,!0)),_(p,c)};T(xt,p=>{e(y)&&p(ft)})}o(he);var Ve=r(he,2);{var yt=p=>{var c=Jt(),u=r(d(c),2),v=r(d(u));v.textContent="{{ .RunnerName }}",W(),o(u);var x=r(u,4),b=r(d(x),3);b.textContent="{{if .CABundle}}...{{end}}";var f=r(b,2);f.textContent="{{range $key, $value := .ExtraContext}}{{$key}}: {{$value}}{{end}}",W(),o(x),o(c),_(p,c)};T(Ve,p=>{e(y)&&p(yt)})}var ht=r(Ve,2);{var _t=p=>{var c=Kt(),u=d(c);{let b=g(()=>!e(H));Qe(u,{get language(){return e(O)},get autoDetect(){return e(b)},enableTemplateCompletion:!0,minHeight:"400px",placeholder:"Enter your template script content here...",get value(){return e(m)},set value(f){l(m,f)},$$events:{change:f=>l(m,f.detail.value)},$$legacy:!0})}var v=r(u,2),x=d(v);o(v),o(c),P(()=>S(x,`Template content should be a ${e(t),s(()=>e(t).os_type==="windows"?"PowerShell":"bash")??""} script for runner installation and configuration on ${e(t),s(()=>e(t).os_type)??""}.`)),_(p,c)},kt=p=>{var c=Qt(),u=ee(c),v=r(d(u),2);o(u);var x=r(u,2),b=d(x);{let f=g(()=>s(fe)),R=g(()=>s(()=>Ee(fe())));Qe(b,{get value(){return e(f)},get language(){return e(R)},readonly:!0,minHeight:"400px"})}o(x),Ce("click",v,()=>lt(fe())),_(p,c)};T(ht,p=>{e(y)?p(_t):p(kt,!1)})}o(Ge),o(je),o(J),_(B,z)};T(oe,B=>{e(t)&&B(le)},!0)}_(G,V)};T(L,G=>{e(j)&&!e(t)?G(mt):G(pt,!1)},!0)}_(a,n)};T(He,a=>{e(re)?a(st):a(nt,!1)})}var Be=r(He,2);{var it=a=>{jt(a,{title:"Delete Template",message:"Are you sure you want to delete this template? This action cannot be undone.",get itemName(){return e(t),s(()=>e(t).name)},$$events:{close:()=>l(be,!1),confirm:at}})};T(Be,a=>{e(be)&&e(t)&&a(it)})}var ct=r(Be,2);{var ut=a=>{Pt(a,{title:"Unsaved Changes",message:"You have unsaved changes. Are you sure you want to discard them?",confirmText:"Discard Changes",cancelText:"Stay on Page",variant:"warning",$$events:{close:()=>l(de,!1),confirm:ot}})};T(ct,a=>{e(de)&&a(ut)})}_(et,Se),Mt()}export{ya as component}; +import"../chunks/DsnmJJEf.js";import{i as Dt}from"../chunks/De-I_rkH.js";import{p as Ut,o as Lt,l as ue,h as Rt,f as A,j as It,a as ee,b as _,c as Mt,g as e,m as w,t as P,k as l,u as s,$ as Et,s as r,w as I,A as Oe,d,r as o,z as W,D as qe,v as g,e as S,q as U,i as $e,y as Ft}from"../chunks/BIqNNOMq.js";import{i as T}from"../chunks/CfI2BFUj.js";import{d as te,g as Ae,r as Je,b as St}from"../chunks/CQh-7xkh.js";import{b as Ye}from"../chunks/Gs5uNKRr.js";import{p as Ht}from"../chunks/CdEA5IGF.js";import{p as me}from"../chunks/B-zJt1QP.js";import{g as De}from"../chunks/BSYpqPvJ.js";import{A as Ke}from"../chunks/Dbr2TLcG.js";import{t as E}from"../chunks/DgRPqjXE.js";import{e as Ue}from"../chunks/BZiHL9L3.js";import{B as pe}from"../chunks/CwE4al8R.js";import{D as Bt}from"../chunks/CIekn_9e.js";import{C as Pt,a as Qe}from"../chunks/mAwhcVsI.js";import{D as jt}from"../chunks/Db7N5hjl.js";import{i as Xe}from"../chunks/C98nByjP.js";import{g as Ze}from"../chunks/B7If18kh.js";import{w as Gt}from"../chunks/C4VNo_Nu.js";var Vt=A('
Loading template...
'),zt=A('

Error loading template

'),Nt=A('
Forge Type

Cannot be changed

OS Type

Cannot be changed

'),Wt=A('
Created
'),Ot=A('
Last Updated
'),qt=A('
Name
Description
Forge Type
OS Type
Owner
Template ID
'),Jt=A('
'),Yt=A('

Available Template Variables

Your template can use the following variables using Go template syntax (e.g., ):

Runner Info
  • .RunnerName - Runner name
  • .RunnerLabels - Comma separated labels
  • .RunnerUsername - Runner service username
  • .RunnerGroup - Runner service group
  • .GitHubRunnerGroup - GitHub runner group
Download & Install
  • .FileName - Download file name
  • .DownloadURL - Runner download URL
  • .TempDownloadToken - Download token
  • .RepoURL - Repository URL
Configuration
  • .MetadataURL - Instance metadata URL
  • .CallbackURL - Status callback URL
  • .CallbackToken - Callback token
  • .CABundle - CA certificate bundle
  • .EnableBootDebug - Enable debug mode
  • .UseJITConfig - Use JIT configuration
  • .ExtraContext - Additional context map

💡 Tip: Use for conditional content, or to iterate over extra context.

'),Kt=A('

'),Qt=A('
',1),Xt=A('

Template Information

Template Content

',1),Zt=A(" ",1);function ya(et,tt){Ut(tt,!1);const ae=w(),ge=w(),ve=w();let re=w(!0),t=w(null),j=w(""),h=w(!1),i=w({name:"",description:"",data:new Uint8Array}),m=w(""),O=w("text"),H=w(!1),C=w({name:"",description:""}),F=w(""),be=w(!1),de=w(!1);async function xe(){try{if(l(re,!0),l(j,""),l(t,await Ae.getTemplate(e(ae))),!e(t))throw new Error("Template not found");if(I(i,e(i).name=e(t).name||""),I(i,e(i).description=e(t).description||""),I(C,e(C).name=e(t).name||""),I(C,e(C).description=e(t).description||""),e(t).data)try{if(Array.isArray(e(t).data)){const a=new Uint8Array(e(t).data);l(m,new TextDecoder().decode(a)),l(F,e(m))}else l(m,atob(e(t).data)),l(F,e(m))}catch(a){console.error("Failed to decode template data:",a),l(m,""),l(F,"")}else l(m,""),l(F,"")}catch(a){l(j,Ue(a)),E.add({type:"error",title:"Failed to load template",message:e(j)})}finally{l(re,!1)}}async function fe(){if(!(!e(t)?.id||!e(ve)))try{const a={name:e(i).name,description:e(i).description||void 0,data:Array.from(new TextEncoder().encode(e(m)))};await Ae.updateTemplate(e(t).id,a),E.add({type:"success",title:"Template updated",message:`Template "${e(i).name}" has been updated successfully.`}),I(C,e(C).name=e(i).name),I(C,e(C).description=e(i).description),l(F,e(m))}catch(a){const n=Ue(a);E.add({type:"error",title:"Failed to update template",message:n})}}async function at(){if(e(t)?.id)try{await Ae.deleteTemplate(e(t).id),E.add({type:"success",title:"Template deleted",message:`Template "${e(t).name}" has been deleted successfully.`}),De(te("/templates"))}catch(a){const n=Ue(a);E.add({type:"error",title:"Failed to delete template",message:n})}}function Le(){l(h,!0),l(H,!1)}function rt(){return e(i).name!==e(C).name||e(i).description!==e(C).description||e(m)!==e(F)}function dt(){if(rt()){l(de,!0);return}Re()}function Re(){if(l(h,!1),l(H,!1),me.url.searchParams.get("edit")==="true"){De(te("/templates"));return}if(e(t))if(I(i,e(i).name=e(t).name||""),I(i,e(i).description=e(t).description||""),e(t).data)try{if(Array.isArray(e(t).data)){const a=new Uint8Array(e(t).data);l(m,new TextDecoder().decode(a))}else l(m,atob(e(t).data))}catch(a){console.error("Failed to decode template data:",a),l(m,"")}else l(m,"")}function ot(){l(de,!1),Re()}function Ie(a){switch(a){case"github":return{color:"blue",text:"GitHub"};case"gitea":return{color:"green",text:"Gitea"};default:return{color:"gray",text:a||"Unknown"}}}function Me(a){switch(a){case"linux":return{color:"blue",text:"Linux"};case"windows":return{color:"info",text:"Windows"};default:return{color:"gray",text:a||"Unknown"}}}function ye(){if(!e(t)?.data)return"";try{if(Array.isArray(e(t).data)){const a=new Uint8Array(e(t).data);return new TextDecoder().decode(a)}else return atob(e(t).data)}catch(a){return console.error("Failed to decode template data:",a),"Error: Failed to decode template content"}}function Ee(a){const L=a.split(` +`)[0]?.trim()||"";return L.startsWith("#!/bin/bash")||L.startsWith("#!/bin/sh")?"bash":L.startsWith("#!/usr/bin/env pwsh")||L.includes("#ps1_sysnative")?"powershell":L.startsWith("#!/usr/bin/env python")||L.startsWith("#!/usr/bin/python")?"python":a.includes("param(")||a.includes("Write-Host")||a.includes("$_")?"powershell":a.includes("def ")||a.includes("import ")||a.includes("print(")?"python":a.includes("echo ")||a.includes("export ")||a.includes("if [")?"bash":"text"}async function lt(a){try{navigator.clipboard&&navigator.clipboard.writeText?(await navigator.clipboard.writeText(a),E.add({type:"success",title:"Copied to clipboard",message:"Template content has been copied to your clipboard."})):Fe(a)}catch(n){console.error("Failed to copy to clipboard:",n),Fe(a)}}function Fe(a){try{const n=document.createElement("textarea");n.value=a,n.style.position="fixed",n.style.left="-999999px",n.style.top="-999999px",document.body.appendChild(n),n.focus(),n.select();const L=document.execCommand("copy");if(document.body.removeChild(n),L)E.add({type:"success",title:"Copied to clipboard",message:"Template content has been copied to your clipboard."});else throw new Error("Copy command failed")}catch(n){console.error("Fallback copy failed:",n),E.add({type:"error",title:"Copy failed",message:"Unable to copy to clipboard. Please manually select and copy the content."})}}Lt(()=>{if(e(ae))return xe().then(()=>{me.url.searchParams.get("edit")==="true"&&Le()}),Gt.subscribeToEntity("template",["update","delete"],n=>{n.payload&&n.payload.id===e(ae)&&(n.operation==="update"?e(h)?l(t,n.payload):xe():n.operation==="delete"&&(E.add({type:"info",title:"Template deleted",message:`Template "${e(t)?.name||"Unknown"}" has been deleted.`}),De(te("/templates"))))});l(j,"Invalid template ID"),l(re,!1)}),ue(()=>me,()=>{l(ae,parseInt(me.params.id||"0"))}),ue(()=>(e(m),e(H)),()=>{e(m)&&!e(H)&&l(O,Ee(e(m)))}),ue(()=>(e(i),e(C),e(m),e(F)),()=>{l(ge,e(i).name!==e(C).name||e(i).description!==e(C).description||e(m)!==e(F))}),ue(()=>(e(ge),e(i),e(m)),()=>{l(ve,e(ge)&&e(i).name.trim().length>0&&e(m).trim().length>0)}),Rt(),Dt();var Se=Zt();It(a=>{P(()=>Et.title=`${e(t),s(()=>e(t)?.name||"Template")??""} - GARM`)});var He=ee(Se);{var st=a=>{var n=Vt();_(a,n)},nt=a=>{var n=Oe(),L=ee(n);{var mt=G=>{var V=zt(),oe=d(V),le=r(d(oe),2),B=r(d(le),2),se=d(B,!0);o(B);var q=r(B,2),ne=d(q);Ke(ne,{variant:"secondary",size:"sm",$$events:{click:xe},children:(z,J)=>{W();var Y=qe("Try Again");_(z,Y)},$$slots:{default:!0}});var he=r(ne,2);{let z=g(()=>(U(te),s(()=>te("/templates"))));Ke(he,{variant:"secondary",size:"sm",get href(){return e(z)},children:(J,Y)=>{W();var K=qe("Back to Templates");_(J,K)},$$slots:{default:!0}})}o(q),o(le),o(oe),o(V),P(()=>S(se,e(j))),_(G,V)},pt=G=>{var V=Oe(),oe=ee(V);{var le=B=>{const se=g(()=>(U(Xe),s(Xe))),q=g(()=>(e(t),s(()=>e(t).owner_id==="system"))),ne=g(()=>e(se)||!e(q)),he=g(()=>e(se)||!e(q));var z=Xt(),J=ee(z);{let p=g(()=>(e(t),s(()=>e(t).name||"Unnamed Template"))),c=g(()=>(U(Ze),e(t),s(()=>Ze(e(t).forge_type||"unknown")))),u=g(()=>e(h)?dt:e(ne)?Le:null),v=g(()=>e(h)?fe:e(he)?()=>l(be,!0):null),x=g(()=>e(h)?"Close":"Edit"),b=g(()=>e(h)?"Save Changes":"Delete"),f=g(()=>(e(h),"secondary")),R=g(()=>e(h)?"primary":"danger"),M=g(()=>e(h)?!e(ve):!1),N=g(()=>e(h)?"":""),Q=g(()=>e(h)?"":"");Bt(J,{get title(){return e(p)},subtitle:"View and manage template details",get forgeIcon(){return e(c)},get onEdit(){return e(u)},get onDelete(){return e(v)},get editLabel(){return e(x)},get deleteLabel(){return e(b)},get editVariant(){return e(f)},get deleteVariant(){return e(R)},get deleteDisabled(){return e(M)},get editIcon(){return e(N)},get deleteIcon(){return e(Q)}})}var Y=r(J,2),K=d(Y),Pe=d(K),gt=r(d(Pe),2);{var vt=p=>{var c=Nt(),u=d(c),v=d(u),x=r(d(v),2);Je(x),o(v);var b=r(v,2),f=r(d(b),2);Je(f),o(b),o(u);var R=r(u,2),M=d(R),N=r(d(M),2);{var Q=$=>{const D=g(()=>(e(t),s(()=>Ie(e(t).forge_type))));pe($,{get variant(){return U(e(D)),s(()=>e(D).color)},get text(){return U(e(D)),s(()=>e(D).text)}})};T(N,$=>{e(t),s(()=>e(t).forge_type)&&$(Q)})}W(2),o(M);var ie=r(M,2),X=r(d(ie),2);{var ce=$=>{const D=g(()=>(e(t),s(()=>Me(e(t).os_type))));pe($,{get variant(){return U(e(D)),s(()=>e(D).color)},get text(){return U(e(D)),s(()=>e(D).text)}})};T(X,$=>{e(t),s(()=>e(t).os_type)&&$(ce)})}W(2),o(ie),o(R),o(c),Ye(x,()=>e(i).name,$=>I(i,e(i).name=$)),Ye(f,()=>e(i).description,$=>I(i,e(i).description=$)),$e("submit",c,Ht(fe)),_(p,c)},bt=p=>{var c=qt(),u=d(c),v=r(d(u),2),x=d(v,!0);o(v),o(u);var b=r(u,2),f=r(d(b),2),R=d(f,!0);o(f),o(b);var M=r(b,2),N=r(d(M),2),Q=d(N);{var ie=k=>{const y=g(()=>(e(t),s(()=>Ie(e(t).forge_type))));pe(k,{get variant(){return U(e(y)),s(()=>e(y).color)},get text(){return U(e(y)),s(()=>e(y).text)}})};T(Q,k=>{e(t),s(()=>e(t).forge_type)&&k(ie)})}o(N),o(M);var X=r(M,2),ce=r(d(X),2),$=d(ce);{var D=k=>{const y=g(()=>(e(t),s(()=>Me(e(t).os_type))));pe(k,{get variant(){return U(e(y)),s(()=>e(y).color)},get text(){return U(e(y)),s(()=>e(y).text)}})};T($,k=>{e(t),s(()=>e(t).os_type)&&k(D)})}o(ce),o(X);var ke=r(X,2),ze=r(d(ke),2),wt=d(ze,!0);o(ze),o(ke);var we=r(ke,2),Ne=r(d(we),2),Tt=d(Ne,!0);o(Ne),o(we);var We=r(we,2);{var Ct=k=>{var y=Wt(),Z=r(d(y),2),Te=d(Z,!0);o(Z),o(y),P(Ce=>S(Te,Ce),[()=>(e(t),s(()=>new Date(e(t).created_at).toLocaleDateString()))]),_(k,y)};T(We,k=>{e(t),s(()=>e(t).created_at)&&k(Ct)})}var $t=r(We,2);{var At=k=>{var y=Ot(),Z=r(d(y),2),Te=d(Z,!0);o(Z),o(y),P(Ce=>S(Te,Ce),[()=>(e(t),s(()=>new Date(e(t).updated_at).toLocaleDateString()))]),_(k,y)};T($t,k=>{e(t),s(()=>e(t).updated_at)&&k(At)})}o(c),P(()=>{S(x,(e(t),s(()=>e(t).name||"Unnamed Template"))),S(R,(e(t),s(()=>e(t).description||"No description"))),S(wt,(e(t),s(()=>e(t).owner_id==="system"?"System":e(t).owner_id||"Unknown"))),S(Tt,(e(t),s(()=>e(t).id)))}),_(p,c)};T(gt,p=>{e(h)?p(vt):p(bt,!1)})}o(Pe),o(K);var je=r(K,2),Ge=d(je),_e=d(Ge),xt=r(d(_e),2);{var ft=p=>{var c=Jt(),u=r(d(c),2);P(()=>{e(O),Ft(()=>{e(H)})});var v=d(u);v.value=v.__value="bash";var x=r(v);x.value=x.__value="powershell";var b=r(x);b.value=b.__value="python";var f=r(b);f.value=f.__value="text",o(u),o(c),St(u,()=>e(O),R=>l(O,R)),$e("change",u,()=>l(H,!0)),_(p,c)};T(xt,p=>{e(h)&&p(ft)})}o(_e);var Ve=r(_e,2);{var yt=p=>{var c=Yt(),u=r(d(c),2),v=r(d(u));v.textContent="{{ .RunnerName }}",W(),o(u);var x=r(u,4),b=r(d(x),3);b.textContent="{{if .CABundle}}...{{end}}";var f=r(b,2);f.textContent="{{range $key, $value := .ExtraContext}}{{$key}}: {{$value}}{{end}}",W(),o(x),o(c),_(p,c)};T(Ve,p=>{e(h)&&p(yt)})}var ht=r(Ve,2);{var _t=p=>{var c=Kt(),u=d(c);{let b=g(()=>!e(H));Qe(u,{get language(){return e(O)},get autoDetect(){return e(b)},enableTemplateCompletion:!0,minHeight:"400px",placeholder:"Enter your template script content here...",get value(){return e(m)},set value(f){l(m,f)},$$events:{change:f=>l(m,f.detail.value),save:fe},$$legacy:!0})}var v=r(u,2),x=d(v);o(v),o(c),P(()=>S(x,`Template content should be a ${e(t),s(()=>e(t).os_type==="windows"?"PowerShell":"bash")??""} script for runner installation and configuration on ${e(t),s(()=>e(t).os_type)??""}.`)),_(p,c)},kt=p=>{var c=Qt(),u=ee(c),v=r(d(u),2);o(u);var x=r(u,2),b=d(x);{let f=g(()=>s(ye)),R=g(()=>s(()=>Ee(ye())));Qe(b,{get value(){return e(f)},get language(){return e(R)},readonly:!0,minHeight:"400px"})}o(x),$e("click",v,()=>lt(ye())),_(p,c)};T(ht,p=>{e(h)?p(_t):p(kt,!1)})}o(Ge),o(je),o(Y),_(B,z)};T(oe,B=>{e(t)&&B(le)},!0)}_(G,V)};T(L,G=>{e(j)&&!e(t)?G(mt):G(pt,!1)},!0)}_(a,n)};T(He,a=>{e(re)?a(st):a(nt,!1)})}var Be=r(He,2);{var it=a=>{jt(a,{title:"Delete Template",message:"Are you sure you want to delete this template? This action cannot be undone.",get itemName(){return e(t),s(()=>e(t).name)},$$events:{close:()=>l(be,!1),confirm:at}})};T(Be,a=>{e(be)&&e(t)&&a(it)})}var ct=r(Be,2);{var ut=a=>{Pt(a,{title:"Unsaved Changes",message:"You have unsaved changes. Are you sure you want to discard them?",confirmText:"Discard Changes",cancelText:"Stay on Page",variant:"warning",$$events:{close:()=>l(de,!1),confirm:ot}})};T(ct,a=>{e(de)&&a(ut)})}_(et,Se),Mt()}export{ya as component}; diff --git a/webapp/assets/_app/immutable/nodes/23.Dx1VueDf.js b/webapp/assets/_app/immutable/nodes/23.S7zWhPrB.js similarity index 94% rename from webapp/assets/_app/immutable/nodes/23.Dx1VueDf.js rename to webapp/assets/_app/immutable/nodes/23.S7zWhPrB.js index 5a412416..5bfa1e00 100644 --- a/webapp/assets/_app/immutable/nodes/23.Dx1VueDf.js +++ b/webapp/assets/_app/immutable/nodes/23.S7zWhPrB.js @@ -1,2 +1,2 @@ -import"../chunks/DsnmJJEf.js";import{i as Ye}from"../chunks/TJn6xDN9.js";import{p as Ke,o as Qe,l as Q,h as Xe,f as F,j as Ze,a as Te,b as w,c as et,g as e,m as p,t as C,k as l,u as U,$ as tt,s as r,w as f,v as X,d as o,r as s,y as Z,z as A,e as at,i as D,C as rt}from"../chunks/DniTuB_0.js";import{i as ee}from"../chunks/DbNhg6mG.js";import{g as Le,d as te,r as Re,b as ae}from"../chunks/DD3srElq.js";import{b as $e}from"../chunks/CCQwxxp9.js";import{b as lt}from"../chunks/C-xTH-sp.js";import{p as ot}from"../chunks/D4Caz1gY.js";import{g as re}from"../chunks/DeKGyprh.js";import{p as st}from"../chunks/H2nrvwx_.js";import{t as h}from"../chunks/CBJzOE8U.js";import{e as Ue}from"../chunks/BZiHL9L3.js";import{D as dt}from"../chunks/CCF1V3nS.js";import{a as nt,C as it}from"../chunks/BB5NL1nO.js";var ut=F('
Loading...
'),ct=F('
Uploading...',1),pt=rt(' Upload File',1),bt=F('

Template Information

Template Content

Available Template Variables

Your template can use the following variables using Go template syntax (e.g., ):

Runner Info
  • .RunnerName - Runner name
  • .RunnerLabels - Comma separated labels
  • .RunnerUsername - Runner service username
  • .RunnerGroup - Runner service group
  • .GitHubRunnerGroup - GitHub runner group
Download & Install
  • .FileName - Download file name
  • .DownloadURL - Runner download URL
  • .TempDownloadToken - Download token
  • .RepoURL - Repository URL
Configuration
  • .MetadataURL - Instance metadata URL
  • .CallbackURL - Status callback URL
  • .CallbackToken - Callback token
  • .CABundle - CA certificate bundle
  • .EnableBootDebug - Enable debug mode
  • .UseJITConfig - Use JIT configuration
  • .ExtraContext - Additional context map

💡 Tip: Use for conditional content, or to iterate over extra context.

',1),gt=F(" ",1);function Ut(Ae,De){Ke(De,!1);const le=p(),M=p();let _=p(!1),i=p(null),t=p({name:"",description:"",forge_type:"github",os_type:"linux",data:new Uint8Array}),u=p(""),v=p("text"),x=p(!1),I=p(),T=p(!1),L={name:"",description:"",forge_type:"github",os_type:"linux"},Fe="",R=p(!1);async function oe(){if(e(M))try{l(_,!0);const a={name:e(t).name,description:e(t).description||void 0,forge_type:e(t).forge_type,os_type:e(t).os_type,data:Array.from(new TextEncoder().encode(e(u)))};await Le.createTemplate(a),h.add({type:"success",title:"Template created",message:`Template "${e(t).name}" has been created successfully.`}),re(te("/templates"))}catch(a){const c=Ue(a);h.add({type:"error",title:"Failed to create template",message:c})}finally{l(_,!1)}}function Me(){return e(le)}function Ie(){if(Me()){l(R,!0);return}se()}function se(){re(te("/templates"))}function We(){l(R,!1),se()}function Ee(){e(I).click()}async function Se(a){const c=a.target,n=c.files?.[0];if(n){if(n.size>1024*1024){h.add({type:"error",title:"File too large",message:"Please select a file smaller than 1MB."});return}try{l(T,!0);const y=await n.text();l(u,y);const b=n.name.toLowerCase();let m="text";b.endsWith(".sh")||b.endsWith(".bash")?m="bash":b.endsWith(".ps1")||b.endsWith(".psm1")?m="powershell":b.endsWith(".py")?m="python":m=W(y),l(v,m),l(x,!1),h.add({type:"success",title:"File uploaded",message:`Successfully loaded content from "${n.name}".`})}catch{h.add({type:"error",title:"Failed to read file",message:"Unable to read the selected file. Please try again."})}finally{l(T,!1),c.value=""}}}function W(a){const n=a.split(` +import"../chunks/DsnmJJEf.js";import{i as Ye}from"../chunks/De-I_rkH.js";import{p as Ke,o as Qe,l as Q,h as Xe,f as F,j as Ze,a as Te,b as w,c as et,g as e,m as p,t as C,k as l,u as U,$ as tt,s as r,w as f,v as X,d as o,r as s,y as Z,z as A,e as at,i as D,C as rt}from"../chunks/BIqNNOMq.js";import{i as ee}from"../chunks/CfI2BFUj.js";import{g as Le,d as te,r as Re,b as ae}from"../chunks/CQh-7xkh.js";import{b as $e}from"../chunks/Gs5uNKRr.js";import{b as lt}from"../chunks/BLHP-Xk3.js";import{p as ot}from"../chunks/CdEA5IGF.js";import{g as re}from"../chunks/BSYpqPvJ.js";import{p as st}from"../chunks/B-zJt1QP.js";import{t as h}from"../chunks/DgRPqjXE.js";import{e as Ue}from"../chunks/BZiHL9L3.js";import{D as dt}from"../chunks/CIekn_9e.js";import{a as nt,C as it}from"../chunks/mAwhcVsI.js";var ut=F('
Loading...
'),ct=F('
Uploading...',1),pt=rt(' Upload File',1),bt=F('

Template Information

Template Content

Available Template Variables

Your template can use the following variables using Go template syntax (e.g., ):

Runner Info
  • .RunnerName - Runner name
  • .RunnerLabels - Comma separated labels
  • .RunnerUsername - Runner service username
  • .RunnerGroup - Runner service group
  • .GitHubRunnerGroup - GitHub runner group
Download & Install
  • .FileName - Download file name
  • .DownloadURL - Runner download URL
  • .TempDownloadToken - Download token
  • .RepoURL - Repository URL
Configuration
  • .MetadataURL - Instance metadata URL
  • .CallbackURL - Status callback URL
  • .CallbackToken - Callback token
  • .CABundle - CA certificate bundle
  • .EnableBootDebug - Enable debug mode
  • .UseJITConfig - Use JIT configuration
  • .ExtraContext - Additional context map

💡 Tip: Use for conditional content, or to iterate over extra context.

',1),gt=F(" ",1);function Ut(Ae,De){Ke(De,!1);const le=p(),M=p();let _=p(!1),i=p(null),t=p({name:"",description:"",forge_type:"github",os_type:"linux",data:new Uint8Array}),u=p(""),v=p("text"),x=p(!1),I=p(),T=p(!1),L={name:"",description:"",forge_type:"github",os_type:"linux"},Fe="",R=p(!1);async function oe(){if(e(M))try{l(_,!0);const a={name:e(t).name,description:e(t).description||void 0,forge_type:e(t).forge_type,os_type:e(t).os_type,data:Array.from(new TextEncoder().encode(e(u)))};await Le.createTemplate(a),h.add({type:"success",title:"Template created",message:`Template "${e(t).name}" has been created successfully.`}),re(te("/templates"))}catch(a){const c=Ue(a);h.add({type:"error",title:"Failed to create template",message:c})}finally{l(_,!1)}}function Me(){return e(le)}function Ie(){if(Me()){l(R,!0);return}se()}function se(){re(te("/templates"))}function We(){l(R,!1),se()}function Ee(){e(I).click()}async function Se(a){const c=a.target,n=c.files?.[0];if(n){if(n.size>1024*1024){h.add({type:"error",title:"File too large",message:"Please select a file smaller than 1MB."});return}try{l(T,!0);const y=await n.text();l(u,y);const b=n.name.toLowerCase();let m="text";b.endsWith(".sh")||b.endsWith(".bash")?m="bash":b.endsWith(".ps1")||b.endsWith(".psm1")?m="powershell":b.endsWith(".py")?m="python":m=W(y),l(v,m),l(x,!1),h.add({type:"success",title:"File uploaded",message:`Successfully loaded content from "${n.name}".`})}catch{h.add({type:"error",title:"Failed to read file",message:"Unable to read the selected file. Please try again."})}finally{l(T,!1),c.value=""}}}function W(a){const n=a.split(` `)[0]?.trim()||"";return n.startsWith("#!/bin/bash")||n.startsWith("#!/bin/sh")?"bash":n.startsWith("#!/usr/bin/env pwsh")||n.includes("#ps1_sysnative")?"powershell":n.startsWith("#!/usr/bin/env python")||n.startsWith("#!/usr/bin/python")?"python":a.includes("param(")||a.includes("Write-Host")||a.includes("$_")?"powershell":a.includes("def ")||a.includes("import ")||a.includes("print(")?"python":a.includes("echo ")||a.includes("export ")||a.includes("if [")?"bash":"text"}async function Ge(){const a=st.url.searchParams.get("clone");if(a)try{if(l(_,!0),l(i,await Le.getTemplate(parseInt(a))),!e(i))throw new Error("Template not found");if(f(t,e(t).name=`${e(i).name} (Copy)`),f(t,e(t).description=e(i).description||""),f(t,e(t).forge_type=e(i).forge_type||"github"),f(t,e(t).os_type=e(i).os_type||"linux"),e(i).data)try{if(Array.isArray(e(i).data)){const c=new Uint8Array(e(i).data);l(u,new TextDecoder().decode(c))}else l(u,atob(e(i).data));l(v,W(e(u)))}catch(c){console.error("Failed to decode template data:",c),l(u,"")}}catch(c){const n=Ue(c);h.add({type:"error",title:"Failed to load template",message:n}),re(te("/templates"))}finally{l(_,!1)}}Qe(()=>{Ge()}),Q(()=>(e(t),e(u)),()=>{l(le,e(t).name!==L.name||e(t).description!==L.description||e(t).forge_type!==L.forge_type||e(t).os_type!==L.os_type||e(u)!==Fe)}),Q(()=>(e(t),e(u)),()=>{l(M,e(t).name.trim().length>0&&e(u).trim().length>0)}),Q(()=>(e(u),e(x)),()=>{e(u)&&!e(x)&&l(v,W(e(u)))}),Xe(),Ye();var de=gt();Ze(a=>{C(()=>tt.title=`${e(i),U(()=>e(i)?`Clone ${e(i).name}`:"Create Template")??""} - GARM`)});var ne=Te(de);{var He=a=>{var c=ut();w(a,c)},Pe=a=>{var c=bt(),n=Te(c);{let d=X(()=>(e(i),U(()=>e(i)?`Clone Template: ${e(i).name}`:"Create New Template"))),g=X(()=>!e(M));dt(n,{get title(){return e(d)},subtitle:"Create a new runner install template",onEdit:Ie,onDelete:oe,editLabel:"Cancel",deleteLabel:"Create Template",editVariant:"secondary",deleteVariant:"primary",get deleteDisabled(){return e(g)},editIcon:"",deleteIcon:""})}var y=r(n,2),b=o(y),m=o(b),E=r(o(m),2),S=o(E),G=o(S),ie=r(o(G),2);Re(ie),s(G);var ue=r(G,2),ce=r(o(ue),2);Re(ce),s(ue),s(S);var pe=r(S,2),H=o(pe),P=r(o(H),2);C(()=>{e(t),Z(()=>{})});var j=o(P);j.value=j.__value="github";var be=r(j);be.value=be.__value="gitea",s(P),s(H);var ge=r(H,2),B=r(o(ge),2);C(()=>{e(t),Z(()=>{})});var N=o(B);N.value=N.__value="linux";var me=r(N);me.value=me.__value="windows",s(B),s(ge),s(pe),s(E),s(m),s(b);var fe=r(b,2),ve=o(fe),V=o(ve),xe=r(o(V),2),k=o(xe),Ne=o(k);{var Ve=d=>{var g=ct();A(),w(d,g)},qe=d=>{var g=pt();A(),w(d,g)};ee(Ne,d=>{e(T)?d(Ve):d(qe,!1)})}s(k);var $=r(k,4);C(()=>{e(v),Z(()=>{e(x)})});var q=o($);q.value=q.__value="bash";var z=r(q);z.value=z.__value="powershell";var J=r(z);J.value=J.__value="python";var ye=r(J);ye.value=ye.__value="text",s($),s(xe),s(V);var O=r(V,2);lt(O,d=>l(I,d),()=>e(I));var Y=r(O,2),K=r(o(Y),2),ze=r(o(K));ze.textContent="{{ .RunnerName }}",A(),s(K);var he=r(K,4),_e=r(o(he),3);_e.textContent="{{if .CABundle}}...{{end}}";var Je=r(_e,2);Je.textContent="{{range $key, $value := .ExtraContext}}{{$key}}: {{$value}}{{end}}",A(),s(he),s(Y);var ke=r(Y,2),we=o(ke);{let d=X(()=>!e(x));nt(we,{get language(){return e(v)},get autoDetect(){return e(d)},enableTemplateCompletion:!0,minHeight:"400px",placeholder:"Enter your template script content here...",get value(){return e(u)},set value(g){l(u,g)},$$events:{change:g=>l(u,g.detail.value)},$$legacy:!0})}var Ce=r(we,2),Oe=o(Ce);s(Ce),s(ke),s(ve),s(fe),s(y),C(()=>{k.disabled=e(T),at(Oe,`Template content should be a ${e(t),U(()=>e(t).os_type==="windows"?"PowerShell":"bash")??""} script for runner installation and configuration on ${e(t),U(()=>e(t).os_type)??""}.`)}),$e(ie,()=>e(t).name,d=>f(t,e(t).name=d)),$e(ce,()=>e(t).description,d=>f(t,e(t).description=d)),ae(P,()=>e(t).forge_type,d=>f(t,e(t).forge_type=d)),ae(B,()=>e(t).os_type,d=>f(t,e(t).os_type=d)),D("submit",E,ot(oe)),D("click",k,Ee),ae($,()=>e(v),d=>l(v,d)),D("change",$,()=>l(x,!0)),D("change",O,Se),w(a,c)};ee(ne,a=>{e(_)?a(He):a(Pe,!1)})}var je=r(ne,2);{var Be=a=>{it(a,{title:"Unsaved Changes",message:"You have unsaved changes. Are you sure you want to discard them?",confirmText:"Discard Changes",cancelText:"Stay on Page",variant:"danger",$$events:{close:()=>l(R,!1),confirm:We}})};ee(je,a=>{e(R)&&a(Be)})}w(Ae,de),et()}export{Ut as component}; diff --git a/webapp/assets/_app/immutable/nodes/3.C6SgVmNt.js b/webapp/assets/_app/immutable/nodes/3.CwF8zAox.js similarity index 96% rename from webapp/assets/_app/immutable/nodes/3.C6SgVmNt.js rename to webapp/assets/_app/immutable/nodes/3.CwF8zAox.js index 2636bb25..0a5d5d8d 100644 --- a/webapp/assets/_app/immutable/nodes/3.C6SgVmNt.js +++ b/webapp/assets/_app/immutable/nodes/3.CwF8zAox.js @@ -1,4 +1,4 @@ -import"../chunks/DsnmJJEf.js";import{i as jt}from"../chunks/TJn6xDN9.js";import{p as Gt,g as e,o as Ut,l as J,h as zt,f as E,i as f,j as qt,a as Fe,b as $,c as Bt,$ as St,m as g,k as n,n as Lt,d as o,s as a,r as i,u,q as be,v as Ke,t as se,e as W,w as _,x as rt,y as Nt,z as X}from"../chunks/DniTuB_0.js";import{i as G,s as Kt,a as Vt}from"../chunks/DbNhg6mG.js";import{e as Ht,i as Rt}from"../chunks/Ck5PkeSc.js";import{h as Yt,r as L,s as je,b as Ot,a as Jt,g as fe}from"../chunks/DD3srElq.js";import{b as N,a as Qt}from"../chunks/CCQwxxp9.js";import{p as at}from"../chunks/D4Caz1gY.js";import{P as Wt}from"../chunks/BlYHwhWl.js";import{F as Xt}from"../chunks/DNeHGP6d.js";import{A as ot}from"../chunks/B5vVe1Fo.js";import{D as Zt,G as it,A as er}from"../chunks/QtGwBUod.js";import{e as tr,a as Ve}from"../chunks/C-ow2qSP.js";import{t as ke}from"../chunks/CBJzOE8U.js";import{f as rr,p as ar,g as He,c as or}from"../chunks/LMA6-4d1.js";import{e as Re}from"../chunks/BZiHL9L3.js";import{B as nt}from"../chunks/DcQdHuVc.js";import"../chunks/BSR16q_V.js";import{E as ir}from"../chunks/hsRG7ppz.js";import{S as nr}from"../chunks/Dn_Ue57e.js";var dr=E('

'),sr=E(""),lr=E('

'),cr=E('

Gitea only supports PAT authentication

'),ur=E('
'),pr=E('

or drag and drop

PEM, KEY files only

',1),gr=E(''),yr=E('
'),br=E('

or drag and drop

PEM, KEY files only. Upload new private key.

',1),fr=E(" ",1),vr=E(''),mr=E(''),xr=E('
',1);function Sr(dt,st){Gt(st,!1);const[lt,ct]=Kt(),U=()=>Vt(tr,"$eagerCache",lt),Ge=g(),Z=g(),Ye=g(),Ue=g(),ze=g(),p={PAT:"pat",APP:"app"};let we=g(!0),le=g([]),Q=g([]),Ce=g(""),Pe=g(""),K=g(1),ce=g(25),ue=g(1),Ae=g(!1),Te=g(!1),$e=g(!1),D=g(p.PAT),y=g(null),M=g(null),t=g({name:"",description:"",endpoint:"",auth_type:p.PAT,oauth2_token:"",app_id:"",installation_id:"",private_key_bytes:""}),Ee={...e(t)},ee=g(!1);function ut(r){r.key==="Escape"&&(e(Ae)||e(Te)||e($e))&&P()}Ut(async()=>{try{n(we,!0);const[r,d]=await Promise.all([Ve.getCredentials(),Ve.getEndpoints()]);r&&Array.isArray(r)&&n(le,r),d&&Array.isArray(d)&&n(Q,d)}catch(r){console.error("Failed to load credentials:",r),n(Ce,r instanceof Error?r.message:"Failed to load credentials")}finally{n(we,!1)}});async function pt(){try{await Ve.retryResource("credentials")}catch(r){console.error("Retry failed:",r)}}async function gt(){Se(),n(Ae,!0),n(x,"github"),_(t,e(t).auth_type=p.PAT)}let x=g("");function yt(r){n(x,r.detail),Se()}async function qe(r){n(y,r),n(t,{name:r.name||"",description:r.description||"",endpoint:r.endpoint?.name||"",auth_type:r["auth-type"]||p.PAT,oauth2_token:"",app_id:"",installation_id:"",private_key_bytes:""}),n(D,r["auth-type"]||p.PAT),Ee={...e(t)},n(ee,!1),n(Te,!0)}function Be(r){n(M,r),n($e,!0)}function Se(){n(t,{name:"",description:"",endpoint:"",auth_type:p.PAT,oauth2_token:"",app_id:"",installation_id:"",private_key_bytes:""}),Ee={...e(t)},n(D,p.PAT),n(ee,!1)}function P(){n(Ae,!1),n(Te,!1),n($e,!1),n(y,null),n(M,null),n(x,""),Se()}function Oe(r){n(D,r),_(t,e(t).auth_type=r)}function bt(){const r={};if(e(t).name!==Ee.name&&e(t).name.trim()!==""&&(r.name=e(t).name.trim()),e(t).description!==Ee.description&&e(t).description.trim()!==""&&(r.description=e(t).description.trim()),e(ee)&&e(y))if(e(y)["auth-type"]===p.PAT)e(t).oauth2_token.trim()!==""&&(r.pat={oauth2_token:e(t).oauth2_token.trim()});else{const d={};let b=!1;if(e(t).app_id.trim()!==""&&(d.app_id=parseInt(e(t).app_id.trim()),b=!0),e(t).installation_id.trim()!==""&&(d.installation_id=parseInt(e(t).installation_id.trim()),b=!0),e(t).private_key_bytes!=="")try{const v=atob(e(t).private_key_bytes);d.private_key_bytes=Array.from(v,l=>l.charCodeAt(0)),b=!0}catch{}b&&(r.app=d)}return r}async function ft(){try{if(e(x)==="github"){const r={name:e(t).name.trim(),description:e(t).description.trim(),endpoint:e(t).endpoint.trim(),auth_type:e(t).auth_type};e(t).auth_type===p.PAT?(r.pat={oauth2_token:e(t).oauth2_token.trim()},r.app={}):(r.app={app_id:parseInt(e(t).app_id.trim()),installation_id:parseInt(e(t).installation_id.trim()),private_key_bytes:Array.from(atob(e(t).private_key_bytes),d=>d.charCodeAt(0))},r.pat={}),await fe.createGithubCredentials(r)}else if(e(x)==="gitea"){const r={name:e(t).name.trim(),description:e(t).description.trim(),endpoint:e(t).endpoint.trim(),auth_type:p.PAT,pat:{oauth2_token:e(t).oauth2_token.trim()},app:{}};await fe.createGiteaCredentials(r)}else throw new Error("Please select a forge type");ke.success("Credentials Created",`Credentials ${e(t).name} have been created successfully.`),P()}catch(r){n(Ce,Re(r))}}async function vt(){if(!(!e(y)||!e(y).id))try{const r=bt();if(Object.keys(r).length===0){ke.info("No Changes","No fields were modified."),P();return}e(y).forge_type==="github"?await fe.updateGithubCredentials(e(y).id,r):await fe.updateGiteaCredentials(e(y).id,r),ke.success("Credentials Updated",`Credentials ${e(y)?.name||"Unknown"} have been updated successfully.`),P()}catch(r){n(Ce,Re(r))}}async function mt(){if(!(!e(M)||!e(M).id))try{e(M).forge_type==="github"?await fe.deleteGithubCredentials(e(M).id):await fe.deleteGiteaCredentials(e(M).id),ke.success("Credentials Deleted",`Credentials ${e(M)?.name||"Unknown"} have been deleted successfully.`)}catch(r){const d=Re(r);ke.error("Delete Failed",d)}finally{P()}}function Je(r){const b=r.target.files?.[0];if(!b){_(t,e(t).private_key_bytes="");return}const v=new FileReader;v.onload=l=>{const h=l.target?.result;_(t,e(t).private_key_bytes=btoa(h))},v.readAsText(b)}function Qe(){return e(t).name.trim()?e(ee)&&e(y)?e(y)["auth-type"]===p.PAT?!!e(t).oauth2_token.trim():!!e(t).app_id.trim()&&!!e(t).installation_id.trim()&&!!e(t).private_key_bytes:!0:!1}function xt(r){return e(Q).find(b=>b.name===r)?.endpoint_type||""}function _t(r){return xt(r)==="gitea"}const ht=[{key:"name",title:"Name",cellComponent:it,cellProps:{field:"name"}},{key:"description",title:"Description",cellComponent:it,cellProps:{field:"description",type:"description"}},{key:"endpoint",title:"Endpoint",cellComponent:ir},{key:"auth_type",title:"Auth Type",cellComponent:nr,cellProps:{statusType:"custom",statusField:"auth-type"}},{key:"actions",title:"Actions",align:"right",cellComponent:er}],kt={entityType:"credential",primaryText:{field:"name",isClickable:!1},secondaryText:{field:"description"},customInfo:[{icon:r=>He(r?.forge_type||"unknown"),text:r=>r?.endpoint?.name||"Unknown"}],badges:[{type:"auth",field:"auth-type"}],actions:[{type:"edit",handler:r=>qe(r)},{type:"delete",handler:r=>Be(r)}]};function wt(r){n(Pe,r.detail.term),n(K,1)}function Ct(r){n(K,r.detail.page)}function Pt(r){const d=or(r.detail.perPage);n(ce,d.newPerPage),n(K,d.newCurrentPage)}function At(r){qe(r.detail.item)}function Tt(r){Be(r.detail.item)}J(()=>(e(le),U()),()=>{(!e(le).length||U().loaded.credentials)&&n(le,U().credentials)}),J(()=>U(),()=>{n(we,U().loading.credentials)}),J(()=>U(),()=>{n(Ge,U().errorMessages.credentials)}),J(()=>(e(Q),U()),()=>{(!e(Q).length||U().loaded.endpoints)&&n(Q,U().endpoints)}),J(()=>(e(le),e(Pe)),()=>{n(Z,rr(e(le),e(Pe)))}),J(()=>(e(ue),e(Z),e(ce),e(K)),()=>{n(ue,Math.ceil(e(Z).length/e(ce))),e(K)>e(ue)&&e(ue)>0&&n(K,e(ue))}),J(()=>(e(Z),e(K),e(ce)),()=>{n(Ye,ar(e(Z),e(K),e(ce)))}),J(()=>e(t),()=>{n(Ue,!e(t).name||!e(t).endpoint?!1:e(t).auth_type===p.PAT?!!e(t).oauth2_token:!!e(t).app_id&&!!e(t).installation_id&&!!e(t).private_key_bytes)}),J(()=>(e(x),e(Q)),()=>{n(ze,e(x)?e(Q).filter(r=>r.endpoint_type===e(x)):e(Q))}),zt(),jt();var We=xr();f("keydown",Lt,ut),qt(r=>{St.title="Credentials - GARM"});var Le=Fe(We),Xe=o(Le);Wt(Xe,{title:"Credentials",description:"Manage authentication credentials for your GitHub and Gitea endpoints.",actionLabel:"Add Credentials",$$events:{action:gt}});var $t=a(Xe,2);{let r=Ke(()=>e(Ge)||e(Ce)),d=Ke(()=>!!e(Ge));Zt($t,{get columns(){return ht},get data(){return e(Ye)},get loading(){return e(we)},get error(){return e(r)},get searchTerm(){return e(Pe)},searchPlaceholder:"Search credentials by name, description, or endpoint...",get currentPage(){return e(K)},get perPage(){return e(ce)},get totalPages(){return e(ue)},get totalItems(){return e(Z),u(()=>e(Z).length)},itemName:"credentials",emptyIconType:"key",get showRetry(){return e(d)},get mobileCardConfig(){return kt},$$events:{search:wt,pageChange:Ct,perPageChange:Pt,retry:pt,edit:At,delete:Tt},$$slots:{"mobile-card":(b,v)=>{const l=Ke(()=>v.item);var h=dr(),A=o(h),z=o(A),I=o(z),F=o(I,!0);i(I);var k=a(I,2),V=o(k,!0);i(k);var q=a(k,2),B=o(q),S=o(B);Yt(S,()=>(be(He),be(e(l)),u(()=>He(e(l).forge_type||"unknown"))));var te=a(S,2),re=o(te,!0);i(te),i(B),i(q),i(z),i(A);var ae=a(A,2),H=o(ae);{var oe=j=>{nt(j,{variant:"success",text:"PAT"})},R=j=>{nt(j,{variant:"info",text:"App"})};G(H,j=>{be(e(l)),u(()=>(e(l)["auth-type"]||"pat")==="pat")?j(oe):j(R,!1)})}var Y=a(H,2),ie=o(Y);ot(ie,{action:"edit",size:"sm",title:"Edit credentials",ariaLabel:"Edit credentials",$$events:{click:()=>qe(e(l))}});var pe=a(ie,2);ot(pe,{action:"delete",size:"sm",title:"Delete credentials",ariaLabel:"Delete credentials",$$events:{click:()=>Be(e(l))}}),i(Y),i(ae),i(h),se(()=>{W(F,(be(e(l)),u(()=>e(l).name))),W(V,(be(e(l)),u(()=>e(l).description))),W(re,(be(e(l)),u(()=>e(l).endpoint?.name||"Unknown")))}),$(b,h)}}})}i(Le);var Ze=a(Le,2);{var Et=r=>{var d=gr(),b=o(d),v=a(b,2),l=o(v),h=a(o(l),2);i(l);var A=a(l,2),z=o(A);Xt(z,{get selectedForgeType(){return e(x)},set selectedForgeType(s){n(x,s)},$$events:{select:yt},$$legacy:!0});var I=a(z,2),F=a(o(I),2);L(F),i(I);var k=a(I,2),V=a(o(k),2);rt(V),i(k);var q=a(k,2),B=a(o(q),2);se(()=>{e(t),Nt(()=>{e(ze)})});var S=o(B);S.value=S.__value="";var te=a(S);Ht(te,1,()=>e(ze),Rt,(s,c)=>{var m=sr(),C=o(m);i(m);var T={};se(()=>{W(C,`${e(c),u(()=>e(c).name)??""} (${e(c),u(()=>e(c).endpoint_type)??""})`),T!==(T=(e(c),u(()=>e(c).name)))&&(m.value=(m.__value=(e(c),u(()=>e(c).name)))??"")}),$(s,m)}),i(B);var re=a(B,2);{var ae=s=>{var c=lr(),m=o(c);i(c),se(()=>W(m,`Showing only ${e(x)??""} endpoints`)),$(s,c)};G(re,s=>{e(x)&&s(ae)})}i(q);var H=a(q,2),oe=a(o(H),2),R=o(oe),Y=a(R,2);i(oe);var ie=a(oe,2);{var pe=s=>{var c=cr();$(s,c)};G(ie,s=>{e(x)==="gitea"&&s(pe)})}i(H);var j=a(H,2);{var De=s=>{var c=ur(),m=a(o(c),2);L(m),i(c),N(m,()=>e(t).oauth2_token,C=>_(t,e(t).oauth2_token=C)),$(s,c)};G(j,s=>{e(D),u(()=>e(D)===p.PAT)&&s(De)})}var ve=a(j,2);{var Me=s=>{var c=pr(),m=Fe(c),C=a(o(m),2);L(C),i(m);var T=a(m,2),O=a(o(T),2);L(O),i(T);var de=a(T,2),ge=a(o(de),2),xe=o(ge),_e=a(xe,2),he=a(o(_e),2),Ie=o(he);X(),i(he),X(2),i(_e),i(ge),i(de),N(C,()=>e(t).app_id,ye=>_(t,e(t).app_id=ye)),N(O,()=>e(t).installation_id,ye=>_(t,e(t).installation_id=ye)),f("change",xe,Je),f("click",Ie,()=>document.getElementById("private_key")?.click()),$(s,c)};G(ve,s=>{e(D),u(()=>e(D)===p.APP)&&s(Me)})}var w=a(ve,2),ne=o(w),me=a(ne,2);i(w),i(A),i(v),i(d),se(s=>{je(R,1,`flex-1 py-2 px-4 text-sm font-medium rounded-md border focus:outline-none focus:ring-2 focus:ring-blue-500 cursor-pointer +import"../chunks/DsnmJJEf.js";import{i as jt}from"../chunks/De-I_rkH.js";import{p as Gt,g as e,o as Ut,l as J,h as zt,f as E,i as f,j as qt,a as Fe,b as $,c as Bt,$ as St,m as g,k as n,n as Lt,d as o,s as a,r as i,u,q as be,v as Ke,t as se,e as W,w as _,x as rt,y as Nt,z as X}from"../chunks/BIqNNOMq.js";import{i as G,s as Kt,a as Vt}from"../chunks/CfI2BFUj.js";import{e as Ht,i as Rt}from"../chunks/D8ZtP9JD.js";import{h as Yt,r as L,s as je,b as Ot,a as Jt,g as fe}from"../chunks/CQh-7xkh.js";import{b as N,a as Qt}from"../chunks/Gs5uNKRr.js";import{p as at}from"../chunks/CdEA5IGF.js";import{P as Wt}from"../chunks/Cq4AwQWc.js";import{F as Xt}from"../chunks/D2YBjDB9.js";import{A as ot}from"../chunks/Dbr2TLcG.js";import{D as Zt,G as it,A as er}from"../chunks/BjNB1vhO.js";import{e as tr,a as Ve}from"../chunks/B1uxuBYn.js";import{t as ke}from"../chunks/DgRPqjXE.js";import{f as rr,p as ar,g as He,c as or}from"../chunks/B7If18kh.js";import{e as Re}from"../chunks/BZiHL9L3.js";import{B as nt}from"../chunks/CwE4al8R.js";import"../chunks/CYb6_lpF.js";import{E as ir}from"../chunks/DFF0ZVx4.js";import{S as nr}from"../chunks/DCu5KXBe.js";var dr=E('

'),sr=E(""),lr=E('

'),cr=E('

Gitea only supports PAT authentication

'),ur=E('
'),pr=E('

or drag and drop

PEM, KEY files only

',1),gr=E(''),yr=E('
'),br=E('

or drag and drop

PEM, KEY files only. Upload new private key.

',1),fr=E(" ",1),vr=E(''),mr=E(''),xr=E('
',1);function Sr(dt,st){Gt(st,!1);const[lt,ct]=Kt(),U=()=>Vt(tr,"$eagerCache",lt),Ge=g(),Z=g(),Ye=g(),Ue=g(),ze=g(),p={PAT:"pat",APP:"app"};let we=g(!0),le=g([]),Q=g([]),Ce=g(""),Pe=g(""),K=g(1),ce=g(25),ue=g(1),Ae=g(!1),Te=g(!1),$e=g(!1),D=g(p.PAT),y=g(null),M=g(null),t=g({name:"",description:"",endpoint:"",auth_type:p.PAT,oauth2_token:"",app_id:"",installation_id:"",private_key_bytes:""}),Ee={...e(t)},ee=g(!1);function ut(r){r.key==="Escape"&&(e(Ae)||e(Te)||e($e))&&P()}Ut(async()=>{try{n(we,!0);const[r,d]=await Promise.all([Ve.getCredentials(),Ve.getEndpoints()]);r&&Array.isArray(r)&&n(le,r),d&&Array.isArray(d)&&n(Q,d)}catch(r){console.error("Failed to load credentials:",r),n(Ce,r instanceof Error?r.message:"Failed to load credentials")}finally{n(we,!1)}});async function pt(){try{await Ve.retryResource("credentials")}catch(r){console.error("Retry failed:",r)}}async function gt(){Se(),n(Ae,!0),n(x,"github"),_(t,e(t).auth_type=p.PAT)}let x=g("");function yt(r){n(x,r.detail),Se()}async function qe(r){n(y,r),n(t,{name:r.name||"",description:r.description||"",endpoint:r.endpoint?.name||"",auth_type:r["auth-type"]||p.PAT,oauth2_token:"",app_id:"",installation_id:"",private_key_bytes:""}),n(D,r["auth-type"]||p.PAT),Ee={...e(t)},n(ee,!1),n(Te,!0)}function Be(r){n(M,r),n($e,!0)}function Se(){n(t,{name:"",description:"",endpoint:"",auth_type:p.PAT,oauth2_token:"",app_id:"",installation_id:"",private_key_bytes:""}),Ee={...e(t)},n(D,p.PAT),n(ee,!1)}function P(){n(Ae,!1),n(Te,!1),n($e,!1),n(y,null),n(M,null),n(x,""),Se()}function Oe(r){n(D,r),_(t,e(t).auth_type=r)}function bt(){const r={};if(e(t).name!==Ee.name&&e(t).name.trim()!==""&&(r.name=e(t).name.trim()),e(t).description!==Ee.description&&e(t).description.trim()!==""&&(r.description=e(t).description.trim()),e(ee)&&e(y))if(e(y)["auth-type"]===p.PAT)e(t).oauth2_token.trim()!==""&&(r.pat={oauth2_token:e(t).oauth2_token.trim()});else{const d={};let b=!1;if(e(t).app_id.trim()!==""&&(d.app_id=parseInt(e(t).app_id.trim()),b=!0),e(t).installation_id.trim()!==""&&(d.installation_id=parseInt(e(t).installation_id.trim()),b=!0),e(t).private_key_bytes!=="")try{const v=atob(e(t).private_key_bytes);d.private_key_bytes=Array.from(v,l=>l.charCodeAt(0)),b=!0}catch{}b&&(r.app=d)}return r}async function ft(){try{if(e(x)==="github"){const r={name:e(t).name.trim(),description:e(t).description.trim(),endpoint:e(t).endpoint.trim(),auth_type:e(t).auth_type};e(t).auth_type===p.PAT?(r.pat={oauth2_token:e(t).oauth2_token.trim()},r.app={}):(r.app={app_id:parseInt(e(t).app_id.trim()),installation_id:parseInt(e(t).installation_id.trim()),private_key_bytes:Array.from(atob(e(t).private_key_bytes),d=>d.charCodeAt(0))},r.pat={}),await fe.createGithubCredentials(r)}else if(e(x)==="gitea"){const r={name:e(t).name.trim(),description:e(t).description.trim(),endpoint:e(t).endpoint.trim(),auth_type:p.PAT,pat:{oauth2_token:e(t).oauth2_token.trim()},app:{}};await fe.createGiteaCredentials(r)}else throw new Error("Please select a forge type");ke.success("Credentials Created",`Credentials ${e(t).name} have been created successfully.`),P()}catch(r){n(Ce,Re(r))}}async function vt(){if(!(!e(y)||!e(y).id))try{const r=bt();if(Object.keys(r).length===0){ke.info("No Changes","No fields were modified."),P();return}e(y).forge_type==="github"?await fe.updateGithubCredentials(e(y).id,r):await fe.updateGiteaCredentials(e(y).id,r),ke.success("Credentials Updated",`Credentials ${e(y)?.name||"Unknown"} have been updated successfully.`),P()}catch(r){n(Ce,Re(r))}}async function mt(){if(!(!e(M)||!e(M).id))try{e(M).forge_type==="github"?await fe.deleteGithubCredentials(e(M).id):await fe.deleteGiteaCredentials(e(M).id),ke.success("Credentials Deleted",`Credentials ${e(M)?.name||"Unknown"} have been deleted successfully.`)}catch(r){const d=Re(r);ke.error("Delete Failed",d)}finally{P()}}function Je(r){const b=r.target.files?.[0];if(!b){_(t,e(t).private_key_bytes="");return}const v=new FileReader;v.onload=l=>{const h=l.target?.result;_(t,e(t).private_key_bytes=btoa(h))},v.readAsText(b)}function Qe(){return e(t).name.trim()?e(ee)&&e(y)?e(y)["auth-type"]===p.PAT?!!e(t).oauth2_token.trim():!!e(t).app_id.trim()&&!!e(t).installation_id.trim()&&!!e(t).private_key_bytes:!0:!1}function xt(r){return e(Q).find(b=>b.name===r)?.endpoint_type||""}function _t(r){return xt(r)==="gitea"}const ht=[{key:"name",title:"Name",cellComponent:it,cellProps:{field:"name"}},{key:"description",title:"Description",cellComponent:it,cellProps:{field:"description",type:"description"}},{key:"endpoint",title:"Endpoint",cellComponent:ir},{key:"auth_type",title:"Auth Type",cellComponent:nr,cellProps:{statusType:"custom",statusField:"auth-type"}},{key:"actions",title:"Actions",align:"right",cellComponent:er}],kt={entityType:"credential",primaryText:{field:"name",isClickable:!1},secondaryText:{field:"description"},customInfo:[{icon:r=>He(r?.forge_type||"unknown"),text:r=>r?.endpoint?.name||"Unknown"}],badges:[{type:"auth",field:"auth-type"}],actions:[{type:"edit",handler:r=>qe(r)},{type:"delete",handler:r=>Be(r)}]};function wt(r){n(Pe,r.detail.term),n(K,1)}function Ct(r){n(K,r.detail.page)}function Pt(r){const d=or(r.detail.perPage);n(ce,d.newPerPage),n(K,d.newCurrentPage)}function At(r){qe(r.detail.item)}function Tt(r){Be(r.detail.item)}J(()=>(e(le),U()),()=>{(!e(le).length||U().loaded.credentials)&&n(le,U().credentials)}),J(()=>U(),()=>{n(we,U().loading.credentials)}),J(()=>U(),()=>{n(Ge,U().errorMessages.credentials)}),J(()=>(e(Q),U()),()=>{(!e(Q).length||U().loaded.endpoints)&&n(Q,U().endpoints)}),J(()=>(e(le),e(Pe)),()=>{n(Z,rr(e(le),e(Pe)))}),J(()=>(e(ue),e(Z),e(ce),e(K)),()=>{n(ue,Math.ceil(e(Z).length/e(ce))),e(K)>e(ue)&&e(ue)>0&&n(K,e(ue))}),J(()=>(e(Z),e(K),e(ce)),()=>{n(Ye,ar(e(Z),e(K),e(ce)))}),J(()=>e(t),()=>{n(Ue,!e(t).name||!e(t).endpoint?!1:e(t).auth_type===p.PAT?!!e(t).oauth2_token:!!e(t).app_id&&!!e(t).installation_id&&!!e(t).private_key_bytes)}),J(()=>(e(x),e(Q)),()=>{n(ze,e(x)?e(Q).filter(r=>r.endpoint_type===e(x)):e(Q))}),zt(),jt();var We=xr();f("keydown",Lt,ut),qt(r=>{St.title="Credentials - GARM"});var Le=Fe(We),Xe=o(Le);Wt(Xe,{title:"Credentials",description:"Manage authentication credentials for your GitHub and Gitea endpoints.",actionLabel:"Add Credentials",$$events:{action:gt}});var $t=a(Xe,2);{let r=Ke(()=>e(Ge)||e(Ce)),d=Ke(()=>!!e(Ge));Zt($t,{get columns(){return ht},get data(){return e(Ye)},get loading(){return e(we)},get error(){return e(r)},get searchTerm(){return e(Pe)},searchPlaceholder:"Search credentials by name, description, or endpoint...",get currentPage(){return e(K)},get perPage(){return e(ce)},get totalPages(){return e(ue)},get totalItems(){return e(Z),u(()=>e(Z).length)},itemName:"credentials",emptyIconType:"key",get showRetry(){return e(d)},get mobileCardConfig(){return kt},$$events:{search:wt,pageChange:Ct,perPageChange:Pt,retry:pt,edit:At,delete:Tt},$$slots:{"mobile-card":(b,v)=>{const l=Ke(()=>v.item);var h=dr(),A=o(h),z=o(A),I=o(z),F=o(I,!0);i(I);var k=a(I,2),V=o(k,!0);i(k);var q=a(k,2),B=o(q),S=o(B);Yt(S,()=>(be(He),be(e(l)),u(()=>He(e(l).forge_type||"unknown"))));var te=a(S,2),re=o(te,!0);i(te),i(B),i(q),i(z),i(A);var ae=a(A,2),H=o(ae);{var oe=j=>{nt(j,{variant:"success",text:"PAT"})},R=j=>{nt(j,{variant:"info",text:"App"})};G(H,j=>{be(e(l)),u(()=>(e(l)["auth-type"]||"pat")==="pat")?j(oe):j(R,!1)})}var Y=a(H,2),ie=o(Y);ot(ie,{action:"edit",size:"sm",title:"Edit credentials",ariaLabel:"Edit credentials",$$events:{click:()=>qe(e(l))}});var pe=a(ie,2);ot(pe,{action:"delete",size:"sm",title:"Delete credentials",ariaLabel:"Delete credentials",$$events:{click:()=>Be(e(l))}}),i(Y),i(ae),i(h),se(()=>{W(F,(be(e(l)),u(()=>e(l).name))),W(V,(be(e(l)),u(()=>e(l).description))),W(re,(be(e(l)),u(()=>e(l).endpoint?.name||"Unknown")))}),$(b,h)}}})}i(Le);var Ze=a(Le,2);{var Et=r=>{var d=gr(),b=o(d),v=a(b,2),l=o(v),h=a(o(l),2);i(l);var A=a(l,2),z=o(A);Xt(z,{get selectedForgeType(){return e(x)},set selectedForgeType(s){n(x,s)},$$events:{select:yt},$$legacy:!0});var I=a(z,2),F=a(o(I),2);L(F),i(I);var k=a(I,2),V=a(o(k),2);rt(V),i(k);var q=a(k,2),B=a(o(q),2);se(()=>{e(t),Nt(()=>{e(ze)})});var S=o(B);S.value=S.__value="";var te=a(S);Ht(te,1,()=>e(ze),Rt,(s,c)=>{var m=sr(),C=o(m);i(m);var T={};se(()=>{W(C,`${e(c),u(()=>e(c).name)??""} (${e(c),u(()=>e(c).endpoint_type)??""})`),T!==(T=(e(c),u(()=>e(c).name)))&&(m.value=(m.__value=(e(c),u(()=>e(c).name)))??"")}),$(s,m)}),i(B);var re=a(B,2);{var ae=s=>{var c=lr(),m=o(c);i(c),se(()=>W(m,`Showing only ${e(x)??""} endpoints`)),$(s,c)};G(re,s=>{e(x)&&s(ae)})}i(q);var H=a(q,2),oe=a(o(H),2),R=o(oe),Y=a(R,2);i(oe);var ie=a(oe,2);{var pe=s=>{var c=cr();$(s,c)};G(ie,s=>{e(x)==="gitea"&&s(pe)})}i(H);var j=a(H,2);{var De=s=>{var c=ur(),m=a(o(c),2);L(m),i(c),N(m,()=>e(t).oauth2_token,C=>_(t,e(t).oauth2_token=C)),$(s,c)};G(j,s=>{e(D),u(()=>e(D)===p.PAT)&&s(De)})}var ve=a(j,2);{var Me=s=>{var c=pr(),m=Fe(c),C=a(o(m),2);L(C),i(m);var T=a(m,2),O=a(o(T),2);L(O),i(T);var de=a(T,2),ge=a(o(de),2),xe=o(ge),_e=a(xe,2),he=a(o(_e),2),Ie=o(he);X(),i(he),X(2),i(_e),i(ge),i(de),N(C,()=>e(t).app_id,ye=>_(t,e(t).app_id=ye)),N(O,()=>e(t).installation_id,ye=>_(t,e(t).installation_id=ye)),f("change",xe,Je),f("click",Ie,()=>document.getElementById("private_key")?.click()),$(s,c)};G(ve,s=>{e(D),u(()=>e(D)===p.APP)&&s(Me)})}var w=a(ve,2),ne=o(w),me=a(ne,2);i(w),i(A),i(v),i(d),se(s=>{je(R,1,`flex-1 py-2 px-4 text-sm font-medium rounded-md border focus:outline-none focus:ring-2 focus:ring-blue-500 cursor-pointer ${e(D),u(()=>e(D)===p.PAT?"bg-blue-600 text-white border-blue-600":"bg-white dark:bg-gray-700 text-gray-700 dark:text-gray-300 border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-600")??""} ${s??""}`),Y.disabled=e(x)==="gitea",je(Y,1,`flex-1 py-2 px-4 text-sm font-medium rounded-md border focus:outline-none focus:ring-2 focus:ring-blue-500 ${e(D),u(()=>e(D)===p.APP?"bg-blue-600 text-white border-blue-600":"bg-white dark:bg-gray-700 text-gray-700 dark:text-gray-300 border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-600")??""} diff --git a/webapp/assets/_app/immutable/nodes/4.CvH5IZ0t.js b/webapp/assets/_app/immutable/nodes/4.KZXhOjkJ.js similarity index 96% rename from webapp/assets/_app/immutable/nodes/4.CvH5IZ0t.js rename to webapp/assets/_app/immutable/nodes/4.KZXhOjkJ.js index 2913944a..8efbf287 100644 --- a/webapp/assets/_app/immutable/nodes/4.CvH5IZ0t.js +++ b/webapp/assets/_app/immutable/nodes/4.KZXhOjkJ.js @@ -1,3 +1,3 @@ -import"../chunks/DsnmJJEf.js";import{i as kt}from"../chunks/TJn6xDN9.js";import{p as wt,g as e,o as Ct,l as Q,h as Et,f as z,i as _,j as Rt,a as be,b as F,c as Ut,m as c,n as Lt,$ as Pt,d as o,v as Be,s as r,t as Ue,u as O,k as s,w as u,r as i,q as _e,e as ge,x as Se,z as j}from"../chunks/DniTuB_0.js";import{i as me,s as Mt,a as Tt}from"../chunks/DbNhg6mG.js";import{h as At,r as x,c as Ve,s as Oe,g as oe}from"../chunks/DD3srElq.js";import{b as h,a as We}from"../chunks/CCQwxxp9.js";import{p as Ke}from"../chunks/D4Caz1gY.js";import{P as $t}from"../chunks/BlYHwhWl.js";import{F as Bt}from"../chunks/DNeHGP6d.js";import{A as Je}from"../chunks/B5vVe1Fo.js";import{e as Dt,a as Qe}from"../chunks/C-ow2qSP.js";import{t as fe}from"../chunks/CBJzOE8U.js";import{g as De,c as Gt,a as It,p as Ft}from"../chunks/LMA6-4d1.js";import{e as Ge}from"../chunks/BZiHL9L3.js";import{D as jt,G as Ie,A as zt}from"../chunks/QtGwBUod.js";import"../chunks/BSR16q_V.js";import{E as qt}from"../chunks/hsRG7ppz.js";import{T as Le}from"../chunks/DxDw7UWv.js";var Ht=z('

'),Nt=z('
',1),St=z('

If empty, Base URL will be used as API Base URL

Leave empty to use default Gitea releases URL

',1),Vt=z(''),Ot=z('
',1),Wt=z('

If empty, Base URL will be used as API Base URL

Leave empty to use default Gitea releases URL

',1),Kt=z(''),Jt=z(''),Qt=z('
',1);function ga(Xe,Ye){wt(Ye,!1);const[Ze,et]=Mt(),W=()=>Tt(Dt,"$eagerCache",Ze),Pe=c(),K=c(),Fe=c(),ie=c();let ve=c(!0),X=c([]),ye=c(""),xe=c(""),$=c(1),Y=c(25),Z=c(1),he=c(!1),ke=c(!1),we=c(!1),q=c("github"),g=c(null),M=c(null),t=c({name:"",description:"",endpoint_type:"",base_url:"",api_base_url:"",upload_base_url:"",ca_cert_bundle:"",tools_metadata_url:"",use_internal_tools_metadata:!1}),m={...e(t)};Ct(async()=>{try{s(ve,!0);const a=await Qe.getEndpoints();a&&Array.isArray(a)&&s(X,a)}catch(a){console.error("Failed to load endpoints:",a),s(ye,a instanceof Error?a.message:"Failed to load endpoints")}finally{s(ve,!1)}});async function tt(){try{await Qe.retryResource("endpoints")}catch(a){console.error("Retry failed:",a)}}const at=[{key:"name",title:"Name",cellComponent:Ie,cellProps:{field:"name"}},{key:"description",title:"Description",cellComponent:Ie,cellProps:{field:"description"}},{key:"api_url",title:"API URL",cellComponent:Ie,cellProps:{field:"api_base_url",fallbackField:"base_url"}},{key:"forge_type",title:"Forge Type",cellComponent:qt},{key:"actions",title:"Actions",align:"right",cellComponent:zt}],rt={entityType:"endpoint",primaryText:{field:"name",isClickable:!1},secondaryText:{field:"description"},customInfo:[{icon:a=>De(a?.endpoint_type||"unknown"),text:a=>a?.api_base_url||"Unknown"}],actions:[{type:"edit",handler:a=>Me(a)},{type:"delete",handler:a=>Te(a)}]};function ot(a){s(xe,a.detail.term),s($,1)}function it(a){s($,a.detail.page)}function st(a){const l=Gt(a.detail.perPage);s(Y,l.newPerPage),s($,l.newCurrentPage)}function lt(a){Me(a.detail.item)}function nt(a){Te(a.detail.item)}function dt(){s(q,"github"),Ae(),u(t,e(t).endpoint_type="github"),s(he,!0)}function ut(a){s(q,a.detail),Ae(),u(t,e(t).endpoint_type=a.detail)}function Me(a){s(g,a),s(t,{name:a.name||"",description:a.description||"",endpoint_type:a.endpoint_type||"",base_url:a.base_url||"",api_base_url:a.api_base_url||"",upload_base_url:a.upload_base_url||"",ca_cert_bundle:typeof a.ca_cert_bundle=="string"?a.ca_cert_bundle:"",tools_metadata_url:a.tools_metadata_url||"",use_internal_tools_metadata:a.use_internal_tools_metadata||!1}),m={...e(t)},s(ke,!0)}function Te(a){s(M,a),s(we,!0)}function Ae(){s(t,{name:"",description:"",endpoint_type:"",base_url:"",api_base_url:"",upload_base_url:"",ca_cert_bundle:"",tools_metadata_url:"",use_internal_tools_metadata:!1}),m={...e(t)}}function ct(a){a.key==="Escape"&&(e(he)||e(ke)||e(we))&&k()}function k(){s(he,!1),s(ke,!1),s(we,!1),s(q,"github"),s(g,null),s(M,null),Ae()}function pt(){const a={};if(e(t).description!==m.description&&(e(t).description.trim()!==""||m.description!=="")&&(a.description=e(t).description.trim()),e(t).base_url!==m.base_url&&e(t).base_url.trim()!==""&&(a.base_url=e(t).base_url.trim()),e(t).api_base_url!==m.api_base_url&&(e(t).api_base_url.trim()!==""||m.api_base_url!=="")&&(a.api_base_url=e(t).api_base_url.trim()),e(g)?.endpoint_type==="github"&&e(t).upload_base_url!==m.upload_base_url&&(e(t).upload_base_url.trim()!==""||m.upload_base_url!=="")&&(a.upload_base_url=e(t).upload_base_url.trim()),e(t).ca_cert_bundle!==m.ca_cert_bundle)if(e(t).ca_cert_bundle!=="")try{const l=atob(e(t).ca_cert_bundle);a.ca_cert_bundle=Array.from(l,p=>p.charCodeAt(0))}catch{m.ca_cert_bundle!==""&&(a.ca_cert_bundle=[])}else m.ca_cert_bundle!==""&&(a.ca_cert_bundle=[]);return e(g)?.endpoint_type==="gitea"&&(e(t).tools_metadata_url!==m.tools_metadata_url&&(a.tools_metadata_url=e(t).tools_metadata_url.trim()),e(t).use_internal_tools_metadata!==m.use_internal_tools_metadata&&(a.use_internal_tools_metadata=e(t).use_internal_tools_metadata)),a}async function bt(){try{const a={name:e(t).name,description:e(t).description,endpoint_type:e(t).endpoint_type,base_url:e(t).base_url,api_base_url:e(t).api_base_url,upload_base_url:e(t).upload_base_url};if(e(t).endpoint_type==="gitea"&&(e(t).tools_metadata_url.trim()!==""&&(a.tools_metadata_url=e(t).tools_metadata_url.trim()),a.use_internal_tools_metadata=e(t).use_internal_tools_metadata),e(t).ca_cert_bundle&&e(t).ca_cert_bundle.trim()!=="")try{const l=atob(e(t).ca_cert_bundle);a.ca_cert_bundle=Array.from(l,p=>p.charCodeAt(0))}catch{}e(t).endpoint_type==="github"?await oe.createGithubEndpoint(a):await oe.createGiteaEndpoint(a),fe.success("Endpoint Created",`Endpoint ${e(t).name} has been created successfully.`),k()}catch(a){s(ye,Ge(a))}}async function _t(){if(e(g))try{const a=pt();if(Object.keys(a).length===0){fe.info("No Changes","No fields were modified."),k();return}e(g).endpoint_type==="github"?await oe.updateGithubEndpoint(e(g).name,a):await oe.updateGiteaEndpoint(e(g).name,a),fe.success("Endpoint Updated",`Endpoint ${e(g).name} has been updated successfully.`),k()}catch(a){s(ye,Ge(a))}}async function gt(){if(e(M)){try{e(M).endpoint_type==="github"?await oe.deleteGithubEndpoint(e(M).name):await oe.deleteGiteaEndpoint(e(M).name),fe.success("Endpoint Deleted",`Endpoint ${e(M).name} has been deleted successfully.`)}catch(a){const l=Ge(a);fe.error("Delete Failed",l)}k()}}function je(a){const p=a.target.files?.[0];if(!p){u(t,e(t).ca_cert_bundle="");return}const w=new FileReader;w.onload=n=>{const f=n.target?.result;u(t,e(t).ca_cert_bundle=btoa(f))},w.readAsText(p)}Q(()=>(e(X),W()),()=>{(!e(X).length||W().loaded.endpoints)&&s(X,W().endpoints)}),Q(()=>W(),()=>{s(ve,W().loading.endpoints)}),Q(()=>W(),()=>{s(Pe,W().errorMessages.endpoints)}),Q(()=>(e(X),e(xe)),()=>{s(K,It(e(X),e(xe)))}),Q(()=>(e(Z),e(K),e(Y),e($)),()=>{s(Z,Math.ceil(e(K).length/e(Y))),e($)>e(Z)&&e(Z)>0&&s($,e(Z))}),Q(()=>(e(K),e($),e(Y)),()=>{s(Fe,Ft(e(K),e($),e(Y)))}),Q(()=>e(t),()=>{s(ie,!(!e(t).name||!e(t).base_url||e(t).endpoint_type==="github"&&!e(t).api_base_url))}),Et(),kt();var ze=Qt();_("keydown",Lt,ct),Rt(a=>{Pt.title="Endpoints - GARM"});var $e=be(ze),qe=o($e);$t(qe,{title:"Endpoints",description:"Manage your GitHub and Gitea endpoints for runner management.",actionLabel:"Add Endpoint",$$events:{action:dt}});var mt=r(qe,2);{let a=Be(()=>e(Pe)||e(ye)),l=Be(()=>!!e(Pe));jt(mt,{get columns(){return at},get data(){return e(Fe)},get loading(){return e(ve)},get error(){return e(a)},get searchTerm(){return e(xe)},searchPlaceholder:"Search endpoints by name, description, or URL...",get currentPage(){return e($)},get perPage(){return e(Y)},get totalPages(){return e(Z)},get totalItems(){return e(K),O(()=>e(K).length)},itemName:"endpoints",emptyIconType:"settings",get showRetry(){return e(l)},get mobileCardConfig(){return rt},$$events:{search:ot,pageChange:it,perPageChange:st,retry:tt,edit:lt,delete:nt},$$slots:{"mobile-card":(p,w)=>{const n=Be(()=>w.item);var f=Ht(),C=o(f),T=o(C),L=o(T),R=o(L,!0);i(L);var v=r(L,2),B=o(v,!0);i(v);var A=r(v,2),D=o(A);At(D,()=>(_e(De),_e(e(n)),O(()=>De(e(n).endpoint_type||"","w-5 h-5"))));var G=r(D,2),ee=o(G,!0);i(G),i(A),i(T),i(C);var J=r(C,2),H=o(J);Je(H,{action:"edit",size:"sm",title:"Edit endpoint",ariaLabel:"Edit endpoint",$$events:{click:()=>Me(e(n))}});var te=r(H,2);Je(te,{action:"delete",size:"sm",title:"Delete endpoint",ariaLabel:"Delete endpoint",$$events:{click:()=>Te(e(n))}}),i(J),i(f),Ue(()=>{ge(R,(_e(e(n)),O(()=>e(n).name))),ge(B,(_e(e(n)),O(()=>e(n).description))),ge(ee,(_e(e(n)),O(()=>e(n).endpoint_type)))}),F(p,f)}}})}i($e);var He=r($e,2);{var ft=a=>{var l=Vt(),p=o(l),w=r(p,2),n=o(w),f=r(o(n),2);i(n);var C=r(n,2),T=o(C);Bt(T,{get selectedForgeType(){return e(q)},set selectedForgeType(b){s(q,b)},$$events:{select:ut},$$legacy:!0});var L=r(T,2),R=r(o(L),2);x(R),i(L);var v=r(L,2),B=r(o(v),2);Se(B),i(v);var A=r(v,2),D=r(o(A),2);x(D),i(A);var G=r(A,2);{var ee=b=>{var N=Nt(),d=be(N),P=r(o(d),2);x(P),i(d);var y=r(d,2),U=r(o(y),2);x(U),i(y),h(P,()=>e(t).api_base_url,E=>u(t,e(t).api_base_url=E)),h(U,()=>e(t).upload_base_url,E=>u(t,e(t).upload_base_url=E)),F(b,N)},J=b=>{var N=St(),d=be(N),P=r(o(d),2);x(P),j(2),i(d);var y=r(d,2),U=o(y),E=r(o(U),2),S=o(E);Le(S,{title:"Tools Metadata URL",content:"URL where GARM checks for act_runner binary downloads and release information. Defaults to https://gitea.com/api/v1/repos/gitea/act_runner/releases if not specified. Use a custom URL to point to your own tools repository or mirror.",position:"top",width:"w-80"}),i(E),i(U);var I=r(U,2);x(I),j(2),i(y);var Re=r(y,2),re=o(Re);x(re);var ue=r(re,4),ce=o(ue);Le(ce,{title:"Internal Tools Metadata",content:"When enabled, GARM uses built-in URLs for nightly act_runner binaries instead of calling the external tools metadata URL. This is useful in air-gapped environments where runner images already include the binaries and don't need to download them.",position:"top",width:"w-80"}),i(ue),i(Re),h(P,()=>e(t).api_base_url,V=>u(t,e(t).api_base_url=V)),h(I,()=>e(t).tools_metadata_url,V=>u(t,e(t).tools_metadata_url=V)),We(re,()=>e(t).use_internal_tools_metadata,V=>u(t,e(t).use_internal_tools_metadata=V)),F(b,N)};me(G,b=>{e(q)==="github"?b(ee):b(J,!1)})}var H=r(G,2),te=r(o(H),2),ae=o(te),se=r(ae,2),le=r(o(se),2),Ce=o(le);j(),i(le),j(2),i(se),i(te),i(H);var ne=r(H,2),Ee=o(ne),de=r(Ee,2);i(ne),i(C),i(w),i(l),Ue(()=>{Ve(R,"placeholder",e(q)==="github"?"e.g., github-enterprise or github-com":"e.g., gitea-main or my-gitea"),Ve(D,"placeholder",e(q)==="github"?"https://github.com or https://github.example.com":"https://gitea.example.com"),de.disabled=!e(ie),Oe(de,1,`px-4 py-2 text-sm font-medium text-white rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 transition-colors +import"../chunks/DsnmJJEf.js";import{i as kt}from"../chunks/De-I_rkH.js";import{p as wt,g as e,o as Ct,l as Q,h as Et,f as z,i as _,j as Rt,a as be,b as F,c as Ut,m as c,n as Lt,$ as Pt,d as o,v as Be,s as r,t as Ue,u as O,k as s,w as u,r as i,q as _e,e as ge,x as Se,z as j}from"../chunks/BIqNNOMq.js";import{i as me,s as Mt,a as Tt}from"../chunks/CfI2BFUj.js";import{h as At,r as x,c as Ve,s as Oe,g as oe}from"../chunks/CQh-7xkh.js";import{b as h,a as We}from"../chunks/Gs5uNKRr.js";import{p as Ke}from"../chunks/CdEA5IGF.js";import{P as $t}from"../chunks/Cq4AwQWc.js";import{F as Bt}from"../chunks/D2YBjDB9.js";import{A as Je}from"../chunks/Dbr2TLcG.js";import{e as Dt,a as Qe}from"../chunks/B1uxuBYn.js";import{t as fe}from"../chunks/DgRPqjXE.js";import{g as De,c as Gt,a as It,p as Ft}from"../chunks/B7If18kh.js";import{e as Ge}from"../chunks/BZiHL9L3.js";import{D as jt,G as Ie,A as zt}from"../chunks/BjNB1vhO.js";import"../chunks/CYb6_lpF.js";import{E as qt}from"../chunks/DFF0ZVx4.js";import{T as Le}from"../chunks/CBbBPkpt.js";var Ht=z('

'),Nt=z('
',1),St=z('

If empty, Base URL will be used as API Base URL

Leave empty to use default Gitea releases URL

',1),Vt=z(''),Ot=z('
',1),Wt=z('

If empty, Base URL will be used as API Base URL

Leave empty to use default Gitea releases URL

',1),Kt=z(''),Jt=z(''),Qt=z('
',1);function ga(Xe,Ye){wt(Ye,!1);const[Ze,et]=Mt(),W=()=>Tt(Dt,"$eagerCache",Ze),Pe=c(),K=c(),Fe=c(),ie=c();let ve=c(!0),X=c([]),ye=c(""),xe=c(""),$=c(1),Y=c(25),Z=c(1),he=c(!1),ke=c(!1),we=c(!1),q=c("github"),g=c(null),M=c(null),t=c({name:"",description:"",endpoint_type:"",base_url:"",api_base_url:"",upload_base_url:"",ca_cert_bundle:"",tools_metadata_url:"",use_internal_tools_metadata:!1}),m={...e(t)};Ct(async()=>{try{s(ve,!0);const a=await Qe.getEndpoints();a&&Array.isArray(a)&&s(X,a)}catch(a){console.error("Failed to load endpoints:",a),s(ye,a instanceof Error?a.message:"Failed to load endpoints")}finally{s(ve,!1)}});async function tt(){try{await Qe.retryResource("endpoints")}catch(a){console.error("Retry failed:",a)}}const at=[{key:"name",title:"Name",cellComponent:Ie,cellProps:{field:"name"}},{key:"description",title:"Description",cellComponent:Ie,cellProps:{field:"description"}},{key:"api_url",title:"API URL",cellComponent:Ie,cellProps:{field:"api_base_url",fallbackField:"base_url"}},{key:"forge_type",title:"Forge Type",cellComponent:qt},{key:"actions",title:"Actions",align:"right",cellComponent:zt}],rt={entityType:"endpoint",primaryText:{field:"name",isClickable:!1},secondaryText:{field:"description"},customInfo:[{icon:a=>De(a?.endpoint_type||"unknown"),text:a=>a?.api_base_url||"Unknown"}],actions:[{type:"edit",handler:a=>Me(a)},{type:"delete",handler:a=>Te(a)}]};function ot(a){s(xe,a.detail.term),s($,1)}function it(a){s($,a.detail.page)}function st(a){const l=Gt(a.detail.perPage);s(Y,l.newPerPage),s($,l.newCurrentPage)}function lt(a){Me(a.detail.item)}function nt(a){Te(a.detail.item)}function dt(){s(q,"github"),Ae(),u(t,e(t).endpoint_type="github"),s(he,!0)}function ut(a){s(q,a.detail),Ae(),u(t,e(t).endpoint_type=a.detail)}function Me(a){s(g,a),s(t,{name:a.name||"",description:a.description||"",endpoint_type:a.endpoint_type||"",base_url:a.base_url||"",api_base_url:a.api_base_url||"",upload_base_url:a.upload_base_url||"",ca_cert_bundle:typeof a.ca_cert_bundle=="string"?a.ca_cert_bundle:"",tools_metadata_url:a.tools_metadata_url||"",use_internal_tools_metadata:a.use_internal_tools_metadata||!1}),m={...e(t)},s(ke,!0)}function Te(a){s(M,a),s(we,!0)}function Ae(){s(t,{name:"",description:"",endpoint_type:"",base_url:"",api_base_url:"",upload_base_url:"",ca_cert_bundle:"",tools_metadata_url:"",use_internal_tools_metadata:!1}),m={...e(t)}}function ct(a){a.key==="Escape"&&(e(he)||e(ke)||e(we))&&k()}function k(){s(he,!1),s(ke,!1),s(we,!1),s(q,"github"),s(g,null),s(M,null),Ae()}function pt(){const a={};if(e(t).description!==m.description&&(e(t).description.trim()!==""||m.description!=="")&&(a.description=e(t).description.trim()),e(t).base_url!==m.base_url&&e(t).base_url.trim()!==""&&(a.base_url=e(t).base_url.trim()),e(t).api_base_url!==m.api_base_url&&(e(t).api_base_url.trim()!==""||m.api_base_url!=="")&&(a.api_base_url=e(t).api_base_url.trim()),e(g)?.endpoint_type==="github"&&e(t).upload_base_url!==m.upload_base_url&&(e(t).upload_base_url.trim()!==""||m.upload_base_url!=="")&&(a.upload_base_url=e(t).upload_base_url.trim()),e(t).ca_cert_bundle!==m.ca_cert_bundle)if(e(t).ca_cert_bundle!=="")try{const l=atob(e(t).ca_cert_bundle);a.ca_cert_bundle=Array.from(l,p=>p.charCodeAt(0))}catch{m.ca_cert_bundle!==""&&(a.ca_cert_bundle=[])}else m.ca_cert_bundle!==""&&(a.ca_cert_bundle=[]);return e(g)?.endpoint_type==="gitea"&&(e(t).tools_metadata_url!==m.tools_metadata_url&&(a.tools_metadata_url=e(t).tools_metadata_url.trim()),e(t).use_internal_tools_metadata!==m.use_internal_tools_metadata&&(a.use_internal_tools_metadata=e(t).use_internal_tools_metadata)),a}async function bt(){try{const a={name:e(t).name,description:e(t).description,endpoint_type:e(t).endpoint_type,base_url:e(t).base_url,api_base_url:e(t).api_base_url,upload_base_url:e(t).upload_base_url};if(e(t).endpoint_type==="gitea"&&(e(t).tools_metadata_url.trim()!==""&&(a.tools_metadata_url=e(t).tools_metadata_url.trim()),a.use_internal_tools_metadata=e(t).use_internal_tools_metadata),e(t).ca_cert_bundle&&e(t).ca_cert_bundle.trim()!=="")try{const l=atob(e(t).ca_cert_bundle);a.ca_cert_bundle=Array.from(l,p=>p.charCodeAt(0))}catch{}e(t).endpoint_type==="github"?await oe.createGithubEndpoint(a):await oe.createGiteaEndpoint(a),fe.success("Endpoint Created",`Endpoint ${e(t).name} has been created successfully.`),k()}catch(a){s(ye,Ge(a))}}async function _t(){if(e(g))try{const a=pt();if(Object.keys(a).length===0){fe.info("No Changes","No fields were modified."),k();return}e(g).endpoint_type==="github"?await oe.updateGithubEndpoint(e(g).name,a):await oe.updateGiteaEndpoint(e(g).name,a),fe.success("Endpoint Updated",`Endpoint ${e(g).name} has been updated successfully.`),k()}catch(a){s(ye,Ge(a))}}async function gt(){if(e(M)){try{e(M).endpoint_type==="github"?await oe.deleteGithubEndpoint(e(M).name):await oe.deleteGiteaEndpoint(e(M).name),fe.success("Endpoint Deleted",`Endpoint ${e(M).name} has been deleted successfully.`)}catch(a){const l=Ge(a);fe.error("Delete Failed",l)}k()}}function je(a){const p=a.target.files?.[0];if(!p){u(t,e(t).ca_cert_bundle="");return}const w=new FileReader;w.onload=n=>{const f=n.target?.result;u(t,e(t).ca_cert_bundle=btoa(f))},w.readAsText(p)}Q(()=>(e(X),W()),()=>{(!e(X).length||W().loaded.endpoints)&&s(X,W().endpoints)}),Q(()=>W(),()=>{s(ve,W().loading.endpoints)}),Q(()=>W(),()=>{s(Pe,W().errorMessages.endpoints)}),Q(()=>(e(X),e(xe)),()=>{s(K,It(e(X),e(xe)))}),Q(()=>(e(Z),e(K),e(Y),e($)),()=>{s(Z,Math.ceil(e(K).length/e(Y))),e($)>e(Z)&&e(Z)>0&&s($,e(Z))}),Q(()=>(e(K),e($),e(Y)),()=>{s(Fe,Ft(e(K),e($),e(Y)))}),Q(()=>e(t),()=>{s(ie,!(!e(t).name||!e(t).base_url||e(t).endpoint_type==="github"&&!e(t).api_base_url))}),Et(),kt();var ze=Qt();_("keydown",Lt,ct),Rt(a=>{Pt.title="Endpoints - GARM"});var $e=be(ze),qe=o($e);$t(qe,{title:"Endpoints",description:"Manage your GitHub and Gitea endpoints for runner management.",actionLabel:"Add Endpoint",$$events:{action:dt}});var mt=r(qe,2);{let a=Be(()=>e(Pe)||e(ye)),l=Be(()=>!!e(Pe));jt(mt,{get columns(){return at},get data(){return e(Fe)},get loading(){return e(ve)},get error(){return e(a)},get searchTerm(){return e(xe)},searchPlaceholder:"Search endpoints by name, description, or URL...",get currentPage(){return e($)},get perPage(){return e(Y)},get totalPages(){return e(Z)},get totalItems(){return e(K),O(()=>e(K).length)},itemName:"endpoints",emptyIconType:"settings",get showRetry(){return e(l)},get mobileCardConfig(){return rt},$$events:{search:ot,pageChange:it,perPageChange:st,retry:tt,edit:lt,delete:nt},$$slots:{"mobile-card":(p,w)=>{const n=Be(()=>w.item);var f=Ht(),C=o(f),T=o(C),L=o(T),R=o(L,!0);i(L);var v=r(L,2),B=o(v,!0);i(v);var A=r(v,2),D=o(A);At(D,()=>(_e(De),_e(e(n)),O(()=>De(e(n).endpoint_type||"","w-5 h-5"))));var G=r(D,2),ee=o(G,!0);i(G),i(A),i(T),i(C);var J=r(C,2),H=o(J);Je(H,{action:"edit",size:"sm",title:"Edit endpoint",ariaLabel:"Edit endpoint",$$events:{click:()=>Me(e(n))}});var te=r(H,2);Je(te,{action:"delete",size:"sm",title:"Delete endpoint",ariaLabel:"Delete endpoint",$$events:{click:()=>Te(e(n))}}),i(J),i(f),Ue(()=>{ge(R,(_e(e(n)),O(()=>e(n).name))),ge(B,(_e(e(n)),O(()=>e(n).description))),ge(ee,(_e(e(n)),O(()=>e(n).endpoint_type)))}),F(p,f)}}})}i($e);var He=r($e,2);{var ft=a=>{var l=Vt(),p=o(l),w=r(p,2),n=o(w),f=r(o(n),2);i(n);var C=r(n,2),T=o(C);Bt(T,{get selectedForgeType(){return e(q)},set selectedForgeType(b){s(q,b)},$$events:{select:ut},$$legacy:!0});var L=r(T,2),R=r(o(L),2);x(R),i(L);var v=r(L,2),B=r(o(v),2);Se(B),i(v);var A=r(v,2),D=r(o(A),2);x(D),i(A);var G=r(A,2);{var ee=b=>{var N=Nt(),d=be(N),P=r(o(d),2);x(P),i(d);var y=r(d,2),U=r(o(y),2);x(U),i(y),h(P,()=>e(t).api_base_url,E=>u(t,e(t).api_base_url=E)),h(U,()=>e(t).upload_base_url,E=>u(t,e(t).upload_base_url=E)),F(b,N)},J=b=>{var N=St(),d=be(N),P=r(o(d),2);x(P),j(2),i(d);var y=r(d,2),U=o(y),E=r(o(U),2),S=o(E);Le(S,{title:"Tools Metadata URL",content:"URL where GARM checks for act_runner binary downloads and release information. Defaults to https://gitea.com/api/v1/repos/gitea/act_runner/releases if not specified. Use a custom URL to point to your own tools repository or mirror.",position:"top",width:"w-80"}),i(E),i(U);var I=r(U,2);x(I),j(2),i(y);var Re=r(y,2),re=o(Re);x(re);var ue=r(re,4),ce=o(ue);Le(ce,{title:"Internal Tools Metadata",content:"When enabled, GARM uses built-in URLs for nightly act_runner binaries instead of calling the external tools metadata URL. This is useful in air-gapped environments where runner images already include the binaries and don't need to download them.",position:"top",width:"w-80"}),i(ue),i(Re),h(P,()=>e(t).api_base_url,V=>u(t,e(t).api_base_url=V)),h(I,()=>e(t).tools_metadata_url,V=>u(t,e(t).tools_metadata_url=V)),We(re,()=>e(t).use_internal_tools_metadata,V=>u(t,e(t).use_internal_tools_metadata=V)),F(b,N)};me(G,b=>{e(q)==="github"?b(ee):b(J,!1)})}var H=r(G,2),te=r(o(H),2),ae=o(te),se=r(ae,2),le=r(o(se),2),Ce=o(le);j(),i(le),j(2),i(se),i(te),i(H);var ne=r(H,2),Ee=o(ne),de=r(Ee,2);i(ne),i(C),i(w),i(l),Ue(()=>{Ve(R,"placeholder",e(q)==="github"?"e.g., github-enterprise or github-com":"e.g., gitea-main or my-gitea"),Ve(D,"placeholder",e(q)==="github"?"https://github.com or https://github.example.com":"https://gitea.example.com"),de.disabled=!e(ie),Oe(de,1,`px-4 py-2 text-sm font-medium text-white rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 transition-colors ${e(ie)?"bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 cursor-pointer":"bg-gray-400 cursor-not-allowed"}`)}),_("click",p,k),_("click",f,k),h(R,()=>e(t).name,b=>u(t,e(t).name=b)),h(B,()=>e(t).description,b=>u(t,e(t).description=b)),h(D,()=>e(t).base_url,b=>u(t,e(t).base_url=b)),_("change",ae,je),_("click",Ce,()=>document.getElementById("ca_cert_file")?.click()),_("click",Ee,k),_("submit",C,Ke(bt)),F(a,l)};me(He,a=>{e(he)&&a(ft)})}var Ne=r(He,2);{var vt=a=>{var l=Kt(),p=o(l),w=r(p,2),n=o(w),f=o(n),C=o(f),T=o(C);i(C),j(2),i(f);var L=r(f,2);i(n);var R=r(n,2),v=o(R),B=r(o(v),2);x(B),i(v);var A=r(v,2),D=r(o(A),2);Se(D),i(A);var G=r(A,2),ee=r(o(G),2);x(ee),i(G);var J=r(G,2);{var H=d=>{var P=Ot(),y=be(P),U=r(o(y),2);x(U),i(y);var E=r(y,2),S=r(o(E),2);x(S),i(E),h(U,()=>e(t).api_base_url,I=>u(t,e(t).api_base_url=I)),h(S,()=>e(t).upload_base_url,I=>u(t,e(t).upload_base_url=I)),F(d,P)},te=d=>{var P=Wt(),y=be(P),U=r(o(y),2);x(U),j(2),i(y);var E=r(y,2),S=o(E),I=r(o(S),2),Re=o(I);Le(Re,{title:"Tools Metadata URL",content:"URL where GARM checks for act_runner binary downloads and release information. Defaults to https://gitea.com/api/v1/repos/gitea/act_runner/releases if not specified. Use a custom URL to point to your own tools repository or mirror.",position:"top",width:"w-80"}),i(I),i(S);var re=r(S,2);x(re),j(2),i(E);var ue=r(E,2),ce=o(ue);x(ce);var V=r(ce,4),ht=o(V);Le(ht,{title:"Internal Tools Metadata",content:"When enabled, GARM uses built-in URLs for nightly act_runner binaries instead of calling the external tools metadata URL. This is useful in air-gapped environments where runner images already include the binaries and don't need to download them.",position:"top",width:"w-80"}),i(V),i(ue),h(U,()=>e(t).api_base_url,pe=>u(t,e(t).api_base_url=pe)),h(re,()=>e(t).tools_metadata_url,pe=>u(t,e(t).tools_metadata_url=pe)),We(ce,()=>e(t).use_internal_tools_metadata,pe=>u(t,e(t).use_internal_tools_metadata=pe)),F(d,P)};me(J,d=>{e(g),O(()=>e(g).endpoint_type==="github")?d(H):d(te,!1)})}var ae=r(J,2),se=r(o(ae),2),le=o(se),Ce=r(le,2),ne=r(o(Ce),2),Ee=o(ne);j(),i(ne),j(2),i(Ce),i(se),i(ae);var de=r(ae,2),b=o(de),N=r(b,2);i(de),i(R),i(w),i(l),Ue(()=>{ge(T,`Edit ${e(g),O(()=>e(g).endpoint_type==="github"?"GitHub":"Gitea")??""} Endpoint`),N.disabled=!e(ie),Oe(N,1,`px-4 py-2 text-sm font-medium text-white rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 transition-colors ${e(ie)?"bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 cursor-pointer":"bg-gray-400 cursor-not-allowed"}`)}),_("click",p,k),_("click",L,k),h(B,()=>e(t).name,d=>u(t,e(t).name=d)),h(D,()=>e(t).description,d=>u(t,e(t).description=d)),h(ee,()=>e(t).base_url,d=>u(t,e(t).base_url=d)),_("change",le,je),_("click",Ee,()=>document.getElementById("edit_ca_cert_file")?.click()),_("click",b,k),_("submit",R,Ke(_t)),F(a,l)};me(Ne,a=>{e(ke)&&e(g)&&a(vt)})}var yt=r(Ne,2);{var xt=a=>{var l=Jt(),p=o(l),w=r(p,2),n=o(w),f=o(n),C=r(o(f),2),T=r(o(C),2),L=o(T);i(T),i(C),i(f),i(n);var R=r(n,2),v=o(R),B=r(v,2);i(R),i(w),i(l),Ue(()=>ge(L,`Are you sure you want to delete the endpoint "${e(M),O(()=>e(M).name)??""}"? This action cannot be undone.`)),_("click",p,k),_("click",v,k),_("click",B,gt),F(a,l)};me(yt,a=>{e(we)&&e(M)&&a(xt)})}F(Xe,ze),Ut(),et()}export{ga as component}; diff --git a/webapp/assets/_app/immutable/nodes/5.DMUQ3452.js b/webapp/assets/_app/immutable/nodes/5.DMUQ3452.js deleted file mode 100644 index 3b9b74b4..00000000 --- a/webapp/assets/_app/immutable/nodes/5.DMUQ3452.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as Ge}from"../chunks/TJn6xDN9.js";import{p as Se,E as Je,o as He,l as w,k as r,m as n,g as e,h as Re,f as M,s as o,d as i,r as l,b as $,t as N,e as K,y as $e,u as b,z as Ve,w as Z,i as Ce,c as Ue,A as We,a as Be,j as Ye,$ as Ke,q as A,v as ee}from"../chunks/DniTuB_0.js";import{a as Le,i as H,s as Ne}from"../chunks/DbNhg6mG.js";import{r as Pe,b as Me,d as De,c as Oe,g as be}from"../chunks/DD3srElq.js";import{P as Qe}from"../chunks/BlYHwhWl.js";import{e as Xe,i as Ze}from"../chunks/Ck5PkeSc.js";import{b as Te}from"../chunks/CCQwxxp9.js";import{p as et}from"../chunks/D4Caz1gY.js";import{M as tt}from"../chunks/PC4wJWhj.js";import{e as re}from"../chunks/BZiHL9L3.js";import{e as qe,a as he}from"../chunks/C-ow2qSP.js";import{U as rt}from"../chunks/C0wSEYM-.js";import{D as at}from"../chunks/B6XSaEl0.js";import{t as te}from"../chunks/CBJzOE8U.js";import{k as ye,l as st}from"../chunks/LMA6-4d1.js";import{B as ot}from"../chunks/DcQdHuVc.js";import{D as nt,G as it,A as lt}from"../chunks/QtGwBUod.js";import{A as Ae}from"../chunks/B5vVe1Fo.js";import{E as dt}from"../chunks/D3pbRQAB.js";import{E as ct}from"../chunks/hsRG7ppz.js";import{S as ut}from"../chunks/Dn_Ue57e.js";var pt=M('

'),mt=M('

Loading...

'),ft=M(""),gt=M('

Loading credentials...

'),vt=M('

No GitHub credentials found. Please create GitHub credentials first.

'),bt=M(`

You'll need to manually configure this secret in GitHub's enterprise webhook settings.

`),yt=M('

Create Enterprise

Enterprises are only available for GitHub endpoints.

');function ht(ae,se){Se(se,!1);const[oe,ne]=Ne(),u=()=>Le(qe,"$eagerCache",oe),G=n(),h=n(),p=n(),R=n(),E=Je();let x=n(!1),y=n(""),a=n({name:"",credentials_name:"",webhook_secret:"",pool_balancer_type:"roundrobin"});async function _(){if(!u().loaded.credentials&&!u().loading.credentials)try{await he.getCredentials()}catch(m){r(y,re(m))}}async function C(){if(!e(a).name||!e(a).name.trim()){r(y,"Enterprise name is required");return}if(!e(a).credentials_name){r(y,"Please select credentials");return}try{r(x,!0),r(y,"");const m={...e(a)};E("submit",m)}catch(m){r(y,re(m)),r(x,!1)}}He(()=>{_()}),w(()=>u(),()=>{r(G,u().credentials)}),w(()=>u(),()=>{r(h,u().loading.credentials)}),w(()=>e(G),()=>{r(p,e(G).filter(m=>m.forge_type==="github"))}),w(()=>e(a),()=>{r(R,e(a).name&&e(a).name.trim()!==""&&e(a).credentials_name!==""&&e(a).webhook_secret&&e(a).webhook_secret.trim()!=="")}),Re(),Ge(),tt(ae,{$$events:{close:()=>E("close")},children:(m,q)=>{var D=yt(),d=o(i(D),4);{var ie=f=>{var g=pt(),T=i(g),U=i(T,!0);l(T),l(g),N(()=>K(U,e(y))),$(f,g)};H(d,f=>{e(y)&&f(ie)})}var le=o(d,2);{var de=f=>{var g=mt();$(f,g)},ce=f=>{var g=bt(),T=i(g),U=o(i(T),2);Pe(U),l(T);var z=o(T,2),B=o(i(z),2);N(()=>{e(a),$e(()=>{e(p)})});var j=i(B);j.value=j.__value="";var ue=o(j);Xe(ue,1,()=>e(p),Ze,(s,c)=>{var P=ft(),v=i(P);l(P);var k={};N(()=>{K(v,`${e(c),b(()=>e(c).name)??""} (${e(c),b(()=>e(c).endpoint?.name||"Unknown endpoint")??""})`),k!==(k=(e(c),b(()=>e(c).name)))&&(P.value=(P.__value=(e(c),b(()=>e(c).name)))??"")}),$(s,P)}),l(B);var pe=o(B,2);{var me=s=>{var c=gt();$(s,c)},O=s=>{var c=We(),P=Be(c);{var v=k=>{var Y=vt();$(k,Y)};H(P,k=>{e(p),b(()=>e(p).length===0)&&k(v)},!0)}$(s,c)};H(pe,s=>{e(h)?s(me):s(O,!1)})}l(z);var S=o(z,2),L=o(i(S),2);N(()=>{e(a),$e(()=>{})});var F=i(L);F.value=F.__value="roundrobin";var I=o(F);I.value=I.__value="pack",l(L),l(S);var J=o(S,2),V=o(i(J),2);Pe(V),Ve(2),l(J);var Q=o(J,2),X=i(Q),W=o(X,2),t=i(W,!0);l(W),l(Q),l(g),N(()=>{W.disabled=(e(x),e(h),e(R),e(p),b(()=>e(x)||e(h)||!e(R)||e(p).length===0)),K(t,e(x)?"Creating...":"Create Enterprise")}),Te(U,()=>e(a).name,s=>Z(a,e(a).name=s)),Me(B,()=>e(a).credentials_name,s=>Z(a,e(a).credentials_name=s)),Me(L,()=>e(a).pool_balancer_type,s=>Z(a,e(a).pool_balancer_type=s)),Te(V,()=>e(a).webhook_secret,s=>Z(a,e(a).webhook_secret=s)),Ce("click",X,()=>E("close")),Ce("submit",g,et(C)),$(f,g)};H(le,f=>{e(x)?f(de):f(ce,!1)})}l(D),$(m,D)},$$slots:{default:!0}}),Ue(),ne()}var _t=M(''),xt=M('
',1);function It(ae,se){Se(se,!1);const[oe,ne]=Ne(),u=()=>Le(qe,"$eagerCache",oe),G=n(),h=n(),p=n(),R=n();let E=n([]),x=n(!0),y=n(""),a=n(""),_=n(1),C=n(25),m=n(!1),q=n(!1),D=n(!1),d=n(null);async function ie(t){try{r(y,""),await be.createEnterprise(t),te.success("Enterprise Created",`Enterprise ${t.name} has been created successfully.`),r(m,!1)}catch(s){throw r(y,re(s)),s}}async function le(t){if(e(d))try{await be.updateEnterprise(e(d).id,t),te.success("Enterprise Updated",`Enterprise ${e(d).name} has been updated successfully.`),r(q,!1),r(d,null)}catch(s){throw s}}async function de(){if(e(d))try{r(y,""),await be.deleteEnterprise(e(d).id),te.success("Enterprise Deleted",`Enterprise ${e(d).name} has been deleted successfully.`),r(D,!1),r(d,null)}catch(t){const s=re(t);te.error("Delete Failed",s)}}function ce(){r(m,!0)}function f(t){r(d,t),r(q,!0)}function g(t){r(d,t),r(D,!0)}He(async()=>{try{r(x,!0);const t=await he.getEnterprises();t&&Array.isArray(t)&&r(E,t)}catch(t){console.error("Failed to load enterprises:",t),r(y,t instanceof Error?t.message:"Failed to load enterprises")}finally{r(x,!1)}});async function T(){try{await he.retryResource("enterprises")}catch(t){console.error("Retry failed:",t)}}const U=[{key:"name",title:"Name",cellComponent:dt,cellProps:{entityType:"enterprise"}},{key:"endpoint",title:"Endpoint",cellComponent:ct},{key:"credentials",title:"Credentials",cellComponent:it,cellProps:{field:"credentials_name"}},{key:"status",title:"Status",cellComponent:ut,cellProps:{statusType:"entity"}},{key:"actions",title:"Actions",align:"right",cellComponent:lt}],z={entityType:"enterprise",primaryText:{field:"name",isClickable:!0,href:"/enterprises/{id}"},secondaryText:{field:"credentials_name"},badges:[{type:"custom",value:t=>ye(t)}],actions:[{type:"edit",handler:t=>f(t)},{type:"delete",handler:t=>g(t)}]};function B(t){r(a,t.detail.term),r(_,1)}function j(t){r(_,t.detail.page)}function ue(t){r(C,t.detail.perPage),r(_,1)}function pe(t){f(t.detail.item)}function me(t){g(t.detail.item)}w(()=>(e(E),u()),()=>{(!e(E).length||u().loaded.enterprises)&&r(E,u().enterprises)}),w(()=>u(),()=>{r(x,u().loading.enterprises)}),w(()=>u(),()=>{r(G,u().errorMessages.enterprises)}),w(()=>(e(E),e(a)),()=>{r(h,st(e(E),e(a)))}),w(()=>(e(h),e(C)),()=>{r(p,Math.ceil(e(h).length/e(C)))}),w(()=>(e(_),e(p)),()=>{e(_)>e(p)&&e(p)>0&&r(_,e(p))}),w(()=>(e(h),e(_),e(C)),()=>{r(R,e(h).slice((e(_)-1)*e(C),e(_)*e(C)))}),Re(),Ge();var O=xt();Ye(t=>{Ke.title="Enterprises - GARM"});var S=Be(O),L=i(S);Qe(L,{title:"Enterprises",description:"Manage GitHub enterprises",actionLabel:"Add Enterprise",$$events:{action:ce}});var F=o(L,2);{let t=ee(()=>e(G)||e(y)),s=ee(()=>!!e(G));nt(F,{get columns(){return U},get data(){return e(R)},get loading(){return e(x)},get error(){return e(t)},get searchTerm(){return e(a)},searchPlaceholder:"Search enterprises...",get currentPage(){return e(_)},get perPage(){return e(C)},get totalPages(){return e(p)},get totalItems(){return e(h),b(()=>e(h).length)},itemName:"enterprises",emptyIconType:"building",get showRetry(){return e(s)},get mobileCardConfig(){return z},$$events:{search:B,pageChange:j,perPageChange:ue,retry:T,edit:pe,delete:me},$$slots:{"mobile-card":(c,P)=>{const v=ee(()=>P.item),k=ee(()=>(A(ye),A(e(v)),b(()=>ye(e(v)))));var Y=_t(),fe=i(Y),ge=i(fe),ve=i(ge),ze=i(ve,!0);l(ve);var _e=o(ve,2),je=i(_e,!0);l(_e),l(ge),l(fe);var xe=o(fe,2),ke=i(xe);ot(ke,{get variant(){return A(e(k)),b(()=>e(k).variant)},get text(){return A(e(k)),b(()=>e(k).text)}});var we=o(ke,2),Ee=i(we);Ae(Ee,{action:"edit",size:"sm",title:"Edit enterprise",ariaLabel:"Edit enterprise",$$events:{click:()=>f(e(v))}});var Fe=o(Ee,2);Ae(Fe,{action:"delete",size:"sm",title:"Delete enterprise",ariaLabel:"Delete enterprise",$$events:{click:()=>g(e(v))}}),l(we),l(xe),l(Y),N(Ie=>{Oe(ge,"href",Ie),K(ze,(A(e(v)),b(()=>e(v).name))),K(je,(A(e(v)),b(()=>e(v).credentials_name)))},[()=>(A(De),A(e(v)),b(()=>De(`/enterprises/${e(v).id}`)))]),$(c,Y)}}})}l(S);var I=o(S,2);{var J=t=>{ht(t,{$$events:{close:()=>r(m,!1),submit:s=>ie(s.detail)}})};H(I,t=>{e(m)&&t(J)})}var V=o(I,2);{var Q=t=>{rt(t,{get entity(){return e(d)},entityType:"enterprise",$$events:{close:()=>{r(q,!1),r(d,null)},submit:s=>le(s.detail)}})};H(V,t=>{e(q)&&e(d)&&t(Q)})}var X=o(V,2);{var W=t=>{at(t,{title:"Delete Enterprise",message:"Are you sure you want to delete this enterprise? This action cannot be undone.",get itemName(){return e(d),b(()=>e(d).name)},$$events:{close:()=>{r(D,!1),r(d,null)},confirm:de}})};H(X,t=>{e(D)&&e(d)&&t(W)})}$(ae,O),Ue(),ne()}export{It as component}; diff --git a/webapp/assets/_app/immutable/nodes/5.DsFyy4r9.js b/webapp/assets/_app/immutable/nodes/5.DsFyy4r9.js new file mode 100644 index 00000000..885077d8 --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/5.DsFyy4r9.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as Se}from"../chunks/De-I_rkH.js";import{p as Re,E as We,o as Be,l as w,k as r,m as l,g as e,h as He,f as M,s as o,d as n,r as i,b as C,t as N,e as X,y as Ce,u as b,z as Pe,w as Q,i as Me,c as Ue,A as Ve,a as ze,j as Ye,$ as Ke,q as A,v as re}from"../chunks/BIqNNOMq.js";import{a as Le,i as B,s as Ne}from"../chunks/CfI2BFUj.js";import{r as be,b as De,d as Te,c as Oe,g as ye}from"../chunks/CQh-7xkh.js";import{P as Qe}from"../chunks/Cq4AwQWc.js";import{e as Xe,i as Ze}from"../chunks/D8ZtP9JD.js";import{b as Ae,a as et}from"../chunks/Gs5uNKRr.js";import{p as tt}from"../chunks/CdEA5IGF.js";import{M as rt}from"../chunks/BFX8vI-4.js";import{e as se}from"../chunks/BZiHL9L3.js";import{e as je,a as xe}from"../chunks/B1uxuBYn.js";import{U as at}from"../chunks/CpPzJ1l1.js";import{D as st}from"../chunks/Db7N5hjl.js";import{t as ae}from"../chunks/DgRPqjXE.js";import{k as he,l as ot}from"../chunks/B7If18kh.js";import{B as nt}from"../chunks/CwE4al8R.js";import{D as it,G as lt,A as dt}from"../chunks/BjNB1vhO.js";import{A as Ge}from"../chunks/Dbr2TLcG.js";import{E as ct}from"../chunks/C6HeU_02.js";import{E as ut}from"../chunks/DFF0ZVx4.js";import{S as pt}from"../chunks/DCu5KXBe.js";var mt=M('

'),gt=M('

Loading...

'),vt=M(""),ft=M('

Loading credentials...

'),bt=M('

No GitHub credentials found. Please create GitHub credentials first.

'),yt=M(`

You'll need to manually configure this secret in GitHub's enterprise webhook settings.

`),ht=M('

Create Enterprise

Enterprises are only available for GitHub endpoints.

');function xt(oe,ne){Re(ne,!1);const[ie,le]=Ne(),p=()=>Le(je,"$eagerCache",ie),G=l(),h=l(),m=l(),H=l(),E=We();let _=l(!1),y=l(""),a=l({name:"",credentials_name:"",webhook_secret:"",pool_balancer_type:"roundrobin",agent_mode:!1});async function x(){if(!p().loaded.credentials&&!p().loading.credentials)try{await xe.getCredentials()}catch(g){r(y,se(g))}}async function P(){if(!e(a).name||!e(a).name.trim()){r(y,"Enterprise name is required");return}if(!e(a).credentials_name){r(y,"Please select credentials");return}try{r(_,!0),r(y,"");const g={...e(a)};E("submit",g)}catch(g){r(y,se(g)),r(_,!1)}}Be(()=>{x()}),w(()=>p(),()=>{r(G,p().credentials)}),w(()=>p(),()=>{r(h,p().loading.credentials)}),w(()=>e(G),()=>{r(m,e(G).filter(g=>g.forge_type==="github"))}),w(()=>e(a),()=>{r(H,e(a).name&&e(a).name.trim()!==""&&e(a).credentials_name!==""&&e(a).webhook_secret&&e(a).webhook_secret.trim()!=="")}),He(),Se(),rt(oe,{$$events:{close:()=>E("close")},children:(g,j)=>{var D=ht(),d=o(n(D),4);{var de=v=>{var f=mt(),T=n(f),U=n(T,!0);i(T),i(f),N(()=>X(U,e(y))),C(v,f)};B(d,v=>{e(y)&&v(de)})}var ce=o(d,2);{var ue=v=>{var f=gt();C(v,f)},pe=v=>{var f=yt(),T=n(f),U=o(n(T),2);be(U),i(T);var q=o(T,2),z=o(n(q),2);N(()=>{e(a),Ce(()=>{e(m)})});var F=n(z);F.value=F.__value="";var me=o(F);Xe(me,1,()=>e(m),Ze,(s,c)=>{var k=vt(),R=n(k);i(k);var $={};N(()=>{X(R,`${e(c),b(()=>e(c).name)??""} (${e(c),b(()=>e(c).endpoint?.name||"Unknown endpoint")??""})`),$!==($=(e(c),b(()=>e(c).name)))&&(k.value=(k.__value=(e(c),b(()=>e(c).name)))??"")}),C(s,k)}),i(z);var ge=o(z,2);{var ve=s=>{var c=ft();C(s,c)},Z=s=>{var c=Ve(),k=ze(c);{var R=$=>{var O=bt();C($,O)};B(k,$=>{e(m),b(()=>e(m).length===0)&&$(R)},!0)}C(s,c)};B(ge,s=>{e(h)?s(ve):s(Z,!1)})}i(q);var S=o(q,2),L=o(n(S),2);N(()=>{e(a),Ce(()=>{})});var I=n(L);I.value=I.__value="roundrobin";var J=o(I);J.value=J.__value="pack",i(L),i(S);var W=o(S,2),V=n(W),ee=n(V);be(ee),Pe(4),i(V),i(W);var Y=o(W,2),te=o(n(Y),2);be(te),Pe(2),i(Y);var t=o(Y,2),u=n(t),K=o(u,2),fe=n(K,!0);i(K),i(t),i(f),N(()=>{K.disabled=(e(_),e(h),e(H),e(m),b(()=>e(_)||e(h)||!e(H)||e(m).length===0)),X(fe,e(_)?"Creating...":"Create Enterprise")}),Ae(U,()=>e(a).name,s=>Q(a,e(a).name=s)),De(z,()=>e(a).credentials_name,s=>Q(a,e(a).credentials_name=s)),De(L,()=>e(a).pool_balancer_type,s=>Q(a,e(a).pool_balancer_type=s)),et(ee,()=>e(a).agent_mode,s=>Q(a,e(a).agent_mode=s)),Ae(te,()=>e(a).webhook_secret,s=>Q(a,e(a).webhook_secret=s)),Me("click",u,()=>E("close")),Me("submit",f,tt(P)),C(v,f)};B(ce,v=>{e(_)?v(ue):v(pe,!1)})}i(D),C(g,D)},$$slots:{default:!0}}),Ue(),le()}var _t=M(''),kt=M('
',1);function Jt(oe,ne){Re(ne,!1);const[ie,le]=Ne(),p=()=>Le(je,"$eagerCache",ie),G=l(),h=l(),m=l(),H=l();let E=l([]),_=l(!0),y=l(""),a=l(""),x=l(1),P=l(25),g=l(!1),j=l(!1),D=l(!1),d=l(null);async function de(t){try{r(y,""),await ye.createEnterprise(t),ae.success("Enterprise Created",`Enterprise ${t.name} has been created successfully.`),r(g,!1)}catch(u){throw r(y,se(u)),u}}async function ce(t){if(e(d))try{await ye.updateEnterprise(e(d).id,t),ae.success("Enterprise Updated",`Enterprise ${e(d).name} has been updated successfully.`),r(j,!1),r(d,null)}catch(u){throw u}}async function ue(){if(e(d))try{r(y,""),await ye.deleteEnterprise(e(d).id),ae.success("Enterprise Deleted",`Enterprise ${e(d).name} has been deleted successfully.`),r(D,!1),r(d,null)}catch(t){const u=se(t);ae.error("Delete Failed",u)}}function pe(){r(g,!0)}function v(t){r(d,t),r(j,!0)}function f(t){r(d,t),r(D,!0)}Be(async()=>{try{r(_,!0);const t=await xe.getEnterprises();t&&Array.isArray(t)&&r(E,t)}catch(t){console.error("Failed to load enterprises:",t),r(y,t instanceof Error?t.message:"Failed to load enterprises")}finally{r(_,!1)}});async function T(){try{await xe.retryResource("enterprises")}catch(t){console.error("Retry failed:",t)}}const U=[{key:"name",title:"Name",cellComponent:ct,cellProps:{entityType:"enterprise"}},{key:"endpoint",title:"Endpoint",cellComponent:ut},{key:"credentials",title:"Credentials",cellComponent:lt,cellProps:{field:"credentials_name"}},{key:"status",title:"Status",cellComponent:pt,cellProps:{statusType:"entity"}},{key:"actions",title:"Actions",align:"right",cellComponent:dt}],q={entityType:"enterprise",primaryText:{field:"name",isClickable:!0,href:"/enterprises/{id}"},secondaryText:{field:"credentials_name"},badges:[{type:"custom",value:t=>he(t)}],actions:[{type:"edit",handler:t=>v(t)},{type:"delete",handler:t=>f(t)}]};function z(t){r(a,t.detail.term),r(x,1)}function F(t){r(x,t.detail.page)}function me(t){r(P,t.detail.perPage),r(x,1)}function ge(t){v(t.detail.item)}function ve(t){f(t.detail.item)}w(()=>(e(E),p()),()=>{(!e(E).length||p().loaded.enterprises)&&r(E,p().enterprises)}),w(()=>p(),()=>{r(_,p().loading.enterprises)}),w(()=>p(),()=>{r(G,p().errorMessages.enterprises)}),w(()=>(e(E),e(a)),()=>{r(h,ot(e(E),e(a)))}),w(()=>(e(h),e(P)),()=>{r(m,Math.ceil(e(h).length/e(P)))}),w(()=>(e(x),e(m)),()=>{e(x)>e(m)&&e(m)>0&&r(x,e(m))}),w(()=>(e(h),e(x),e(P)),()=>{r(H,e(h).slice((e(x)-1)*e(P),e(x)*e(P)))}),He(),Se();var Z=kt();Ye(t=>{Ke.title="Enterprises - GARM"});var S=ze(Z),L=n(S);Qe(L,{title:"Enterprises",description:"Manage GitHub enterprises",actionLabel:"Add Enterprise",$$events:{action:pe}});var I=o(L,2);{let t=re(()=>e(G)||e(y)),u=re(()=>!!e(G));it(I,{get columns(){return U},get data(){return e(H)},get loading(){return e(_)},get error(){return e(t)},get searchTerm(){return e(a)},searchPlaceholder:"Search enterprises...",get currentPage(){return e(x)},get perPage(){return e(P)},get totalPages(){return e(m)},get totalItems(){return e(h),b(()=>e(h).length)},itemName:"enterprises",emptyIconType:"building",get showRetry(){return e(u)},get mobileCardConfig(){return q},$$events:{search:z,pageChange:F,perPageChange:me,retry:T,edit:ge,delete:ve},$$slots:{"mobile-card":(K,fe)=>{const s=re(()=>fe.item),c=re(()=>(A(he),A(e(s)),b(()=>he(e(s)))));var k=_t(),R=n(k),$=n(R),O=n($),qe=n(O,!0);i(O);var _e=o(O,2),Fe=n(_e,!0);i(_e),i($),i(R);var ke=o(R,2),we=n(ke);nt(we,{get variant(){return A(e(c)),b(()=>e(c).variant)},get text(){return A(e(c)),b(()=>e(c).text)}});var Ee=o(we,2),$e=n(Ee);Ge($e,{action:"edit",size:"sm",title:"Edit enterprise",ariaLabel:"Edit enterprise",$$events:{click:()=>v(e(s))}});var Ie=o($e,2);Ge(Ie,{action:"delete",size:"sm",title:"Delete enterprise",ariaLabel:"Delete enterprise",$$events:{click:()=>f(e(s))}}),i(Ee),i(ke),i(k),N(Je=>{Oe($,"href",Je),X(qe,(A(e(s)),b(()=>e(s).name))),X(Fe,(A(e(s)),b(()=>e(s).credentials_name)))},[()=>(A(Te),A(e(s)),b(()=>Te(`/enterprises/${e(s).id}`)))]),C(K,k)}}})}i(S);var J=o(S,2);{var W=t=>{xt(t,{$$events:{close:()=>r(g,!1),submit:u=>de(u.detail)}})};B(J,t=>{e(g)&&t(W)})}var V=o(J,2);{var ee=t=>{at(t,{get entity(){return e(d)},entityType:"enterprise",$$events:{close:()=>{r(j,!1),r(d,null)},submit:u=>ce(u.detail)}})};B(V,t=>{e(j)&&e(d)&&t(ee)})}var Y=o(V,2);{var te=t=>{st(t,{title:"Delete Enterprise",message:"Are you sure you want to delete this enterprise? This action cannot be undone.",get itemName(){return e(d),b(()=>e(d).name)},$$events:{close:()=>{r(D,!1),r(d,null)},confirm:ue}})};B(Y,t=>{e(D)&&e(d)&&t(te)})}C(oe,Z),Ue(),le()}export{Jt as component}; diff --git a/webapp/assets/_app/immutable/nodes/6.B8hxA90H.js b/webapp/assets/_app/immutable/nodes/6.C3tvfz51.js similarity index 89% rename from webapp/assets/_app/immutable/nodes/6.B8hxA90H.js rename to webapp/assets/_app/immutable/nodes/6.C3tvfz51.js index 6d91d9c8..5f81a285 100644 --- a/webapp/assets/_app/immutable/nodes/6.B8hxA90H.js +++ b/webapp/assets/_app/immutable/nodes/6.C3tvfz51.js @@ -1 +1 @@ -import"../chunks/DsnmJJEf.js";import{i as qe}from"../chunks/TJn6xDN9.js";import{p as ze,o as Ge,B as je,l as Re,h as Ve,f as S,j as We,a as F,t as j,b as E,c as Je,u as i,q as le,e as de,g as e,m as l,d as u,s as d,k as s,$ as Ke,r as f,w as Oe,A as ce,v}from"../chunks/DniTuB_0.js";import{i as g,s as Qe,a as Xe}from"../chunks/DbNhg6mG.js";import{d as B,c as Ye,g as y}from"../chunks/DD3srElq.js";import{p as Ze}from"../chunks/CzKtu-7o.js";import{g as pe}from"../chunks/DeKGyprh.js";import{U as et}from"../chunks/C0wSEYM-.js";import{D as ue}from"../chunks/B6XSaEl0.js";import{E as tt,P as rt,a as at}from"../chunks/B9-0TtNc.js";import{D as st}from"../chunks/CCF1V3nS.js";import{I as nt}from"../chunks/B3nevMeU.js";import{g as fe}from"../chunks/LMA6-4d1.js";import{w as R}from"../chunks/DmHFwzWx.js";import{t as x}from"../chunks/CBJzOE8U.js";import{C as ot}from"../chunks/A5UGwKpF.js";import{e as V}from"../chunks/BZiHL9L3.js";var it=S('

Loading enterprise...

'),lt=S('

'),dt=S(" ",1),ct=S(' ',1);function Tt(me,ve){ze(ve,!1);const[ge,ye]=Qe(),W=()=>Xe(Ze,"$page",ge),$=l();let r=l(null),c=l([]),m=l([]),U=l(!0),P=l(""),T=l(!1),M=l(!1),I=l(!1),C=l(!1),p=l(null),k=null,h=l();async function J(){if(e($))try{s(U,!0),s(P,"");const[t,a,n]=await Promise.all([y.getEnterprise(e($)),y.listEnterprisePools(e($)).catch(()=>[]),y.listEnterpriseInstances(e($)).catch(()=>[])]);s(r,t),s(c,a),s(m,n)}catch(t){s(P,t instanceof Error?t.message:"Failed to load enterprise")}finally{s(U,!1)}}function he(t,a){const{events:n}=t;return{...a,events:n}}async function _e(t){if(e(r))try{await y.updateEnterprise(e(r).id,t),await J(),x.success("Enterprise Updated",`Enterprise ${e(r).name} has been updated successfully.`),s(T,!1)}catch(a){throw a}}async function be(){if(e(r)){try{await y.deleteEnterprise(e(r).id),pe(B("/enterprises"))}catch(t){const a=V(t);x.error("Delete Failed",a)}s(M,!1)}}async function Ee(){if(e(p))try{await y.deleteInstance(e(p).name),x.success("Instance Deleted",`Instance ${e(p).name} has been deleted successfully.`),s(I,!1),s(p,null)}catch(t){const a=V(t);x.error("Delete Failed",a),s(I,!1),s(p,null)}}function xe(t){s(p,t),s(I,!0)}function $e(){s(C,!0)}async function Ie(t){try{if(!e(r))return;await y.createEnterprisePool(e(r).id,t.detail),x.success("Pool Created",`Pool has been created successfully for enterprise ${e(r).name}.`),s(C,!1)}catch(a){const n=V(a);x.error("Pool Creation Failed",n)}}function K(){e(h)&&Oe(h,e(h).scrollTop=e(h).scrollHeight)}function we(t){if(t.operation==="update"){const a=t.payload;if(e(r)&&a.id===e(r).id){const n=e(r).events?.length||0,o=a.events?.length||0;s(r,he(e(r),a)),o>n&&setTimeout(()=>{K()},100)}}else if(t.operation==="delete"){const a=t.payload.id||t.payload;e(r)&&e(r).id===a&&pe(B("/enterprises"))}}function De(t){if(!e(r))return;const a=t.payload;if(a.enterprise_id===e(r).id){if(t.operation==="create")s(c,[...e(c),a]);else if(t.operation==="update")s(c,e(c).map(n=>n.id===a.id?a:n));else if(t.operation==="delete"){const n=a.id||a;s(c,e(c).filter(o=>o.id!==n))}}}function Pe(t){if(!e(r)||!e(c))return;const a=t.payload;if(e(c).some(o=>o.id===a.pool_id)){if(t.operation==="create")s(m,[...e(m),a]);else if(t.operation==="update")s(m,e(m).map(o=>o.id===a.id?a:o));else if(t.operation==="delete"){const o=a.id||a;s(m,e(m).filter(q=>q.id!==o))}}}Ge(()=>{J().then(()=>{e(r)?.events?.length&&setTimeout(()=>{K()},100)});const t=R.subscribeToEntity("enterprise",["update","delete"],we),a=R.subscribeToEntity("pool",["create","update","delete"],De),n=R.subscribeToEntity("instance",["create","update","delete"],Pe);k=()=>{t(),a(),n()}}),je(()=>{k&&(k(),k=null)}),Re(()=>W(),()=>{s($,W().params.id)}),Ve(),qe();var O=ct();We(t=>{j(()=>Ke.title=`${e(r),i(()=>e(r)?`${e(r).name} - Enterprise Details`:"Enterprise Details")??""} - GARM`)});var L=F(O),H=u(L),Q=u(H),N=u(Q),Te=u(N);f(N);var X=d(N,2),Y=u(X),Z=d(u(Y),2),Me=u(Z,!0);f(Z),f(Y),f(X),f(Q),f(H);var Ce=d(H,2);{var ke=t=>{var a=it();E(t,a)},Ae=t=>{var a=ce(),n=F(a);{var o=_=>{var b=lt(),A=u(b),z=u(A,!0);f(A),f(b),j(()=>de(z,e(P))),E(_,b)},q=_=>{var b=ce(),A=F(b);{var z=G=>{var ae=dt(),se=F(ae);{let w=v(()=>(e(r),i(()=>e(r).name||"Enterprise"))),D=v(()=>(e(r),i(()=>e(r).endpoint?.name))),Ne=v(()=>(le(fe),i(()=>fe("github"))));st(se,{get title(){return e(w)},get subtitle(){return`Endpoint: ${e(D)??""} • GitHub Enterprise`},get forgeIcon(){return e(Ne)},onEdit:()=>s(T,!0),onDelete:()=>s(M,!0)})}var ne=d(se,2);tt(ne,{get entity(){return e(r)},entityType:"enterprise"});var oe=d(ne,2);{let w=v(()=>(e(r),i(()=>e(r).id||""))),D=v(()=>(e(r),i(()=>e(r).name||"")));rt(oe,{get pools(){return e(c)},entityType:"enterprise",get entityId(){return e(w)},get entityName(){return e(D)},$$events:{addPool:$e}})}var ie=d(oe,2);nt(ie,{get instances(){return e(m)},entityType:"enterprise",onDeleteInstance:xe});var He=d(ie,2);{let w=v(()=>(e(r),i(()=>e(r)?.events)));at(He,{get events(){return e(w)},get eventsContainer(){return e(h)},set eventsContainer(D){s(h,D)},$$legacy:!0})}E(G,ae)};g(A,G=>{e(r)&&G(z)},!0)}E(_,b)};g(n,_=>{e(P)?_(o):_(q,!1)},!0)}E(t,a)};g(Ce,t=>{e(U)?t(ke):t(Ae,!1)})}f(L);var ee=d(L,2);{var Fe=t=>{et(t,{get entity(){return e(r)},entityType:"enterprise",$$events:{close:()=>s(T,!1),submit:a=>_e(a.detail)}})};g(ee,t=>{e(T)&&e(r)&&t(Fe)})}var te=d(ee,2);{var Be=t=>{ue(t,{title:"Delete Enterprise",message:"Are you sure you want to delete this enterprise? This action cannot be undone and will remove all associated pools and instances.",get itemName(){return e(r),i(()=>e(r).name)},$$events:{close:()=>s(M,!1),confirm:be}})};g(te,t=>{e(M)&&e(r)&&t(Be)})}var re=d(te,2);{var Se=t=>{ue(t,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return e(p),i(()=>e(p).name)},$$events:{close:()=>{s(I,!1),s(p,null)},confirm:Ee}})};g(re,t=>{e(I)&&e(p)&&t(Se)})}var Ue=d(re,2);{var Le=t=>{{let a=v(()=>(e(r),i(()=>e(r).id||"")));ot(t,{initialEntityType:"enterprise",get initialEntityId(){return e(a)},$$events:{close:()=>s(C,!1),submit:Ie}})}};g(Ue,t=>{e(C)&&e(r)&&t(Le)})}j(t=>{Ye(Te,"href",t),de(Me,(e(r),i(()=>e(r)?e(r).name:"Loading...")))},[()=>(le(B),i(()=>B("/enterprises")))]),E(me,O),Je(),ye()}export{Tt as component}; +import"../chunks/DsnmJJEf.js";import{i as qe}from"../chunks/De-I_rkH.js";import{p as ze,o as Ge,B as je,l as Re,h as Ve,f as S,j as We,a as F,t as j,b as E,c as Je,u as i,q as le,e as de,g as e,m as l,d as u,s as d,k as s,$ as Ke,r as f,w as Oe,A as ce,v}from"../chunks/BIqNNOMq.js";import{i as g,s as Qe,a as Xe}from"../chunks/CfI2BFUj.js";import{d as B,c as Ye,g as y}from"../chunks/CQh-7xkh.js";import{p as Ze}from"../chunks/BIfA0Pjo.js";import{g as pe}from"../chunks/BSYpqPvJ.js";import{U as et}from"../chunks/CpPzJ1l1.js";import{D as ue}from"../chunks/Db7N5hjl.js";import{E as tt,P as rt,a as at}from"../chunks/CjQpknJk.js";import{D as st}from"../chunks/CIekn_9e.js";import{I as nt}from"../chunks/DAaZIIvX.js";import{g as fe}from"../chunks/B7If18kh.js";import{w as R}from"../chunks/C4VNo_Nu.js";import{t as x}from"../chunks/DgRPqjXE.js";import{C as ot}from"../chunks/DBZ2eikH.js";import{e as V}from"../chunks/BZiHL9L3.js";var it=S('

Loading enterprise...

'),lt=S('

'),dt=S(" ",1),ct=S(' ',1);function Tt(me,ve){ze(ve,!1);const[ge,ye]=Qe(),W=()=>Xe(Ze,"$page",ge),$=l();let r=l(null),c=l([]),m=l([]),U=l(!0),P=l(""),T=l(!1),M=l(!1),I=l(!1),C=l(!1),p=l(null),k=null,h=l();async function J(){if(e($))try{s(U,!0),s(P,"");const[t,a,n]=await Promise.all([y.getEnterprise(e($)),y.listEnterprisePools(e($)).catch(()=>[]),y.listEnterpriseInstances(e($)).catch(()=>[])]);s(r,t),s(c,a),s(m,n)}catch(t){s(P,t instanceof Error?t.message:"Failed to load enterprise")}finally{s(U,!1)}}function he(t,a){const{events:n}=t;return{...a,events:n}}async function _e(t){if(e(r))try{await y.updateEnterprise(e(r).id,t),await J(),x.success("Enterprise Updated",`Enterprise ${e(r).name} has been updated successfully.`),s(T,!1)}catch(a){throw a}}async function be(){if(e(r)){try{await y.deleteEnterprise(e(r).id),pe(B("/enterprises"))}catch(t){const a=V(t);x.error("Delete Failed",a)}s(M,!1)}}async function Ee(){if(e(p))try{await y.deleteInstance(e(p).name),x.success("Instance Deleted",`Instance ${e(p).name} has been deleted successfully.`),s(I,!1),s(p,null)}catch(t){const a=V(t);x.error("Delete Failed",a),s(I,!1),s(p,null)}}function xe(t){s(p,t),s(I,!0)}function $e(){s(C,!0)}async function Ie(t){try{if(!e(r))return;await y.createEnterprisePool(e(r).id,t.detail),x.success("Pool Created",`Pool has been created successfully for enterprise ${e(r).name}.`),s(C,!1)}catch(a){const n=V(a);x.error("Pool Creation Failed",n)}}function K(){e(h)&&Oe(h,e(h).scrollTop=e(h).scrollHeight)}function we(t){if(t.operation==="update"){const a=t.payload;if(e(r)&&a.id===e(r).id){const n=e(r).events?.length||0,o=a.events?.length||0;s(r,he(e(r),a)),o>n&&setTimeout(()=>{K()},100)}}else if(t.operation==="delete"){const a=t.payload.id||t.payload;e(r)&&e(r).id===a&&pe(B("/enterprises"))}}function De(t){if(!e(r))return;const a=t.payload;if(a.enterprise_id===e(r).id){if(t.operation==="create")s(c,[...e(c),a]);else if(t.operation==="update")s(c,e(c).map(n=>n.id===a.id?a:n));else if(t.operation==="delete"){const n=a.id||a;s(c,e(c).filter(o=>o.id!==n))}}}function Pe(t){if(!e(r)||!e(c))return;const a=t.payload;if(e(c).some(o=>o.id===a.pool_id)){if(t.operation==="create")s(m,[...e(m),a]);else if(t.operation==="update")s(m,e(m).map(o=>o.id===a.id?a:o));else if(t.operation==="delete"){const o=a.id||a;s(m,e(m).filter(q=>q.id!==o))}}}Ge(()=>{J().then(()=>{e(r)?.events?.length&&setTimeout(()=>{K()},100)});const t=R.subscribeToEntity("enterprise",["update","delete"],we),a=R.subscribeToEntity("pool",["create","update","delete"],De),n=R.subscribeToEntity("instance",["create","update","delete"],Pe);k=()=>{t(),a(),n()}}),je(()=>{k&&(k(),k=null)}),Re(()=>W(),()=>{s($,W().params.id)}),Ve(),qe();var O=ct();We(t=>{j(()=>Ke.title=`${e(r),i(()=>e(r)?`${e(r).name} - Enterprise Details`:"Enterprise Details")??""} - GARM`)});var L=F(O),H=u(L),Q=u(H),N=u(Q),Te=u(N);f(N);var X=d(N,2),Y=u(X),Z=d(u(Y),2),Me=u(Z,!0);f(Z),f(Y),f(X),f(Q),f(H);var Ce=d(H,2);{var ke=t=>{var a=it();E(t,a)},Ae=t=>{var a=ce(),n=F(a);{var o=_=>{var b=lt(),A=u(b),z=u(A,!0);f(A),f(b),j(()=>de(z,e(P))),E(_,b)},q=_=>{var b=ce(),A=F(b);{var z=G=>{var ae=dt(),se=F(ae);{let w=v(()=>(e(r),i(()=>e(r).name||"Enterprise"))),D=v(()=>(e(r),i(()=>e(r).endpoint?.name))),Ne=v(()=>(le(fe),i(()=>fe("github"))));st(se,{get title(){return e(w)},get subtitle(){return`Endpoint: ${e(D)??""} • GitHub Enterprise`},get forgeIcon(){return e(Ne)},onEdit:()=>s(T,!0),onDelete:()=>s(M,!0)})}var ne=d(se,2);tt(ne,{get entity(){return e(r)},entityType:"enterprise"});var oe=d(ne,2);{let w=v(()=>(e(r),i(()=>e(r).id||""))),D=v(()=>(e(r),i(()=>e(r).name||"")));rt(oe,{get pools(){return e(c)},entityType:"enterprise",get entityId(){return e(w)},get entityName(){return e(D)},$$events:{addPool:$e}})}var ie=d(oe,2);nt(ie,{get instances(){return e(m)},entityType:"enterprise",onDeleteInstance:xe});var He=d(ie,2);{let w=v(()=>(e(r),i(()=>e(r)?.events)));at(He,{get events(){return e(w)},get eventsContainer(){return e(h)},set eventsContainer(D){s(h,D)},$$legacy:!0})}E(G,ae)};g(A,G=>{e(r)&&G(z)},!0)}E(_,b)};g(n,_=>{e(P)?_(o):_(q,!1)},!0)}E(t,a)};g(Ce,t=>{e(U)?t(ke):t(Ae,!1)})}f(L);var ee=d(L,2);{var Fe=t=>{et(t,{get entity(){return e(r)},entityType:"enterprise",$$events:{close:()=>s(T,!1),submit:a=>_e(a.detail)}})};g(ee,t=>{e(T)&&e(r)&&t(Fe)})}var te=d(ee,2);{var Be=t=>{ue(t,{title:"Delete Enterprise",message:"Are you sure you want to delete this enterprise? This action cannot be undone and will remove all associated pools and instances.",get itemName(){return e(r),i(()=>e(r).name)},$$events:{close:()=>s(M,!1),confirm:be}})};g(te,t=>{e(M)&&e(r)&&t(Be)})}var re=d(te,2);{var Se=t=>{ue(t,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return e(p),i(()=>e(p).name)},$$events:{close:()=>{s(I,!1),s(p,null)},confirm:Ee}})};g(re,t=>{e(I)&&e(p)&&t(Se)})}var Ue=d(re,2);{var Le=t=>{{let a=v(()=>(e(r),i(()=>e(r).id||"")));ot(t,{initialEntityType:"enterprise",get initialEntityId(){return e(a)},$$events:{close:()=>s(C,!1),submit:Ie}})}};g(Ue,t=>{e(C)&&e(r)&&t(Le)})}j(t=>{Ye(Te,"href",t),de(Me,(e(r),i(()=>e(r)?e(r).name:"Loading...")))},[()=>(le(B),i(()=>B("/enterprises")))]),E(me,O),Je(),ye()}export{Tt as component}; diff --git a/webapp/assets/_app/immutable/nodes/7.Bh-gc64D.js b/webapp/assets/_app/immutable/nodes/7.Bh-gc64D.js deleted file mode 100644 index cb658e4b..00000000 --- a/webapp/assets/_app/immutable/nodes/7.Bh-gc64D.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as Ye}from"../chunks/TJn6xDN9.js";import{p as Ze,o as er,l as A,h as rr,f as m,j as ar,t as ee,g as e,i as tr,b as n,c as dr,m as i,$ as lr,d as a,u,q as $e,s as d,k as s,r as t,z as I,C as sr,a as or,D as ir,e as Ue,v as nr}from"../chunks/DniTuB_0.js";import{i as p,s as vr,a as mr}from"../chunks/DbNhg6mG.js";import{B as ze,d as k,c as Me,s as S,r as P}from"../chunks/DD3srElq.js";import{b as q}from"../chunks/CCQwxxp9.js";import{p as cr}from"../chunks/D4Caz1gY.js";import{g as re}from"../chunks/DeKGyprh.js";import{a as ur,b as pr}from"../chunks/B_3mRBsj.js";import{t as br}from"../chunks/CBJzOE8U.js";import{e as gr}from"../chunks/BZiHL9L3.js";var fr=m('

Username is required

'),xr=m('

Please enter a valid email address

'),hr=m('

Full name is required

'),yr=m('

Password must be at least 8 characters long

'),kr=m('

Passwords do not match

'),_r=sr(' Advanced Configuration (Optional)',1),wr=m('

URL where runners can fetch metadata and setup information.

URL where runners send status updates and lifecycle events.

URL where GitHub/Gitea will send webhook events for job notifications.

'),$r=m("
  • Enter a username
  • "),Ur=m("
  • Enter a valid email address
  • "),zr=m("
  • Enter your full name
  • "),Mr=m("
  • Enter a password with at least 8 characters
  • "),Rr=m("
  • Confirm your password
  • "),Ar=m('

    Please complete all required fields

    '),Pr=m('

    '),qr=m('
    GARM

    Welcome to GARM

    Complete the first-run setup to get started

    First-Run Initialization

    GARM needs to be initialized before first use. This will create the admin user and generate a unique controller ID for this installation.

    This will create the admin user, generate a unique controller ID, and configure the required URLs for your GARM installation.
    Make sure to remember these credentials as they cannot be recovered.

    ');function Dr(Re,Ae){Ze(Ae,!1);const[Pe,qe]=vr(),C=()=>mr(ur,"$authStore",Pe),_=i(),w=i(),$=i(),U=i(),z=i(),j=i();let f=i("admin"),b=i("admin@garm.local"),c=i(""),x=i(""),h=i("Administrator"),G=i(!1),W=i(""),H=i(!1),E=i(""),V=i(""),B=i("");async function Ce(){if(e(j))try{s(G,!0),s(W,""),await pr.initialize(e(f).trim(),e(b).trim(),e(c),e(h).trim(),{callbackUrl:e(E).trim()||void 0,metadataUrl:e(V).trim()||void 0,webhookUrl:e(B).trim()||void 0}),br.success("GARM Initialized","GARM has been successfully initialized. Welcome!")}catch(r){s(W,gr(r))}finally{s(G,!1)}}er(()=>{if(C().isAuthenticated){re(k("/"));return}!C().needsInitialization&&!C().loading&&re(k("/login"))}),A(()=>(e(E),e(V),e(B)),()=>{if(typeof window<"u"){const r=window.location.origin;e(E)||s(E,`${r}/api/v1/callbacks`),e(V)||s(V,`${r}/api/v1/metadata`),e(B)||s(B,`${r}/webhooks`)}}),A(()=>e(b),()=>{s(_,e(b).trim()!==""&&e(b).includes("@"))}),A(()=>e(c),()=>{s(w,e(c).length>=8)}),A(()=>(e(x),e(c)),()=>{s($,e(x).length>0&&e(c)===e(x))}),A(()=>e(f),()=>{s(U,e(f).trim()!=="")}),A(()=>e(h),()=>{s(z,e(h).trim()!=="")}),A(()=>(e(U),e(_),e(z),e(w),e($)),()=>{s(j,e(U)&&e(_)&&e(z)&&e(w)&&e($))}),A(()=>(e(G),C(),k),()=>{e(G)||(C().isAuthenticated?re(k("/")):!C().needsInitialization&&!C().loading&&re(k("/login")))}),rr(),Ye();var ae=qr();ar(r=>{lr.title="Initialize GARM - First Run Setup"});var te=a(ae),me=a(te),ce=a(me),Ge=d(ce,2);t(me),I(4),t(te);var ue=d(te,2),pe=d(a(ue),2),de=a(pe),le=a(de),be=d(a(le),2),T=a(be);P(T);var Le=d(T,2);{var Ie=r=>{var l=fr();n(r,l)};p(Le,r=>{e(U),e(f),u(()=>!e(U)&&e(f).length>0)&&r(Ie)})}t(be),t(le);var se=d(le,2),ge=d(a(se),2),O=a(ge);P(O);var Ee=d(O,2);{var Ve=r=>{var l=xr();n(r,l)};p(Ee,r=>{e(_),e(b),u(()=>!e(_)&&e(b).length>0)&&r(Ve)})}t(ge),t(se);var oe=d(se,2),fe=d(a(oe),2),J=a(fe);P(J);var Be=d(J,2);{var Ne=r=>{var l=hr();n(r,l)};p(Be,r=>{e(z),e(h),u(()=>!e(z)&&e(h).length>0)&&r(Ne)})}t(fe),t(oe);var ie=d(oe,2),xe=d(a(ie),2),K=a(xe);P(K);var Se=d(K,2);{var je=r=>{var l=yr();n(r,l)};p(Se,r=>{e(w),e(c),u(()=>!e(w)&&e(c).length>0)&&r(je)})}t(xe),t(ie);var ne=d(ie,2),he=d(a(ne),2),Q=a(he);P(Q);var Fe=d(Q,2);{var De=r=>{var l=kr();n(r,l)};p(Fe,r=>{e($),e(x),u(()=>!e($)&&e(x).length>0)&&r(De)})}t(he),t(ne);var ve=d(ne,2),ye=a(ve);ze(ye,{type:"button",variant:"ghost",size:"sm",$$events:{click:()=>s(H,!e(H))},children:(r,l)=>{var g=_r(),v=or(g);I(),ee(()=>S(v,0,`w-4 h-4 mr-2 transition-transform ${e(H)?"rotate-90":""}`)),n(r,g)},$$slots:{default:!0}});var We=d(ye,2);{var He=r=>{var l=wr(),g=a(l),v=a(g),M=d(a(v),2),L=a(M);P(L),I(2),t(M),t(v);var N=d(v,2),X=d(a(N),2),F=a(X);P(F),I(2),t(X),t(N);var Y=d(N,2),D=d(a(Y),2),Z=a(D);P(Z),I(2),t(D),t(Y),t(g),t(l),q(L,()=>e(V),R=>s(V,R)),q(F,()=>e(E),R=>s(E,R)),q(Z,()=>e(B),R=>s(B,R)),n(r,l)};p(We,r=>{e(H)&&r(He)})}t(ve);var ke=d(ve,2);{var Te=r=>{var l=Ar(),g=a(l),v=d(a(g),2),M=d(a(v),2),L=a(M),N=a(L);{var X=o=>{var y=$r();n(o,y)};p(N,o=>{e(U)||o(X)})}var F=d(N,2);{var Y=o=>{var y=Ur();n(o,y)};p(F,o=>{e(_)||o(Y)})}var D=d(F,2);{var Z=o=>{var y=zr();n(o,y)};p(D,o=>{e(z)||o(Z)})}var R=d(D,2);{var Ke=o=>{var y=Mr();n(o,y)};p(R,o=>{e(w)||o(Ke)})}var Qe=d(R,2);{var Xe=o=>{var y=Rr();n(o,y)};p(Qe,o=>{e($)||o(Xe)})}t(L),t(M),t(v),t(g),t(l),n(r,l)};p(ke,r=>{e(j),e(f),e(b),e(h),e(c),e(x),u(()=>!e(j)&&(e(f).length>0||e(b).length>0||e(h).length>0||e(c).length>0||e(x).length>0))&&r(Te)})}var _e=d(ke,2);{var Oe=r=>{var l=Pr(),g=a(l),v=d(a(g),2),M=a(v),L=a(M,!0);t(M),t(v),t(g),t(l),ee(()=>Ue(L,e(W))),n(r,l)};p(_e,r=>{e(W)&&r(Oe)})}var we=d(_e,2),Je=a(we);{let r=nr(()=>!e(j)||e(G));ze(Je,{type:"submit",variant:"primary",size:"lg",fullWidth:!0,get loading(){return e(G)},get disabled(){return e(r)},children:(l,g)=>{I();var v=ir();ee(()=>Ue(v,e(G)?"Initializing...":"Initialize GARM")),n(l,v)},$$slots:{default:!0}})}t(we),t(de),I(2),t(pe),t(ue),t(ae),ee((r,l)=>{Me(ce,"src",r),Me(Ge,"src",l),S(T,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(U),e(f),u(()=>!e(U)&&e(f).length>0?"border-red-300 dark:border-red-600":"")??""}`),S(O,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(_),e(b),u(()=>!e(_)&&e(b).length>0?"border-red-300 dark:border-red-600":"")??""}`),S(J,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(z),e(h),u(()=>!e(z)&&e(h).length>0?"border-red-300 dark:border-red-600":"")??""}`),S(K,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(w),e(c),u(()=>!e(w)&&e(c).length>0?"border-red-300 dark:border-red-600":"")??""}`),S(Q,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e($),e(x),u(()=>!e($)&&e(x).length>0?"border-red-300 dark:border-red-600":"")??""}`)},[()=>($e(k),u(()=>k("/assets/garm-light.svg"))),()=>($e(k),u(()=>k("/assets/garm-dark.svg")))]),q(T,()=>e(f),r=>s(f,r)),q(O,()=>e(b),r=>s(b,r)),q(J,()=>e(h),r=>s(h,r)),q(K,()=>e(c),r=>s(c,r)),q(Q,()=>e(x),r=>s(x,r)),tr("submit",de,cr(Ce)),n(Re,ae),dr(),qe()}export{Dr as component}; diff --git a/webapp/assets/_app/immutable/nodes/7.uDnTRQ0y.js b/webapp/assets/_app/immutable/nodes/7.uDnTRQ0y.js new file mode 100644 index 00000000..eeffcd55 --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/7.uDnTRQ0y.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as Ze}from"../chunks/De-I_rkH.js";import{p as er,o as rr,l as q,h as ar,f as v,j as tr,t as de,g as e,i as dr,b as n,c as lr,m as i,$ as sr,d as a,u,q as Re,s as d,k as s,r as t,z as C,C as or,a as ir,D as nr,e as Ae,v as cr}from"../chunks/BIqNNOMq.js";import{i as p,s as vr,a as mr}from"../chunks/CfI2BFUj.js";import{B as Pe,d as _,c as qe,s as j,r as w}from"../chunks/CQh-7xkh.js";import{b as U}from"../chunks/Gs5uNKRr.js";import{p as ur}from"../chunks/CdEA5IGF.js";import{g as le}from"../chunks/BSYpqPvJ.js";import{a as pr,b as gr}from"../chunks/Cx8owuas.js";import{t as br}from"../chunks/DgRPqjXE.js";import{e as fr}from"../chunks/BZiHL9L3.js";var xr=v('

    Username is required

    '),hr=v('

    Please enter a valid email address

    '),yr=v('

    Full name is required

    '),kr=v('

    Password must be at least 8 characters long

    '),_r=v('

    Passwords do not match

    '),wr=or(' Advanced Configuration (Optional)',1),Ur=v('

    URL where runners can fetch metadata and setup information.

    URL where runners send status updates and lifecycle events.

    URL where GitHub/Gitea will send webhook events for job notifications.

    URL where GARM agents will connect. Must allow websocket connections.

    '),$r=v("
  • Enter a username
  • "),zr=v("
  • Enter a valid email address
  • "),Mr=v("
  • Enter your full name
  • "),Rr=v("
  • Enter a password with at least 8 characters
  • "),Ar=v("
  • Confirm your password
  • "),Pr=v('

    Please complete all required fields

    '),qr=v('

    '),Cr=v('
    GARM

    Welcome to GARM

    Complete the first-run setup to get started

    First-Run Initialization

    GARM needs to be initialized before first use. This will create the admin user and generate a unique controller ID for this installation.

    This will create the admin user, generate a unique controller ID, and configure the required URLs for your GARM installation.
    Make sure to remember these credentials as they cannot be recovered.

    ');function Wr(Ce,Le){er(Le,!1);const[Ge,Ie]=vr(),L=()=>mr(pr,"$authStore",Ge),$=i(),z=i(),M=i(),R=i(),A=i(),F=i();let f=i("admin"),g=i("admin@garm.local"),m=i(""),x=i(""),h=i("Administrator"),G=i(!1),O=i(""),J=i(!1),E=i(""),V=i(""),B=i(""),N=i("");async function Ee(){if(e(F))try{s(G,!0),s(O,""),await gr.initialize(e(f).trim(),e(g).trim(),e(m),e(h).trim(),{callbackUrl:e(E).trim()||void 0,metadataUrl:e(V).trim()||void 0,webhookUrl:e(B).trim()||void 0,agentUrl:e(N).trim()||void 0}),br.success("GARM Initialized","GARM has been successfully initialized. Welcome!")}catch(r){s(O,fr(r))}finally{s(G,!1)}}rr(()=>{if(L().isAuthenticated){le(_("/"));return}!L().needsInitialization&&!L().loading&&le(_("/login"))}),q(()=>(e(E),e(V),e(B),e(N)),()=>{if(typeof window<"u"){const r=window.location.origin;e(E)||s(E,`${r}/api/v1/callbacks`),e(V)||s(V,`${r}/api/v1/metadata`),e(B)||s(B,`${r}/webhooks`),e(N)||s(N,`${r}/agent`)}}),q(()=>e(g),()=>{s($,e(g).trim()!==""&&e(g).includes("@"))}),q(()=>e(m),()=>{s(z,e(m).length>=8)}),q(()=>(e(x),e(m)),()=>{s(M,e(x).length>0&&e(m)===e(x))}),q(()=>e(f),()=>{s(R,e(f).trim()!=="")}),q(()=>e(h),()=>{s(A,e(h).trim()!=="")}),q(()=>(e(R),e($),e(A),e(z),e(M)),()=>{s(F,e(R)&&e($)&&e(A)&&e(z)&&e(M))}),q(()=>(e(G),L(),_),()=>{e(G)||(L().isAuthenticated?le(_("/")):!L().needsInitialization&&!L().loading&&le(_("/login")))}),ar(),Ze();var se=Cr();tr(r=>{sr.title="Initialize GARM - First Run Setup"});var oe=a(se),ge=a(oe),be=a(ge),Ve=d(be,2);t(ge),C(4),t(oe);var fe=d(oe,2),xe=d(a(fe),2),ie=a(xe),ne=a(ie),he=d(a(ne),2),K=a(he);w(K);var Be=d(K,2);{var Ne=r=>{var l=xr();n(r,l)};p(Be,r=>{e(R),e(f),u(()=>!e(R)&&e(f).length>0)&&r(Ne)})}t(he),t(ne);var ce=d(ne,2),ye=d(a(ce),2),Q=a(ye);w(Q);var Se=d(Q,2);{var je=r=>{var l=hr();n(r,l)};p(Se,r=>{e($),e(g),u(()=>!e($)&&e(g).length>0)&&r(je)})}t(ye),t(ce);var ve=d(ce,2),ke=d(a(ve),2),X=a(ke);w(X);var Fe=d(X,2);{var De=r=>{var l=yr();n(r,l)};p(Fe,r=>{e(A),e(h),u(()=>!e(A)&&e(h).length>0)&&r(De)})}t(ke),t(ve);var me=d(ve,2),_e=d(a(me),2),Y=a(_e);w(Y);var We=d(Y,2);{var He=r=>{var l=kr();n(r,l)};p(We,r=>{e(z),e(m),u(()=>!e(z)&&e(m).length>0)&&r(He)})}t(_e),t(me);var ue=d(me,2),we=d(a(ue),2),Z=a(we);w(Z);var Te=d(Z,2);{var Oe=r=>{var l=_r();n(r,l)};p(Te,r=>{e(M),e(x),u(()=>!e(M)&&e(x).length>0)&&r(Oe)})}t(we),t(ue);var pe=d(ue,2),Ue=a(pe);Pe(Ue,{type:"button",variant:"ghost",size:"sm",$$events:{click:()=>s(J,!e(J))},children:(r,l)=>{var b=wr(),c=ir(b);C(),de(()=>j(c,0,`w-4 h-4 mr-2 transition-transform ${e(J)?"rotate-90":""}`)),n(r,b)},$$slots:{default:!0}});var Je=d(Ue,2);{var Ke=r=>{var l=Ur(),b=a(l),c=a(b),P=d(a(c),2),I=a(P);w(I),C(2),t(P),t(c);var S=d(c,2),ee=d(a(S),2),D=a(ee);w(D),C(2),t(ee),t(S);var W=d(S,2),H=d(a(W),2),re=a(H);w(re),C(2),t(H),t(W);var T=d(W,2),ae=d(a(T),2),te=a(ae);w(te),C(2),t(ae),t(T),t(b),t(l),U(I,()=>e(V),y=>s(V,y)),U(D,()=>e(E),y=>s(E,y)),U(re,()=>e(B),y=>s(B,y)),U(te,()=>e(N),y=>s(N,y)),n(r,l)};p(Je,r=>{e(J)&&r(Ke)})}t(pe);var $e=d(pe,2);{var Qe=r=>{var l=Pr(),b=a(l),c=d(a(b),2),P=d(a(c),2),I=a(P),S=a(I);{var ee=o=>{var k=$r();n(o,k)};p(S,o=>{e(R)||o(ee)})}var D=d(S,2);{var W=o=>{var k=zr();n(o,k)};p(D,o=>{e($)||o(W)})}var H=d(D,2);{var re=o=>{var k=Mr();n(o,k)};p(H,o=>{e(A)||o(re)})}var T=d(H,2);{var ae=o=>{var k=Rr();n(o,k)};p(T,o=>{e(z)||o(ae)})}var te=d(T,2);{var y=o=>{var k=Ar();n(o,k)};p(te,o=>{e(M)||o(y)})}t(I),t(P),t(c),t(b),t(l),n(r,l)};p($e,r=>{e(F),e(f),e(g),e(h),e(m),e(x),u(()=>!e(F)&&(e(f).length>0||e(g).length>0||e(h).length>0||e(m).length>0||e(x).length>0))&&r(Qe)})}var ze=d($e,2);{var Xe=r=>{var l=qr(),b=a(l),c=d(a(b),2),P=a(c),I=a(P,!0);t(P),t(c),t(b),t(l),de(()=>Ae(I,e(O))),n(r,l)};p(ze,r=>{e(O)&&r(Xe)})}var Me=d(ze,2),Ye=a(Me);{let r=cr(()=>!e(F)||e(G));Pe(Ye,{type:"submit",variant:"primary",size:"lg",fullWidth:!0,get loading(){return e(G)},get disabled(){return e(r)},children:(l,b)=>{C();var c=nr();de(()=>Ae(c,e(G)?"Initializing...":"Initialize GARM")),n(l,c)},$$slots:{default:!0}})}t(Me),t(ie),C(2),t(xe),t(fe),t(se),de((r,l)=>{qe(be,"src",r),qe(Ve,"src",l),j(K,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(R),e(f),u(()=>!e(R)&&e(f).length>0?"border-red-300 dark:border-red-600":"")??""}`),j(Q,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e($),e(g),u(()=>!e($)&&e(g).length>0?"border-red-300 dark:border-red-600":"")??""}`),j(X,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(A),e(h),u(()=>!e(A)&&e(h).length>0?"border-red-300 dark:border-red-600":"")??""}`),j(Y,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(z),e(m),u(()=>!e(z)&&e(m).length>0?"border-red-300 dark:border-red-600":"")??""}`),j(Z,1,`appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm ${e(M),e(x),u(()=>!e(M)&&e(x).length>0?"border-red-300 dark:border-red-600":"")??""}`)},[()=>(Re(_),u(()=>_("/assets/garm-light.svg"))),()=>(Re(_),u(()=>_("/assets/garm-dark.svg")))]),U(K,()=>e(f),r=>s(f,r)),U(Q,()=>e(g),r=>s(g,r)),U(X,()=>e(h),r=>s(h,r)),U(Y,()=>e(m),r=>s(m,r)),U(Z,()=>e(x),r=>s(x,r)),dr("submit",ie,ur(Ee)),n(Ce,se),lr(),Ie()}export{Wr as component}; diff --git a/webapp/assets/_app/immutable/nodes/8.BBGRj-oZ.js b/webapp/assets/_app/immutable/nodes/8.BBGRj-oZ.js deleted file mode 100644 index 5a8805cf..00000000 --- a/webapp/assets/_app/immutable/nodes/8.BBGRj-oZ.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as z}from"../chunks/TJn6xDN9.js";import{p as J,f as C,b as x,c as K,d as y,q as f,u as g,r as b,t as M,e as R,A as ce,a as O,o as de,B as ue,l as w,h as me,j as pe,g as e,m as u,$ as fe,v as ge,s as T,k as s}from"../chunks/DniTuB_0.js";import{p as ve,i as A}from"../chunks/DbNhg6mG.js";import{d as D,c as $,g as H}from"../chunks/DD3srElq.js";import{D as he}from"../chunks/B6XSaEl0.js";import{P as _e}from"../chunks/BlYHwhWl.js";import{w as ye}from"../chunks/DmHFwzWx.js";import{t as be}from"../chunks/CBJzOE8U.js";import{D as xe,G as Ce,A as Pe}from"../chunks/QtGwBUod.js";import{e as ke}from"../chunks/BZiHL9L3.js";import{E as Ie}from"../chunks/D3pbRQAB.js";import"../chunks/BSR16q_V.js";import{S as W}from"../chunks/Dn_Ue57e.js";var Se=C(' '),we=C(' '),Te=C('-'),De=C('
    ');function $e(E,k){J(k,!1);let a=ve(k,"item",8);z();var m=De(),I=y(m);{var i=r=>{var p=Se(),h=y(p);b(p),M(n=>{$(p,"href",n),$(p,"title",`Pool: ${f(a()),g(()=>a().pool_id)??""}`),R(h,`Pool: ${f(a()),g(()=>a().pool_id)??""}`)},[()=>(f(D),f(a()),g(()=>D(`/pools/${a().pool_id}`)))]),x(r,p)},P=r=>{var p=ce(),h=O(p);{var n=l=>{var o=we(),c=y(o);b(o),M(S=>{$(o,"href",S),$(o,"title",`Scale Set: ${f(a()),g(()=>a().scale_set_id)??""}`),R(c,`Scale Set: ${f(a()),g(()=>a().scale_set_id)??""}`)},[()=>(f(D),f(a()),g(()=>D(`/scalesets/${a().scale_set_id}`)))]),x(l,o)},v=l=>{var o=Te();x(l,o)};A(h,l=>{f(a()),g(()=>a()?.scale_set_id)?l(n):l(v,!1)},!0)}x(r,p)};A(I,r=>{f(a()),g(()=>a()?.pool_id)?r(i):r(P,!1)})}b(m),x(E,m),K()}var Ae=C('

    Error

    '),Ee=C('
    ',1);function Oe(E,k){J(k,!1);const a=u(),m=u(),I=u();let i=u([]),P=u(!0),r=u(""),p="",h=null,n=u(1),v=u(25),l=u(""),o=u(!1),c=u(null);async function S(){try{s(P,!0),s(r,""),s(i,await H.listInstances())}catch(t){s(r,t instanceof Error?t.message:"Failed to load instances")}finally{s(P,!1)}}function F(t){s(c,t),s(o,!0)}async function Q(){if(e(c))try{await H.deleteInstance(e(c).name),be.success("Instance Deleted",`Instance ${e(c).name} has been deleted successfully.`)}catch(t){s(r,ke(t))}finally{s(o,!1),s(c,null)}}const U=[{key:"name",title:"Name",cellComponent:Ie,cellProps:{entityType:"instance",showId:!0}},{key:"pool_scale_set",title:"Pool/Scale Set",flexible:!0,cellComponent:$e},{key:"created",title:"Created",cellComponent:Ce,cellProps:{field:"created_at",type:"date"}},{key:"status",title:"Status",cellComponent:W,cellProps:{statusType:"instance",statusField:"status"}},{key:"runner_status",title:"Runner Status",cellComponent:W,cellProps:{statusType:"instance",statusField:"runner_status"}},{key:"actions",title:"Actions",align:"right",cellComponent:Pe,cellProps:{actions:[{type:"delete",title:"Delete",ariaLabel:"Delete instance",action:"delete"}]}}],V={entityType:"instance",primaryText:{field:"name",isClickable:!0,href:"/instances/{name}"},secondaryText:{field:"provider_id"},badges:[{type:"status",field:"status"},{type:"status",field:"runner_status"}],actions:[{type:"delete",handler:t=>F(t)}]};function X(t){s(l,t.detail.term),s(n,1)}function Y(t){s(n,t.detail.page)}function Z(t){s(v,t.detail.perPage),s(n,1)}async function ee(){try{await S()}catch(t){console.error("Retry failed:",t)}}function te(t){}function ae(t){F(t.detail.item)}function se(t){if(t.operation==="create"){const d=t.payload;s(i,[...e(i),d])}else if(t.operation==="update"){const d=t.payload;s(i,e(i).map(_=>_.name===d.name?d:_))}else if(t.operation==="delete"){const d=t.payload.name||t.payload;s(i,e(i).filter(_=>_.name!==d))}}de(()=>{S(),h=ye.subscribeToEntity("instance",["create","update","delete"],se)}),ue(()=>{h&&(h(),h=null)}),w(()=>(e(i),e(l)),()=>{s(a,e(i).filter(t=>(e(l)===""||t.name?.toLowerCase().includes(e(l).toLowerCase())||t.provider_id?.toLowerCase().includes(e(l).toLowerCase()))&&p===""))}),w(()=>(e(a),e(v)),()=>{s(m,Math.ceil(e(a).length/e(v)))}),w(()=>(e(n),e(m)),()=>{e(n)>e(m)&&e(m)>0&&s(n,e(m))}),w(()=>(e(a),e(n),e(v)),()=>{s(I,e(a).slice((e(n)-1)*e(v),e(n)*e(v)))}),me(),z();var N=Ee();pe(t=>{fe.title="Instances - GARM"});var L=O(N),G=y(L);_e(G,{title:"Runner Instances",description:"Monitor your running instances",showAction:!1});var q=T(G,2);{var re=t=>{var d=Ae(),_=y(d),j=y(_),B=T(y(j),2),ie=y(B,!0);b(B),b(j),b(_),b(d),M(()=>R(ie,e(r))),x(t,d)};A(q,t=>{e(r)&&t(re)})}var ne=T(q,2);{let t=ge(()=>!!e(r));xe(ne,{get columns(){return U},get data(){return e(I)},get loading(){return e(P)},get error(){return e(r)},get searchTerm(){return e(l)},searchPlaceholder:"Search instances...",get currentPage(){return e(n)},get perPage(){return e(v)},get totalPages(){return e(m)},get totalItems(){return e(a),g(()=>e(a).length)},itemName:"instances",emptyIconType:"cog",get showRetry(){return e(t)},get mobileCardConfig(){return V},$$events:{search:X,pageChange:Y,perPageChange:Z,retry:ee,edit:te,delete:ae}})}b(L);var le=T(L,2);{var oe=t=>{he(t,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return e(c),g(()=>e(c).name)},$$events:{close:()=>{s(o,!1),s(c,null)},confirm:Q}})};A(le,t=>{e(o)&&e(c)&&t(oe)})}x(E,N),K()}export{Oe as component}; diff --git a/webapp/assets/_app/immutable/nodes/8.Dvj6ciIV.js b/webapp/assets/_app/immutable/nodes/8.Dvj6ciIV.js new file mode 100644 index 00000000..8656be2c --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/8.Dvj6ciIV.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as X}from"../chunks/De-I_rkH.js";import{p as Y,f as S,b,c as Z,d as h,q as f,u as d,r as v,t as O,e as j,A as _e,a as ee,o as ye,B as be,l as L,h as xe,j as Se,g as t,m as c,$ as ke,v as Ce,s as w,k as a}from"../chunks/BIqNNOMq.js";import{p as Ie,i as T}from"../chunks/CfI2BFUj.js";import{d as M,c as F,g as V}from"../chunks/CQh-7xkh.js";import{D as Pe}from"../chunks/Db7N5hjl.js";import{P as we}from"../chunks/Cq4AwQWc.js";import{S as Te}from"../chunks/BKBUu_Ci.js";import{w as De}from"../chunks/C4VNo_Nu.js";import{t as $e}from"../chunks/DgRPqjXE.js";import{D as Ae,G as Ee,A as Le}from"../chunks/BjNB1vhO.js";import{e as Me}from"../chunks/BZiHL9L3.js";import{E as Fe}from"../chunks/C6HeU_02.js";import"../chunks/CYb6_lpF.js";import{S as H}from"../chunks/DCu5KXBe.js";var Ne=S(' '),Re=S(' '),Ge=S('-'),He=S('
    ');function Oe(N,D){Y(D,!1);let l=Ie(D,"item",8);X();var p=He(),$=h(p);{var u=o=>{var m=Ne(),_=h(m);v(m),O(k=>{F(m,"href",k),F(m,"title",`Pool: ${f(l()),d(()=>l().pool_id)??""}`),j(_,`Pool: ${f(l()),d(()=>l().pool_id)??""}`)},[()=>(f(M),f(l()),d(()=>M(`/pools/${l().pool_id}`)))]),b(o,m)},P=o=>{var m=_e(),_=ee(m);{var k=s=>{var n=Re(),y=h(n);v(n),O(I=>{F(n,"href",I),F(n,"title",`Scale Set: ${f(l()),d(()=>l().scale_set_id)??""}`),j(y,`Scale Set: ${f(l()),d(()=>l().scale_set_id)??""}`)},[()=>(f(M),f(l()),d(()=>M(`/scalesets/${l().scale_set_id}`)))]),b(s,n)},C=s=>{var n=Ge();b(s,n)};T(_,s=>{f(l()),d(()=>l()?.scale_set_id)?s(k):s(C,!1)},!0)}b(o,m)};T($,o=>{f(l()),d(()=>l()?.pool_id)?o(u):o(P,!1)})}v(p),b(N,p),Z()}var je=S('

    Error

    '),qe=S('
    '),ze=S('
    ',1);function st(N,D){Y(D,!1);const l=c(),p=c(),$=c();let u=c([]),P=c(!0),o=c(""),m="",_=null,k=Date.now(),C=null,s=c(1),n=c(25),y=c(""),I=c(!1),g=c(null),A=c(!1),x=c(null);async function q(){try{a(P,!0),a(o,""),a(u,await V.listInstances())}catch(e){a(o,e instanceof Error?e.message:"Failed to load instances")}finally{a(P,!1)}}function z(e){a(g,e),a(I,!0)}function B(e){a(x,e),a(A,!0)}function R(e){if(!e.agent_id||!e.capabilities?.has_shell||e.status==="stopped")return!0;const r=e.heartbeat;if(!r)return!0;const i=new Date(r);return k-i.getTime()>6e4}async function te(){if(t(g))try{await V.deleteInstance(t(g).name),$e.success("Instance Deleted",`Instance ${t(g).name} has been deleted successfully.`)}catch(e){a(o,Me(e))}finally{a(I,!1),a(g,null)}}const ae=[{key:"name",title:"Name",cellComponent:Fe,cellProps:{entityType:"instance",showId:!0}},{key:"pool_scale_set",title:"Pool/Scale Set",flexible:!0,cellComponent:Oe},{key:"os_type",title:"OS Type",cellComponent:H,cellProps:{statusType:"os_type",statusField:"os_type"}},{key:"created",title:"Created",cellComponent:Ee,cellProps:{field:"created_at",type:"date"}},{key:"status",title:"Status",cellComponent:H,cellProps:{statusType:"instance",statusField:"status"}},{key:"runner_status",title:"Runner Status",cellComponent:H,cellProps:{statusType:"instance",statusField:"runner_status"}},{key:"actions",title:"Actions",align:"right",cellComponent:Le,cellProps:{actions:[{type:"shell",title:"Shell",ariaLabel:"Open shell",action:"shell",isDisabled:e=>R(e),disabledTitle:e=>e.capabilities?.has_shell?e.status==="stopped"?"Shell unavailable - Instance is stopped":"Shell unavailable - Agent heartbeat is stale":"Shell unavailable - Agent does not support shell"},{type:"delete",title:"Delete",ariaLabel:"Delete instance",action:"delete"}]}}],le={entityType:"instance",primaryText:{field:"name",isClickable:!0,href:"/instances/{name}"},secondaryText:{field:"provider_id"},badges:[{type:"text",field:"os_type",label:"OS"},{type:"status",field:"status"},{type:"status",field:"runner_status"}],actions:[{type:"shell",title:"Shell",handler:e=>B(e),isDisabled:e=>R(e)},{type:"delete",handler:e=>z(e)}]};function re(e){a(y,e.detail.term),a(s,1)}function se(e){a(s,e.detail.page)}function ne(e){a(n,e.detail.perPage),a(s,1)}async function oe(){try{await q()}catch(e){console.error("Retry failed:",e)}}function ie(e){}function ce(e){z(e.detail.item)}function de(e){B(e.detail.item)}function ue(e){if(e.operation==="create"){const r=e.payload;a(u,[...t(u),r])}else if(e.operation==="update"){const r=e.payload;a(u,t(u).map(i=>i.name===r.name?r:i))}else if(e.operation==="delete"){const r=e.payload.name||e.payload;a(u,t(u).filter(i=>i.name!==r))}}ye(()=>{q(),_=De.subscribeToEntity("instance",["create","update","delete"],ue),C=setInterval(()=>{k=Date.now()},1e3)}),be(()=>{_&&(_(),_=null),C&&(clearInterval(C),C=null)}),L(()=>(t(u),t(y)),()=>{a(l,t(u).filter(e=>(t(y)===""||e.name?.toLowerCase().includes(t(y).toLowerCase())||e.provider_id?.toLowerCase().includes(t(y).toLowerCase()))&&m===""))}),L(()=>(t(l),t(n)),()=>{a(p,Math.ceil(t(l).length/t(n)))}),L(()=>(t(s),t(p)),()=>{t(s)>t(p)&&t(p)>0&&a(s,t(p))}),L(()=>(t(l),t(s),t(n)),()=>{a($,t(l).slice((t(s)-1)*t(n),t(s)*t(n)))}),xe(),X();var W=ze();Se(e=>{ke.title="Instances - GARM"});var G=ee(W),J=h(G);we(J,{title:"Runner Instances",description:"Monitor your running instances",showAction:!1});var K=w(J,2);{var pe=e=>{var r=je(),i=h(r),E=h(i),U=w(h(E),2),ge=h(U,!0);v(U),v(E),v(i),v(r),O(()=>j(ge,t(o))),b(e,r)};T(K,e=>{t(o)&&e(pe)})}var me=w(K,2);{let e=Ce(()=>!!t(o));Ae(me,{get columns(){return ae},get data(){return t($)},get loading(){return t(P)},get error(){return t(o)},get searchTerm(){return t(y)},searchPlaceholder:"Search instances...",get currentPage(){return t(s)},get perPage(){return t(n)},get totalPages(){return t(p)},get totalItems(){return t(l),d(()=>t(l).length)},itemName:"instances",emptyIconType:"cog",get showRetry(){return t(e)},get mobileCardConfig(){return le},$$events:{search:re,pageChange:se,perPageChange:ne,retry:oe,edit:ie,delete:ce,shell:de}})}v(G);var Q=w(G,2);{var fe=e=>{var r=qe(),i=h(r),E=h(i);Te(E,{get runnerName(){return t(x),d(()=>t(x).name)},onClose:()=>{a(A,!1),a(x,null)}}),v(i),v(r),b(e,r)};T(Q,e=>{t(A),t(x),d(()=>t(A)&&t(x)&&!R(t(x)))&&e(fe)})}var he=w(Q,2);{var ve=e=>{Pe(e,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return t(g),d(()=>t(g).name)},$$events:{close:()=>{a(I,!1),a(g,null)},confirm:te}})};T(he,e=>{t(I)&&t(g)&&e(ve)})}b(N,W),Z()}export{st as component}; diff --git a/webapp/assets/_app/immutable/nodes/9.Bb2A_eyq.js b/webapp/assets/_app/immutable/nodes/9.Bb2A_eyq.js new file mode 100644 index 00000000..8b3f1658 --- /dev/null +++ b/webapp/assets/_app/immutable/nodes/9.Bb2A_eyq.js @@ -0,0 +1 @@ +import"../chunks/DsnmJJEf.js";import{i as qe}from"../chunks/De-I_rkH.js";import{p as Fe,o as Ge,B as We,l as Lt,h as Je,f as m,j as Ke,a as P,t as h,b as v,c as Qe,g as t,m as S,u as s,q as b,e as u,d as r,s as d,k as f,$ as Xe,r as a,A as Pt,i as Rt,v as qt,D as Ft}from"../chunks/BIqNNOMq.js";import{i as _,s as Ye,a as Ze}from"../chunks/CfI2BFUj.js";import{e as Gt,i as Wt}from"../chunks/D8ZtP9JD.js";import{d as M,c as R,g as Jt,s as ut}from"../chunks/CQh-7xkh.js";import{b as ta}from"../chunks/BLHP-Xk3.js";import{p as ea}from"../chunks/BIfA0Pjo.js";import{g as Kt}from"../chunks/BSYpqPvJ.js";import{D as aa}from"../chunks/Db7N5hjl.js";import{S as ra}from"../chunks/BKBUu_Ci.js";import{w as sa}from"../chunks/C4VNo_Nu.js";import{g as q,f as F}from"../chunks/ow_oMtSd.js";import{s as Qt,b as C,d as Xt}from"../chunks/B7If18kh.js";import{e as da}from"../chunks/BZiHL9L3.js";import{B as Yt}from"../chunks/CwE4al8R.js";var ia=m('

    Error

    '),la=m('

    Loading instance details...

    '),na=m(' '),oa=m(' '),va=m('-'),ca=m('
    Updated At:
    '),xa=m('
    '),ua=m('
    Network Addresses:
    '),ma=m('
    Network Addresses:
    No addresses available
    '),ga=m('
    OS Type:
    '),fa=m('
    OS Name:
    '),_a=m('
    OS Version:
    '),pa=m('
    OS Architecture:
    '),ha=m('

    '),ya=m('

    Status Messages

    '),ba=m('

    Status Messages

    No status messages available

    '),ka=m('

    Instance Information

    ID:
    Name:
    Provider ID:
    Provider:
    Pool/Scale Set:
    Agent ID:
    Created At:

    Status & Network

    Instance Status:
    Runner Status:
    ',1),wa=m('
    Instance not found.
    '),Ia=m('
    '),Sa=m(' ',1);function Pa(Zt,te){Fe(te,!1);const[ee,ae]=Ye(),mt=()=>Ze(ea,"$page",ee),G=S(),B=S();let e=S(null),W=S(!0),N=S(""),$=S(!1),J=S(!1),z=null,O=S(),K=S(Date.now()),U=null;async function re(){if(t(G))try{f(W,!0),f(N,""),f(e,await Jt.getInstance(t(G)))}catch(n){f(N,n instanceof Error?n.message:"Failed to load instance")}finally{f(W,!1)}}async function se(){if(t(e)){try{await Jt.deleteInstance(t(e).name),Kt(M("/instances"))}catch(n){f(N,da(n))}f($,!1)}}function de(n){if(t(e))if(n.operation==="update"&&n.payload.id===t(e).id){const g=t(e).status_messages?.length||0,k={...t(e),...n.payload},j=k.status_messages?.length||0;f(e,k),j>g&&setTimeout(()=>{Qt(t(O))},100)}else n.operation==="delete"&&(n.payload.id||n.payload)===t(e).id&&Kt(M("/instances"))}Ge(()=>{re().then(()=>{t(e)?.status_messages?.length&&setTimeout(()=>{Qt(t(O))},100)}),z=sa.subscribeToEntity("instance",["update","delete"],de),U=setInterval(()=>{f(K,Date.now())},1e3)}),We(()=>{z&&(z(),z=null),U&&(clearInterval(U),U=null)}),Lt(()=>mt(),()=>{f(G,decodeURIComponent(mt().params.id||""))}),Lt(()=>(t(e),t(K)),()=>{f(B,t(e)?.agent_id?(()=>{if(!t(e).capabilities?.has_shell||t(e).status==="stopped")return!0;const n=t(e).heartbeat;if(!n)return!0;const g=new Date(n);return t(K)-g.getTime()>6e4})():!0)}),Je(),qe();var gt=Sa();Ke(n=>{h(()=>Xe.title=`${t(e),s(()=>t(e)?`${t(e).name} - Instance Details`:"Instance Details")??""} - GARM`)});var Q=P(gt),X=r(Q),ft=r(X),Y=r(ft),ie=r(Y);a(Y);var _t=d(Y,2),pt=r(_t),ht=d(r(pt),2),le=r(ht,!0);a(ht),a(pt),a(_t),a(ft),a(X);var yt=d(X,2);{var ne=n=>{var g=ia(),k=r(g),j=r(k),V=d(r(j),2),D=r(V,!0);a(V),a(j),a(k),a(g),h(()=>u(D,t(N))),v(n,g)};_(yt,n=>{t(N)&&n(ne)})}var oe=d(yt,2);{var ve=n=>{var g=la();v(n,g)},ce=n=>{var g=Pt(),k=P(g);{var j=D=>{var H=ka(),Z=P(H),tt=r(Z),et=r(tt),kt=d(r(et),2),T=r(kt),ge=d(T,2);a(kt),a(et);var wt=d(et,2),at=r(wt),It=d(r(at),2),fe=r(It,!0);a(It),a(at);var rt=d(at,2),St=d(r(rt),2),_e=r(St,!0);a(St),a(rt);var st=d(rt,2),jt=d(r(st),2),pe=r(jt,!0);a(jt),a(st);var dt=d(st,2),Dt=d(r(dt),2),he=r(Dt,!0);a(Dt),a(dt);var it=d(dt,2),Mt=d(r(it),2),ye=r(Mt);{var be=i=>{var l=na(),o=r(l,!0);a(l),h(c=>{R(l,"href",c),u(o,(t(e),s(()=>t(e).pool_id)))},[()=>(b(M),t(e),s(()=>M(`/pools/${t(e).pool_id}`)))]),v(i,l)},ke=i=>{var l=Pt(),o=P(l);{var c=p=>{var y=oa(),A=r(y,!0);a(y),h(E=>{R(y,"href",E),u(A,(t(e),s(()=>t(e).scale_set_id)))},[()=>(b(M),t(e),s(()=>M(`/scalesets/${t(e).scale_set_id}`)))]),v(p,y)},x=p=>{var y=va();v(p,y)};_(o,p=>{t(e),s(()=>t(e).scale_set_id)?p(c):p(x,!1)},!0)}v(i,l)};_(ye,i=>{t(e),s(()=>t(e).pool_id)?i(be):i(ke,!1)})}a(Mt),a(it);var lt=d(it,2),At=d(r(lt),2),we=r(At,!0);a(At),a(lt);var nt=d(lt,2),Bt=d(r(nt),2),Ie=r(Bt,!0);a(Bt),a(nt);var Se=d(nt,2);{var je=i=>{var l=ca(),o=d(r(l),2),c=r(o,!0);a(o),a(l),h(x=>u(c,x),[()=>(b(C),t(e),s(()=>C(t(e).updated_at)))]),v(i,l)};_(Se,i=>{t(e),s(()=>t(e).updated_at&&t(e).updated_at!==t(e).created_at)&&i(je)})}a(wt),a(tt);var Ct=d(tt,2),Nt=d(r(Ct),2),ot=r(Nt),Tt=d(r(ot),2),vt=r(Tt),De=r(vt,!0);a(vt),a(Tt),a(ot);var ct=d(ot,2),Et=d(r(ct),2),xt=r(Et),Me=r(xt,!0);a(xt),a(Et),a(ct);var $t=d(ct,2);{var Ae=i=>{var l=ua(),o=d(r(l),2);Gt(o,5,()=>(t(e),s(()=>t(e).addresses)),Wt,(c,x)=>{var p=xa(),y=r(p),A=r(y,!0);a(y);var E=d(y,2);{let L=qt(()=>(t(x),s(()=>t(x).type||"Unknown")));Yt(E,{variant:"info",get text(){return t(L)}})}a(p),h(()=>u(A,(t(x),s(()=>t(x).address)))),v(c,p)}),a(o),a(l),v(i,l)},Be=i=>{var l=ma();v(i,l)};_($t,i=>{t(e),s(()=>t(e).addresses&&t(e).addresses.length>0)?i(Ae):i(Be,!1)})}var zt=d($t,2);{var Ce=i=>{var l=ga(),o=d(r(l),2),c=r(o,!0);a(o),a(l),h(()=>u(c,(t(e),s(()=>t(e).os_type)))),v(i,l)};_(zt,i=>{t(e),s(()=>t(e).os_type)&&i(Ce)})}var Ot=d(zt,2);{var Ne=i=>{var l=fa(),o=d(r(l),2),c=r(o,!0);a(o),a(l),h(()=>u(c,(t(e),s(()=>t(e).os_name)))),v(i,l)};_(Ot,i=>{t(e),s(()=>t(e).os_name)&&i(Ne)})}var Ut=d(Ot,2);{var Te=i=>{var l=_a(),o=d(r(l),2),c=r(o,!0);a(o),a(l),h(()=>u(c,(t(e),s(()=>t(e).os_version)))),v(i,l)};_(Ut,i=>{t(e),s(()=>t(e).os_version)&&i(Te)})}var Ee=d(Ut,2);{var $e=i=>{var l=pa(),o=d(r(l),2),c=r(o,!0);a(o),a(l),h(()=>u(c,(t(e),s(()=>t(e).os_arch)))),v(i,l)};_(Ee,i=>{t(e),s(()=>t(e).os_arch)&&i($e)})}a(Nt),a(Ct),a(Z);var ze=d(Z,2);{var Oe=i=>{var l=ya(),o=d(r(l),2);Gt(o,5,()=>(t(e),s(()=>t(e).status_messages)),Wt,(c,x)=>{var p=ha(),y=r(p),A=r(y),E=r(A,!0);a(A);var L=d(A,2),Vt=r(L);{var Ve=w=>{const I=qt(()=>(b(Xt),t(x),s(()=>Xt(t(x).event_level))));Yt(w,{get variant(){return b(t(I)),s(()=>t(I).variant)},get text(){return b(t(I)),s(()=>t(I).text)}})};_(Vt,w=>{t(x),s(()=>t(x).event_level)&&w(Ve)})}var Ht=d(Vt,2),He=r(Ht);{var Le=w=>{var I=Ft();h(Re=>u(I,Re),[()=>(b(C),t(x),s(()=>C(t(x).created_at)))]),v(w,I)},Pe=w=>{var I=Ft("Unknown date");v(w,I)};_(He,w=>{t(x),s(()=>t(x).created_at)?w(Le):w(Pe,!1)})}a(Ht),a(L),a(y),a(p),h(()=>u(E,(t(x),s(()=>t(x).message)))),v(c,p)}),a(o),ta(o,c=>f(O,c),()=>t(O)),a(l),v(i,l)},Ue=i=>{var l=ba();v(i,l)};_(ze,i=>{t(e),s(()=>t(e).status_messages&&t(e).status_messages.length>0)?i(Oe):i(Ue,!1)})}h((i,l,o,c,x)=>{T.disabled=t(B),ut(T,1,`px-4 py-2 ${t(B)?"bg-gray-400 cursor-not-allowed":"bg-blue-600 hover:bg-blue-700 dark:bg-blue-700 dark:hover:bg-blue-800 cursor-pointer"} text-white rounded-lg font-medium text-sm flex items-center space-x-2`),R(T,"title",(t(B),t(e),s(()=>t(B)?t(e)?.capabilities?.has_shell?t(e)?.status==="stopped"?"Shell unavailable - Instance is stopped":"Shell unavailable - Agent heartbeat is stale":"Shell unavailable - Agent does not support shell":"Open Shell"))),u(fe,(t(e),s(()=>t(e).id))),u(_e,(t(e),s(()=>t(e).name))),u(pe,(t(e),s(()=>t(e).provider_id))),u(he,(t(e),s(()=>t(e).provider_name||"Unknown"))),u(we,(t(e),s(()=>t(e).agent_id||"Not assigned"))),u(Ie,i),ut(vt,1,`inline-flex px-2 py-1 text-xs font-semibold rounded-full ring-1 ring-inset ${l??""}`),u(De,o),ut(xt,1,`inline-flex px-2 py-1 text-xs font-semibold rounded-full ring-1 ring-inset ${c??""}`),u(Me,x)},[()=>(b(C),t(e),s(()=>C(t(e).created_at))),()=>(b(q),t(e),s(()=>q(t(e).status||"unknown"))),()=>(b(F),t(e),s(()=>F(t(e).status||"unknown"))),()=>(b(q),t(e),s(()=>q(t(e).runner_status||"unknown"))),()=>(b(F),t(e),s(()=>F(t(e).runner_status||"unknown")))]),Rt("click",T,()=>f(J,!0)),Rt("click",ge,()=>f($,!0)),v(D,H)},V=D=>{var H=wa();v(D,H)};_(k,D=>{t(e)?D(j):D(V,!1)},!0)}v(n,g)};_(oe,n=>{t(W)?n(ve):n(ce,!1)})}a(Q);var bt=d(Q,2);{var xe=n=>{var g=Ia(),k=r(g),j=r(k);ra(j,{get runnerName(){return t(e),s(()=>t(e).name)},onClose:()=>f(J,!1)}),a(k),a(g),v(n,g)};_(bt,n=>{t(J)&&t(e)&&!t(B)&&n(xe)})}var ue=d(bt,2);{var me=n=>{aa(n,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return t(e),s(()=>t(e).name)},$$events:{close:()=>f($,!1),confirm:se}})};_(ue,n=>{t($)&&t(e)&&n(me)})}h(n=>{R(ie,"href",n),u(le,(t(e),s(()=>t(e)?t(e).name:"Instance Details")))},[()=>(b(M),s(()=>M("/instances")))]),v(Zt,gt),Qe(),ae()}export{Pa as component}; diff --git a/webapp/assets/_app/immutable/nodes/9.CuEtSZ_K.js b/webapp/assets/_app/immutable/nodes/9.CuEtSZ_K.js deleted file mode 100644 index 17b95677..00000000 --- a/webapp/assets/_app/immutable/nodes/9.CuEtSZ_K.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/DsnmJJEf.js";import{i as $e}from"../chunks/TJn6xDN9.js";import{p as Ue,o as Le,B as Oe,l as Pe,h as Ve,f as u,j as ze,a as P,t as f,b as v,c as Re,u as r,q as p,e as m,g as t,m as A,d as s,s as d,k as h,$ as qe,r as a,A as Tt,i as Fe,v as $t,D as Ut}from"../chunks/DniTuB_0.js";import{i as g,s as Ge,a as He}from"../chunks/DbNhg6mG.js";import{e as Lt,i as Ot}from"../chunks/Ck5PkeSc.js";import{d as j,c as nt,g as Pt,s as Vt}from"../chunks/DD3srElq.js";import{b as We}from"../chunks/C-xTH-sp.js";import{p as Je}from"../chunks/CzKtu-7o.js";import{g as zt}from"../chunks/DeKGyprh.js";import{D as Ke}from"../chunks/B6XSaEl0.js";import{w as Qe}from"../chunks/DmHFwzWx.js";import{g as V,f as z}from"../chunks/ow_oMtSd.js";import{s as Rt,b as B,d as qt}from"../chunks/LMA6-4d1.js";import{e as Xe}from"../chunks/BZiHL9L3.js";import{B as Ft}from"../chunks/DcQdHuVc.js";var Ye=u('

    Error

    '),Ze=u('

    Loading instance details...

    '),ta=u(' '),ea=u(' '),aa=u('-'),sa=u('
    Updated At:
    '),ra=u('
    '),da=u('
    Network Addresses:
    '),ia=u('
    Network Addresses:
    No addresses available
    '),na=u('
    OS Type:
    '),la=u('
    OS Name:
    '),oa=u('
    OS Version:
    '),va=u('
    OS Architecture:
    '),xa=u('

    '),ca=u('

    Status Messages

    '),ma=u('

    Status Messages

    No status messages available

    '),ua=u('

    Instance Information

    ID:
    Name:
    Provider ID:
    Provider:
    Pool/Scale Set:
    Agent ID:
    Created At:

    Status & Network

    Instance Status:
    Runner Status:
    ',1),ga=u('
    Instance not found.
    '),_a=u(' ',1);function Ca(Gt,Ht){Ue(Ht,!1);const[Wt,Jt]=Ge(),lt=()=>He(Je,"$page",Wt),R=A();let e=A(null),q=A(!0),N=A(""),E=A(!1),T=null,$=A();async function Kt(){if(t(R))try{h(q,!0),h(N,""),h(e,await Pt.getInstance(t(R)))}catch(l){h(N,l instanceof Error?l.message:"Failed to load instance")}finally{h(q,!1)}}async function Qt(){if(t(e)){try{await Pt.deleteInstance(t(e).name),zt(j("/instances"))}catch(l){h(N,Xe(l))}h(E,!1)}}function Xt(l){if(t(e))if(l.operation==="update"&&l.payload.id===t(e).id){const b=t(e).status_messages?.length||0,D={...t(e),...l.payload},M=D.status_messages?.length||0;h(e,D),M>b&&setTimeout(()=>{Rt(t($))},100)}else l.operation==="delete"&&(l.payload.id||l.payload)===t(e).id&&zt(j("/instances"))}Le(()=>{Kt().then(()=>{t(e)?.status_messages?.length&&setTimeout(()=>{Rt(t($))},100)}),T=Qe.subscribeToEntity("instance",["update","delete"],Xt)}),Oe(()=>{T&&(T(),T=null)}),Pe(()=>lt(),()=>{h(R,decodeURIComponent(lt().params.id||""))}),Ve(),$e();var ot=_a();ze(l=>{f(()=>qe.title=`${t(e),r(()=>t(e)?`${t(e).name} - Instance Details`:"Instance Details")??""} - GARM`)});var F=P(ot),G=s(F),vt=s(G),H=s(vt),Yt=s(H);a(H);var xt=d(H,2),ct=s(xt),mt=d(s(ct),2),Zt=s(mt,!0);a(mt),a(ct),a(xt),a(vt),a(G);var ut=d(G,2);{var te=l=>{var b=Ye(),D=s(b),M=s(D),U=d(s(M),2),I=s(U,!0);a(U),a(M),a(D),a(b),f(()=>m(I,t(N))),v(l,b)};g(ut,l=>{t(N)&&l(te)})}var ee=d(ut,2);{var ae=l=>{var b=Ze();v(l,b)},se=l=>{var b=Tt(),D=P(b);{var M=I=>{var L=ua(),W=P(L),J=s(W),K=s(J),gt=d(s(K),2),ie=s(gt);a(gt),a(K);var _t=d(K,2),Q=s(_t),ft=d(s(Q),2),ne=s(ft,!0);a(ft),a(Q);var X=d(Q,2),yt=d(s(X),2),le=s(yt,!0);a(yt),a(X);var Y=d(X,2),pt=d(s(Y),2),oe=s(pt,!0);a(pt),a(Y);var Z=d(Y,2),ht=d(s(Z),2),ve=s(ht,!0);a(ht),a(Z);var tt=d(Z,2),bt=d(s(tt),2),xe=s(bt);{var ce=i=>{var n=ta(),o=s(n,!0);a(n),f(x=>{nt(n,"href",x),m(o,(t(e),r(()=>t(e).pool_id)))},[()=>(p(j),t(e),r(()=>j(`/pools/${t(e).pool_id}`)))]),v(i,n)},me=i=>{var n=Tt(),o=P(n);{var x=_=>{var y=ea(),S=s(y,!0);a(y),f(C=>{nt(y,"href",C),m(S,(t(e),r(()=>t(e).scale_set_id)))},[()=>(p(j),t(e),r(()=>j(`/scalesets/${t(e).scale_set_id}`)))]),v(_,y)},c=_=>{var y=aa();v(_,y)};g(o,_=>{t(e),r(()=>t(e).scale_set_id)?_(x):_(c,!1)},!0)}v(i,n)};g(xe,i=>{t(e),r(()=>t(e).pool_id)?i(ce):i(me,!1)})}a(bt),a(tt);var et=d(tt,2),kt=d(s(et),2),ue=s(kt,!0);a(kt),a(et);var at=d(et,2),wt=d(s(at),2),ge=s(wt,!0);a(wt),a(at);var _e=d(at,2);{var fe=i=>{var n=sa(),o=d(s(n),2),x=s(o,!0);a(o),a(n),f(c=>m(x,c),[()=>(p(B),t(e),r(()=>B(t(e).updated_at)))]),v(i,n)};g(_e,i=>{t(e),r(()=>t(e).updated_at&&t(e).updated_at!==t(e).created_at)&&i(fe)})}a(_t),a(J);var It=d(J,2),jt=d(s(It),2),st=s(jt),Dt=d(s(st),2),rt=s(Dt),ye=s(rt,!0);a(rt),a(Dt),a(st);var dt=d(st,2),St=d(s(dt),2),it=s(St),pe=s(it,!0);a(it),a(St),a(dt);var Mt=d(dt,2);{var he=i=>{var n=da(),o=d(s(n),2);Lt(o,5,()=>(t(e),r(()=>t(e).addresses)),Ot,(x,c)=>{var _=ra(),y=s(_),S=s(y,!0);a(y);var C=d(y,2);{let O=$t(()=>(t(c),r(()=>t(c).type||"Unknown")));Ft(C,{variant:"info",get text(){return t(O)}})}a(_),f(()=>m(S,(t(c),r(()=>t(c).address)))),v(x,_)}),a(o),a(n),v(i,n)},be=i=>{var n=ia();v(i,n)};g(Mt,i=>{t(e),r(()=>t(e).addresses&&t(e).addresses.length>0)?i(he):i(be,!1)})}var At=d(Mt,2);{var ke=i=>{var n=na(),o=d(s(n),2),x=s(o,!0);a(o),a(n),f(()=>m(x,(t(e),r(()=>t(e).os_type)))),v(i,n)};g(At,i=>{t(e),r(()=>t(e).os_type)&&i(ke)})}var Bt=d(At,2);{var we=i=>{var n=la(),o=d(s(n),2),x=s(o,!0);a(o),a(n),f(()=>m(x,(t(e),r(()=>t(e).os_name)))),v(i,n)};g(Bt,i=>{t(e),r(()=>t(e).os_name)&&i(we)})}var Nt=d(Bt,2);{var Ie=i=>{var n=oa(),o=d(s(n),2),x=s(o,!0);a(o),a(n),f(()=>m(x,(t(e),r(()=>t(e).os_version)))),v(i,n)};g(Nt,i=>{t(e),r(()=>t(e).os_version)&&i(Ie)})}var je=d(Nt,2);{var De=i=>{var n=va(),o=d(s(n),2),x=s(o,!0);a(o),a(n),f(()=>m(x,(t(e),r(()=>t(e).os_arch)))),v(i,n)};g(je,i=>{t(e),r(()=>t(e).os_arch)&&i(De)})}a(jt),a(It),a(W);var Se=d(W,2);{var Me=i=>{var n=ca(),o=d(s(n),2);Lt(o,5,()=>(t(e),r(()=>t(e).status_messages)),Ot,(x,c)=>{var _=xa(),y=s(_),S=s(y),C=s(S,!0);a(S);var O=d(S,2),Ct=s(O);{var Be=k=>{const w=$t(()=>(p(qt),t(c),r(()=>qt(t(c).event_level))));Ft(k,{get variant(){return p(t(w)),r(()=>t(w).variant)},get text(){return p(t(w)),r(()=>t(w).text)}})};g(Ct,k=>{t(c),r(()=>t(c).event_level)&&k(Be)})}var Et=d(Ct,2),Ne=s(Et);{var Ce=k=>{var w=Ut();f(Te=>m(w,Te),[()=>(p(B),t(c),r(()=>B(t(c).created_at)))]),v(k,w)},Ee=k=>{var w=Ut("Unknown date");v(k,w)};g(Ne,k=>{t(c),r(()=>t(c).created_at)?k(Ce):k(Ee,!1)})}a(Et),a(O),a(y),a(_),f(()=>m(C,(t(c),r(()=>t(c).message)))),v(x,_)}),a(o),We(o,x=>h($,x),()=>t($)),a(n),v(i,n)},Ae=i=>{var n=ma();v(i,n)};g(Se,i=>{t(e),r(()=>t(e).status_messages&&t(e).status_messages.length>0)?i(Me):i(Ae,!1)})}f((i,n,o,x,c)=>{m(ne,(t(e),r(()=>t(e).id))),m(le,(t(e),r(()=>t(e).name))),m(oe,(t(e),r(()=>t(e).provider_id))),m(ve,(t(e),r(()=>t(e).provider_name||"Unknown"))),m(ue,(t(e),r(()=>t(e).agent_id||"Not assigned"))),m(ge,i),Vt(rt,1,`inline-flex px-2 py-1 text-xs font-semibold rounded-full ring-1 ring-inset ${n??""}`),m(ye,o),Vt(it,1,`inline-flex px-2 py-1 text-xs font-semibold rounded-full ring-1 ring-inset ${x??""}`),m(pe,c)},[()=>(p(B),t(e),r(()=>B(t(e).created_at))),()=>(p(V),t(e),r(()=>V(t(e).status||"unknown"))),()=>(p(z),t(e),r(()=>z(t(e).status||"unknown"))),()=>(p(V),t(e),r(()=>V(t(e).runner_status||"unknown"))),()=>(p(z),t(e),r(()=>z(t(e).runner_status||"unknown")))]),Fe("click",ie,()=>h(E,!0)),v(I,L)},U=I=>{var L=ga();v(I,L)};g(D,I=>{t(e)?I(M):I(U,!1)},!0)}v(l,b)};g(ee,l=>{t(q)?l(ae):l(se,!1)})}a(F);var re=d(F,2);{var de=l=>{Ke(l,{title:"Delete Instance",message:"Are you sure you want to delete this instance? This action cannot be undone.",get itemName(){return t(e),r(()=>t(e).name)},$$events:{close:()=>h(E,!1),confirm:Qt}})};g(re,l=>{t(E)&&t(e)&&l(de)})}f(l=>{nt(Yt,"href",l),m(Zt,(t(e),r(()=>t(e)?t(e).name:"Instance Details")))},[()=>(p(j),r(()=>j("/instances")))]),v(Gt,ot),Re(),Jt()}export{Ca as component}; diff --git a/webapp/assets/_app/version.json b/webapp/assets/_app/version.json index 041bde35..18c0d5d1 100644 --- a/webapp/assets/_app/version.json +++ b/webapp/assets/_app/version.json @@ -1 +1 @@ -{"version":"1760009955548"} \ No newline at end of file +{"version":"1767862076257"} \ No newline at end of file diff --git a/webapp/assets/index.html b/webapp/assets/index.html index 8ce1ff6d..96279174 100644 --- a/webapp/assets/index.html +++ b/webapp/assets/index.html @@ -71,21 +71,21 @@ })(); - - - - - + + + + + - - - + + +
    @@ -174,6 +193,48 @@ {controllerInfo.minimum_job_age_backoff || 30}s
    + + +
    +
    +
    Agent Tools Sync
    +
    + +
    +
    +
    + {#if controllerInfo.enable_agent_tools_sync} + + Enabled + + {:else} + + Disabled + + {/if} +
    +
    + + + {#if controllerInfo.garm_agent_releases_url} +
    +
    +
    Agent Releases URL
    +
    + +
    +
    +
    + {controllerInfo.garm_agent_releases_url} +
    +
    + {/if} @@ -237,8 +298,26 @@ {/if} + + {#if controllerInfo.agent_url} +
    +
    +
    Agent
    +
    + +
    +
    +
    + {controllerInfo.agent_url} +
    +
    + {/if} + - {#if !controllerInfo.metadata_url && !controllerInfo.callback_url && !controllerInfo.webhook_url} + {#if !controllerInfo.metadata_url && !controllerInfo.callback_url && !controllerInfo.webhook_url && !controllerInfo.agent_url}
    @@ -361,6 +440,27 @@

    + +
    + + + {#if !isValidUrl(agentUrl)} +

    Please enter a valid URL

    + {/if} +

    + URL where GARM agents connect. Must support websocket connections +

    +
    +
    + +
    + + + {#if !isValidUrl(garmAgentReleasesUrl)} +

    Please enter a valid URL

    + {/if} +

    + URL where GARM fetches garm-agent binaries (must be compatible with GitHub releases API) +

    +
    + + +
    + +

    + Automatically synchronize garm-agent tools from the configured releases URL +

    +
    +
    + +
    +
    + + +
    + + + + +
    +
    +
    +
    + +
    +
    + + +
    + + + + +
    +
    +
    +
    diff --git a/webapp/src/lib/components/CreatePoolModal.svelte b/webapp/src/lib/components/CreatePoolModal.svelte index e3028f04..17f80978 100644 --- a/webapp/src/lib/components/CreatePoolModal.svelte +++ b/webapp/src/lib/components/CreatePoolModal.svelte @@ -1,18 +1,24 @@ dispatch('close')}> @@ -632,6 +754,50 @@ Enable pool immediately
    + + +
    +
    + + +
    + + + + +
    +
    + {#if !entityAgentMode} +
    + + + + + Shell access requires agent mode to be enabled on the {entityLevel}. + {#if selectedEntityId} + + {/if} + +
    + {/if} +
    {/if} @@ -661,4 +827,30 @@ - \ No newline at end of file + + + +{#if showEntityUpdateModal && selectedEntityId} + {@const selectedEntity = getSelectedEntity()} + {#if selectedEntity} + {#if entityLevel === 'repository'} + showEntityUpdateModal = false} + on:submit={(e) => handleEntityUpdate(e.detail)} + /> + {:else if entityLevel === 'organization'} + showEntityUpdateModal = false} + on:submit={(e) => handleEntityUpdate(e.detail)} + /> + {:else if entityLevel === 'enterprise'} + showEntityUpdateModal = false} + on:submit={(e) => handleEntityUpdate(e.detail)} + /> + {/if} + {/if} +{/if} \ No newline at end of file diff --git a/webapp/src/lib/components/CreateRepositoryModal.svelte b/webapp/src/lib/components/CreateRepositoryModal.svelte index 0ce1fa10..5ae93271 100644 --- a/webapp/src/lib/components/CreateRepositoryModal.svelte +++ b/webapp/src/lib/components/CreateRepositoryModal.svelte @@ -25,7 +25,8 @@ owner: '', credentials_name: '', webhook_secret: '', - pool_balancer_type: 'roundrobin' + pool_balancer_type: 'roundrobin', + agent_mode: false }; let installWebhook = true; @@ -228,6 +229,30 @@ + +
    +
    + + +
    + + + + +
    +
    +
    +
    diff --git a/webapp/src/lib/components/CreateScaleSetModal.svelte b/webapp/src/lib/components/CreateScaleSetModal.svelte index f63656d1..8563e930 100644 --- a/webapp/src/lib/components/CreateScaleSetModal.svelte +++ b/webapp/src/lib/components/CreateScaleSetModal.svelte @@ -1,5 +1,5 @@ dispatch('close')}> @@ -567,6 +684,50 @@ Enable scale set immediately
    + + +
    +
    + + +
    + + + + +
    +
    + {#if !entityAgentMode} +
    + + + + + Shell access requires agent mode to be enabled on the {entityLevel}. + {#if selectedEntityId} + + {/if} + +
    + {/if} +
    {/if} @@ -596,4 +757,30 @@ - \ No newline at end of file + + + +{#if showEntityUpdateModal && selectedEntityId} + {@const selectedEntity = getSelectedEntity()} + {#if selectedEntity} + {#if entityLevel === 'repository'} + showEntityUpdateModal = false} + on:submit={(e) => handleEntityUpdate(e.detail)} + /> + {:else if entityLevel === 'organization'} + showEntityUpdateModal = false} + on:submit={(e) => handleEntityUpdate(e.detail)} + /> + {:else if entityLevel === 'enterprise'} + showEntityUpdateModal = false} + on:submit={(e) => handleEntityUpdate(e.detail)} + /> + {/if} + {/if} +{/if} \ No newline at end of file diff --git a/webapp/src/lib/components/DataTable.svelte b/webapp/src/lib/components/DataTable.svelte index da882224..2483a852 100644 --- a/webapp/src/lib/components/DataTable.svelte +++ b/webapp/src/lib/components/DataTable.svelte @@ -7,6 +7,7 @@ import BackendSearchBar from './BackendSearchBar.svelte'; import TablePagination from './TablePagination.svelte'; import MobileCard from './MobileCard.svelte'; + import type { ComponentType } from 'svelte'; // Table configuration export let columns: Array<{ @@ -40,6 +41,8 @@ export let totalPages: number = 1; export let showPagination: boolean = true; export let showPerPageSelector: boolean = true; + export let paginationComponent: ComponentType | null = null; // Custom pagination component + export let paginationProps: Record = {}; // Props to pass to custom pagination component // Empty state configuration export let emptyTitle: string = 'No items found'; @@ -58,12 +61,15 @@ search: { term: string }; pageChange: { page: number }; perPageChange: { perPage: number }; + pageSizeChange: { pageSize: number }; + prefetch: { page: number }; retry: void; rowClick: { item: any; index: number }; cellClick: { item: any; column: any; value: any }; edit: { item: any }; delete: { item: any }; clone: { item: any }; + shell: { item: any }; action: { type: string; item: any }; }>(); @@ -105,6 +111,10 @@ dispatch('clone', event.detail); } + function handleShell(event: CustomEvent<{ item: any }>) { + dispatch('shell', event.detail); + } + function handleAction(event: CustomEvent<{ type: string; item: any }>) { dispatch('action', event.detail); } @@ -117,7 +127,7 @@ } function getCellClass(column: any): string { - const baseClass = 'px-6 py-4 text-sm'; + const baseClass = 'px-6 py-4 text-sm'; const alignClass = column.align === 'right' ? 'text-right' : column.align === 'center' ? 'text-center' : 'text-left'; const colorClass = column.key === 'actions' ? 'font-medium' : 'text-gray-900 dark:text-white'; // Add min-w-0 for flexible columns to ensure proper truncation @@ -207,7 +217,7 @@ {/if} - + +
    + + +
    + + + + +
    +
    +
    diff --git a/webapp/src/lib/components/UpdateEntityModal.svelte b/webapp/src/lib/components/UpdateEntityModal.svelte index ca26e726..116028e4 100644 --- a/webapp/src/lib/components/UpdateEntityModal.svelte +++ b/webapp/src/lib/components/UpdateEntityModal.svelte @@ -25,6 +25,7 @@ let poolBalancerType = ''; let webhookSecret = ''; let changeWebhookSecret = false; + let agentMode = false; function getEntityDisplayName(): string { if (entityType === 'repository') { @@ -62,6 +63,7 @@ poolBalancerType = entity.pool_balancing_type || 'roundrobin'; webhookSecret = ''; changeWebhookSecret = false; + agentMode = entity.agent_mode ?? false; } async function handleSubmit() { @@ -84,6 +86,12 @@ hasChanges = true; } + // Check if agent mode changed + if (agentMode !== entity.agent_mode) { + params.agent_mode = agentMode; + hasChanges = true; + } + // Only include webhook secret if user wants to change it if (changeWebhookSecret) { if (!webhookSecret.trim()) { @@ -202,6 +210,28 @@

    + +
    + + +
    + + + + +
    +
    +
    diff --git a/webapp/src/lib/components/UpdateOrganizationModal.svelte b/webapp/src/lib/components/UpdateOrganizationModal.svelte index 10162fca..629c02ac 100644 --- a/webapp/src/lib/components/UpdateOrganizationModal.svelte +++ b/webapp/src/lib/components/UpdateOrganizationModal.svelte @@ -25,6 +25,7 @@ let changeWebhookSecret = false; let generateWebhookSecret = true; + let agentMode = organization.agent_mode ?? false; // Get the organization's endpoint type $: organizationEndpointType = organization.endpoint?.endpoint_type; @@ -71,6 +72,11 @@ submitData.webhook_secret = ''; // Empty string triggers auto-generation } + // Only include agent_mode if it changed + if (agentMode !== organization.agent_mode) { + submitData.agent_mode = agentMode; + } + dispatch('submit', submitData); } catch (err) { error = extractAPIError(err) @@ -143,6 +149,28 @@
    + +
    + + +
    + + + + +
    +
    +
    diff --git a/webapp/src/lib/components/UpdatePoolModal.svelte b/webapp/src/lib/components/UpdatePoolModal.svelte index ed1546c0..3654264e 100644 --- a/webapp/src/lib/components/UpdatePoolModal.svelte +++ b/webapp/src/lib/components/UpdatePoolModal.svelte @@ -1,12 +1,16 @@ + +
    + + {#if showUrl && baseUrl} + + {baseUrl} + + {/if} +
    \ No newline at end of file diff --git a/webapp/src/lib/components/cells/StatusCell.svelte b/webapp/src/lib/components/cells/StatusCell.svelte index 5526d307..87f9ff19 100644 --- a/webapp/src/lib/components/cells/StatusCell.svelte +++ b/webapp/src/lib/components/cells/StatusCell.svelte @@ -4,7 +4,7 @@ import { formatStatusText, getStatusBadgeClass } from '$lib/utils/status.js'; export let item: any; - export let statusType: 'entity' | 'instance' | 'enabled' | 'custom' = 'entity'; + export let statusType: 'entity' | 'instance' | 'enabled' | 'custom' | 'os_type' | 'forge_type' = 'entity'; export let statusField: string = 'status'; // Make status directly reactive to item properties instead of using getStatus() @@ -92,6 +92,57 @@ variant: item.enabled ? 'success' as const : 'error' as const, text: item.enabled ? 'Enabled' : 'Disabled' }; + case 'os_type': + const osType = (statusValue || '').toLowerCase(); + let osVariant: any = 'secondary'; + let osText = statusValue || 'Unknown'; + + switch (osType) { + case 'linux': + osVariant = 'success'; // Light green + osText = 'Linux'; + break; + case 'windows': + osVariant = 'blue'; // Blue + osText = 'Windows'; + break; + case 'macos': + case 'darwin': + osVariant = 'purple'; // Purple + osText = 'macOS'; + break; + default: + osVariant = 'gray'; // Gray for unknown + osText = statusValue || 'Unknown'; + break; + } + return { + variant: osVariant, + text: osText + }; + case 'forge_type': + const forgeType = (statusValue || '').toLowerCase(); + let forgeVariant: any = 'secondary'; + let forgeText = statusValue || 'Unknown'; + + switch (forgeType) { + case 'github': + forgeVariant = 'gray'; + forgeText = 'GitHub'; + break; + case 'gitea': + forgeVariant = 'green'; + forgeText = 'Gitea'; + break; + default: + forgeVariant = 'secondary'; + forgeText = statusValue || 'Unknown'; + break; + } + return { + variant: forgeVariant, + text: forgeText + }; case 'custom': const value = item[statusField] || 'Unknown'; // Special handling for auth types diff --git a/webapp/src/lib/components/cells/TagsCell.svelte b/webapp/src/lib/components/cells/TagsCell.svelte index 3f5a9b35..53eb5547 100644 --- a/webapp/src/lib/components/cells/TagsCell.svelte +++ b/webapp/src/lib/components/cells/TagsCell.svelte @@ -1,4 +1,6 @@ {#if !tags || tags.length === 0} - {:else} -
    + +
    MAX_VISIBLE_TAGS ? handleMouseEnter : undefined} + on:mouseleave={tags.length > MAX_VISIBLE_TAGS ? handleMouseLeave : undefined} + class="flex flex-wrap gap-1 items-center" + > {#each visibleTags as tag} {tag} {/each} {#if hiddenCount > 0} - + +{hiddenCount} more {/if} - - - {#if tags.length > MAX_VISIBLE_TAGS} - - {/if} +
    +{/if} + + +{#if tags.length > MAX_VISIBLE_TAGS && showTooltip} +
    +
    +
    All tags:
    +
    + {#each tags as tag} + + {tag} + + {/each} +
    +
    {/if} diff --git a/webapp/src/lib/stores/auth.ts b/webapp/src/lib/stores/auth.ts index 5e5befa4..f2c74a81 100644 --- a/webapp/src/lib/stores/auth.ts +++ b/webapp/src/lib/stores/auth.ts @@ -241,6 +241,7 @@ export const auth = { callbackUrl?: string; metadataUrl?: string; webhookUrl?: string; + agentUrl?: string; } ): Promise { try { @@ -262,11 +263,13 @@ export const auth = { const finalMetadataUrl = urls?.metadataUrl || `${currentUrl}/api/v1/metadata`; const finalCallbackUrl = urls?.callbackUrl || `${currentUrl}/api/v1/callbacks`; const finalWebhookUrl = urls?.webhookUrl || `${currentUrl}/webhooks`; + const finalAgentUrl = urls?.agentUrl || `${currentUrl}/agent`; await garmApi.updateController({ metadata_url: finalMetadataUrl, callback_url: finalCallbackUrl, - webhook_url: finalWebhookUrl + webhook_url: finalWebhookUrl, + agent_url: finalAgentUrl }); authStore.update(state => ({ diff --git a/webapp/src/lib/utils/shell.ts b/webapp/src/lib/utils/shell.ts new file mode 100644 index 00000000..44c52545 --- /dev/null +++ b/webapp/src/lib/utils/shell.ts @@ -0,0 +1,217 @@ +import { garmApi } from '$lib/api/client'; + +export interface ShellMessage { + type: 'createShell' | 'shellReady' | 'shellData' | 'shellResize' | 'shellExit' | 'clientShellClosed'; + sessionId?: ArrayBuffer; + data?: Uint8Array; + rows?: number; + cols?: number; + isError?: boolean; + message?: string; +} + +export interface ShellConnection { + ws: WebSocket; + sessionId: ArrayBuffer | null; + onData: (data: Uint8Array) => void; + onReady: () => void; + onExit: () => void; + onError: (error: string) => void; + sendData: (data: Uint8Array) => void; + resize: (cols: number, rows: number) => void; + close: () => void; +} + +// Message type constants matching the Go implementation +const MESSAGE_TYPE_CREATE_SHELL = 0x04; +const MESSAGE_TYPE_SHELL_READY = 0x05; +const MESSAGE_TYPE_SHELL_DATA = 0x06; +const MESSAGE_TYPE_SHELL_RESIZE = 0x07; +const MESSAGE_TYPE_SHELL_EXIT = 0x08; +const MESSAGE_TYPE_CLIENT_SHELL_CLOSED = 0x09; + + +function arrayBufferToUuid(buffer: ArrayBuffer): string { + const bytes = new Uint8Array(buffer); + const hex = Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join(''); + return [ + hex.substr(0, 8), + hex.substr(8, 4), + hex.substr(12, 4), + hex.substr(16, 4), + hex.substr(20, 12) + ].join('-'); +} + +function createMessage(type: number, data: ArrayBuffer): ArrayBuffer { + const message = new ArrayBuffer(1 + data.byteLength); + const view = new DataView(message); + view.setUint8(0, type); + new Uint8Array(message, 1).set(new Uint8Array(data)); + return message; +} + +function parseMessage(data: ArrayBuffer): { type: number; payload: ArrayBuffer } { + const view = new DataView(data); + if (data.byteLength < 1) { + throw new Error('Message too short'); + } + return { + type: view.getUint8(0), + payload: data.slice(1) + }; +} + + +function createShellDataMessage(sessionId: ArrayBuffer, shellData: Uint8Array): ArrayBuffer { + const data = new ArrayBuffer(16 + shellData.length); + + // Copy session ID (16 bytes) + new Uint8Array(data, 0, 16).set(new Uint8Array(sessionId)); + + // Copy shell data + new Uint8Array(data, 16).set(shellData); + + return createMessage(MESSAGE_TYPE_SHELL_DATA, data); +} + +function createShellResizeMessage(sessionId: ArrayBuffer, cols: number, rows: number): ArrayBuffer { + const data = new ArrayBuffer(20); + const view = new DataView(data); + + // Copy session ID (16 bytes) + new Uint8Array(data, 0, 16).set(new Uint8Array(sessionId)); + + // Set rows and cols (2 bytes each, big endian) + view.setUint16(16, rows, false); + view.setUint16(18, cols, false); + + return createMessage(MESSAGE_TYPE_SHELL_RESIZE, data); +} + +function createClientShellClosedMessage(sessionId: ArrayBuffer): ArrayBuffer { + const data = new ArrayBuffer(16); + + // Copy session ID (16 bytes) + new Uint8Array(data).set(new Uint8Array(sessionId)); + + return createMessage(MESSAGE_TYPE_CLIENT_SHELL_CLOSED, data); +} + +export function createShellConnection( + runnerName: string, + onData: (data: Uint8Array) => void, + onReady: () => void, + onExit: () => void, + onError: (error: string) => void +): Promise { + return new Promise((resolve, reject) => { + try { + // Create WebSocket URL - convert HTTP(S) to WS(S) and rely on cookie authentication + const baseUrl = window.location.origin.replace(/^http/, 'ws'); + const wsUrl = `${baseUrl}/api/v1/ws/agent/${encodeURIComponent(runnerName)}/shell`; + + const ws = new WebSocket(wsUrl); + ws.binaryType = 'arraybuffer'; + + let sessionId: ArrayBuffer | null = null; + let isConnected = false; + + const connection: ShellConnection = { + ws, + sessionId: null, + onData, + onReady, + onExit, + onError, + sendData: (data: Uint8Array) => { + if (sessionId && ws.readyState === WebSocket.OPEN) { + const message = createShellDataMessage(sessionId, data); + ws.send(message); + } + }, + resize: (cols: number, rows: number) => { + if (sessionId && ws.readyState === WebSocket.OPEN) { + const message = createShellResizeMessage(sessionId, cols, rows); + ws.send(message); + } + }, + close: () => { + if (sessionId && ws.readyState === WebSocket.OPEN) { + const message = createClientShellClosedMessage(sessionId); + ws.send(message); + } + ws.close(); + } + }; + + ws.onopen = () => { + isConnected = true; + // Server automatically handles CreateShell message when connection is established + // Client just waits for ShellReady message + }; + + ws.onmessage = (event) => { + try { + const { type, payload } = parseMessage(event.data); + + switch (type) { + case MESSAGE_TYPE_SHELL_READY: + if (payload.byteLength >= 17) { + const view = new DataView(payload); + const receivedSessionId = payload.slice(0, 16); + const isError = view.getUint8(16); + const message = payload.byteLength > 17 + ? new TextDecoder('utf-8').decode(payload.slice(17)) + : ''; + + if (isError) { + onError(message || 'Shell initialization failed'); + } else { + // Store the session ID received from the server + sessionId = receivedSessionId; + connection.sessionId = sessionId; + onReady(); + } + } + break; + + case MESSAGE_TYPE_SHELL_DATA: + if (payload.byteLength >= 16) { + const shellData = new Uint8Array(payload.slice(16)); + onData(shellData); + } + break; + + case MESSAGE_TYPE_SHELL_EXIT: + onExit(); + break; + + default: + console.warn('Unknown message type:', type); + break; + } + } catch (err) { + onError(`Failed to parse message: ${err instanceof Error ? err.message : 'Unknown error'}`); + } + }; + + ws.onerror = (event) => { + onError('WebSocket error occurred'); + }; + + ws.onclose = (event) => { + if (!isConnected) { + reject(new Error(`Failed to connect: ${event.reason || 'Connection closed'}`)); + } else { + onExit(); + } + }; + + resolve(connection); + + } catch (err) { + reject(err); + } + }); +} \ No newline at end of file diff --git a/webapp/src/routes/init/+page.svelte b/webapp/src/routes/init/+page.svelte index fcd011ce..64a72c61 100644 --- a/webapp/src/routes/init/+page.svelte +++ b/webapp/src/routes/init/+page.svelte @@ -20,6 +20,7 @@ let callbackUrl = ''; let metadataUrl = ''; let webhookUrl = ''; + let agentUrl = ''; // Auto-populate URLs with current origin $: if (typeof window !== 'undefined') { @@ -27,6 +28,7 @@ if (!callbackUrl) callbackUrl = `${currentUrl}/api/v1/callbacks`; if (!metadataUrl) metadataUrl = `${currentUrl}/api/v1/metadata`; if (!webhookUrl) webhookUrl = `${currentUrl}/webhooks`; + if (!agentUrl) agentUrl = `${currentUrl}/agent`; } // Form validation - all mandatory fields must be filled @@ -57,7 +59,8 @@ { callbackUrl: callbackUrl.trim() || undefined, metadataUrl: metadataUrl.trim() || undefined, - webhookUrl: webhookUrl.trim() || undefined + webhookUrl: webhookUrl.trim() || undefined, + agentUrl: agentUrl.trim() || undefined } ); @@ -345,6 +348,26 @@

    + + +
    + +
    + +

    + URL where GARM agents will connect. Must allow websocket connections. +

    +
    +
    {/if} diff --git a/webapp/src/routes/init/page.integration.test.ts b/webapp/src/routes/init/page.integration.test.ts index 25fa905b..e1a1dbad 100644 --- a/webapp/src/routes/init/page.integration.test.ts +++ b/webapp/src/routes/init/page.integration.test.ts @@ -349,6 +349,7 @@ describe('Comprehensive Integration Tests for Init Page', () => { expect(screen.getByLabelText('Metadata URL')).toBeInTheDocument(); expect(screen.getByLabelText('Callback URL')).toBeInTheDocument(); expect(screen.getByLabelText('Webhook URL')).toBeInTheDocument(); + expect(screen.getByLabelText('Agent URL')).toBeInTheDocument(); }); // Toggle to hide advanced fields @@ -373,10 +374,12 @@ describe('Comprehensive Integration Tests for Init Page', () => { const metadataInput = screen.getByLabelText('Metadata URL') as HTMLInputElement; const callbackInput = screen.getByLabelText('Callback URL') as HTMLInputElement; const webhookInput = screen.getByLabelText('Webhook URL') as HTMLInputElement; + const agentInput = screen.getByLabelText('Agent URL') as HTMLInputElement; expect(metadataInput.value).toBe('https://garm.example.com/api/v1/metadata'); expect(callbackInput.value).toBe('https://garm.example.com/api/v1/callbacks'); expect(webhookInput.value).toBe('https://garm.example.com/webhooks'); + expect(agentInput.value).toBe('https://garm.example.com/agent'); }); }); @@ -432,7 +435,8 @@ describe('Comprehensive Integration Tests for Init Page', () => { { callbackUrl: 'https://garm.example.com/api/v1/callbacks', metadataUrl: 'https://garm.example.com/api/v1/metadata', - webhookUrl: 'https://garm.example.com/webhooks' + webhookUrl: 'https://garm.example.com/webhooks', + agentUrl: 'https://garm.example.com/agent' } ); }); @@ -553,6 +557,7 @@ describe('Comprehensive Integration Tests for Init Page', () => { // Customize URLs const metadataInput = screen.getByLabelText('Metadata URL'); const callbackInput = screen.getByLabelText('Callback URL'); + const agentInput = screen.getByLabelText('Agent URL'); await fireEvent.input(metadataInput, { target: { value: 'https://custom.example.com/metadata' } }); await fireEvent.input(callbackInput, { target: { value: 'https://custom.example.com/callbacks' } }); @@ -578,7 +583,8 @@ describe('Comprehensive Integration Tests for Init Page', () => { { callbackUrl: 'https://custom.example.com/callbacks', metadataUrl: 'https://custom.example.com/metadata', - webhookUrl: 'https://garm.example.com/webhooks' + webhookUrl: 'https://garm.example.com/webhooks', + agentUrl: 'https://garm.example.com/agent' } ); }); @@ -603,11 +609,13 @@ describe('Comprehensive Integration Tests for Init Page', () => { const metadataInput = screen.getByLabelText('Metadata URL') as HTMLInputElement; const callbackInput = screen.getByLabelText('Callback URL') as HTMLInputElement; const webhookInput = screen.getByLabelText('Webhook URL') as HTMLInputElement; + const agentInput = screen.getByLabelText('Agent URL') as HTMLInputElement; // Verify auto-population works expect(metadataInput.value).toBe('https://garm.example.com/api/v1/metadata'); expect(callbackInput.value).toBe('https://garm.example.com/api/v1/callbacks'); expect(webhookInput.value).toBe('https://garm.example.com/webhooks'); + expect(agentInput.value).toBe('https://garm.example.com/agent'); // Fill in required fields const passwordInput = screen.getByLabelText('Password'); @@ -630,7 +638,8 @@ describe('Comprehensive Integration Tests for Init Page', () => { { callbackUrl: 'https://garm.example.com/api/v1/callbacks', metadataUrl: 'https://garm.example.com/api/v1/metadata', - webhookUrl: 'https://garm.example.com/webhooks' + webhookUrl: 'https://garm.example.com/webhooks', + agentUrl: 'https://garm.example.com/agent' } ); }); diff --git a/webapp/src/routes/init/page.test.ts b/webapp/src/routes/init/page.test.ts index 5acf61c5..cf104332 100644 --- a/webapp/src/routes/init/page.test.ts +++ b/webapp/src/routes/init/page.test.ts @@ -313,7 +313,8 @@ describe('Init Page - Unit Tests', () => { { callbackUrl: 'https://garm.example.com/api/v1/callbacks', metadataUrl: 'https://garm.example.com/api/v1/metadata', - webhookUrl: 'https://garm.example.com/webhooks' + webhookUrl: 'https://garm.example.com/webhooks', + agentUrl: 'https://garm.example.com/agent' } ); }); diff --git a/webapp/src/routes/instances/+page.svelte b/webapp/src/routes/instances/+page.svelte index 19bf30c5..b834b69e 100644 --- a/webapp/src/routes/instances/+page.svelte +++ b/webapp/src/routes/instances/+page.svelte @@ -4,6 +4,7 @@ import type { Instance } from '$lib/api/generated/api.js'; import DeleteModal from '$lib/components/DeleteModal.svelte'; import PageHeader from '$lib/components/PageHeader.svelte'; + import ShellTerminal from '$lib/components/ShellTerminal.svelte'; import { websocketStore, type WebSocketEvent } from '$lib/stores/websocket.js'; import { toastStore } from '$lib/stores/toast.js'; import DataTable from '$lib/components/DataTable.svelte'; @@ -16,6 +17,10 @@ let statusFilter = ''; let unsubscribeWebsocket: (() => void) | null = null; + // Current time for heartbeat staleness check - updates every second + let currentTime = Date.now(); + let heartbeatCheckInterval: ReturnType | null = null; + // Pagination let currentPage = 1; @@ -25,6 +30,8 @@ // Modal state let showDeleteModal = false; let instanceToDelete: Instance | null = null; + let showShellModal = false; + let instanceForShell: Instance | null = null; $: filteredInstances = instances.filter(instance => { const matchesSearch = searchTerm === '' || @@ -62,6 +69,27 @@ showDeleteModal = true; } + function handleShell(instance: Instance) { + instanceForShell = instance; + showShellModal = true; + } + + // Check if shell should be disabled (heartbeat stale or instance stopped) + function isHeartbeatStale(instance: Instance): boolean { + if (!instance.agent_id) return true; + + // Disable if instance doesn't have shell capability + if (!instance.capabilities?.has_shell) return true; + + // Disable if instance status is "stopped" + if (instance.status === 'stopped') return true; + + const lastHeartbeat = instance.heartbeat; + if (!lastHeartbeat) return true; + const heartbeatTime = new Date(lastHeartbeat); + return (currentTime - heartbeatTime.getTime()) > 60000; // 60 seconds + } + async function confirmDelete() { if (!instanceToDelete) return; @@ -94,6 +122,12 @@ flexible: true, cellComponent: InstancePoolCell }, + { + key: 'os_type', + title: 'OS Type', + cellComponent: StatusCell, + cellProps: { statusType: 'os_type', statusField: 'os_type' } + }, { key: 'created', title: 'Created', @@ -119,6 +153,18 @@ cellComponent: ActionsCell, cellProps: { actions: [ + { + type: 'shell', + title: 'Shell', + ariaLabel: 'Open shell', + action: 'shell', + isDisabled: (item: Instance) => isHeartbeatStale(item), + disabledTitle: (item: Instance) => { + if (!item.capabilities?.has_shell) return 'Shell unavailable - Agent does not support shell'; + if (item.status === 'stopped') return 'Shell unavailable - Instance is stopped'; + return 'Shell unavailable - Agent heartbeat is stale'; + } + }, { type: 'delete', title: 'Delete', ariaLabel: 'Delete instance', action: 'delete' } ] } @@ -137,10 +183,17 @@ field: 'provider_id' }, badges: [ + { type: 'text' as const, field: 'os_type', label: 'OS' }, { type: 'status' as const, field: 'status' }, { type: 'status' as const, field: 'runner_status' } ], actions: [ + { + type: 'shell' as const, + title: 'Shell', + handler: (item: any) => handleShell(item), + isDisabled: (item: Instance) => isHeartbeatStale(item) + }, { type: 'delete' as const, handler: (item: any) => handleDelete(item) @@ -178,6 +231,10 @@ handleDelete(event.detail.item); } + function handleShellInstance(event: CustomEvent<{ item: any }>) { + handleShell(event.detail.item); + } + function handleInstanceEvent(event: WebSocketEvent) { @@ -201,13 +258,18 @@ onMount(() => { // Initial load loadInstances(); - + // Subscribe to real-time instance events - correct entity type is 'instance' unsubscribeWebsocket = websocketStore.subscribeToEntity( 'instance', ['create', 'update', 'delete'], handleInstanceEvent ); + + // Update current time every second for heartbeat staleness check + heartbeatCheckInterval = setInterval(() => { + currentTime = Date.now(); + }, 1000); }); onDestroy(() => { @@ -216,6 +278,12 @@ unsubscribeWebsocket(); unsubscribeWebsocket = null; } + + // Clean up heartbeat check interval + if (heartbeatCheckInterval) { + clearInterval(heartbeatCheckInterval); + heartbeatCheckInterval = null; + } }); @@ -263,9 +331,25 @@ on:retry={retryLoadInstances} on:edit={handleEdit} on:delete={handleDeleteInstance} + on:shell={handleShellInstance} />
    + +{#if showShellModal && instanceForShell && !isHeartbeatStale(instanceForShell)} +
    +
    + { + showShellModal = false; + instanceForShell = null; + }} + /> +
    +
    +{/if} + {#if showDeleteModal && instanceToDelete} void) | null = null; let statusMessagesContainer: HTMLElement; $: instanceName = decodeURIComponent($page.params.id || ''); + // Current time for heartbeat staleness check - updates every second + let currentTime = Date.now(); + let heartbeatCheckInterval: ReturnType | null = null; + + // Check if shell should be disabled (heartbeat stale or instance stopped) + $: isHeartbeatStale = (instance?.agent_id) ? + (() => { + // Disable if instance doesn't have shell capability + if (!instance.capabilities?.has_shell) return true; + + // Disable if instance status is "stopped" + if (instance.status === 'stopped') return true; + + const lastHeartbeat = instance.heartbeat; + if (!lastHeartbeat) return true; + const heartbeatTime = new Date(lastHeartbeat); + return (currentTime - heartbeatTime.getTime()) > 60000; // 60 seconds + })() : true; + async function loadInstance() { if (!instanceName) return; @@ -85,13 +106,18 @@ }, 100); } }); - + // Subscribe to real-time instance events unsubscribeWebsocket = websocketStore.subscribeToEntity( 'instance', ['update', 'delete'], handleInstanceEvent ); + + // Update current time every second for heartbeat staleness check + heartbeatCheckInterval = setInterval(() => { + currentTime = Date.now(); + }, 1000); }); onDestroy(() => { @@ -100,6 +126,12 @@ unsubscribeWebsocket(); unsubscribeWebsocket = null; } + + // Clean up heartbeat check interval + if (heartbeatCheckInterval) { + clearInterval(heartbeatCheckInterval); + heartbeatCheckInterval = null; + } }); @@ -158,6 +190,21 @@

    Instance Information

    +
    + +{#if showShellModal && instance && !isHeartbeatStale} +
    +
    + showShellModal = false} + /> +
    +
    +{/if} + {#if showDeleteModal && instance} { + const desc = obj.description || 'No description'; + // Truncate long descriptions for mobile card (max 100 chars) + return desc.length > 100 ? desc.substring(0, 100) + '...' : desc; + } + }, + customInfo: [ + { + icon: '', + text: (obj: FileObject) => formatFileSize(obj.size || 0) + }, + { + icon: '', + text: (obj: FileObject) => formatDateTime(obj.updated_at) + } + ], + actions: [ + { + type: 'edit' as const, + handler: openUpdateModal + }, + { + type: 'delete' as const, + handler: openDeleteModal + } + ] + }; openUpdateModal(e.detail.item)} on:delete={(e) => openDeleteModal(e.detail.item)} on:action={(e) => e.detail.type === 'download' && handleDownload(e.detail.item)} /> - -{#if !loading && !error && totalObjects > 0} - -{/if} - {#if showUploadModal} !uploading && (showUploadModal = false)}> diff --git a/webapp/src/routes/pools/[id]/+page.svelte b/webapp/src/routes/pools/[id]/+page.svelte index ab8107e5..4e0d4467 100644 --- a/webapp/src/routes/pools/[id]/+page.svelte +++ b/webapp/src/routes/pools/[id]/+page.svelte @@ -14,6 +14,7 @@ import { toastStore } from '$lib/stores/toast.js'; import { formatDate, getForgeIcon, getEntityName, getEntityType, getEntityUrl } from '$lib/utils/common.js'; import { extractAPIError } from '$lib/utils/apiError'; + import ForgeTypeCell from '$lib/components/cells/ForgeTypeCell.svelte'; let pool: Pool | null = null; let loading = true; @@ -260,6 +261,12 @@
    Provider
    {pool.provider_name}
    +
    +
    Forge Type
    +
    + +
    +
    Image
    @@ -332,6 +339,14 @@
    OS Type / Architecture
    {pool.os_type} / {pool.os_arch}
    +
    +
    Shell Access
    +
    + + {pool.enable_shell ? 'Enabled' : 'Disabled'} + +
    +
    {#if (pool as any).template_name}
    Runner Install Template
    diff --git a/webapp/src/routes/scalesets/[id]/+page.svelte b/webapp/src/routes/scalesets/[id]/+page.svelte index f36778b3..d970eff9 100644 --- a/webapp/src/routes/scalesets/[id]/+page.svelte +++ b/webapp/src/routes/scalesets/[id]/+page.svelte @@ -14,6 +14,7 @@ import type { Instance } from '$lib/api/generated/api.js'; import { extractAPIError } from '$lib/utils/apiError'; import { formatDate, getForgeIcon, getEntityName, getEntityType, getEntityUrl } from '$lib/utils/common.js'; + import ForgeTypeCell from '$lib/components/cells/ForgeTypeCell.svelte'; let scaleSet: ScaleSet | null = null; let loading = true; @@ -260,6 +261,12 @@
    Provider
    {scaleSet.provider_name}
    +
    +
    Forge Type
    +
    + +
    +
    Image
    @@ -329,6 +336,14 @@
    OS Type / Architecture
    {scaleSet.os_type} / {scaleSet.os_arch}
    +
    +
    Shell Access
    +
    + + {scaleSet.enable_shell ? 'Enabled' : 'Disabled'} + +
    +
    Runner Install Template
    diff --git a/webapp/src/routes/templates/+page.svelte b/webapp/src/routes/templates/+page.svelte index 1a0383fc..ef910a41 100644 --- a/webapp/src/routes/templates/+page.svelte +++ b/webapp/src/routes/templates/+page.svelte @@ -6,6 +6,7 @@ import type { Template } from '$lib/api/generated/api.js'; import PageHeader from '$lib/components/PageHeader.svelte'; import ActionButton from '$lib/components/ActionButton.svelte'; + import Button from '$lib/components/Button.svelte'; import DataTable from '$lib/components/DataTable.svelte'; import { toastStore } from '$lib/stores/toast.js'; import { extractAPIError } from '$lib/utils/apiError'; @@ -36,6 +37,7 @@ // Modals let showDeleteModal = false; + let showRestoreModal = false; let selectedTemplate: Template | null = null; $: filteredTemplates = searchTerm @@ -117,6 +119,34 @@ showDeleteModal = true; } + function openRestoreModal() { + showRestoreModal = true; + } + + async function handleRestoreTemplates() { + try { + await garmApi.restoreTemplates({ restore_all: true }); + + toastStore.add({ + type: 'success', + title: 'Templates restored', + message: 'System templates have been restored successfully.' + }); + + showRestoreModal = false; + + // Reload templates to show the restored ones + await eagerCacheManager.retryResource('templates'); + } catch (err) { + const errorMsg = extractAPIError(err); + toastStore.add({ + type: 'error', + title: 'Failed to restore templates', + message: errorMsg + }); + } + } + // Remove handleTableAction since we're using direct edit/delete handlers now @@ -272,7 +302,19 @@ actionLabel="Create Template" showAction={true} on:action={openCreateModal} -/> +> + + {#if isCurrentUserAdmin()} + + {/if} + + {#if (error || cacheError) && !loading}
    @@ -342,4 +384,17 @@ on:close={() => { showDeleteModal = false; selectedTemplate = null; }} on:confirm={handleDeleteTemplate} /> +{/if} + + +{#if showRestoreModal} + showRestoreModal = false} + on:confirm={handleRestoreTemplates} + /> {/if} \ No newline at end of file diff --git a/webapp/src/routes/templates/[id]/+page.svelte b/webapp/src/routes/templates/[id]/+page.svelte index f36e0014..825d0370 100644 --- a/webapp/src/routes/templates/[id]/+page.svelte +++ b/webapp/src/routes/templates/[id]/+page.svelte @@ -107,8 +107,7 @@ data: Array.from(new TextEncoder().encode(editTemplateContent)) // Convert text to number array }; - const updatedTemplate = await garmApi.updateTemplate(template.id!, params); - template = updatedTemplate; + await garmApi.updateTemplate(template.id!, params); toastStore.add({ type: 'success', @@ -116,12 +115,12 @@ message: `Template "${editForm.name}" has been updated successfully.` }); - // Stay on the same page, but update the original values + // Update the original values to reflect the save originalForm.name = editForm.name; originalForm.description = editForm.description; originalTemplateContent = editTemplateContent; - editMode = false; + // Don't exit edit mode - template will be updated via WebSocket } catch (err) { const errorMsg = extractAPIError(err); toastStore.add({ @@ -376,16 +375,13 @@ // Only handle events for this specific template if (event.payload && event.payload.id === templateId) { if (event.operation === 'update') { - // Only reload if not in edit mode to avoid losing user changes if (!editMode) { + // Not in edit mode, safe to reload completely loadTemplate(); } else { - // Show a notification that the template was updated elsewhere - toastStore.add({ - type: 'info', - title: 'Template updated', - message: 'This template has been updated externally. Your changes are preserved.' - }); + // In edit mode, update the template object but preserve edit state + template = event.payload; + // Don't update edit form or content - user may still be editing } } else if (event.operation === 'delete') { // Redirect to templates list if this template is deleted @@ -678,6 +674,7 @@ minHeight="400px" placeholder="Enter your template script content here..." on:change={(e) => editTemplateContent = e.detail.value} + on:save={handleUpdateTemplate} />

    Template content should be a {template.os_type === 'windows' ? 'PowerShell' : 'bash'} script for runner installation and configuration on {template.os_type}. diff --git a/webapp/swagger.yaml b/webapp/swagger.yaml index 0f55f6c7..010237e5 100644 --- a/webapp/swagger.yaml +++ b/webapp/swagger.yaml @@ -24,8 +24,21 @@ definitions: AddressType: type: string x-go-package: github.com/cloudbase/garm-provider-common/params + AgentCapabilities: + properties: + has_shell: + type: boolean + x-go-name: Shell + type: object + x-go-package: github.com/cloudbase/garm/params ControllerInfo: properties: + agent_url: + description: |- + AgentURL is the URL where the GARM agent will connect. If set behind a reverse proxy, this + URL must be configured to allow websocket connections. + type: string + x-go-name: AgentURL callback_url: description: |- CallbackURL is the URL where instances can send updates back to the controller. @@ -50,6 +63,17 @@ definitions: from GARM without accidentally removing webhooks from other services or GARM controllers. type: string x-go-name: ControllerWebhookURL + enable_agent_tools_sync: + description: SyncGARMAgentTools enables or disables automatic sync of garm-agent tools. + type: boolean + x-go-name: SyncGARMAgentTools + garm_agent_releases_url: + description: |- + GARMAgentReleasesURL is the URL from where GARM can fetch garm-agent binaries. This URL must + have an API response compatible with the github releases API. + The default value for this field is: https://api.github.com/repos/cloudbase/garm-agent/releases + type: string + x-go-name: GARMAgentReleasesURL hostname: description: |- Hostname is the hostname of the machine that runs this controller. In the @@ -96,6 +120,9 @@ definitions: x-go-package: github.com/cloudbase/garm/params CreateEnterpriseParams: properties: + agent_mode: + type: boolean + x-go-name: AgentMode credentials_name: type: string x-go-name: CredentialsName @@ -221,6 +248,9 @@ definitions: x-go-package: github.com/cloudbase/garm/params CreateOrgParams: properties: + agent_mode: + type: boolean + x-go-name: AgentMode credentials_name: type: string x-go-name: CredentialsName @@ -238,6 +268,9 @@ definitions: x-go-package: github.com/cloudbase/garm/params CreatePoolParams: properties: + enable_shell: + type: boolean + x-go-name: EnableShell enabled: type: boolean x-go-name: Enabled @@ -296,6 +329,9 @@ definitions: x-go-package: github.com/cloudbase/garm/params CreateRepoParams: properties: + agent_mode: + type: boolean + x-go-name: AgentMode credentials_name: type: string x-go-name: CredentialsName @@ -319,6 +355,9 @@ definitions: disable_update: type: boolean x-go-name: DisableUpdate + enable_shell: + type: boolean + x-go-name: EnableShell enabled: type: boolean x-go-name: Enabled @@ -409,6 +448,9 @@ definitions: x-go-package: github.com/cloudbase/garm/params Enterprise: properties: + agent_mode: + type: boolean + x-go-name: AgentMode created_at: format: date-time type: string @@ -697,6 +739,9 @@ definitions: x-go-package: github.com/cloudbase/garm/params ForgeEntity: properties: + agent_mode: + type: boolean + x-go-name: AgentMode created_at: format: date-time type: string @@ -725,6 +770,118 @@ definitions: ForgeEntityType: type: string x-go-package: github.com/cloudbase/garm/params + GARMAgentTool: + properties: + created_at: + format: date-time + type: string + x-go-name: CreatedAt + description: + type: string + x-go-name: Description + download_url: + type: string + x-go-name: DownloadURL + file_type: + type: string + x-go-name: FileType + id: + format: uint64 + type: integer + x-go-name: ID + name: + type: string + x-go-name: Name + os_arch: + $ref: '#/definitions/OSArch' + os_type: + $ref: '#/definitions/OSType' + sha256sum: + type: string + x-go-name: SHA256SUM + size: + format: int64 + type: integer + x-go-name: Size + updated_at: + format: date-time + type: string + x-go-name: UpdatedAt + version: + type: string + x-go-name: Version + type: object + x-go-package: github.com/cloudbase/garm/params + GARMAgentToolsPaginatedResponse: + properties: + current_page: + format: uint64 + type: integer + x-go-name: CurrentPage + next_page: + format: uint64 + type: integer + x-go-name: NextPage + pages: + format: uint64 + type: integer + x-go-name: Pages + previous_page: + format: uint64 + type: integer + x-go-name: PreviousPage + results: + items: + properties: + created_at: + format: date-time + type: string + x-go-name: CreatedAt + description: + type: string + x-go-name: Description + download_url: + type: string + x-go-name: DownloadURL + file_type: + type: string + x-go-name: FileType + id: + format: uint64 + type: integer + x-go-name: ID + name: + type: string + x-go-name: Name + os_arch: + type: string + x-go-name: OSArch + os_type: + type: string + x-go-name: OSType + sha256sum: + type: string + x-go-name: SHA256SUM + size: + format: int64 + type: integer + x-go-name: Size + updated_at: + format: date-time + type: string + x-go-name: UpdatedAt + version: + type: string + x-go-name: Version + type: object + type: array + x-go-name: Results + total_count: + format: uint64 + type: integer + x-go-name: TotalCount + type: object + x-go-package: github.com/cloudbase/garm/params GithubApp: properties: app_id: @@ -816,6 +973,8 @@ definitions: format: int64 type: integer x-go-name: AgentID + capabilities: + $ref: '#/definitions/AgentCapabilities' created_at: description: CreatedAt is the timestamp of the creation of this runner. format: date-time @@ -827,6 +986,11 @@ definitions: The runner group must be created by someone with access to the enterprise. type: string x-go-name: GitHubRunnerGroup + heartbeat: + description: Heartbeat is the last recorded heartbeat from the runner + format: date-time + type: string + x-go-name: Heartbeat id: description: ID is the database ID of this instance. type: string @@ -903,6 +1067,64 @@ definitions: x-go-name: UpdatedAt type: object x-go-package: github.com/cloudbase/garm/params + InstanceMetadata: + properties: + agent_mode: + description: Agent mode indicates whether or not we need to install the GARM agent on the runner. + type: boolean + x-go-name: AgentMode + agent_shell_enabled: + type: boolean + x-go-name: AgentShellEnabled + agent_token: + type: string + x-go-name: AgentToken + agent_tools: + $ref: '#/definitions/GARMAgentTool' + ca_bundles: + additionalProperties: + items: + format: uint8 + type: integer + type: array + type: object + x-go-name: CABundle + extra_specs: + additionalProperties: {} + description: |- + ExtraSpecs represents the extra specs set on the pool or scale set. No secrets should + be set in extra specs. + Also, the instance metadata should never be saved to disk, and the metadata URL is only + accessible during setup of the runner. The API returns unauthorized once the runner + transitions to failed/idle. + type: object + x-go-name: ExtraSpecs + forge_type: + $ref: '#/definitions/EndpointType' + jit_enabled: + type: boolean + x-go-name: JITEnabled + metadata_access: + $ref: '#/definitions/MetadataServiceAccessDetails' + runner_labels: + items: + type: string + type: array + x-go-name: RunnerLabels + runner_name: + type: string + x-go-name: RunnerName + runner_registration_url: + description: |- + RunnerRegistrationURL is the URL the runner needs to configure itself + against. This can be a repository, organization, enterprise (github) + or system (gitea) + type: string + x-go-name: RunnerRegistrationURL + runner_tools: + $ref: '#/definitions/RunnerApplicationDownload' + type: object + x-go-package: github.com/cloudbase/garm/params InstanceStatus: type: string x-go-package: github.com/cloudbase/garm-provider-common/params @@ -1038,6 +1260,19 @@ definitions: $ref: '#/definitions/Job' type: array x-go-package: github.com/cloudbase/garm/params + MetadataServiceAccessDetails: + properties: + agent_url: + type: string + x-go-name: AgentURL + callback_url: + type: string + x-go-name: CallbackURL + metadata_url: + type: string + x-go-name: MetadataURL + type: object + x-go-package: github.com/cloudbase/garm/params NewUserParams: description: |- NewUserParams holds the needed information to create @@ -1065,6 +1300,9 @@ definitions: x-go-package: github.com/cloudbase/garm-provider-common/params Organization: properties: + agent_mode: + type: boolean + x-go-name: AgentMode created_at: format: date-time type: string @@ -1132,6 +1370,9 @@ definitions: format: date-time type: string x-go-name: CreatedAt + enable_shell: + type: boolean + x-go-name: EnableShell enabled: type: boolean x-go-name: Enabled @@ -1280,6 +1521,9 @@ definitions: x-go-package: github.com/cloudbase/garm/params Repository: properties: + agent_mode: + type: boolean + x-go-name: AgentMode created_at: format: date-time type: string @@ -1328,6 +1572,47 @@ definitions: x-go-name: UpdatedAt type: object x-go-package: github.com/cloudbase/garm/params + RestoreTemplateRequest: + properties: + forge: + $ref: '#/definitions/EndpointType' + os_type: + $ref: '#/definitions/OSType' + restore_all: + description: |- + RestoreAll indicates whether or not to restore all known + system owned templates. If set, the Forge and OSType params + are ignored. + type: boolean + x-go-name: RestoreAll + type: object + x-go-package: github.com/cloudbase/garm/params + RunnerApplicationDownload: + description: |- + This is copied from the go-github package. It does not make sense to create a dependency on go-github just + for this struct. + properties: + architecture: + type: string + x-go-name: Architecture + download_url: + type: string + x-go-name: DownloadURL + filename: + type: string + x-go-name: Filename + os: + type: string + x-go-name: OS + sha256_checksum: + type: string + x-go-name: SHA256Checksum + temp_download_token: + type: string + x-go-name: TempDownloadToken + title: RunnerApplicationDownload represents a binary for the self-hosted runner application that can be downloaded. + type: object + x-go-package: github.com/cloudbase/garm-provider-common/params RunnerPrefix: properties: runner_prefix: @@ -1351,6 +1636,9 @@ definitions: disable_update: type: boolean x-go-name: DisableUpdate + enable_shell: + type: boolean + x-go-name: EnableShell enabled: type: boolean x-go-name: Enabled @@ -1533,9 +1821,18 @@ definitions: x-go-package: github.com/cloudbase/garm/params UpdateControllerParams: properties: + agent_url: + type: string + x-go-name: AgentURL callback_url: type: string x-go-name: CallbackURL + enable_agent_tools_sync: + type: boolean + x-go-name: SyncGARMAgentTools + garm_agent_releases_url: + type: string + x-go-name: GARMAgentReleasesURL metadata_url: type: string x-go-name: MetadataURL @@ -1550,6 +1847,9 @@ definitions: x-go-package: github.com/cloudbase/garm/params UpdateEntityParams: properties: + agent_mode: + type: boolean + x-go-name: AgentMode credentials_name: type: string x-go-name: CredentialsName @@ -1650,6 +1950,9 @@ definitions: x-go-package: github.com/cloudbase/garm/params UpdatePoolParams: properties: + enable_shell: + type: boolean + x-go-name: EnableShell enabled: type: boolean x-go-name: Enabled @@ -1705,6 +2008,9 @@ definitions: x-go-package: github.com/cloudbase/garm/params UpdateScaleSetParams: properties: + enable_shell: + type: boolean + x-go-name: EnableShell enabled: type: boolean x-go-name: Enabled @@ -3939,6 +4245,50 @@ paths: summary: Update template with the parameters given. tags: - templates + /templates/restore: + post: + operationId: RestoreTemplates + parameters: + - description: Parameters used when restoring the templates. + in: body + name: Body + required: true + schema: + $ref: '#/definitions/RestoreTemplateRequest' + description: Parameters used when restoring the templates. + type: object + responses: + default: + description: APIErrorResponse + schema: + $ref: '#/definitions/APIErrorResponse' + summary: Create template with the parameters given. + tags: + - templates + /tools/garm-agent: + get: + operationId: GarmAgentList + parameters: + - description: The page at which to list. + in: query + name: page + type: integer + - description: Number of items per page. + in: query + name: pageSize + type: integer + responses: + "200": + description: GARMAgentToolsPaginatedResponse + schema: + $ref: '#/definitions/GARMAgentToolsPaginatedResponse' + "400": + description: APIErrorResponse + schema: + $ref: '#/definitions/APIErrorResponse' + summary: List GARM agent tools. + tags: + - tools produces: - application/json security: diff --git a/websocket/client.go b/websocket/client.go index be3b5bc0..ef666a3c 100644 --- a/websocket/client.go +++ b/websocket/client.go @@ -164,9 +164,6 @@ func (c *Client) clientReader() { c.Stop() }() c.conn.SetReadLimit(maxMessageSize) - if err := c.conn.SetReadDeadline(time.Now().Add(pongWait)); err != nil { - slog.With(slog.Any("error", err)).Error("failed to set read deadline") - } c.conn.SetPongHandler(func(string) error { if err := c.conn.SetReadDeadline(time.Now().Add(pongWait)); err != nil { return err diff --git a/workers/cache/garm_agent.go b/workers/cache/garm_agent.go new file mode 100644 index 00000000..5dd1200b --- /dev/null +++ b/workers/cache/garm_agent.go @@ -0,0 +1,59 @@ +// Copyright 2025 Cloudbase Solutions SRL +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. +package cache + +import ( + "time" +) + +type GitHubReleaseAsset struct { + ID uint `json:"id"` + Name string `json:"name"` + Size uint `json:"size"` + DownloadCount uint `json:"download_count"` + CreatedAt time.Time `json:"created_at"` + DownloadURL string `json:"browser_download_url"` +} + +type GitHubRelease struct { + // TagName is the semver version of the release. + TagName string `json:"tag_name"` + Name string `json:"name"` + TarballURL string `json:"tarball_url"` + Assets []GitHubReleaseAsset `json:"assets"` +} + +// func getGithubReleaseFromURL(_ context.Context, releasesEndpoint string) (GitHubRelease, error) { +// resp, err := http.Get(releasesEndpoint) // nolint +// if err != nil { +// return GitHubRelease{}, fmt.Errorf("failed to fetch URL %s: %w", releasesEndpoint, err) +// } +// defer resp.Body.Close() +// data, err := io.ReadAll(resp.Body) +// if err != nil { +// return GitHubRelease{}, fmt.Errorf("failed to read response from URL %s: %w", releasesEndpoint, err) +// } + +// var tools GitHubRelease +// err = json.Unmarshal(data, &tools) +// if err != nil { +// return GitHubRelease{}, fmt.Errorf("failed to unmarshal response from URL %s: %w", releasesEndpoint, err) +// } + +// if len(tools.Assets) == 0 { +// return GitHubRelease{}, fmt.Errorf("no tools found from URL %s", releasesEndpoint) +// } + +// return tools, nil +// } diff --git a/workers/cache/gitea_tools.go b/workers/cache/gitea_tools.go index a6bc987b..0a35b053 100644 --- a/workers/cache/gitea_tools.go +++ b/workers/cache/gitea_tools.go @@ -46,15 +46,15 @@ var nightlyActRunner = GiteaEntityTool{ TarballURL: "https://gitea.com/gitea/act_runner/archive/main.tar.gz", Assets: []GiteaToolsAssets{ { - Name: "act_runner-nightly-linux-amd64.xz", + Name: "act_runner-nightly-linux-amd64", DownloadURL: "https://dl.gitea.com/act_runner/nightly/act_runner-nightly-linux-amd64", }, { - Name: "act_runner-nightly-linux-arm64.xz", + Name: "act_runner-nightly-linux-arm64", DownloadURL: "https://dl.gitea.com/act_runner/nightly/act_runner-nightly-linux-arm64", }, { - Name: "act_runner-nightly-windows-amd64.exe.xz", + Name: "act_runner-nightly-windows-amd64.exe", DownloadURL: "https://dl.gitea.com/act_runner/nightly/act_runner-nightly-windows-amd64.exe", }, }, diff --git a/workers/provider/provider.go b/workers/provider/provider.go index 92be1390..124775ac 100644 --- a/workers/provider/provider.go +++ b/workers/provider/provider.go @@ -189,7 +189,7 @@ func (p *Provider) loop() { slog.ErrorContext(p.ctx, "watcher channel closed") return } - slog.InfoContext(p.ctx, "received payload", "operation", payload.Operation, "entity_type", payload.EntityType) + slog.DebugContext(p.ctx, "received payload", "operation", payload.Operation, "entity_type", payload.EntityType) go p.handleWatcherEvent(payload) case <-p.ctx.Done(): return diff --git a/workers/websocket/agent/agent.go b/workers/websocket/agent/agent.go new file mode 100644 index 00000000..b0467460 --- /dev/null +++ b/workers/websocket/agent/agent.go @@ -0,0 +1,403 @@ +package agent + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "log/slog" + "net" + "sync" + "time" + + "github.com/google/uuid" + "github.com/gorilla/websocket" + + runnerErrors "github.com/cloudbase/garm-provider-common/errors" + "github.com/cloudbase/garm/database/common" + "github.com/cloudbase/garm/database/watcher" + "github.com/cloudbase/garm/params" + "github.com/cloudbase/garm/runner" + garmUtil "github.com/cloudbase/garm/util" + "github.com/cloudbase/garm/workers/websocket/agent/messaging" +) + +const ( + // Time allowed to write a message to the peer. + writeWait = 10 * time.Second + + // Time allowed to read the next pong message from the peer. + pongWait = 60 * time.Second + + // Send pings to peer with this period. Must be less than pongWait. + pingPeriod = (pongWait * 9) / 10 + + // Maximum message size allowed from peer. + maxMessageSize = 16384 // 16 KB +) + +func NewAgent(ctx context.Context, conn *websocket.Conn, instance params.Instance, store runner.AgentStoreOps) (*Agent, error) { + if conn == nil { + return nil, fmt.Errorf("missing connection for agent") + } + consumerID := fmt.Sprintf("agent-worker-%s", instance.Name) + ctx = garmUtil.WithSlogContext( + ctx, + slog.Any("worker", "agent"), + slog.Any("agent_name", instance.Name), + ) + + return &Agent{ + ctx: ctx, + conn: conn, + instance: instance, + agentStore: store, + done: closed, + consumerID: consumerID, + shellSessions: make(map[string]*ClientSession), + }, nil +} + +type Agent struct { + ctx context.Context + instance params.Instance + mux sync.Mutex + writeMux sync.Mutex + conn *websocket.Conn + agentStore runner.AgentStoreOps + + consumerID string + consumer common.Consumer + + running bool + done chan struct{} + + shellSessions map[string]*ClientSession +} + +func (a *Agent) CreateShellSession(ctx context.Context, sessionID uuid.UUID, clientConn *websocket.Conn) (*ClientSession, error) { + a.mux.Lock() + defer a.mux.Unlock() + + _, ok := a.shellSessions[sessionID.String()] + if ok { + return nil, runnerErrors.NewConflictError("session ID %q already in use", sessionID) + } + sess, err := NewClientSession(ctx, clientConn, a.writeMessage, sessionID) + if err != nil { + return nil, fmt.Errorf("failed to create new client session: %w", err) + } + + if err := sess.Start(); err != nil { + return nil, fmt.Errorf("failed to start client session: %w", err) + } + + if !a.instance.Capabilities.Shell { + shellDisabled := messaging.ShellReadyMessage{ + SessionID: sessionID, + IsError: 1, + Message: []byte("agent shell is disabled"), + } + sess.safeWrite(websocket.BinaryMessage, shellDisabled.Marshal()) + sess.Stop() + return nil, fmt.Errorf("agent shell is disabled") + } + a.shellSessions[sessionID.String()] = sess + return sess, nil +} + +func (a *Agent) RemoveClientSession(sessionID uuid.UUID, safe bool) error { + if !safe { + a.mux.Lock() + defer a.mux.Unlock() + } + sess, ok := a.shellSessions[sessionID.String()] + if !ok { + return nil + } + + if err := sess.Stop(); err != nil { + return fmt.Errorf("failed to stop session") + } + + delete(a.shellSessions, sessionID.String()) + return nil +} + +func (a *Agent) Done() <-chan struct{} { + return a.done +} + +func (a *Agent) IsRunning() bool { + return a.running +} + +func (a *Agent) Start() error { + a.mux.Lock() + defer a.mux.Unlock() + + if a.running { + return nil + } + + consumer, err := watcher.RegisterConsumer( + a.ctx, a.consumerID, + watcher.WithAll( + // Filter for update and delete ops for the instance the agent belongs to. + watcher.WithInstanceFilter(a.instance), + watcher.WithAny( + watcher.WithOperationTypeFilter(common.DeleteOperation), + watcher.WithOperationTypeFilter(common.UpdateOperation), + ), + )) + if err != nil { + return fmt.Errorf("registering consumer: %w", err) + } + a.consumer = consumer + + a.done = make(chan struct{}) + a.running = true + go a.agentReader() + go a.loop() + return nil +} + +func (a *Agent) Stop() error { + a.mux.Lock() + defer a.mux.Unlock() + + if !a.running { + return nil + } + slog.InfoContext(a.ctx, "removing sessions") + for _, val := range a.shellSessions { + slog.InfoContext(a.ctx, "removing session", "session_id", val.sessionID) + a.RemoveClientSession(val.sessionID, true) + } + + a.running = false + slog.InfoContext(a.ctx, "sending websocket close message") + a.writeMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")) + slog.InfoContext(a.ctx, "closing connection") + a.conn.Close() + slog.InfoContext(a.ctx, "closing done channel") + close(a.done) + return nil +} + +func (a *Agent) writeMessage(messageType int, message []byte) error { + a.writeMux.Lock() + defer a.writeMux.Unlock() + if err := a.conn.SetWriteDeadline(time.Now().Add(writeWait)); err != nil { + return fmt.Errorf("failed to set write deadline: %w", err) + } + if err := a.conn.WriteMessage(messageType, message); err != nil { + return fmt.Errorf("failed to write message: %w", err) + } + return nil +} + +// agentReader listens for messages sent by the garm-agent. It unmarshals the message and +// routes it to appropriate functions. +func (a *Agent) agentReader() { + defer func() { + slog.InfoContext(a.ctx, "stopping agent reader") + a.Stop() + }() + a.conn.SetReadLimit(maxMessageSize) + a.conn.SetPongHandler(func(string) error { + if err := a.conn.SetReadDeadline(time.Now().Add(pongWait)); err != nil { + return err + } + return nil + }) + for { + mt, data, err := a.conn.ReadMessage() + if err != nil { + slog.ErrorContext(a.ctx, "error reading websocket message", slog.Any("error", err)) + return + } + + if mt == websocket.CloseMessage { + return + } + + if err := a.messageHandler(data); err != nil { + if errors.Is(err, ErrShuttingDown) { + slog.InfoContext(a.ctx, "runner was terminated") + return + } + slog.ErrorContext(a.ctx, "error handling message", slog.Any("error", err)) + } + } +} + +func (a *Agent) messageHandler(msg []byte) (err error) { + if len(msg) < 1 { + return fmt.Errorf("mesage is too short") + } + agentMsg, err := messaging.UnmarshalAgentMessage(msg) + if err != nil { + return fmt.Errorf("failed to unmarshal agetne message") + } + + switch agentMsg.Type { + case messaging.MessageTypeHeartbeat: + slog.DebugContext(a.ctx, "received heartbeat message from agent") + heartbeatMsg, err := messaging.Unmarshal[messaging.RunnerHeartbetMessage](agentMsg) + if err != nil { + return fmt.Errorf("failed to unmarshal shell disabled message: %w", err) + } + err = a.agentStore.RecordAgentHeartbeat(a.ctx) + if err != nil { + return fmt.Errorf("failed to record heartbeat: %w", err) + } + if a.instance.AgentID != int64(heartbeatMsg.AgentID) { + slog.WarnContext(a.ctx, "missmatching agent ID", "instance_agent_id", a.instance.AgentID, "status_update_agent_id", heartbeatMsg.AgentID) + } + slog.DebugContext(a.ctx, "message heartbeat received", "payload", heartbeatMsg.Payload) + if len(heartbeatMsg.Payload) > 0 { + var caps params.AgentCapabilities + if err := json.Unmarshal(heartbeatMsg.Payload, &caps); err != nil { + return fmt.Errorf("failed to unmarshal capabilities: %w", err) + } + if caps.Shell != a.instance.Capabilities.Shell { + if err := a.agentStore.SetInstanceCapabilities(a.ctx, caps); err != nil { + return fmt.Errorf("failed to set agent capabilities: %w", err) + } + } + } + case messaging.MessageTypeShellReady: + shellReady, err := messaging.Unmarshal[messaging.ShellReadyMessage](agentMsg) + if err != nil { + return fmt.Errorf("failed to unmarshal shell ready message: %w", err) + } + session, ok := a.shellSessions[shellReady.ID()] + if !ok { + return nil + } + if err := session.Write(msg); err != nil { + return fmt.Errorf("failed to write message: %w", err) + } + case messaging.MessageTypeShellExit: + shellExit, err := messaging.Unmarshal[messaging.ShellDataMessage](agentMsg) + if err != nil { + return fmt.Errorf("failed to unmarshal shell exit message: %w", err) + } + session, ok := a.shellSessions[shellExit.ID()] + if !ok { + return nil + } + if err := a.RemoveClientSession(session.sessionID, false); err != nil { + return fmt.Errorf("failed to remove session: %w", err) + } + case messaging.MessageTypeShellData: + shellData, err := messaging.Unmarshal[messaging.ShellDataMessage](agentMsg) + if err != nil { + return fmt.Errorf("failed to unmarshal shell data message: %w", err) + } + session, ok := a.shellSessions[shellData.ID()] + if !ok { + return nil + } + if err := session.Write(msg); err != nil { + return fmt.Errorf("failed to write message: %w", err) + } + case messaging.MessageTypeStatusMessage: + statusUpdate, err := messaging.Unmarshal[messaging.RunnerUpdateMessage](agentMsg) + if err != nil { + return fmt.Errorf("failed to unmarshal runner status message: %w", err) + } + slog.InfoContext(a.ctx, "got runner status update", "status", string(statusUpdate.Payload)) + if a.instance.AgentID != int64(statusUpdate.AgentID) { + slog.WarnContext(a.ctx, "missmatching agent ID", "instance_agent_id", a.instance.AgentID, "status_update_agent_id", statusUpdate.AgentID) + } + var status params.InstanceUpdateMessage + if err := json.Unmarshal(statusUpdate.Payload, &status); err != nil { + return fmt.Errorf("failed to unmarshal instance update: %w", err) + } + if err := a.agentStore.AddInstanceStatusMessage(a.ctx, status); err != nil { + return fmt.Errorf("failed to add status message: %w", err) + } + + if status.Status == params.RunnerTerminated { + // mark the instance as pending_delete + if err := a.agentStore.SetInstanceToPendingDelete(a.ctx); err != nil { + return fmt.Errorf("failed to mark instance as pending_delete: %w", err) + } + return ErrShuttingDown + } + } + return nil +} + +func (a *Agent) loop() { + ticker := time.NewTicker(pingPeriod) + defer func() { + a.Stop() + ticker.Stop() + }() + for { + select { + case <-ticker.C: + if err := a.writeMessage(websocket.PingMessage, nil); err != nil { + if IsErrorOfInterest(err) { + slog.With(slog.Any("error", err)).Error("failed to write ping message") + } + return + } + case <-a.ctx.Done(): + return + case <-a.done: + return + case payload := <-a.consumer.Watch(): + instance, ok := payload.Payload.(params.Instance) + if !ok { + continue + } + if instance.Name != a.instance.Name { + slog.WarnContext(a.ctx, "invalid instance object received", "agent_instance", a.instance.Name, "payload_instance", instance.Name) + continue + } + // We only really care about update and delete operations. + switch payload.Operation { + case common.UpdateOperation: + a.mux.Lock() + a.instance = instance + a.mux.Unlock() + case common.DeleteOperation: + // This instance was deleted. The agent connection needs to be dropped and this worker closed. + return + } + } + } +} + +func IsErrorOfInterest(err error) bool { + if err == nil { + return false + } + + if errors.Is(err, websocket.ErrCloseSent) { + return false + } + + if errors.Is(err, websocket.ErrBadHandshake) { + return false + } + + if errors.Is(err, net.ErrClosed) { + return false + } + + asCloseErr, ok := err.(*websocket.CloseError) + if ok { + switch asCloseErr.Code { + case websocket.CloseNormalClosure, websocket.CloseGoingAway, + websocket.CloseNoStatusReceived, websocket.CloseAbnormalClosure: + return false + } + } + + return true +} diff --git a/workers/websocket/agent/agent_hub.go b/workers/websocket/agent/agent_hub.go new file mode 100644 index 00000000..56cfc680 --- /dev/null +++ b/workers/websocket/agent/agent_hub.go @@ -0,0 +1,137 @@ +package agent + +import ( + "context" + "fmt" + "log/slog" + "sync" + + runnerErrors "github.com/cloudbase/garm-provider-common/errors" + garmUtil "github.com/cloudbase/garm/util" +) + +var closed = make(chan struct{}) + +func init() { close(closed) } + +func NewHub(ctx context.Context) (*Hub, error) { + ctx = garmUtil.WithSlogContext( + ctx, + slog.Any("worker", "agent-hub"), + ) + + return &Hub{ + ctx: ctx, + agents: make(map[string]*Agent), + done: closed, + }, nil +} + +type Hub struct { + ctx context.Context + agents map[string]*Agent + mux sync.Mutex + + done chan struct{} + running bool +} + +func (a *Hub) Start() error { + a.mux.Lock() + defer a.mux.Unlock() + + if a.running { + return nil + } + + a.done = make(chan struct{}) + a.running = true + go a.loop() + return nil +} + +func (a *Hub) GetAgent(agentID string) (*Agent, error) { + a.mux.Lock() + defer a.mux.Unlock() + + if agent, ok := a.agents[agentID]; ok { + return agent, nil + } + return nil, runnerErrors.NewNotFoundError("no such agent") +} + +func (a *Hub) Stop() error { + a.mux.Lock() + defer a.mux.Unlock() + + if !a.running { + return nil + } + + close(a.done) + a.running = false + return nil +} + +func (a *Hub) RegisterAgent(agent *Agent) error { + a.mux.Lock() + defer a.mux.Unlock() + + if agent == nil { + return fmt.Errorf("missing agent") + } + + if !agent.IsRunning() { + return fmt.Errorf("agent is not running; refusing to register") + } + + if _, ok := a.agents[agent.instance.Name]; ok { + return runnerErrors.NewConflictError("agent %s is already registered", agent.instance.Name) + } + a.agents[agent.instance.Name] = agent + go a.reapStoppedAgent(agent) + + return nil +} + +func (a *Hub) UnregisterAgent(agentID string) error { + a.mux.Lock() + defer a.mux.Unlock() + if agent, ok := a.agents[agentID]; ok { + if err := agent.Stop(); err != nil { + return fmt.Errorf("failed to stop agent loop for runner %s: %w", agent.instance.Name, err) + } + delete(a.agents, agentID) + } + return nil +} + +func (a *Hub) reapStoppedAgent(agent *Agent) { + if agent == nil { + return + } + + select { + case <-agent.Done(): + slog.InfoContext(a.ctx, "agent is done", "agent_name", agent.instance.Name) + if err := a.UnregisterAgent(agent.instance.Name); err != nil { + slog.ErrorContext(a.ctx, "failed to unregister stopped agent", "agent", agent.instance.Name, "error", err) + } + case <-a.ctx.Done(): + case <-a.done: + } +} + +func (a *Hub) loop() { + defer func() { + a.Stop() + }() + for { + select { + case <-a.ctx.Done(): + return + case <-a.done: + return + } + } +} diff --git a/workers/websocket/agent/errors.go b/workers/websocket/agent/errors.go new file mode 100644 index 00000000..4faecebd --- /dev/null +++ b/workers/websocket/agent/errors.go @@ -0,0 +1,5 @@ +package agent + +import "fmt" + +var ErrShuttingDown = fmt.Errorf("runner is being terminated") diff --git a/workers/websocket/agent/messaging/messaging.go b/workers/websocket/agent/messaging/messaging.go new file mode 100644 index 00000000..9aeacc87 --- /dev/null +++ b/workers/websocket/agent/messaging/messaging.go @@ -0,0 +1,328 @@ +package messaging + +import ( + "encoding/binary" + "fmt" + + "github.com/google/uuid" +) + +const ( + // MessageTypeHeartbeat represents a heartbeat message sent + // by the agent. + MessageTypeHeartbeat byte = 0x01 + // MessageTypeStatusMessage is a status message setnt by the agent + MessageTypeStatusMessage byte = 0x03 + // Shell session messages + MessageTypeCreateShell byte = 0x04 + MessageTypeShellReady byte = 0x05 + MessageTypeShellData byte = 0x06 + MessageTypeShellResize byte = 0x07 + MessageTypeShellExit byte = 0x08 + MessageTypeClientShellClosed byte = 0x09 +) + +type AgentMessage struct { + Type byte + Data []byte +} + +func (a AgentMessage) Marshal() []byte { + ret := make([]byte, len(a.Data)+1) + ret[0] = a.Type + copy(ret[1:], a.Data) + return ret +} + +func UnmarshalAgentMessage(data []byte) (AgentMessage, error) { + if len(data) < 1 { + return AgentMessage{}, fmt.Errorf("message too short") + } + + return AgentMessage{ + Type: data[0], + Data: data[1:], + }, nil +} + +// MessageUnmarshaler defines types that can unmarshal from AgentMessage data +type MessageUnmarshaler interface { + UnmarshalFromAgentMessage(data []byte) error +} + +// Unmarshal unmarshals AgentMessage data into a specific message type using generics +func Unmarshal[T any, PT interface { + *T + MessageUnmarshaler +}](msg AgentMessage) (T, error) { + var result T + if err := PT(&result).UnmarshalFromAgentMessage(msg.Data); err != nil { + return result, fmt.Errorf("failed to unmarshal message type %d: %w", msg.Type, err) + } + return result, nil +} + +type CreateShellMessage struct { + SessionID [16]byte + Rows uint32 + Cols uint32 +} + +func (c *CreateShellMessage) ID() string { + uuid, err := uuid.FromBytes(c.SessionID[:]) + if err != nil { + return "" + } + + return uuid.String() +} + +func (c CreateShellMessage) Marshal() []byte { + msg := AgentMessage{ + Type: MessageTypeCreateShell, + Data: make([]byte, 24), + } + + copy(msg.Data, c.SessionID[:]) + binary.BigEndian.PutUint32(msg.Data[16:20], c.Rows) + binary.BigEndian.PutUint32(msg.Data[20:24], c.Cols) + return msg.Marshal() +} + +func (c *CreateShellMessage) UnmarshalFromAgentMessage(data []byte) error { + if len(data) < 24 { + return fmt.Errorf("invalid CreateShellMessage data length: %d", len(data)) + } + copy(c.SessionID[:], data[:16]) + c.Rows = binary.BigEndian.Uint32(data[16:20]) + c.Cols = binary.BigEndian.Uint32(data[20:24]) + return nil +} + +type ShellReadyMessage struct { + SessionID [16]byte + IsError byte + Message []byte +} + +func (c *ShellReadyMessage) ID() string { + uuid, err := uuid.FromBytes(c.SessionID[:]) + if err != nil { + return "" + } + + return uuid.String() +} + +func (c ShellReadyMessage) Marshal() []byte { + msg := AgentMessage{ + Type: MessageTypeShellReady, + Data: make([]byte, 17+len(c.Message)), + } + + copy(msg.Data, c.SessionID[:]) + msg.Data[16] = c.IsError + if len(c.Message) > 0 { + copy(msg.Data[17:], c.Message) + } + return msg.Marshal() +} + +func (c *ShellReadyMessage) UnmarshalFromAgentMessage(data []byte) error { + if len(data) < 17 { + return fmt.Errorf("invalid ShellReadyMessage data length: %d", len(data)) + } + copy(c.SessionID[:], data[:16]) + c.IsError = data[16] + if len(data) > 17 { + c.Message = make([]byte, len(data)-17) + copy(c.Message, data[17:]) + } + return nil +} + +type ShellExitMessage struct { + SessionID [16]byte +} + +func (c *ShellExitMessage) ID() string { + uuid, err := uuid.FromBytes(c.SessionID[:]) + if err != nil { + return "" + } + + return uuid.String() +} + +func (c ShellExitMessage) Marshal() []byte { + msg := AgentMessage{ + Type: MessageTypeShellExit, + Data: make([]byte, 16), + } + + copy(msg.Data, c.SessionID[:]) + return msg.Marshal() +} + +func (c *ShellExitMessage) UnmarshalFromAgentMessage(data []byte) error { + if len(data) < 16 { + return fmt.Errorf("invalid ShellExitMessage data length: %d", len(data)) + } + copy(c.SessionID[:], data[:16]) + return nil +} + +type ClientShellClosedMessage struct { + SessionID [16]byte +} + +func (c *ClientShellClosedMessage) ID() string { + uuid, err := uuid.FromBytes(c.SessionID[:]) + if err != nil { + return "" + } + + return uuid.String() +} + +func (c ClientShellClosedMessage) Marshal() []byte { + msg := AgentMessage{ + Type: MessageTypeClientShellClosed, + Data: make([]byte, 16), + } + + copy(msg.Data, c.SessionID[:]) + return msg.Marshal() +} + +func (c *ClientShellClosedMessage) UnmarshalFromAgentMessage(data []byte) error { + if len(data) < 16 { + return fmt.Errorf("invalid ClientShellClosedMessage data length: %d", len(data)) + } + copy(c.SessionID[:], data[:16]) + return nil +} + +type ShellDataMessage struct { + SessionID [16]byte + Data []byte +} + +func (c *ShellDataMessage) ID() string { + uuid, err := uuid.FromBytes(c.SessionID[:]) + if err != nil { + return "" + } + + return uuid.String() +} + +func (c ShellDataMessage) Marshal() []byte { + msg := AgentMessage{ + Type: MessageTypeShellData, + } + + msg.Data = make([]byte, len(c.Data)+16) + copy(msg.Data, c.SessionID[:]) + copy(msg.Data[16:], c.Data) + return msg.Marshal() +} + +func (c *ShellDataMessage) UnmarshalFromAgentMessage(data []byte) error { + if len(data) < 16 { + return fmt.Errorf("invalid ShellDataMessage data length: %d", len(data)) + } + copy(c.SessionID[:], data[:16]) + c.Data = make([]byte, len(data)-16) + copy(c.Data, data[16:]) + return nil +} + +type ShellResizeMessage struct { + SessionID [16]byte + Rows uint16 + Cols uint16 +} + +func (c *ShellResizeMessage) ID() string { + uuid, err := uuid.FromBytes(c.SessionID[:]) + if err != nil { + return "" + } + + return uuid.String() +} + +func (c ShellResizeMessage) Marshal() []byte { + msg := AgentMessage{ + Type: MessageTypeShellResize, + } + + msg.Data = make([]byte, 20) + copy(msg.Data, c.SessionID[:]) + binary.BigEndian.PutUint16(msg.Data[16:18], c.Rows) + binary.BigEndian.PutUint16(msg.Data[18:20], c.Cols) + return msg.Marshal() +} + +func (c *ShellResizeMessage) UnmarshalFromAgentMessage(data []byte) error { + if len(data) < 20 { + return fmt.Errorf("invalid ShellResizeMessage data length: %d", len(data)) + } + copy(c.SessionID[:], data[:16]) + c.Rows = binary.BigEndian.Uint16(data[16:18]) + c.Cols = binary.BigEndian.Uint16(data[18:20]) + return nil +} + +type RunnerUpdateMessage struct { + AgentID uint64 + Payload []byte +} + +func (s RunnerUpdateMessage) Marshal() []byte { + msg := AgentMessage{ + Type: MessageTypeStatusMessage, + } + + msg.Data = make([]byte, 8+len(s.Payload)) + binary.BigEndian.PutUint64(msg.Data[0:8], s.AgentID) + copy(msg.Data[8:], s.Payload) + return msg.Marshal() +} + +func (s *RunnerUpdateMessage) UnmarshalFromAgentMessage(data []byte) error { + if len(data) < 8 { + return fmt.Errorf("invalid MessageTypeStatusMessage data length: %d", len(data)) + } + s.AgentID = binary.BigEndian.Uint64(data[0:8]) + s.Payload = make([]byte, len(data)-8) + copy(s.Payload, data[8:]) + return nil +} + +type RunnerHeartbetMessage struct { + AgentID uint64 + Payload []byte +} + +func (s RunnerHeartbetMessage) Marshal() []byte { + msg := AgentMessage{ + Type: MessageTypeHeartbeat, + } + + msg.Data = make([]byte, 8+len(s.Payload)) + binary.BigEndian.PutUint64(msg.Data[0:8], s.AgentID) + copy(msg.Data[8:], s.Payload) + return msg.Marshal() +} + +func (s *RunnerHeartbetMessage) UnmarshalFromAgentMessage(data []byte) error { + if len(data) < 8 { + return fmt.Errorf("invalid MessageTypeStatusMessage data length: %d", len(data)) + } + s.AgentID = binary.BigEndian.Uint64(data[0:8]) + s.Payload = make([]byte, len(data)-8) + copy(s.Payload, data[8:]) + return nil +} diff --git a/workers/websocket/agent/shell.go b/workers/websocket/agent/shell.go new file mode 100644 index 00000000..9c57857b --- /dev/null +++ b/workers/websocket/agent/shell.go @@ -0,0 +1,193 @@ +package agent + +import ( + "bytes" + "context" + "fmt" + "log/slog" + "sync" + "time" + + "github.com/google/uuid" + "github.com/gorilla/websocket" + + "github.com/cloudbase/garm/workers/websocket/agent/messaging" +) + +type writeMessage func(int, []byte) error + +func NewClientSession(ctx context.Context, clientConn *websocket.Conn, agentWriter writeMessage, sessionID uuid.UUID) (*ClientSession, error) { + return &ClientSession{ + ctx: ctx, + sessionID: sessionID, + clientConn: clientConn, + agentWriter: agentWriter, + done: closed, + }, nil +} + +type ClientSession struct { + ctx context.Context + sessionID uuid.UUID + + agentWriter writeMessage + clientConn *websocket.Conn + + writeMux sync.Mutex + mux sync.Mutex + + running bool + done chan struct{} +} + +func (c *ClientSession) Done() chan struct{} { + return c.done +} + +func (c *ClientSession) Start() error { + c.mux.Lock() + defer c.mux.Unlock() + + if c.running { + return nil + } + + createShellMsg := messaging.CreateShellMessage{ + SessionID: c.sessionID, + Rows: 80, + Cols: 120, + } + if err := c.agentWriter(websocket.BinaryMessage, createShellMsg.Marshal()); err != nil { + return fmt.Errorf("failed to send create shell message:%w", err) + } + + c.done = make(chan struct{}) + c.running = true + go c.clientReader() + go c.loop() + + return nil +} + +func (c *ClientSession) Stop() error { + c.mux.Lock() + defer c.mux.Unlock() + + if !c.running { + return nil + } + + closeShellMsg := messaging.ClientShellClosedMessage{ + SessionID: c.sessionID, + } + exitShellMsg := messaging.ShellExitMessage{ + SessionID: c.sessionID, + } + c.safeWrite(websocket.BinaryMessage, exitShellMsg.Marshal()) + c.safeWrite(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")) + c.clientConn.Close() + close(c.done) + if err := c.agentWriter(websocket.BinaryMessage, closeShellMsg.Marshal()); err != nil { + slog.ErrorContext(c.ctx, "failed to send shell closed msg", "error", err) + } + c.running = false + return nil +} + +func (c *ClientSession) safeWrite(messageType int, data []byte) error { + c.writeMux.Lock() + defer c.writeMux.Unlock() + + if err := c.clientConn.SetWriteDeadline(time.Now().Add(writeWait)); err != nil { + return fmt.Errorf("failed to set write deadline: %w", err) + } + if err := c.clientConn.WriteMessage(messageType, data); err != nil { + return fmt.Errorf("failed to write message to client: %w", err) + } + return nil +} + +func (c *ClientSession) Write(msg []byte) error { + if err := c.safeWrite(websocket.BinaryMessage, msg); err != nil { + return fmt.Errorf("failed to write message on client websocket: %w", err) + } + return nil +} + +func (c *ClientSession) clientReader() { + defer func() { + c.Stop() + }() + c.clientConn.SetReadLimit(maxMessageSize) + c.clientConn.SetPongHandler(func(string) error { + if err := c.clientConn.SetReadDeadline(time.Now().Add(pongWait)); err != nil { + return err + } + return nil + }) + for { + mt, data, err := c.clientConn.ReadMessage() + if err != nil { + if IsErrorOfInterest(err) { + slog.ErrorContext(c.ctx, "error reading websocket message", slog.Any("error", err)) + } + return + } + + if mt == websocket.CloseMessage { + return + } + + if mt != websocket.BinaryMessage && mt != websocket.TextMessage { + slog.ErrorContext(c.ctx, "invalid message type received", "message_type", mt) + return + } + agentMsg, err := messaging.UnmarshalAgentMessage(data) + if err != nil { + slog.ErrorContext(c.ctx, "invalid message received from client", "error", err) + return + } + + switch agentMsg.Type { + case messaging.MessageTypeClientShellClosed, messaging.MessageTypeShellData, + messaging.MessageTypeShellResize: + default: + slog.ErrorContext(c.ctx, "invalid message type received from client", "message_type", agentMsg.Type) + return + } + if !bytes.Equal(agentMsg.Data[:16], c.sessionID[:]) { + slog.ErrorContext(c.ctx, "invalid session ID") + return + } + + if err := c.agentWriter(websocket.BinaryMessage, data); err != nil { + slog.ErrorContext(c.ctx, "error handling message", slog.Any("error", err)) + return + } + } +} + +func (c *ClientSession) loop() { + ticker := time.NewTicker(pingPeriod) + + defer func() { + c.Stop() + ticker.Stop() + }() + + for { + select { + case <-c.done: + return + case <-c.ctx.Done(): + return + case <-ticker.C: + if err := c.safeWrite(websocket.PingMessage, nil); err != nil { + if IsErrorOfInterest(err) { + slog.With(slog.Any("error", err)).Error("failed to write ping message") + } + return + } + } + } +}